# API ## Functions ### system #### spawn(*name*, *function*, *environment*) Spawns a process from *function* called *name* with *environment*. ### os #### os.getenv(*k*) Gets the *k* environment variable for the current process. #### os.setenv(*k*, *v*) Sets the *k* environment variable to *v* for the current process. #### os.tasks() Returns a list of current processes running, the key being the pid and the value being the name. #### os.taskinfo(*pid*) Returns the name, parent process, and user ID for process *pid*. ### event #### event.get() Gets the next event in the event queue for the process. #### event.pull(*type*,*timeout*) Gets, and possibly waits for up to *timeout* seconds, for an event, optionally with *type*. ### buffer #### buffer.create(*w*, *c*) Creates a buffer with worker function *w* and close function *c*. *w* is called on creation with the buffer as the argument. ### filesystem #### fs.mount(*mp*, *pr*) Mounts the component proxy *pr* to mountpoint *mp*. #### fs.simplify(*path*) Simplifies *path* by resolving .. and . and similar. #### fs.resolve(*path*) Resolves *path* to a table of path elements, a mountpoint and a relative filesystem path. #### fs.open(*path*,*mode*) Returns a system file handle usable by other fs functions for *path* in *mode*. Modes can be r, w, a, rb, wb, ab. #### fs.close(*handle*) Closes a system file handle. #### fs.read(*handle*,*length*) Reads *length* bytes of data from *handle*. *length* is usually limited to 2048. #### fs.write(*handle*,*data*) Writes *data* to *handle*. #### fs.readall(*handle*) Returns as much data as can be read from *handle*. #### fs.list(*path*) Returns a table of files contained in directory *path* #### fs.mkdir(*path*) Creates a directory at *path* #### fs.rm(*path*) Removes a file or (empty) directory at *path*. #### fs.exists(*path*) Returns true if a file or directory *path* exists. #### fs.isdir(*path*) Returns true if *path* is a directory. #### fs.cd(*path*) Changes the current directory to either *path* or *os.getenv("PWD")*/*path*. ### io #### write(...) or io.write(...) Writes its arguments to the I/O device. #### print(...) Writes its arguments to the I/O device, with a newline after each. #### readln(*rch*) or io.read(...) Reads a line from the I/O device, optionally replacing the echoed characters with *rch*.a #### io.open(*path*,*mode*) Returns a file object for *path* in *mode*. ##### fobj:read(*len*) If *len* is a number, reads *len* bytes from *fobj*. If *len* is "\*a", it reads all the data from *fobj*. If *len* is "\*l", it reads a line from *fobj*. ##### fobj:write(*data*) Writes *data* to *fobj* (if in write mode) ##### fobj:close() Closes *fobj*, flushing buffers and removing the object from memory. ### shutil #### cd(*path*) Alias to fs.cd #### rm(*path*) Alias to fs.rm #### mkdir(*path*) Alias to fs.mkdir #### ls(*path*) Wrapper for fs.list that prints the contents of *path*. #### cat(*path*) Prints the contents of the file *path*. #### ps(*filter*) Prints running processes, optionally matching *filter*. #### mem() Print out some memory info. ### net #### net.send(*addr*,*port*,*msg*) Sends *msg* to *addr* on *port*. #### net.sendstring(*addr*,*port*,*msg*) Sends *msg* to *addr* on *port* in *net.mtu* sized chunks. #### net.recvstring(*addr*,*port*) ### drivers #### tty(*gA*, *sA*, *sI*, *fg*, *bg*) Creates a GPU driver instance for GPU *gA* and screen *sA* attached to session *sI*, optionally with foreground and background colours *fg* and *bg*. #### kbd(*kA*, *sI*) Creates a keyboard driver instance for keyboard *kA* attached to session *sI*. ## Events ### Network #### net\_msg, *from*, *port*, *message* Queued when the system receives message *message* from *from* on port *port*. ### Terminal I/O #### key, *session*, *char*, *code* A key with value *char* and code *code* was pressed and parsed by a keyboard handler attached to session *session* #### display, *session*, *text* This is triggered to make a tty driver attached to *session* write *text* to the screen. Ideally, use write(), not the raw event. ## Applications ### luash(*sI*) Spawns a luash instance for session *sI* ### skex("*fname*") Launches an instance of the skex text editor, optionally reading *fname* at startup. ### skex2("*fname*") Launches an instance of the skex2 text editor, optionally reading *fname* at startup.