aboutsummaryrefslogtreecommitdiffstats
path: root/c/cat.c
blob: dde58cd22959584e9cb84bbb90e8a9cef106edcb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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 == 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); }
    }
}