Input & Output
Atomo uses an I/O system similar to Scheme - methods for reading/writing internally use current-input-port or current-output-port, which can be overridden via parameterization. Certain methods, e.g. print and read-line, will act on whatever those parameters are.
Port → Object
An object to read/write to. Typically has one slot, handle, which points to the file descriptor (a Haskell Handle).
Port new: filename &mode: @read-write → Port | filename is-a?: String | [@read, @write, @read-write, @append] contains?: mode
Open the file filename and return a Port for performing I/O.
Port standard-input → Port
Standard input port (stdin).
Port standard-output → Port
Standard output port (stdout).
Port standard-error → Port
Standard error port (stderr).
p print: v → v | p is-a?: Port | v responds-to?: @(as: String)
Outputs v as: String to p, followed by a linebreak.
p read → any | p is-a?: Port
Reads a primitive value from p. A primitive value is an integer, double, character, string, or lists and particles that contain primitive values. For anything else, if the parse is successful it returns it as an Expression. This includes blocks an arbitrary paranthesized expressions, or lists/particles containing non-primitives.
The idea is that any value returned by read is safe; anything else is returned unevaluated.
p contents → String | p is-a?: Port
Read in p's entire contents, blocking until the end of the input is reached.
p flush → @ok | p is-a?: Port
Flush p's output. print and display automatically perform this task for you.
Parameters
current-output-port → Parameter
A Parameter containing the default port used for printing output.
Default is Port standard-output.
current-input-port → Parameter
A Parameter containing the default port used for getting input.
Default is Port standard-input.
o print → o | o responds-to?: @(as: String)
Outputs o as: String to current-output-port, followed by a linebreak.
o display → o | o responds-to?: @(as: String)
Outputs o as: String to current-output-port.
read → o
Reads an object from current-input-port.
read-line → String
Reads one line of text from current-input-port.
with-input-from: p do: action → any | (p is-a?: Port) || (p is-a?: String) | a is-a?: Block
Parameterize current-input-port and execute action, returning its result.
If p is a String, it is considered a filename, and that file is opened for reading. The file is automatically closed after the block's execution.
If p is a Port, it is used for input.
with-output-to: p do: action → any | (p is-a?: Port) || (p is-a?: String) | a is-a?: Block
Parameterize current-output-port and execute action, returning its result.
If p is a String, it is considered a filename, and that file is opened for writing. The file is created if it doesn't exist, or overwritten if it does. The file is automatically closed after the block's execution.
If p is a Port, it is used for output.