home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Distributions / ucb / spencer_2bsd.tar.gz / 2bsd.tar / src / tra.c < prev    next >
C/C++ Source or Header  |  1980-02-17  |  2KB  |  102 lines

  1. /* Copyright (c) 1979 Regents of the University of California */
  2. #include <retrofit.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5.  
  6. /*
  7.  * transcribe [ - ] [ -delay ] file
  8.  * Bill Joy UCB May 1977
  9.  *
  10.  * watch a file and copy it out
  11.  * as it grows.  default interval for
  12.  * copying is 15 seconds.
  13.  * option - suppresses complete file from being copied out
  14.  * and only gives new stuff.
  15.  */
  16. struct stat stbuf;
  17. char buf[512];
  18. int i;
  19. off_t offset;
  20. int interval 15;
  21. int timeleft    32000;
  22. char *progname;
  23. int whole 1;
  24.  
  25. main(argc, argv)
  26.     int argc;
  27.     char *argv[];
  28. {
  29.     progname = *argv++;
  30.     argc--;
  31. nxtarg:
  32.     if (argc > 1 && argv[0][0] == '-' && argv[0][1] == 0) {
  33.         argc--;
  34.         argv++;
  35.         whole = 0;
  36.         goto nxtarg;
  37.     }
  38.     if (argc > 1 && argv[0][0] == '+') {
  39.         timeleft = getdel(argv[0] + 1);
  40.         argc--;
  41.         argv++;
  42.         goto nxtarg;
  43.     }
  44.     if (argc > 1 && argv[0][0] == '-') {
  45.         interval = getdel(argv[0] + 1);
  46.         argv++;
  47.         argc--;
  48.         goto nxtarg;
  49.     }
  50.     if (argc != 1) {
  51.         printf("Usage: %s [ - ] [ -interval ] file\n", progname);
  52.         exit(1);
  53.     }
  54.     if (interval <= 0) {
  55.         printf("Unreasonable interval\n");
  56.         exit(1);
  57.     }
  58.     close(0);
  59.     if (open(argv[0], 0) < 0) {
  60.         perror(argv[0]);
  61.         exit(1);
  62.     }
  63.     if (whole == 0) {
  64.         fstat(0, &stbuf);
  65.         offset = stbuf.st_size;
  66.     }
  67.     do {
  68.         fstat(0, &stbuf);
  69.         if (stbuf.st_size > offset) {
  70.             lseek(0, (long) offset, 0);
  71.             while ((i = read(0, buf, sizeof buf)) > 0) {
  72.                 offset =+ i;
  73.                 write(1, buf, i);
  74.             }
  75.         }
  76.         sleep(interval);
  77.         timeleft =- interval;
  78.     } while (timeleft > 0);
  79. }
  80.  
  81. getdel(cp)
  82.     char *cp;
  83. {
  84.     register int j;
  85.  
  86.     j = 0;
  87.     do {
  88.         number(*cp);
  89.         j = j * 10 + *cp++ - '0';
  90.     } while (*cp);
  91.     return (j);
  92. }
  93.  
  94. number(c)
  95.     char c;
  96. {
  97.     if (c < '0' || c > '9') {
  98.         printf("Bad number for interval\n");
  99.         exit(1);
  100.     }
  101. }
  102.