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

  1. /* Copyright (c) 1979 Regents of the University of California */
  2. #include <stdio.h>
  3. /*
  4.  * head - give the first few lines of a stream or of each of a set of files
  5.  *
  6.  * Bill Joy UCB August 24, 1977
  7.  */
  8.  
  9. int    linecnt    = 10;
  10. int    argc;
  11.  
  12. main(Argc, argv)
  13.     int Argc;
  14.     char *argv[];
  15. {
  16.     register int argc;
  17.     char *name;
  18.     register char *argp;
  19.     static int around;
  20.     char obuf[BUFSIZ];
  21.  
  22.     setbuf(stdout, obuf);
  23.     Argc--, argv++;
  24.     argc = Argc;
  25.     do {
  26.         while (argc > 0 && argv[0][0] == '-') {
  27.             linecnt = getnum(argv[0] + 1);
  28.             argc--, argv++, Argc--;
  29.         }
  30.         if (argc == 0 && around)
  31.             break;
  32.         if (argc > 0) {
  33.             close(0);
  34.             if (freopen(argv[0], "r", stdin) == NULL) {
  35.                 perror(argv[0]);
  36.                 exit(1);
  37.             }
  38.             name = argv[0];
  39.             argc--, argv++;
  40.         } else
  41.             name = 0;
  42.         if (around)
  43.             putchar('\n');
  44.         around++;
  45.         if (Argc > 1 && name)
  46.             printf("==> %s <==\n", name);
  47.         copyout(linecnt);
  48.         fflush(stdout);
  49.     } while (argc > 0);
  50. }
  51.  
  52. copyout(cnt)
  53.     register int cnt;
  54. {
  55.     register int c;
  56.     char lbuf[BUFSIZ];
  57.  
  58.     while (cnt > 0 && fgets(lbuf, sizeof lbuf, stdin) != 0) {
  59.         printf("%s", lbuf);
  60.         fflush(stdout);
  61.         cnt--;
  62.     }
  63. }
  64.  
  65. getnum(cp)
  66.     register char *cp;
  67. {
  68.     register int i;
  69.  
  70.     for (i = 0; *cp >= '0' && *cp <= '9'; cp++)
  71.         i *= 10, i += *cp - '0';
  72.     if (*cp) {
  73.         fprintf(stderr, "Badly formed number\n");
  74.         exit(1);
  75.     }
  76.     return (i);
  77. }
  78.