184 lines
7.0 KiB
Markdown
184 lines
7.0 KiB
Markdown
# API
|
|
## Functions
|
|
### system
|
|
#### spawn(*name*, *function*, *environment*)
|
|
Spawns a process from *function* called *name* with *environment*.
|
|
#### log(*messages...*, *severity*, *facility*, *meta*)
|
|
Writes messages to the system log, optionally, if *meta* is true, with *severity* and *facility*, which default to 6 and 2, respectively.
|
|
|
|
### 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*.
|
|
#### os.genenv()
|
|
Generates an insulated environment table for running processes in.
|
|
#### os.getuid(*pid*)
|
|
Returns the user ID for process *pid*, or if *pid* is not specified, the current process.
|
|
#### os.setuid(*user*)
|
|
Only if the current user ID is "superuser": Sets the user ID for the process to *user*.
|
|
#### os.verifyuser(*user*,*pass*)
|
|
Returns true or false if *pass* is the correct password for *user*.
|
|
#### os.gensalt(*len*)
|
|
Generates *len* random printable characters and returns them.
|
|
#### os.su(*user*,*pass*)
|
|
Sets the user ID of the current process to *user* if *user* and *password* are verified by `os.verifyuser`.
|
|
#### os.setuattr(*user*,*field*,*value*)
|
|
Sets the *field* attribute of *user* to *value*.
|
|
#### os.getuattr(*user*,*field*)
|
|
Returns the value of *field* for *user*.
|
|
|
|
### 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*)
|
|
**DEPRECEATED.** Creates a buffer with worker function *w* and close function *c*. *w* is called on creation with the buffer as the argument.
|
|
#### buffer.ucreate()
|
|
Creates a unidirectional buffer and returns it.
|
|
#### buffer.bcreate()
|
|
Creates a bidiretional buffer and returns both ends.
|
|
|
|
### 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*.
|
|
#### fs.cp(*source*, *destination*)
|
|
Copies a file from *source* to *destination*.
|
|
#### fs.mv(*source*, *destination*)
|
|
Same as fs.cp but deletes *source* afterwards.
|
|
#### fs.getattr(*path*,*key*)
|
|
Returns the value of *path*'s extended attribute *key*, assuming your user ID is in the read attribute.
|
|
#### fs.setattr(*path*,*key*,*value*)
|
|
Set *path*'s extended attribute *key* to *value*, assuming your user ID is in the write attribute
|
|
|
|
### 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
|
|
#### exec(*command*)
|
|
Executes *command* as if it had been typed into a shell (lush, specifically).
|
|
#### 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*)
|
|
|
|
### cdlib
|
|
cdlib is the Copper Data Library
|
|
#### cdlib.encode(*hops*, *source*, *destination*, *data*)
|
|
Encodes a copper packet with *hops* from *source* to *destination* with *data*.
|
|
#### cdlib.decode(*data*)
|
|
Decodes a copper packet. Returns the same data cdlib.encode takes as input.
|
|
#### cdlib.encodeName(*name*)
|
|
Encodes a name for use in a copper packet.
|
|
#### cdlib.decodeName(*message*)
|
|
Returns just the name from an encoded copper packet.
|
|
#### cdlib.decodeNoHops(*data*)
|
|
Decodes a copper packet minus the hops.
|
|
|
|
### relib
|
|
relib is the Copper reliability layer library.
|
|
#### relib.encode(*packet*)
|
|
Encodes *packet* passed as a table as a relib packet.
|
|
#### relib.decode(*data*)
|
|
Decodes *data* into a relib packet table.
|
|
|
|
### 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
|
|
### login()
|
|
Displays a login screen allowing for changing user.
|
|
### loginmanager(*sI*)
|
|
Runs a program that will repeatedly display a login screen and spawn a shell on login.
|
|
### lush(*sI*)
|
|
Spawns a lush instance for session *sI*
|
|
### skex(*fname*)
|
|
Launches an instance of the skex text editor, optionally reading *fname* at startup.
|
|
May actually spawn skex2.
|
|
### skex2(*fname*)
|
|
Launches an instance of the skex2 text editor, optionally reading *fname* at startup.
|
|
### nsh(*host*, *port*)
|
|
Spawns the network shell client and attempts to connect to *host* on *port* for a remote login session.
|
|
ctrl-shift-c to exit.
|
|
### nshd(*port*)
|
|
Spawns a networh shell server listening on *port.*
|