aboutsummaryrefslogtreecommitdiffstats
path: root/c/cat.c
blob: 790cb886d795674972494d901dae50a1907510cc (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "gbos.h"
/* cat [file]: print a file, or copy stdin to stdout until EOF. */
void main(void) {
    char *argv[4];
    unsigned char argc = argv_parse(argv, 4);
    if (argc > 0) {
        unsigned char fd = open(argv[0], O_READ);
        int ch;
        if (fd == EISDIR) { puts("cat: is a directory"); nl(); return; }
        if (fd == NOFD)   { puts("cat: no such file"); nl(); return; }
        while ((ch = fgetc(fd)) >= 0) putc((char)ch);
        close(fd);
    } else {
        char c;
        for (;;) { c = readc(); if (c == EOF) break; putc(c); }
    }
}