Annotation of 3BSD/cmd/refer/what1.c, revision 1.1.1.1

1.1       root        1: # include "what..c"
                      2: struct filans files[NFILES];
                      3: char fnames[NAMES];
                      4: int relfeed 0;
                      5: char *rb[NFEED];
                      6: char rbb[200], *rbp rbb;;
                      7: 
                      8: main(argc,argv)
                      9:        char *argv[];
                     10: {
                     11:        char *s, *t, *xargv[50], *wd[50];
                     12:        struct filans *af;
                     13:        int xargc 0, nw, nf, i;
                     14: while (argc>1 && argv[1][0]=='-')
                     15:        {
                     16:        switch(argv[1][1])
                     17:                {
                     18:                case 'r': relfeed=1; break;
                     19:                }
                     20:        argc--; argv++;
                     21:        }
                     22: if (argc<=1)
                     23:        {
                     24:        printf("No query.\n");
                     25:        return(0);
                     26:        }
                     27: nf = doclook(argc,argv,0);
                     28: printf("   %d files\n",nf);
                     29: if (relfeed && nf>NFEED)
                     30:        {
                     31:        wrdoc(NFEED, argc, argv, 1);
                     32:        nw = freqwd (rb, wd, argc);
                     33:        for(i=0; rb[i]; i++)
                     34:                unlink(rb[i]);
                     35:        }
                     36: for(i=0; i<argc; i++)
                     37:        xargv[xargc++]=argv[i];
                     38: if (relfeed)
                     39:        {
                     40:        printf("Adding: ");
                     41:        for(i=0; i<nw; i++)
                     42:                if (!lfind(wd[i], xargc, xargv))
                     43:                        printf("%s ", xargv[xargc++]=wd[i]);
                     44:        printf("\n");
                     45:        nf = doclook(xargc, xargv, relfeed? xargc/4 : 0);
                     46:        printf("  %d files\n",nf);
                     47:        }
                     48: shell (nf, comp, exch);
                     49: wrdoc(nf, xargc, xargv, 0);
                     50: return(0);
                     51: }
                     52: exch( i1, i2 )
                     53: {
                     54:        struct filans *p1, *p2;
                     55:        struct filans xt;
                     56:        p1=files+i1;
                     57:        p2=files+i2;
                     58:        xt = *p1;
                     59:        *p1 = *p2;
                     60:        *p2 = xt;
                     61: }
                     62: comp(i1, i2)
                     63: {
                     64:        struct filans *p1, *p2;
                     65:        p1 = files+i1;
                     66:        p2= files+i2;
                     67:        if (p1->fdate != p2->fdate)
                     68:                return(p2->fdate > p1->fdate);
                     69:        return(p2->uid >= p1->uid);
                     70: }
                     71: wrdoc ( np, argc, argv, relfeed )
                     72: {
                     73:        struct filans *af;
                     74:        char *s, *t, buf[200];
                     75:        int eval, k, pid;
                     76:        FILE *rf NULL;
                     77:        FILE *ans NULL;
                     78:        pid=getpid();
                     79:        for(af=files; af<files+np; af++)
                     80:                {
                     81:                t = ctime(&af->fdate);
                     82:                getpw(af->uid, s=buf);
                     83:                while (*s && *s!=':') s++;
                     84:                *s=0;
                     85:                printf("%s (%.20s)  %s, %ld bytes\n",af->nm,t+4,buf,af->size);
                     86:                if (relfeed)
                     87:                        {
                     88:                        k=af-files;
                     89:                        _assert (k<NFEED);
                     90:                        sprintf(rb[k]=rbp, "rf%d.%d",pid, k);
                     91:                        rf = fopen(rb[k], "w");
                     92:                        while (*rbp++);
                     93:                        }
                     94:                describe(af->nm, argc,argv, rf);
                     95:                if (relfeed)
                     96:                        {
                     97:                        printf("You like that one?");
                     98:                        fflush(stdout);
                     99:                        fgets(buf, 100, stdin);
                    100:                        switch(buf[0])
                    101:                                {
                    102:                                case 'y': case 'Y': eval=1; break;
                    103:                                case 'n': case 'N': eval = -1; break;
                    104:                                default: eval=0; break;
                    105:                                }
                    106:                        fclose(rf);
                    107:                        if (eval<=0)
                    108:                                {
                    109:                                unlink(rb[k]);
                    110:                                rb[k][0]=0;
                    111:                                }
                    112:                        }
                    113:                }
                    114:        if (relfeed) rb[np]=0;
                    115: }
                    116: lfind( wl, n, wds)
                    117:        char *wl, *wds[];
                    118: {
                    119:        int i;
                    120: for(i=0; i<n; i++)
                    121:        if (str6cmp(wl, wds[i])==0)
                    122:                return(1);
                    123: return(0);
                    124: }
                    125: str6cmp(s, t)
                    126:        char *s, *t;
                    127: {
                    128: int i 0, c;
                    129: while ( (c= *s++ ) == ( *t++))
                    130:        if (c==0 || ++i ==6)
                    131:                return(0);
                    132: return(1);
                    133: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.