blob: 3298e545e1787bea7dd03dd51b6cd25ba0b583e8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include "gbos.h"
/* head [-n N] [N] [file]: first N lines of a file or stdin (default 10). */
void main(void) {
char *argv[8];
unsigned char argc = argv_parse(argv, 8);
char *nv = optval(argv, argc, 'n');
unsigned char n = 10, lines = 0, i, fd = NOFD;
char *fname = 0;
int ch;
if (nv) n = atou(nv);
for (i = 0; i < argc; i++) {
if (argv[i][0] == '-') continue;
if (nv == argv[i]) continue;
if (!nv && argv[i][0] >= '0' && argv[i][0] <= '9') { n = atou(argv[i]); continue; }
fname = argv[i]; break;
}
if (fname) {
fd = open(fname, O_READ);
if (fd > 3) { puts("head: no such file"); nl(); return; }
}
for (;;) {
if (fd > 3) { char c = readc(); if (c == EOF) break; ch = c; }
else { ch = fgetc(fd); if (ch < 0) break; }
if (lines < n) putc((char)ch);
if (ch == '\n') lines++;
}
if (fd != NOFD) close(fd);
}
|