#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 #include #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; typedef enum kiocond { kiocond_ok, // success kiocond_fail, // action failed } kiocond; kiocond kiosend(kiochan, ksraw, sz*); // send data to a channel kiocond kiorecv(kiochan, ksraw*); // receive data from a channel kmptr kiorecvall(kiochan, kmcell*, kmkind); // automatically allocate a bufer for a channel // kmkind is only used if kmcell* is NULL kiocond kiocon(kiochan, kiochan); // connect one channel to another #endif