date and time created 80/10/01 17:27:05 by bill
authorBill Joy <bill@ucbvax.Berkeley.EDU>
Thu, 2 Oct 1980 09:27:05 +0000 (01:27 -0800)
committerBill Joy <bill@ucbvax.Berkeley.EDU>
Thu, 2 Oct 1980 09:27:05 +0000 (01:27 -0800)
SCCS-vsn: usr.bin/head/head.c 4.1

usr/src/usr.bin/head/head.c [new file with mode: 0644]

diff --git a/usr/src/usr.bin/head/head.c b/usr/src/usr.bin/head/head.c
new file mode 100644 (file)
index 0000000..1c7ff67
--- /dev/null
@@ -0,0 +1,77 @@
+static char *sccsid = "@(#)head.c      4.1 (Berkeley) %G%";
+#include <stdio.h>
+/*
+ * head - give the first few lines of a stream or of each of a set of files
+ *
+ * Bill Joy UCB August 24, 1977
+ */
+
+int    linecnt = 10;
+int    argc;
+
+main(Argc, argv)
+       int Argc;
+       char *argv[];
+{
+       register int argc;
+       char *name;
+       register char *argp;
+       static int around;
+       char obuf[BUFSIZ];
+
+       setbuf(stdout, obuf);
+       Argc--, argv++;
+       argc = Argc;
+       do {
+               while (argc > 0 && argv[0][0] == '-') {
+                       linecnt = getnum(argv[0] + 1);
+                       argc--, argv++, Argc--;
+               }
+               if (argc == 0 && around)
+                       break;
+               if (argc > 0) {
+                       close(0);
+                       if (freopen(argv[0], "r", stdin) == NULL) {
+                               perror(argv[0]);
+                               exit(1);
+                       }
+                       name = argv[0];
+                       argc--, argv++;
+               } else
+                       name = 0;
+               if (around)
+                       putchar('\n');
+               around++;
+               if (Argc > 1 && name)
+                       printf("==> %s <==\n", name);
+               copyout(linecnt);
+               fflush(stdout);
+       } while (argc > 0);
+}
+
+copyout(cnt)
+       register int cnt;
+{
+       register int c;
+       char lbuf[BUFSIZ];
+
+       while (cnt > 0 && fgets(lbuf, sizeof lbuf, stdin) != 0) {
+               printf("%s", lbuf);
+               fflush(stdout);
+               cnt--;
+       }
+}
+
+getnum(cp)
+       register char *cp;
+{
+       register int i;
+
+       for (i = 0; *cp >= '0' && *cp <= '9'; cp++)
+               i *= 10, i += *cp - '0';
+       if (*cp) {
+               fprintf(stderr, "Badly formed number\n");
+               exit(1);
+       }
+       return (i);
+}