Provided by: afnix_2.8.1-1_amd64 

NAME
sio - standard input/output module
STANDARD INPUT/OUTPUT MODULE
The Standard Input/Outputmodule is an orginal implementation that provides objects for i/o operations.
Although input and output files are the standard objects that one might expect, the module facilities for
directory access, path manipulation and i/o event management. At the heart of this module is the concept
of stream associated with the transcoding object which enable the passage between one coding system to
another. It is also this module which provides the stream selector object.
Input and output streams
The afnix-siomodule is based on facilities provided by two base classes, namely, the InputStreamstream
and the OutputStreamstream. Both classes have associated predicates with the name input-stream-pand
output-stream-p. The base class associated is the Streamclass those sole purpose is to define the stream
coding mode.
Stream base class
The Streamclass is the base class for the InputStreamand OutputStreamclasses. The Streamclass is used to
define the stream coding mode that affects how characters are read or written. When a stream operates in
byte mode, each character is assumed to be encoded in one byte. In that case, the input stream methods
readand getuare equivalent and no transformation is performed when writing characters. This behavior is
the default stream behavior. For certain stream, like terminal, this behavior is changed depending on the
current localization settings. For instance, if the current locale is operating with an UTF-8codeset, the
Terminalstream coding mode is automatically adjusted to reflect this situation. Since the US-ASCIIcodeset
is predominant and the default steam coding mode is the byte mode, there should be no conflict during the
read and write operations.
Stream transcoding
The Streamclass provides the support for the transcoding of different codesets. All ISO-8859codesets are
supported. Since the engine operates internally with Unicode characters, the transcoding operation takes
care of changing a character in one particular codeset into its equivalent Unicode representation. This
operation is done for an input stream that operates in byte mode. For an output stream, the opposite
operation is done. An internal Unicode characters representation is therefore mapped into a particular
codeset. Note that only the codeset characters can be mapped.
Codeset Description
DEFAULT Default codeset, i.e US-ASCII
ISO-01 ISO-8859-1 codeset
ISO-02 ISO-8859-2 codeset
ISO-03 ISO-8859-3 codeset
ISO-04 ISO-8859-4 codeset
ISO-05 ISO-8859-5 codeset
ISO-06 ISO-8859-6 codeset
ISO-07 ISO-8859-7 codeset
ISO-08 ISO-8859-8 codeset
ISO-09 ISO-8859-9 codeset
ISO-10 ISO-8859-10 codeset
ISO-11 ISO-8859-11 codeset
ISO-13 ISO-8859-13 codeset
ISO-14 ISO-8859-14 codeset
ISO-15 ISO-8859-15 codeset
ISO-16 ISO-8859-16 codeset
UTF-08 Unicode UTF-8 codeset
The set-encoding-modecan be used to set the stream encoding codeset. The method operates either by
enumeration or string. The get-encoding-modereturns the stream encoding mode. There are some time good
reasons to force a stream encoding mode. For example, a file encoded in UTF-8 that is read will require
this call since the default stream mode is to work in byte mode. It should be noted that there is a
difference between the enumeration and the string encoding mode. The enumeration mode defines whether the
stream operates in byte or UTF-8 mode. When the stream operates in byte mode, it is also necessary to
define the transcoding mode with the set-transcoding-modemethod. For simplicity, the string version of
the set-encoding-modetakes care of setting both the stream mode and the transcoding mode. It is also
worth to note that internally, the Streamclass is derived from the Transcoderclass.
Input stream
The InputStreambase class has several method for reading and testing for byte availability. Moreover, the
class provides a push-back buffer. Reading bytes is in the form of three methods. The readmethod without
argument returns the next available byte or the end-of-streameos. With an integer argument, the
readmethod returns a Bufferwith at most the number of requested bytes. The readlnmethod returns the next
available line. When it is necessary to read characters instead of bytes, the getuis more appropriate
since it returns an Unicode character.
Output stream
The OutputStreambase class provides the base methods to write to an output stream. The writemethod takes
literal objects which are automatically converted to string representation and then written to the output
stream. Note that for the case of a Bufferobject, it is the buffer itself that take a stream argument and
not the opposite.
The valid-p predicate
The input stream provides a general mechanism to test and read for bytes. The base method is the valid-
ppredicate that returns trueif a byte can be read from the stream. It is important to understand its
behavior which depends on the stream type. Without argument, the valid-ppredicate checks for an available
byte from the input stream. This predicate will block if no byte is available. On the other end, for a
bounded stream like an input file, the method will not block at the end of file. With one integer
argument, the valid-ppredicate will timeout after the specified time specified in milliseconds. This
second behavior is particularly useful with unbound stream like socket stream.
The eos-p predicate
The eos-ppredicate does not take argument. The predicate behaves like not (valid-p 0). However, there are
more subtle behaviors. For an input file, the predicate will return trueif and only if a byte cannot be
read. If a byte has been pushed-back and the end-of-streammarker is reached, the method will return
false. For an input terminal, the method returns true if the user and entered the end-of-streambyte. Once
again, the method reacts to the contents of the push-back buffer. For certain input stream, like a tcp
socket, the method will return true when no byte can be read, that is here, the connection has been
closed. For an udp socket, the method will return truewhen all datagram bytes have be read.
The read method
The readmethod is sometimes disturbing. Nevertheless, the method is a blocking one and will return a byte
when completed. The noticeable exception is the returned byte when an end-of-streammarker has been
reached. The method returns the ctrl-dbyte. Since a binary file might contains valid byte like ctrl-dit
is necessary to use the valid-por eos-ppredicate to check for a file reading completion. This remark
apply also to bounded streams like a tcp socket. For some type of streams like a udp socket, the method
will block when all datagram bytes have been consumed and no more datagram has arrived. With this kind of
stream, there is no end-of-streamcondition and therefore care should be taken to properly assert the
stream content. This last remark is especially true for the readlnmethod. The method will return when the
end-of-streammarker is reached, even if a newline byte has not been read. With an udp socket, such
behavior will not happen.
Buffer read mode
The readmethod with an integer argument, returns a buffer with at least the number of bytes specified as
an argument. This method is particularly useful when the contents has a precise size. The method returns
a Bufferobject which can later be used to read, or transform bytes. Multi-byte conversion to number
should use such approach. The readmethod does not necessarily returns the number of requested bytes. Once
the buffer is returned, the lengthmethod can be used to check the buffer size. Note also the existence of
the to-stringmethod which returns a string representation of the buffer.
# try to read 256 bytes
const buf (is:read 256)
# get the buffer size
println (buf:length)
# get a string representation
println (buf:to-string)
File stream
The afnix-siomodule provides two classes for file access. The InputFileclass open a file for input. The
OutputFileclass opens a file for output. The InputFileclass is derived from the InputStreambase class.
The OutputFileclass is derived from the OutputStreamclass. By default an output file is created if it
does not exist. If the file already exist, the file is truncated to 0. Another constructor for the output
file gives more control about this behavior. It takes two boolean flags that defines the truncate and
append mode.
# load the module
interp:library "afnix-sio"
# create an input file by name
const if (afnix:sio:InputFile "orig.txt")
# create an output file by name
const of (afnix:sio:OutputFile "copy.txt")
Stream information
Both InputFileand OutputFilesupports the get-namemethod which returns the file name.
println (if:get-name)
println (of:get-name)
Predicates are also available for these classes. The input-file-preturns true for an input file
object.The output-file-preturns true for an output file object.
afnix:sio:input-stream-p if
afnix:sio:output-stream-p of
afnix:sio:input-file-p if
afnix:sio:output-file-p of
Reading and writing
The readmethod reads a byte on an input stream. The writemethod writes one or more literal arguments on
the output stream. The writelnmethod writes one or more literal arguments followed by a newline byte on
the output stream. The newlinemethod write a newline byte on the output stream. The eos-ppredicate
returns true for an input stream, if the stream is at the end. The valid-ppredicate returns true if an
input stream is in a valid state. With these methods, copying a file is a simple operation.
# load the module and open the files
interp:library "afnix-sio"
const if (afnix:sio:InputFile "orig.txt")
const of (afnix:sio:OutputFile "copy.txt")
# loop in the input file and write
while (if:valid-p) (of:write (if:read))
The use of the readlnmethod can be more effective. The example below is a simple cat program which take
the file name an argument.
# cat a file on the output terminal
# usage: axi 0601.als file
# get the io module
interp:library "afnix-sio"
# cat a file
const cat (name) {
const f (afnix:sio:InputFile name)
while (f:valid-p) (println (f:readln))
f:close
}
# get the file
if (== 0 (interp:argv:length)) {
errorln "usage: axi 0601.als file"
} {
cat (interp:argv:get 0)
}
Multiplexing
I/O multiplexing is the ability to manipulate several streams at the same time and process one at a time.
Although the use of threads reduce the needs for i/o multiplexing, there is still situations where they
are needed. In other words, I/O multiplexing is identical to the valid-ppredicate, except that it works
with several stream objects.
Selector object
I/O multiplexing is accomplished with the Selectorclass. The constructor takes 0 or several stream
arguments. The class manages automatically to differentiate between InputStreamstream and
OutputStreamstreams. Once the class is constructed, it is possible to get the first stream ready for
reading or writing or all of them. We assume in the following example that isand osare respectively an
input and an output stream.
# create a selector
const slt (afnix:sio:Selector is)
# at this stage the selector has one stream
# the add method can add more streams
slt:add os
The addmethod adds a new stream to the selector. The stream must be either an InputStreamand
OutputStreamstream or an exception is raised. If the stream is both an input and an output stream, the
preference is given to the input stream. If this preference is not acceptable, the input-addor the
output-addmethods might be preferable. The input-lengthmethod returns the number of input streams in this
selector. The output-lengthmethod returns the number of output streams in this selector. The input-
getmethod returns the selector input stream by index. The output-getmethod returns the selector output
stream by index.
Waiting for i/o event
The waitand wait-allmethods can be used to detect a status change in the selector. Without argument both
methods will block indefinitely until one stream change. With one integer argument, both method blocks
until one stream change or the integer argument timeout expires. The timeout is expressed in
milliseconds. Note that 0 indicates an immediate return. The waitmethod returns the first stream which is
ready either for reading or writing depending whether it is an input or output stream. The wait-allmethod
returns a vector with all streams that have changed their status. The waitmethod returns nilif the no
stream have changed. Similarly, the wait-allmethod returns an empty vector.
# wait for a status change
const is (slt:wait)
# is is ready for reading - make sure it is an input one
if (afnix:sio:input-stream-p is) (is:read)
A call to the waitmethod will always returns the first input stream.
Marking mode
When used with several input streams in a multi-threaded context, the selector behavior can becomes quite
complicated. For this reason, the selector can be configured to operate in marking mode. In such mode,
the selector can be marked as ready by a thread independently of the bounded streams. This is a useful
mechanism which can be used to cancel a select loop. The markmethod is designed to mark the selector
while the marked-ppredicate returns true if the stream has been marked.
Terminal streams
Terminal streams are another kind of streams available in the standard i/o module. The InputTerm,
OutputTermand ErrorTermclasses are low level classes used to read or write from or to the standard
streams. The basic methods to read or write are the same as the file streams. Reading from the input
terminal is not a good idea, since the class does not provide any formatting capability. One may prefer
to use the Terminalclass. The use of the output terminal or error terminal streams is convenient when the
interpreter standard streams have been changed but one still need to print to the terminal.
Terminal class
The Terminalclass combines an input stream and an output stream with some line editing capabilities. When
the class is created, the constructed attempts to detect if the input and output streams are bounded to a
terminal (i.e tty). If the line editing capabilities can be loaded (i.e non canonical mode), the terminal
is initialized for line editing. Arrows, backspace, delete and other control sequences are available when
using the read-linemethod. The standard methods like reador readlndo not use the line editing features.
When using a terminal, the prompt can be set to whatever the user wishes with the methods set-primary-
promptor set-secondary-prompt. A secondary prompt is displayed when the read-linemethod is called with
the boolean argument false.
const term (Terminal)
term:set-primary-prompt "demo:"
const line (term:read-line)
errorln line
Using the error terminal
The ErrorTermclass is the most frequently used class for printing data on the standard error stream. The
reserved keywords erroror errorlnare available to write on the interpreter error stream. If the
interpreter error stream has been changed, the use of the ErrorTermwill provide the facility required to
print directly on the terminal. The catprogram can be rewritten to do exactly this.
# cat a file on the error terminal
# get the io module
interp:library "afnix-sio"
# cat a file
const cat (name es) {
const f (afnix:sio:InputFile name)
while (f:valid-p) (es:writeln (f:readln))
f:close
}
Directory
The Directoryclass provides a facility to manipulate directories. A directory object is created either by
name or without argument by considering the current working directory. Once the directory object is
created, it is possible to retrieve its contents, create new directory or remove empty one.
Reading a directory
A Directoryobject is created either by name or without argument. With no argument, the current directory
is opened. When the current directory is opened, its full name is computed internally and can be
retrieved with the get-namemethod.
# print the current directory
const pwd (afnix:sio:Directory)
println (pwd:get-name)
Once the directory object is opened, it is possible to list its contents. The get-listmethod returns the
full contents of the directory object. The get-filesmethod returns a list of files in this directory. The
get-subdirsmethod returns a list of sub directories in this directory.
# print a list of files
const pwd (afnix:sio:Directory)
const lsf (d:get-files)
for (name) (lsf) (println name)
Creating and removing directories
The mkdirand rmdirmethods can be used to create or remove a directory. Both methods take a string
argument and construct a full path name from the directory name and the argument. This approach has the
advantage of being file system independent. If the directory already exists, the mkdirmethods succeeds.
The rmdirmethod requires the directory to be empty.
const tmp (afnix:sio:Directory (
afnix:sio:absolute-path "tmp"))
const exp (tmp:mkdir "examples")
const lsf (exp:get-files)
println (lsf:length)
tmp:rmdir "examples"
The function absolute-pathconstructs an absolute path name from the argument list. If relative path needs
to be constructed, the function relative-pathmight be used instead.
Logtee
The Logteeclass is a message logger facility associated with an output stream. When a message is added to
the logger object, the message is also sent to the output stream, depending on the controlling flags. The
name "logtee" comes from the contraction of "logger" and "tee". One particularity of the class is that
without a stream, the class behaves like a regular logger.
Creating a logger
The Logteedefault constructor creates a standard logger object without an output stream. The instance can
also be created by size or with an output stream or both. A third method can also attach an information
string.
# create a logger with the interpreter stream
const log (Logtee (interp:get-output-stream))
assert true (logger-p log)
Adding messages
The process of adding messages is similar to the regular logger. The only difference is that the message
is placed on the output stream if a control flag is set and the message level is less or equal the report
level. In the other word, the control flag controls the message display -- the tee operation -- while the
report level filters some of the messages.
log:add 2 "a level 2 message"
The set-teemethod sets the control flag. The set-report-levelmethod sets the report level. Note that the
set-report-leveland its associated get-report-levelmethod is part of the base Loggerclass.
Path name
The Pathnameclass is a base class designed to ease the manipulation of system path. It is particularly
useful when it come to manipulate directory component.
Creating a path name
A path name is created either by file name or by file and directory name. In the first case, only the
file name is used. In the second case, the full path name is characterized.
# create a new path name
const path (afnix:sio:Pathname "axi")
Adding a directory path
The best way to add a directory path is to use the absolute-pathor the relative-pathfunctions.
# adding a directory path
const name (afnix:sio:absolute-path "usr" "bin")
path:set-directory-name name
Getting the path information
The path information can be obtained individually or globally. The get-file-nameand get-directory-
namemethods return respectively the file and directory name. The get-rootmethod returns the root
component of the directory name. The get-fullmethod returns the full path name.
STANDARD INPUT/OUTPUT REFERENCE
Transcoder
The Transcoderclass is a codeset transcoder class. The class is responsible to map a byte character in a
given codeset into its associated Unicode character. It should be noted that not all characters can be
transcoded.
Predicate
transcoder-p
Inheritance
Object
Constants
DEFAULT
The DEFAULTconstant is used by the set-transcoding-modemethod to specify the class transcoding
mode. In default mode, each character is not transcoded. This mode is the identity mode.
I8859-01
The I8859-01constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-6 codeset.
I8859-02
The I8859-02constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-2 codeset.
I8859-03
The I8859-03constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-3 codeset.
I8859-04
The I8859-04constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-4 codeset.
I8859-05
The I8859-05constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-5 codeset.
I8859-06
The I8859-06constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-6 codeset.
I8859-07
The I8859-07constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-7 codeset.
I8859-08
The I8859-08constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-8 codeset.
I8859-09
The I8859-09constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-9 codeset.
I8859-10
The I8859-10constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-10 codeset.
I8859-11
The I8859-11constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-11 codeset.
I8859-13
The I8859-13constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-13 codeset.
I8859-14
The I8859-14constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-14 codeset.
I8859-15
The I8859-15constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-15 codeset.
I8859-16
The I8859-16constant is used by the set-transcoding-modemethod to specify the class transcoding
mode that corresponds to the ISO-8859-16 codeset.
Constructors
Transcoder (none)
The Transcoderconstructor creates a default transcoder that operates in default mode by using the
identity function.
Transcoder (constant)
The Transcoderconstructor creates a transcoder with the argument mode.
Methods
set-transcoding-mode -> none (constant)
The set-transcoding-modemethod sets the class transcoding mode.
get-transcoding-mode -> constant (none)
The get-transcoding-modemethod returns the class transcoding mode.
valid-p -> Byte|Character (Boolean)
The valid-ppredicate returns true if character can be transcoded. If the argument is a byte, the
method returns true if the byte can be transcoded to a character. If the argument is a character,
the method returns true if the character can be transcoded to a byte.
encode -> Byte (Character)
The encodemethod encodes a byte into a character. If the character cannot be encoded, an exception
is raised.
decode -> Character (Byte)
The decodemethod decodes a character into a byte. If the character cannot be decoded, an exception
is raised.
Stream
The Streamclass is a base class for the standard streams. The class is automatically constructed by a
derived class and provides the common methods for all streams.
Predicate
stream-p
Inheritance
Transcoder
Constants
BYTE
The BYTEconstant is used by the set-coding-modemethod to specify the stream coding mode. In byte
mode, each character is assumed to be coded with one byte. This value affects the getuand
writemethods
UTF-8
The UTF-8constant is used by the set-coding-modemethod to specify the stream coding mode. In UTF-8
mode, each character is assumed to be coded in the UTF-8 representation. This value affects the
getuand writemethods
Methods
set-encoding-mode -> none (constant|String)
The set-encoding-modemethod sets the stream coding mode that affects how characters are read or
written. In the enumeration form, the method only sets the stream coding mode which is either byte
or UTF-8 mode. In the string mode, the method sets the stream encoding mode and the transcoding
mode.
get-encoding-mode -> constant (none)
The get-coding-modemethod returns the stream coding mode which affects how characters are read or
written.
InputStream
The InputStreamclass is a base class for the standard i/o module. The class is automatically constructed
by a derived class and provides the common methods for all input streams. The input stream is associated
with a timeout value which is used for read operation. By default, timeout is infinite, meaning that any
read without data will be a blocking one.
Predicate
input-stream-p
Inheritance
Stream
Methods
flush -> none|Character (none)
The flushmethod the input stream buffer. In the first form, without argument, the input stream
buffer is entirely flushed. In the second form, the input stream buffer is flushed until the
character argument is found.
get-timeout -> Integer (none)
The get-timeoutmethod returns the input stream timeout. A negative value is a blocking timeout.
set-timeout -> none (Integer)
The set-timeoutmethod sets the input stream timeout. A negative value is a blocking timeout.
Changing the stream timeout does not cancel any pending read operation.
read -> Byte (none)
The readmethod returns the next byte available from the input stream. If the stream has been
closed or consumed, the end-of-streambyte is returned.
read -> Buffer (Integer)
The readmethod returns a buffer object with at most the number of bytes specified as an argument.
The buffer lengthmethod should be used to check how many bytes have been placed in the buffer.
readln -> String (none)
The readlnmethod returns the next line available from the input stream. If the stream has been
closed or consumed, the end-of-streamcharacter is returned.
getu -> Character (none)
The getumethod returns the next available Unicode character from the input stream. If the stream
has been closed or consumed, the end-of-streamcharacter is returned. During the read process, if
the character decoding operation fails, an exception is raised.
valid-p -> Boolean (none|Integer)
The valid-pmethod returns true if the input stream is in a valid state. By valid state, we mean
that the input stream can return a byte with a call to the read method. With one argument, the
method timeout after the specified time in milliseconds. If the timeout is null, the method
returns immediately. With -1, the method blocks indefinitely if no byte is available.
eos-p -> Boolean (none)
The eos-ppredicate returns true if the input stream has been closed or all bytes consumed.
pushback -> Integer (Byte|Character|String)
The pushbackmethod push-back a byte, an Unicode character or a string in the input stream.
Subsequent calls to read will return the last pushed bytes. Pushing a string is equivalent to push
each encoded bytes of the string. The method returns the number of bytes pushed back.
consume -> Integer (none)
The consumemethod consumes an input stream and places the read characters into the stream buffer.
The method returns the number of consumed characters. This method is generally used in conjonction
with the to-stringmethod.
get-buffer-length -> Integer (none)
The get-buffer-lengthmethod returns the length of the push-back buffer.
to-string -> String (none)
The to-stringmethod returns a string representation of the input stream buffer.
InputFile
The InputFileclass provide the facility for an input file stream. An input file instance is created with
a file name. If the file does not exist or cannot be opened, an exception is raised. The InputFileclass
is derived from the InputStreamclass.
Predicate
input-file-p
Inheritance
InputStreamNameable
Constructors
InputFile (String)
The InputFileconstructor create an input file by name. If the file cannot be created, an exception
is raised. The first argument is the file name to open.
InputFile (String String)
The InputFileconstructor create an input file by name and encoding mode. If the file cannot be
created, an exception is raised. The first argument is the file name to open.The second argument
is the encoding mode to use.
Methods
close -> Boolean (none)
The closemethod close the input file and returns true on success, false otherwise. In case of
success, multiple calls return true.
lseek -> none (Integer)
The lseekset the input file position to the integer argument. Note that the push-back buffer is
reset after this call.
length -> Integer (none)
The lengthmethod returns the length of the input file. The length is expressed in bytes.
get-modification-time -> Integer (none)
The get-modification-timemethod returns the modification time of the file. The returned argument
is suitable for the Timeand Datesystem classes.
InputMapped
The InputMappedclass is an input stream class that provides the facility for reading a mapped input
stream. The input stream is mapped at construction given a file name, a size and a file offset. An
anonymous mapped input stream can also be designed with a buffer object. Finally, without any information
an always valid null input stream is constructed.
Predicate
input-mapped-p
Inheritance
InputStream
Constructors
InputMapped (none)
The InputMappedconstructor create a null input stream. This stream acts as a null character
generator.
InputMapped (String|Buffer)
The InputMappedconstructor create a mapped input stream by name or buffer. In the first form, a
string is used as file name to be mapped an input stream. In the second form, a buffer is mapped
as an input stream.
InputMapped (String Integer Integer)
The InputMappedconstructor create a mapped input stream by name, size and offset. The string
argument is the file name to map. The second argument is the desired mapped size. The third
argument is the offset inside the file before mapping it.
Methods
lseek -> none (Integer)
The lseekset the input mapped file position to the integer argument. Note that the push-back
buffer is reset after this call.
length -> Integer (none)
The lengthmethod returns the length of the input mapped file. The length is expressed in bytes.
InputString
The InputStringclass provide the facility for an input string stream. The class is initialized or set
with a string and then behaves like a stream. This class is very useful to handle generic stream method
without knowing what kind of stream is behind it.
Predicate
input-string-p
Inheritance
InputStream
Constructors
InputString (none)
The InputStringconstructor creates an empty input string.
InputString (String)
The InputStringconstructor creates an input string by value.
Methods
get -> Byte (none)
The getmethod returns the next available byte from the input stream but do not remove it.
set -> none (String)
The setmethod sets the input string by first resetting the push-back buffer and then initializing
the input string with the argument value.
InputTerm
The InputTermclass provide the facility for an input terminal stream. The input terminal reads byte from
the standard input stream. No line editing facility is provided with this class This is a low level
class, and normally, the Terminalclass should be used instead.
Predicate
input-term-p
Inheritance
InputStreamOutputStream
Constructors
InputTerm (none)
The InputTermconstructor creates a default input terminal.
Methods
set-ignore-eos -> none (Boolean)
The set-ignore-eosmethod set the input terminal end-of-streamignore flag. When the flag is on, any
character that match a ctrl-dis changed to the end-of-stream mapped character returned by a read.
This method is useful to prevent a reader to exit when the ctrl-dbyte is generated.
set-mapped-eos -> none (Byte)
The set-mapped-eosmethod set the input terminal end-of-streammapped character. By default the
character is set to end-of-line. This method should be used in conjunction with the set-ignore-
eosmethod.
OutputStream
The OutputStreamclass is a base class for the standard i/o module. The class is automatically constructed
by a derived class and provide the common methods for all output streams.
Predicate
output-stream-p
Inheritance
Stream
Methods
write -> Integer (Literal+)
The writemethod write one or more literal arguments on the output stream. This method returns the
number of characters written.
writeln -> none (Literal+)
The writelnmethod write one or more literal argument to the output stream and finish with a
newline. This method return nil.
errorln -> none (Literal+)
The errorlnmethod write one or more literal argument to the associated output error stream and
finish with a newline. Most of the time, the output stream and error stream are the same except
for an output terminal.
newline -> none (none)
The newlinemethod writes a new line byte to the output stream. The method returns nil.
write-soh -> none (none)
The write-sohmethod writes a start-of-headingcharacter to the output stream.
write-stx -> none (none)
The write-stxmethod writes a start-of-transmissioncharacter to the output stream.
write-etx -> none (none)
The write-etxmethod writes an end-of-transmissioncharacter to the output stream.
write-eos -> none (none)
The write-eosmethod writes an end-of-streamcharacter to the output stream.
OutputFile
The OutputFileclass provide the facility for an output file stream. An output file instance is created
with a file name. If the file does not exist, it is created. If the file cannot be created, an exception
is raised. Once the file is created, it is possible to write literals. The class is derived from the
OutputStreamclass. By default an output file is created if it does not exist. If the file already exist,
the file is truncated to 0. Another constructor for the output file gives more control about this
behavior. It takes two boolean flags that defines the truncate and append mode. The t-flagis the truncate
flag. The a-flagis the append flag.
Predicate
output-file-p
Inheritance
OutputStreamNameable
Constructors
OutputFile (String)
The OutputFileconstructor create an output file by name. If the file cannot be created, an
exception is raised. The first argument is the file name to create.
OutputFile (String String)
The OutputFileconstructor create an output file by name and encoding mode. If the file cannot be
created, an exception is raised. The first argument is the file name to create. The second
argument is the encoding mode to use.
OutputFile (String Boolean Boolean)
The OutputFileconstructor create an output file by name. If the file cannot be created, an
exception is raised. The first argument is the file name to create. The second argument is the
truncate flag. If the file already exists and the truncate flag is set, the file is truncated to
0. The third argument is the append mode. If set to true, the file is open in append mode.
Methods
close -> Boolean (none)
The closemethod closes the output file and returns true on success, false otherwise. In case of
success, multiple calls returns true.
OutputString
The OutputStringclass provide the facility for an output string stream. The class is initially empty and
acts as a buffer which accumulate the write method bytes. The to-stringmethod can be used to retrieve the
buffer content.
Predicate
output-string-p
Inheritance
OutputStream
Constructors
OutputString (none)
The OutputStringconstructor creates a default output string.
OutputString (String)
The OutputStringconstructor creates an output string by value. The output string stream is
initialized with the string value.
Methods
flush -> none (none)
The flushmethod flushes the output stream by resetting the stream buffer.
length -> Integer (none)
The lengthmethod returns the length of the output string buffer.
to-string -> String (none)
The to-stringmethod returns a string representation of the output string buffer.
OutputBuffer
The OutputBufferclass provide the facility for an output byte stream. The class is initially empty and
acts as a buffer which accumulate the write method bytes. The to-stringmethod can be used to retrieve the
buffer content as a string. The formatmethod can be used to retrieve the buffer content as an octet
string. content.
Predicate
output-buffer-p
Inheritance
OutputStream
Constructors
OutputBuffer (none)
The OutputBufferconstructor creates a default output buffer.
OutputBuffer (String)
The OutputBufferconstructor creates an output buffer by value. The output buffer stream is
initialized with the string value.
Methods
flush -> none (none)
The flushmethod flushes the output stream by resetting the stream buffer.
length -> Integer (none)
The lengthmethod returns the length of the output buffer.
to-string -> String (none)
The to-stringmethod returns a string representation of the output buffer.
format -> String (none)
The formatmethod returns an octet string representation of the output buffer.
OutputTerm
The OutputTermclass provide the facility for an output terminal. The output terminal is defined as the
standard output stream. If the standard error stream needs to be used, the ErrorTermclass is more
appropriate.
Predicate
output-term-p
Inheritance
OutputStream
Constructors
OutputTerm (none)
The OutputTermconstructor creates a default output terminal
ErrorTerm (none)
The ErrorTermconstructor creates a default error terminal
Terminal
The Terminalclass provides the facility for an i/o terminal with line editing capability. The class
combines the InputTermand OutputTermmethods.
Predicate
terminal-p
Inheritance
InputTermOutputTerm
Constructors
Terminal (none)
The Terminalconstructor creates a default terminal which combines an input and output terminal
with line editing capabilities.
Methods
set-primary-prompt -> none (String)
The set-primary-promptmethod sets the terminal primary prompt which is used when the read-
linemethod is called.
set-secondary-prompt -> none (String)
The set-secondary-promptmethod sets the terminal secondary prompt which is used when the read-
linemethod is called.
get-primary-prompt -> String (none)
The get-primary-promptmethod returns the terminal primary prompt.
get-secondary -> String (none)
The get-secondary-promptmethod returns the terminal secondary prompt.
Intercom
The Intercomclass is the interpreter communication class. The class operates with two streams. One output
stream is used to send serialized data while the input stream is used to deserialize data. The sendmethod
can be used to send the data, while the recvcan be used to receive them.
Predicate
intercom-p
Inheritance
Object
Constructors
Intercom (none)
The Intercomconstructor creates a default interpreter communication object. There is no stream
attached to it.
Intercom (InputStream|OutputStream)
The Intercomconstructor creates an interpreter communication object with an input or an output
stream. In the first form, the input stream object is used by the recvmethod to read data object.
In the second form, the output stream object is used by the sendmethod to send data object.
Intercom (InputStream OutputStream)
The Intercomconstructor creates an interpreter communication object with an input and an output
stream.
Methods
send -> none (Object)
The sendmethod serialize the object argument with the help of the output stream bound to the
interpreter communication object. If there is no output stream, nothing is sent.
recv -> Object (none)
The recvmethod deserialize an object with the help of the input stream bound to the interpreter
communication object. If there is no output stream, nilis returned.
request -> Object (Object)
The requestmethod perform an atomic send receive operation.
set-input-stream -> none (InputStream)
The set-input-streammethod binds an input stream to the interpreter communication object.
get-input-stream -> InputStream (none)
The get-input-streammethod returns the input stream bound to the interpreter communication object.
set-output-stream -> none (OutputStream)
The set-output-streammethod binds an output stream to the interpreter communication object.
get-output-stream -> OutputStream (none)
The get-output-streammethod returns the output stream bound to the interpreter communication
object.
InputOutput
The InputOutputclass implements an input-output stream with a buffer which holds character during the
processing of transit between the output stream to the input stream. The theory of operation goes as
follow. The internal buffer is filled with characters with the help of the output stream. The characters
are consumed from the buffer with the help of the input stream (read method). If the buffer becomes empty
the eos-ppredicate returns true, the valid-ppredicate false and the readmethod will return the
eoscharacter. The InputOutput buffer can also be initialized with a buffer. This provides a nice
mechanism to use a buffer like an input stream. The i/o operations implemented by this class are non-
blocking. As a consequence, it is not possible to suspend a thread with this class and have it awaken
when some characters are available in the input stream.
Predicate
input-output-p
Inheritance
InputStreamOutputStream
Constructors
InputOutput (none)
The InputOutputconstructor creates a default input/output stream.
InputOutput (String)
The InputOutputconstructor creates an input/output stream initialized with the string argument.
The string argument is used to fill the string buffer.
Methods
get -> Byte (none)
The getmethod returns the next available byte from the input stream but do not remove it.
set -> none (String)
The setmethod sets the input string by first resetting the push-back buffer and then initializing
the input string with the argument value.
Selector
The Selectorclass provides some facilities to perform i/o multiplexing. The constructor takes 0 or
several stream arguments.The class manages automatically the differentiation between the InputStreamand
the OutputStreamobjects. Once the class is constructed, it is possible to get the first stream ready for
reading or writing or all of them. It is also possible to add more steams after construction with the
addmethod. When a call to the waitmethod succeeds, the method returns the first available stream. If the
waitallmethod is called, the method returns a vector with all ready steams. The selector can be
configured to operate in marking mode. In such mode, the selector can be marked as ready by a thread
independently of the bounded streams. This is a useful mechanism which can be used to cancel a select
loop. The markmethod is designed to mark the selector while the marked-ppredicate returns true if the
stream has been marked.
Predicate
selector
Inheritance
Object
Constructors
Selector (none)
The Selectorconstructor creates a default stream selector.
Selector ([Boolean] [InputStream|OutputStream]*)
The Selectorconstructor creates a stream selector with 0 or more stream arguments. If the first
argument is a boolean, the selector is constructed marked mode.
Methods
add -> none (InputStream|OutputStream)
The addmethod adds an input or output stream to the selector. If the stream is both an input and
an output stream, the preference is given to the input stream. If this preference is not
acceptable, the input-addor the output-addmethods might be preferable.
input-add -> none (InputStream)
The input-addmethod adds an input stream to the selector.
output-add -> none (OutputStream)
The output-addmethod adds an output stream to the selector.
wait -> Stream (none|Integer)
The waitmethod waits for a status change in the selector and returns the first stream that has
change status. With one argument, the selector time-out after the specified time in milliseconds.
Note that at the time of the return, several streams may have changed status.
wait-all -> Vector (none|Integer)
The waitmethod waits for a status change in the selector and returns all streams that has change
status in a vector object. With one argument, the selector time-out after the specified time in
milliseconds. If the selector has timed-out, the vector is empty.
input-get -> InputStream (Integer)
The input-getmethod returns the input streams in the selector by index. If the index is out of
bound, an exception is raised.
output-get -> OutputStream (Integer)
The output-getmethod returns the output streams in the selector by index. If the index is out of
bound, an exception is raised.
input-length -> Integer (none)
The input-lengthmethod returns the number of input streams in the selector.
output-length -> Integer (none)
The output-lengthmethod returns the number of output streams in the selector.
mark -> none (none)
The markmethod marks a selector object.
marked-p -> Boolean (none)
The marked-ppredicate returns true if the selector has been marked.
Logtee
The Logteeclass provides the facility of a logger object associated with an output stream. When a message
is added, the message is written to the output stream depending on an internal flag. By default the tee
mode is false and can be activated with the set-teemethod.
Predicate
logtee-p
Inheritance
Logger
Constructors
Logtee (none)
The Logteeconstructor creates a default logger without an output stream.
Logtee (Integer)
The Logteeconstructor creates a logger with a specific size without an output stream. terminal
Logtee (OutputStream)
The Logteeconstructor creates a logger with an output stream. The object is initialized to operate
in write mode.
Logtee (Integer OutputStream)
The Logteeconstructor creates a logger with a specific size with an output stream. The first
argument is the logger size. The second argument is the output stream.
Logtee (Integer String OutputStream)
The Logteeconstructor creates a logger with a specific size, an information string and an output
stream. The first argument is the logger size. The second argument is information string. The
third argument is the output stream.
Methods
set-tee-stream -> none (OutputStream)
The set-tee-streammethod sets the tee output stream. This stream is different from the logger
output stream
get-tee-stream -> OutputStream (none)
The get-tee-streammethod returns the object output stream.
set-tee -> none (Boolean)
The set-teemethod sets the object tee flag. When the flag is true, the logger writes the added
message on the output stream.
get-tee -> Boolean (none)
The get-teemethod returns the object tee flag. When the flag is true, the logger writes the added
message on the output stream.
Pathname
The Pathnameclass is a base class designed to manipulate system i/o paths. The class operates with a
directory name and a file name. Both names are kept separated to ease the path manipulation. The path
components can be extracted individually. However, it shall be noted that the first component has a
special treatment to process the root directory name.
Predicate
pathname-p
Inheritance
Object
Constructors
Pathname (none)
The Pathnameconstructor creates a default path name without file and directory names.
Pathname (String)
The Pathnameconstructor creates a path name with a file name. The first string argument is the
file name.
Pathname (String String)
The Pathnameconstructor creates a pathname with a file and directory name. The first string
argument is the file name. The second string argument is the directory name.
Methods
reset -> none (none)
The resetmethod reset the path name by removing all path and file information.
dir-p -> Boolean (none)
The dir-ppredicate returns true if the path is a directory.
file-p -> Boolean (none)
The file-ppredicate returns true if the path is a file.
set-file-name -> none (String)
The set-file-namemethod set the path name file name. The string argument is the file name.
get-file-name -> String (none)
The get-file-namemethod returns the path name file name.
add-directory-name -> none (String)
The add-directory-namemethod add the directory name to the directory path component. The string
argument is the directory name.
set-directory-name -> none (String)
The set-directory-namemethod set the directory name file name. The string argument is the
directory name.
get-directory-name -> String (none)
The get-directory-namemethod returns the path name directory name.
length -> Integer (none)
The lengthmethod returns the number of directory path elements.
get-path -> String (Integer)
The get-pathmethod returns a directory path element by index.
get-root -> String (none)
The get-rootmethod returns the root component of a directory name.
get-full -> String (none)
The get-fullmethod returns the full path name by combining the directory name with the file name.
add-path -> none (String)
The add-pathmethod add a new path component by name. The path is separated into individual
component and added to the directory path unless it is a root path. If the file name is set, the
file name is added as a directory component. If the path is a root path, a new path name is
rebuilt. This last case is equivalent to a call to set-file-name.
normalize -> none (none)
The normalizemethod rebuild the path name by determining the full path nature if possible. In case
of success, the path structure reflects the actual path type.
Pathlist
The Pathlistclass is a base class designed to ease the manipulation of a file search path. The class acts
like a list of search paths and various facilities are provided to find a valid path for a given name.
The path list can be manipulated like any other list.
Predicate
pathlist-p
Inheritance
Object
Constructors
Pathlist (none)
The Pathlistconstructor creates a default path list.
Pathlist (Boolean|String)
The Pathlistconstructor creates a path list with a local search flag or with an initial path
component. In the first form, a boolean argument controls the local search flag. In the second
for, a string argument is used as the initial path component.
Methods
reset -> none (none)
The resetmethod resets the path list by clearing the local search flag and removing all path
components.
local-p -> Boolean (none)
The local-ppredicate returns true if the local search flag is set.
set-local-search -> none (Boolean)
The set-local-searchmethod sets the local search flag.
length -> Integer (none)
The lengthmethod returns the number of directory path elements.
get-path -> String (Integer)
The get-pathmethod returns a directory path element by index.
add-path -> none (String)
The add-pathmethod add a new path component by name. The string argument is the name to add.
file-p -> Boolean (String)
The file-ppredicate returns true if the file name argument can be resolved. If the local search
flag is set, the local directory is check first.
resolve -> String (String)
The resolvemethod returns a string representation of the resolved file path. If the local search
flag is set and the file name is found locally, the initial name argument is returned.
Functions
dir-p -> Boolean (String)
The dir-pfunction returns true if the argument name is a directory name, false otherwise.
file-p -> Boolean (String)
The file-pfunction returns true if the argument name is a regular file name, false otherwise.
tmp-name -> String (String?)
The tmp-namefunction returns a name suitable for the use as a temporary file name. Without
argument, a default prefix is used to build the name. An optional string prefix can control the
original name.
tmp-path -> String (String?)
The tmp-pathfunction returns a path suitable for the use as a temporary file name. Without
argument, a default prefix is used to build the path. An optional string prefix can control the
original name.
absolute-path -> String (String+)
The absolute-pathfunction returns an absolute path name from an argument list. Without argument,
the command returns the root directory name. With one or several argument, the absolute path is
computed from the root directory.
relative-path -> String (String+)
The relative-pathfunction returns a relative path name from an argument list. With one argument,
the function returns it. With two or more arguments, the relative path is computed by joining each
argument with the previous one.
rmfile -> none (String+)
The rmfilefunction removes one or several files specified as the arguments. If one file fails to
be removed, an exception is raised.
mkdir -> none (String+)
The mkdirfunction creates one or several directories specified as the arguments. If one directory
fails to be created, an exception is raised.
mhdir -> none (String+)
The mhdirfunction creates hierarchically one or several directories specified as the arguments. If
one directory fails to be created, an exception is raised.
rmdir -> none (String+)
The rmdirfunction removes one or several directories specified as the arguments. If one directory
fails to be removed, an exception is raised.
get-base-name -> String (String)
The get-base-namefunction returns the base name from a path. The base name can be either a file
name or a directory name. By definition, a path is made of a base path and a base name.
get-base-path -> String (String)
The get-base-pathfunction returns the base path from a path. The base path is a directory name. By
definition, a path is made of a base path and a base name.
get-extension -> String (String)
The get-extensionfunction returns the extension from a path.
remove-extension -> String (String)
The remove-extensionfunction returns the extension from a path. In order to get a base file name
from a path, the get-base-namefunction must be called first.
Directory
The Directoryclass provides some facilities to access a directory. By default, a directory object is
constructed to represent the current directory. With one argument, the object is constructed from the
directory name. Once the object is constructed, it is possible to retrieve its content.
Predicate
directory-p
Inheritance
Object
Constructors
Directory (none)
The Directoryconstructor creates a directory object those location is the current directory. If
the directory cannot be opened, an exception is raised.
Directory (String)
The Directoryconstructor create a directory object by name. If the directory cannot be opened, an
exception is raised. The first argument is the directory name to open.
Methods
mkdir -> Directory (String)
The mkdirmethod creates a new directory in the current one. The full path is constructed by taking
the directory name and adding the argument. Once the directory is created, the method returns a
directory object of the newly constructed directory. An exception is thrown if the directory
cannot be created.
rmdir -> none (String)
The rmdirmethod removes an empty directory. The full path is constructed by taking the directory
name and adding the argument. An exception is thrown if the directory cannot be removed.
rmfile -> none (String)
The rmfilemethod removes a file in the current directory. The full path is constructed by taking
the directory name and adding the argument. An exception is thrown if the file cannot be removed.
get-name -> String (none)
The get-namemethod returns the directory name. If the default directory was created, the method
returns the full directory path.
get-list -> List (none)
The get-listmethod returns the directory contents. The method returns a list of strings. The list
contains all valid names at the time of the call, including the current directory and the parent
directory.
get-files -> List (none)
The get-filesmethod returns the directory contents. The method returns a list of strings of files.
The list contains all valid names at the time of the call.
get-subdirs -> List (none)
The get-subdirsmethod returns the sub directories. The method returns a list of strings of sub-
directories. The list contains all valid names at the time of the call, including the current
directory and the parent directory.
next-name -> String (none)
The next-namemethod returns the next available name from the directory stream. This method is
useful when operating with a large number of elements.
next-path -> String (none)
The next-pathmethod returns the next available path name from the directory stream. This method is
useful when operating with a large number of elements.
next-file-name -> String (none)
The next-file-namemethod returns the next available file name from the directory stream. This
method is useful when operating with a large number of elements.
next-file-path -> String (none)
The next-file-pathmethod returns the next available file path name from the directory stream. This
method is useful when operating with a large number of elements.
next-dir-name -> String (none)
The next-dir-namemethod returns the next available directory name from the directory stream. This
method is useful when operating with a large number of elements.
next-dir-path -> String (none)
The next-dir-pathmethod returns the next available directory path name from the directory stream.
This method is useful when operating with a large number of elements.
Logtee
The Logteeclass is a message logger facility associated with an output stream. When a message is added to
the logger object, the message is also sent to the output stream, depending on the controlling flags. The
name "logtee" comes from the contraction of "logger" and "tee". One particularity of the class is that
without a stream, the class behaves like a regular logger.
Predicate
logtee-p
Inheritance
Logger
Constructors
Logtee (none)
The Logteeconstructor creates a default logger without an output stream
Logtee (Integer)
The Logteeconstructor creates a logger object with a specific size without an output stream.
Logtee (Output)
The Logteeconstructor creates a logger object with an output stream.
Logtee (Integer Output)
The Logteeconstructor creates a logger object with a specific size and an output stream. The first
argument is the logger window size. The second argument is the output stream.
Logtee (Integer String Output)
The Logteeconstructor creates a logger object with a specific size, an information string and an
output stream. The first argument is the logger window size. The second argument is the logger
information string. The third argument is the output stream.
Methods
set-output-stream -> none (Output)
The set-output-streammethod attaches the output stream to the logtee object.
get-output-stream -> Output (none)
The get-output-streammethod returns the logtee output stream.
set-tee -> none (Boolean)
The set-teemethod sets the logtee control flag. The control flag controls the message display to
the output stream.
get-tee -> Boolean (none)
The get-teemethod returns the logtee output stream.
NamedFifo
The NameFifoclass is a string vector designed to operate as a stream fifo object. The class provides the
facility to read or write the fifo content from a stream. The stream can be created by name for writing,
in which case the named fifo operates as a backup object.
Predicate
named-fifo-p
Inheritance
StrvecNameable
Constructors
NamedFifo (none)
The NamedFifoconstructor creates a default named fifo without a backing name. In this case the
fifo cannot be read or written by stream.
NamedFifo (String)
The NamedFifoconstructor creates a named fifo by name. The name is used as a file name for reading
or writing the fifo.
NamedFifo (String Boolean)
The NamedFifoconstructor creates a named fifo by name. The name is used as a file name for reading
or writing the fifo.If the boolean argument is true, the fifo is read.
Methods
read -> none (none)
The readmethod reads the fifo file name and fill the fifo.
write -> none (none)
The writemethod writes the fifo contents to the fifo file name.
set-name -> none (String)
The set-namemethod sets the fifo file name.
FileInfo
The FileInfois a file information class that holds the primary information related to a file, such like
its size or its modification time. The file information is set at construction but can be updated with
the help of the updatemethod.
Predicate
file-info-p
Inheritance
Nameable
Constructors
(String)
The FileInfoconstructor creates a file information by name. The string argument is the file name
to query.
Methods
length -> Integer (none)
The lengthmethod returns the file size information.
get-modification-time -> Integer (none)
The get-modification-timemethod returns the file modification time. The time can be used as an
argument to the Timeor Dateobject.
update -> none (none)
The updatemethod the file information data.
AFNIX 2017-11-22 sio(3)