System Interaction
Some facilities have been developed to access the outside world.
sys .exit
Exists the program with the indicated error code.
0 sys .exit # successful termination
sys .file
Creates a scope representing a file. This object supports .open, .close, .read, .write, .writeall, .eachLine.
Three files sys .in, sys .out, sys .err are predefined and represent the standard input, output and error streams respectively.
sys .file ":" via
"foo.txt" :open
8 :read dump # first 8 bytes of foo.txt, possibly less if foo.txt is shorter
{ dump } :eachLine # dump each line of foo.txt (excluding the 8 bytes already read)
:close
"Hallo Welt!\n" sys .out .writeall
Hallo Welt!
As .write directly maps to the write(2) syscall, it might not write all bytes. Instead it returns the number of bytes written as an integer.
Usually, you want to use .writeall which will call write(2) repeatedly, until all bytes are written.
sys .fdToFile will create a file representing scope directly from a unix file descriptor number.
sys .freeze
To create stand-alone executables, sys .freeze takes a filename and a function object and creates an executable which will
execute the function object when started.
{ "Hello World!\n" sys .out .writeall 0 sys .exit } "hello" sys .freeze
An elymas interpreter can be implemented via include easily:
{
sys .argv len { 0 sys .argv * } { "/proc/self/fd/0" } ? * include
0 sys .exit
} "interpreter" sys .freeze
sys .mkdir
Creates a new directory.
sys .ls / sys .readdir
List the contents of a directory. sys .ls excludes files with a leading dot.
sys .rename
Takes two filenames. Renames the first (stack second-to-top) to the second (stack top).
