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.