home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / refer / what1.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  2.3 KB  |  134 lines

  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. }
  134.