@@ -1,4 +1,53 @@ #ifndef KIio #define KIio +/* + * ~ lexi hale + * this header declares IO primitive functions and + * structures. it is the same for all platforms. + * platform-specific code is found in the *.platform.h + * files. + */ + +#include + +typedef enum kiostream_kind { + kiostream_closed, + // this kiostream cannot be written to + kiostream_file, + // this kiostream represents a file + kiostream_sock, + // this kiostream is attached to a socket, + // UNIX, IP, or otherwise + kiostream_term, + // this socket is being used to communicate + // directly with a human being + kiostream_ansi, + // like kiostream_term, but can also understand + // ANSI control codes + kiostream_other + // no fuckin idea +} kiostream_kind; + +typedef struct kiostream { + kiostream_kind kind; + #include "kiostream.platform.h" +} kiostream; + +typedef struct kiochan { + kiostream in; + // text can be read from this stream + kiostream out; + // text can be written to this stream +} kiochan; + +unsigned long long kiosend(kiochan); // send data to a channel +unsigned long long kiorecv(kiochan); // receive data from a channel + +typedef enum kiocond { + kiocond_ok, + // success + kiocond_fail, + // action failed +} kiocond; #endif