/* 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 /* process control (c/libc.s) */ unsigned char fork(void); void exec(unsigned char id); /* replace image; never returns */ unsigned char wait(void); void setin(unsigned char fd); /* redirect stdin ($FF=console) */ void setout(unsigned char fd); /* redirect stdout ($FF=console) */ unsigned char lookup(const char *name); /* command name -> program id */ unsigned char kill(unsigned char pid); /* terminate a pid (1 is immortal)*/ unsigned char psget(unsigned char slot, unsigned char *buf); /* {pid,state,prog}*/ void progname(unsigned char id, char *buf); /* id -> name */ void yield(void); unsigned char reap(void); /* reap a finished bg job, or 0 */ void bfill(unsigned char block, unsigned char byte); /* [debug] disk */ unsigned char bpeek(unsigned char block); /* [debug] disk */ unsigned char bpeek2(unsigned char block, unsigned char off); #endif