/* gbos userland C API (thin wrappers over rst $30 syscalls; see c/libc.s) */ #ifndef GBOS_H #define GBOS_H #define EOF 4 /* readc() returns this at end of input */ void writes(const char *buf, unsigned char len); void putc(char c); void puts(const char *s); /* write a NUL-terminated string */ void nl(void); /* newline (CRLF) */ unsigned char strlen(const char *s); char *getargs(void); /* this program's argument string */ char readc(void); /* one input byte, EOF at end */ void sexit(unsigned char code); unsigned char getpid(void); /* helpers (c/libc.c) */ void putu(unsigned int n); /* print decimal */ unsigned char atou(const char *s); /* parse decimal */ unsigned char argv_parse(char **argv, unsigned char maxv); /* argc/argv */ unsigned char hasflag(char **argv, unsigned char argc, char f); /* -x flag */ char *optval(char **argv, unsigned char argc, char opt); /* -x VALUE */ /* filesystem (c/libc.s -> kernel syscalls) */ unsigned char open(const char *name, unsigned char mode); /* 0=read 1=write */ void close(unsigned char fd); int fgetc(unsigned char fd); /* a byte, or -1 at EOF */ void fputc(unsigned char fd, char ch); unsigned char flist(unsigned char slot, char *namebuf); /* 1 if slot used */ void fremove(const char *name); #define O_READ 0 #define O_WRITE 1 #define NOFD 0xFF #endif