manual page distributed with 4.1BSD
[unix-history] / usr / src / usr.bin / head / head.c
CommitLineData
32a94702 1static char *sccsid = "@(#)head.c 4.2 (Berkeley) %G%";
9c87fed6
BJ
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;
9c87fed6 20
9c87fed6
BJ
21 Argc--, argv++;
22 argc = Argc;
23 do {
24 while (argc > 0 && argv[0][0] == '-') {
25 linecnt = getnum(argv[0] + 1);
26 argc--, argv++, Argc--;
27 }
28 if (argc == 0 && around)
29 break;
30 if (argc > 0) {
31 close(0);
32 if (freopen(argv[0], "r", stdin) == NULL) {
33 perror(argv[0]);
34 exit(1);
35 }
36 name = argv[0];
37 argc--, argv++;
38 } else
39 name = 0;
40 if (around)
41 putchar('\n');
42 around++;
43 if (Argc > 1 && name)
44 printf("==> %s <==\n", name);
45 copyout(linecnt);
46 fflush(stdout);
47 } while (argc > 0);
48}
49
50copyout(cnt)
51 register int cnt;
52{
53 register int c;
54 char lbuf[BUFSIZ];
55
56 while (cnt > 0 && fgets(lbuf, sizeof lbuf, stdin) != 0) {
57 printf("%s", lbuf);
58 fflush(stdout);
59 cnt--;
60 }
61}
62
63getnum(cp)
64 register char *cp;
65{
66 register int i;
67
68 for (i = 0; *cp >= '0' && *cp <= '9'; cp++)
69 i *= 10, i += *cp - '0';
70 if (*cp) {
71 fprintf(stderr, "Badly formed number\n");
72 exit(1);
73 }
74 return (i);
75}