date and time created 80/10/01 17:29:40 by bill
[unix-history] / usr / src / usr.bin / head / head.c
CommitLineData
9c87fed6
BJ
1static char *sccsid = "@(#)head.c 4.1 (Berkeley) %G%";
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
9int linecnt = 10;
10int argc;
11
12main(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
52copyout(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
65getnum(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}