home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume7 / nsubj / subj.c < prev    next >
C/C++ Source or Header  |  1989-06-03  |  2KB  |  113 lines

  1. #include <sys/types.h>
  2. #include <sys/dir.h>
  3. struct direct zork;
  4. #include <stdio.h>
  5. #ifdef SYSV
  6. extern char *sys_errlist[];
  7. opendir(p)
  8. char *p;
  9. {
  10.     int i;
  11.     extern int errno;
  12.     extern char *errmsg;
  13.     i= open(p,0);
  14.     if(i<0){
  15.         fprintf(stderr,"errno=%d %s\n",errno,sys_errlist[errno]);
  16.         fprintf(stderr,"in opendir, i=%d\n",i);
  17.         exit(7);
  18.     }
  19.     return i;
  20. }
  21. union{
  22. struct direct crundy;
  23. char moobus[17];
  24. } noogle;
  25. struct direct *readdir(fd)
  26. int fd;
  27. {
  28.     int i;
  29.     /*
  30.     loop:
  31.     i=read(fd,&(noogle.crundy),sizeof(struct direct));
  32.  
  33.     if(i<=0)return (struct direct *)0;
  34.     else
  35.     {
  36.     if(noogle.crundy.d_ino==0)goto loop;
  37.     if(noogle.crundy.d_name[0]=='.')goto loop;
  38.     */
  39.     do{
  40.     i=read(fd,&(noogle.crundy),sizeof(struct direct));
  41.  
  42.     if(i<=0)return (struct direct *)0;
  43.     } while(
  44.         noogle.crundy.d_ino==0 ||
  45.         noogle.crundy.d_name[0]=='.'
  46.         );
  47.     noogle.crundy.d_name[14]=0;
  48.     return  &(noogle.crundy);
  49. }
  50. #endif
  51.  
  52.  
  53. main(argc,argv)
  54. char **argv;
  55. {
  56.  
  57.     char *line, *malloc(), *fgets();
  58. #ifdef SYSV
  59.     int dirp, opendir();
  60.     struct direct *readdir(), *p;
  61. #else
  62.     DIR *dirp;
  63.     struct direct *p;
  64. #endif
  65.     FILE *fp;
  66.     int i, dodate, found, tofind;
  67.     struct direct dir;
  68.  
  69.     dodate=0;
  70.     line = malloc(513);
  71.     if(line==(char *)0)error(1);
  72.     if(argc>=2)
  73.         for(i=1;i<argc;i++)
  74.         {
  75.             if(!strcmp(argv[i],"-d"))dodate=1;
  76.         }
  77.  
  78.     p= &dir;
  79.     tofind=1;
  80.     if(dodate)tofind++;
  81.     dirp=opendir(".");
  82.     if(dirp==NULL)error(2);
  83.     while  (p=readdir(dirp)) {
  84.         fp=fopen(p->d_name,"r");
  85.         if(fp==(FILE *)0)error(3);
  86.         found=0;
  87.         for(;;){
  88.             if(fgets(line,132,fp)!=line)break;
  89.             if(jimsindex(line,"ubject:")>=0)
  90.             {
  91.                 printf("%s:%s",p->d_name,line);
  92.                 found++;
  93.                 if(found >= tofind)break;
  94.             }
  95.             if(dodate)
  96.                 if(jimsindex(line,"Date")>=0)
  97.                 {
  98.                     printf("%s:%s",p->d_name,line);
  99.                     found++;
  100.                     if(found>=tofind)break;
  101.                 }
  102.         }
  103.         if(fp)i=fclose(fp);
  104.         if(i<0)error(4);
  105.     }
  106.     exit(0);
  107. }
  108. error(i)
  109. {
  110.     fprintf(stderr,"error %d\n",i);
  111.     exit(i);
  112. }
  113.