1 static char *sccsid = "@(#)head.c 4.1 (Berkeley) 10/01/80"; 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