home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume7 / mailwatcher / mailwatcher.c next >
C/C++ Source or Header  |  1989-07-21  |  3KB  |  139 lines

  1. /* mailwatcher.c -- author: sam@lfcs.edinburgh.ac.uk */
  2.  
  3. #ifndef lint
  4. static char *scid = "s. manoharan edinburgh u";
  5. #endif
  6.  
  7. #define VERSION        1
  8. #define EDITION        0
  9. #define PATCH        0
  10.  
  11. #include <stdio.h>
  12.  
  13. #define UNSIZE    8
  14. #define SLEEP    60
  15. #define SPOOL    "/usr/spool/mail/"
  16. #define ALERT    ""
  17.  
  18.  
  19. typedef enum { false = 0, true = 1 } Boolean;
  20.  
  21.  
  22. void main(argc,argv)
  23. int argc; char *argv[];
  24. {
  25.    int opch; extern int Optind; extern char *Optarg;
  26.    char *mbox; unsigned seconds = SLEEP; FILE *fp;
  27.    int oldsize = 0, newsize;
  28.    char *getenv(), *malloc(), *strcpy(), *strcat();
  29.    void Usage();
  30.  
  31.    while ( ( opch = Getopt(argc,argv,"Vn:") ) != -1 )
  32.       switch ( opch ) {
  33.       case 'V'   :
  34.      (void)fprintf(stderr,"%s version %d.%d.%d  ",argv[0],
  35.         VERSION, EDITION, PATCH);
  36.      (void)fprintf(stderr,"(c) s. manoharan  edinburgh univ\n");
  37.      exit(0);
  38.      break;
  39.       case 'n'    :
  40.      if ( ( seconds = (unsigned)atoi(Optarg) ) == 0 )
  41.         seconds = SLEEP;
  42.      break;
  43.       default    :
  44.      Usage(argv[0]);
  45.      exit(0);
  46.       } /* ensw */
  47.  
  48.    if ( ( mbox = malloc(sizeof(SPOOL)+UNSIZE) ) != (char *)0 ) {
  49.       (void)strcpy(mbox,SPOOL);
  50.       (void)strcat(mbox,getenv("USER"));
  51.    }
  52.    else {
  53.       (void)fprintf(stderr,"%s: cannot get space\n",argv[0]);
  54.       exit(0);
  55.    }
  56.  
  57.    for ( ; ; ) {
  58.  
  59.       /* check size of SPOOL/USER */
  60.       if ( (fp = fopen(mbox,"r")) != (FILE *)0 ) {
  61.      newsize = 0;
  62.      while ( getc(fp) != EOF )
  63.         ++newsize;
  64.      if ( newsize > oldsize )
  65.         (void)printf("%s\nYou have new mail\n",ALERT);
  66.      oldsize = newsize;
  67.       }
  68.       else {
  69.      (void)fprintf(stderr,"%s: cannot open %s\n",argv[0],mbox);
  70.      exit(0);
  71.       }
  72.       (void)fclose(fp);
  73.       sleep(seconds); /* sleep for a while */
  74.    } /* enfo */
  75.  
  76. } /* enma */
  77.  
  78. void Usage(progname)
  79. char *progname;
  80. {
  81.  
  82.    (void)fprintf(stderr,"usage: %s [-V] [-n seconds]\n",progname);
  83.    (void)fprintf(stderr,"\t-V\t\t: print version and exit\n");
  84.    (void)fprintf(stderr,"\t-n t\t\t: lie dormant for `t' seconds\n");
  85. } /* enUsage */
  86.  
  87. /* ------------------------------------------------------ */
  88.  
  89.  
  90.  
  91. char *Optarg; int Optind;
  92.  
  93. int Getopt(argc,argv,options)
  94. int argc; char **argv; char *options;
  95. {
  96.    char *str, *ptr; char opch; char *Strchr();
  97.    static int flag = 0; static int Argc; static char **Argv;
  98.  
  99.    if (  flag == 0 ) {
  100.       Argc = argc; Argv = argv; flag = 1; Optind = 1;
  101.    }
  102.  
  103.    if ( Argc <= 1 ) return -1;
  104.  
  105.    if ( --Argc >= 1 ) {
  106.       str = *++Argv;
  107.       if (*str != '-') return -1; /* argument is not an option   */
  108.       else {  /* argument is an option */
  109.      if ( ( ptr = Strchr(options, opch = *++str) ) != (char *) 0 ) {
  110.         ++Optind;
  111.             Optarg = ++str; /* point to rest of argument if any  */
  112.             if ( ( *++ptr == ':' ) && ( *Optarg == '\0' ) ) {
  113.                if (--Argc <= 0) return '?';
  114.                Optarg = *++Argv; ++Optind;
  115.             }
  116.         return opch;
  117.          }
  118.      else if ( opch == '-' ) { /* end of options */
  119.         ++Optind;
  120.         return -1;
  121.      }
  122.          else return '?';
  123.       }
  124.    }
  125.    return 0; /* this will never be reached */
  126.  
  127. } /* EnGetopt */
  128.  
  129. char *Strchr(s,c)
  130. char *s; char c;
  131. {
  132.    while ( *s != '\0' ) {
  133.       if ( *s == c ) return s;
  134.       else ++s;
  135.    }
  136.    return ( (char *) 0 );
  137. } /* EnStrchr */
  138.  
  139.