afnix-sio(3)
sio - standard input/output module
Description
sio
NAME
sio - standard input/output module
STANDARD INPUT/OUTPUT MODULE
The Standard Input/Output module 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-sio module is based on facilities provided by two
base classes, namely, the InputStream stream and the
OutputStream stream. Both classes have associated predicates
with the name input-stream-p and output-stream-p. The base
class associated is the Stream class those sole purpose is
to define the stream coding mode.
Stream base
class
The Stream class is the base class for the InputStream and
OutputStream classes. The Stream class 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 read and getu are 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-8 codeset, the Terminal
stream coding mode is automatically adjusted to reflect this
situation. Since the US-ASCII codeset 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 set-encoding-mode can be used to set the stream encoding codeset. The method operates either by enumeration or string. The get-encoding-mode returns 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-mode method. For simplicity, the string version of the set-encoding-mode takes care of setting both the stream mode and the transcoding mode. It is also worth to note that internally, the Stream class is derived from the Transcoder class.
Input
stream
The InputStream base 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 read method without argument returns the
next available byte or the end-of-streameos. With an integer
argument, the read method returns a Buffer with at most the
number of requested bytes. The readln method returns the
next available line. When it is necessary to read characters
instead of bytes, the getu is more appropriate since it
returns an Unicode character.
Output
stream
The OutputStream base class provides the base methods to
write to an output stream. The write method takes literal
objects which are automatically converted to string
representation and then written to the output stream. Note
that for the case of a Buffer object, 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-p predicate
that returns true if 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-p predicate 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-p
predicate 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-p predicate 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 true
if and only if a byte cannot be read. If a byte has been
pushed-back and the end-of-stream marker is reached, the
method will return false. For an input terminal, the method
returns true if the user and entered the end-of-stream byte.
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 true when all datagram
bytes have be read.
The read
method
The read method 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-stream marker has been reached. The method
returns the ctrl-d byte. Since a binary file might contains
valid byte like ctrl-d it is necessary to use the valid-p or
eos-p predicate 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-stream condition and therefore care should be taken
to properly assert the stream content. This last remark is
especially true for the readln method. The method will
return when the end-of-stream marker is reached, even if a
newline byte has not been read. With an udp socket, such
behavior will not happen.
Buffer read
mode
The read method 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 Buffer object which can
later be used to read, or transform bytes. Multi-byte
conversion to number should use such approach. The read
method does not necessarily returns the number of requested
bytes. Once the buffer is returned, the length method can be
used to check the buffer size. Note also the existence of
the to-string method 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-sio module provides two classes for file access.
The InputFile class open a file for input. The OutputFile
class opens a file for output. The InputFile class is
derived from the InputStream base class. The OutputFile
class is derived from the OutputStream class. 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 InputFile and OutputFile supports the get-name method
which returns the file name.
println
(if:get-name)
println (of:get-name)
Predicates are also available for these classes. The input-file-p returns true for an input file object.The output-file-p returns 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 read method reads a byte on an input stream. The write
method writes one or more literal arguments on the output
stream. The writeln method writes one or more literal
arguments followed by a newline byte on the output stream.
The newline method write a newline byte on the output
stream. The eos-p predicate returns true for an input
stream, if the stream is at the end. The valid-p predicate
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 readln method 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-p
predicate, except that it works with several stream
objects.
Selector
object
I/O multiplexing is accomplished with the Selector class.
The constructor takes 0 or several stream arguments. The
class manages automatically to differentiate between
InputStream stream and OutputStream streams. 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 is and os are 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 add method adds a new stream to the selector. The stream must be either an InputStream and OutputStream stream 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-add or the output-add methods might be preferable. The input-length method returns the number of input streams in this selector. The output-length method returns the number of output streams in this selector. The input-get method returns the selector input stream by index. The output-get method returns the selector output stream by index.
Waiting for
i/o event
The wait and wait-all methods 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 wait method returns the first stream which is ready
either for reading or writing depending whether it is an
input or output stream. The wait-all method returns a vector
with all streams that have changed their status. The wait
method returns nil if the no stream have changed. Similarly,
the wait-all method 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 wait method 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 mark method is designed to mark
the selector while the marked-p predicate 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, OutputTerm and
ErrorTerm classes 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 Terminal class. 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 Terminal class 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-line method. The
standard methods like read or readln do 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-prompt or set-secondary-prompt. A secondary
prompt is displayed when the read-line method 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 ErrorTerm class is the most frequently used class for
printing data on the standard error stream. The reserved
keywords error or errorln are available to write on the
interpreter error stream. If the interpreter error stream
has been changed, the use of the ErrorTerm will provide the
facility required to print directly on the terminal. The cat
program 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 Directory class 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 Directory object 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-name
method.
# 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-list method returns the full contents of the directory object. The get-files method returns a list of files in this directory. The get-subdirs method 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 mkdir and rmdir methods 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
mkdir methods succeeds. The rmdir method 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-path constructs an absolute path name from the argument list. If relative path needs to be constructed, the function relative-path might be used instead.
Logtee
The Logtee class 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 Logtee default 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-tee method sets the control flag. The set-report-level method sets the report level. Note that the set-report-level and its associated get-report-level method is part of the base Logger class.
Path name
The Pathname class 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-path or the relative-path functions.
# 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-name and get-directory-name methods
return respectively the file and directory name. The
get-root method returns the root component of the directory
name. The get-full method returns the full path name.
STANDARD INPUT/OUTPUT REFERENCE
Transcoder
The Transcoder class 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 DEFAULT constant is used by the set-transcoding-mode
method to specify the class transcoding mode. In default
mode, each character is not transcoded. This mode is the
identity mode.
I8859-01
The I8859-01 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-6 codeset.
I8859-02
The I8859-02 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-2 codeset.
I8859-03
The I8859-03 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-3 codeset.
I8859-04
The I8859-04 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-4 codeset.
I8859-05
The I8859-05 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-5 codeset.
I8859-06
The I8859-06 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-6 codeset.
I8859-07
The I8859-07 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-7 codeset.
I8859-08
The I8859-08 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-8 codeset.
I8859-09
The I8859-09 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-9 codeset.
I8859-10
The I8859-10 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-10 codeset.
I8859-11
The I8859-11 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-11 codeset.
I8859-13
The I8859-13 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-13 codeset.
I8859-14
The I8859-14 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-14 codeset.
I8859-15
The I8859-15 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-15 codeset.
I8859-16
The I8859-16 constant is used by the set-transcoding-mode
method to specify the class transcoding mode that
corresponds to the ISO-8859-16 codeset.
Constructors
Transcoder
(none)
The Transcoder constructor creates a default transcoder that
operates in default mode by using the identity function.
Transcoder
(constant)
The Transcoder constructor creates a transcoder with the
argument mode.
Methods
set-transcoding-mode
-> none (constant)
The set-transcoding-mode method sets the class transcoding
mode.
get-transcoding-mode
-> constant (none)
The get-transcoding-mode method returns the class
transcoding mode.
valid-p
-> Byte|Character (Boolean)
The valid-p predicate 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 encode method encodes a byte into a character. If the
character cannot be encoded, an exception is raised.
decode ->
Character (Byte)
The decode method decodes a character into a byte. If the
character cannot be decoded, an exception is raised.
Stream
The Stream class 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 BYTE constant is used by the set-coding-mode method to
specify the stream coding mode. In byte mode, each character
is assumed to be coded with one byte. This value affects the
getu and write methods
UTF-8
The UTF-8 constant is used by the set-coding-mode method 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 getu and write
methods
Methods
set-encoding-mode
-> none (constant|String)
The set-encoding-mode method 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-mode method returns the stream coding mode
which affects how characters are read or written.
InputStream
The InputStream class 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 flush method 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-timeout method returns the input stream timeout. A
negative value is a blocking timeout.
set-timeout
-> none (Integer)
The set-timeout method 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 read method returns the next byte available from the
input stream. If the stream has been closed or consumed, the
end-of-stream byte is returned.
read ->
Buffer (Integer)
The read method returns a buffer object with at most the
number of bytes specified as an argument. The buffer length
method should be used to check how many bytes have been
placed in the buffer.
readln ->
String (none)
The readln method returns the next line available from the
input stream. If the stream has been closed or consumed, the
end-of-stream character is returned.
getu ->
Character (none)
The getu method returns the next available Unicode character
from the input stream. If the stream has been closed or
consumed, the end-of-stream character is returned. During
the read process, if the character decoding operation fails,
an exception is raised.
valid-p
-> Boolean (none|Integer)
The valid-p method 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-p predicate returns true if the input stream has
been closed or all bytes consumed.
pushback
-> Integer (Byte|Character|String)
The pushback method 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 consume method 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-string method.
get-buffer-length
-> Integer (none)
The get-buffer-length method returns the length of the
push-back buffer.
to-string
-> String (none)
The to-string method returns a string representation of the
input stream buffer.
InputFile
The InputFile class 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 InputFile class is derived from the
InputStream class.
Predicate
input-file-p
Inheritance
InputStreamNameable
Constructors
InputFile
(String)
The InputFile constructor 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 InputFile constructor 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 close method close the input file and returns true on
success, false otherwise. In case of success, multiple calls
return true.
lseek ->
none (Integer)
The lseek set the input file position to the integer
argument. Note that the push-back buffer is reset after this
call.
length ->
Integer (none)
The length method returns the length of the input file. The
length is expressed in bytes.
get-modification-time
-> Integer (none)
The get-modification-time method returns the modification
time of the file. The returned argument is suitable for the
Time and Date system classes.
InputMapped
The InputMapped class 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 InputMapped constructor create a null input stream. This
stream acts as a null character generator.
InputMapped
(String|Buffer)
The InputMapped constructor 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 InputMapped constructor 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 lseek set the input mapped file position to the integer
argument. Note that the push-back buffer is reset after this
call.
length ->
Integer (none)
The length method returns the length of the input mapped
file. The length is expressed in bytes.
InputString
The InputString class 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 InputString constructor creates an empty input
string.
InputString
(String)
The InputString constructor creates an input string by
value.
Methods
get ->
Byte (none)
The get method returns the next available byte from the
input stream but do not remove it.
set ->
none (String)
The set method sets the input string by first resetting the
push-back buffer and then initializing the input string with
the argument value.
InputTerm
The InputTerm class 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
Terminal class should be used instead.
Predicate
input-term-p
Inheritance
InputStreamOutputStream
Constructors
InputTerm
(none)
The InputTerm constructor creates a default input
terminal.
Methods
set-ignore-eos
-> none (Boolean)
The set-ignore-eos method set the input terminal
end-of-stream ignore flag. When the flag is on, any
character that match a ctrl-d is 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-d
byte is generated.
set-mapped-eos
-> none (Byte)
The set-mapped-eos method set the input terminal
end-of-stream mapped character. By default the character is
set to end-of-line. This method should be used in
conjunction with the set-ignore-eos method.
OutputStream
The OutputStream class 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 write method write one or more literal arguments on the
output stream. This method returns the number of characters
written.
writeln
-> none (Literal+)
The writeln method write one or more literal argument to the
output stream and finish with a newline. This method return
nil.
errorln
-> none (Literal+)
The errorln method 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 newline method writes a new line byte to the output
stream. The method returns nil.
write-soh
-> none (none)
The write-soh method writes a start-of-heading character to
the output stream.
write-stx
-> none (none)
The write-stx method writes a start-of-transmission
character to the output stream.
write-etx
-> none (none)
The write-etx method writes an end-of-transmission character
to the output stream.
write-eos
-> none (none)
The write-eos method writes an end-of-stream character to
the output stream.
OutputFile
The OutputFile class 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 OutputStream class. 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-flag is the truncate flag. The a-flag is the
append flag.
Predicate
output-file-p
Inheritance
OutputStreamNameable
Constructors
OutputFile
(String)
The OutputFile constructor 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 OutputFile constructor 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 OutputFile constructor 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 close method closes the output file and returns true on
success, false otherwise. In case of success, multiple calls
returns true.
OutputString
The OutputString class 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-string method can be used to retrieve the buffer
content.
Predicate
output-string-p
Inheritance
OutputStream
Constructors
OutputString
(none)
The OutputString constructor creates a default output
string.
OutputString
(String)
The OutputString constructor creates an output string by
value. The output string stream is initialized with the
string value.
Methods
flush ->
none (none)
The flush method flushes the output stream by resetting the
stream buffer.
length ->
Integer (none)
The length method returns the length of the output string
buffer.
to-string
-> String (none)
The to-string method returns a string representation of the
output string buffer.
OutputBuffer
The OutputBuffer class 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-string method can be used to retrieve the buffer content
as a string. The format method can be used to retrieve the
buffer content as an octet string. content.
Predicate
output-buffer-p
Inheritance
OutputStream
Constructors
OutputBuffer
(none)
The OutputBuffer constructor creates a default output
buffer.
OutputBuffer
(String)
The OutputBuffer constructor creates an output buffer by
value. The output buffer stream is initialized with the
string value.
Methods
flush ->
none (none)
The flush method flushes the output stream by resetting the
stream buffer.
length ->
Integer (none)
The length method returns the length of the output
buffer.
to-string
-> String (none)
The to-string method returns a string representation of the
output buffer.
format ->
String (none)
The format method returns an octet string representation of
the output buffer.
OutputTerm
The OutputTerm class 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 ErrorTerm class is more appropriate.
Predicate
output-term-p
Inheritance
OutputStream
Constructors
OutputTerm
(none)
The OutputTerm constructor creates a default output
terminal
ErrorTerm
(none)
The ErrorTerm constructor creates a default error
terminal
Terminal
The Terminal class provides the facility for an i/o terminal
with line editing capability. The class combines the
InputTerm and OutputTerm methods.
Predicate
terminal-p
Inheritance
InputTermOutputTerm
Constructors
Terminal
(none)
The Terminal constructor creates a default terminal which
combines an input and output terminal with line editing
capabilities.
Methods
set-primary-prompt
-> none (String)
The set-primary-prompt method sets the terminal primary
prompt which is used when the read-line method is
called.
set-secondary-prompt
-> none (String)
The set-secondary-prompt method sets the terminal secondary
prompt which is used when the read-line method is
called.
get-primary-prompt
-> String (none)
The get-primary-prompt method returns the terminal primary
prompt.
get-secondary
-> String (none)
The get-secondary-prompt method returns the terminal
secondary prompt.
Intercom
The Intercom class 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 send method can be used to send the
data, while the recv can be used to receive them.
Predicate
intercom-p
Inheritance
Object
Constructors
Intercom
(none)
The Intercom constructor creates a default interpreter
communication object. There is no stream attached to it.
Intercom
(InputStream|OutputStream)
The Intercom constructor creates an interpreter
communication object with an input or an output stream. In
the first form, the input stream object is used by the recv
method to read data object. In the second form, the output
stream object is used by the send method to send data
object.
Intercom
(InputStream OutputStream)
The Intercom constructor creates an interpreter
communication object with an input and an output stream.
Methods
send ->
none (Object)
The send method 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 recv method deserialize an object with the help of the
input stream bound to the interpreter communication object.
If there is no output stream, nil is returned.
request
-> Object (Object)
The request method perform an atomic send receive
operation.
set-input-stream
-> none (InputStream)
The set-input-stream method binds an input stream to the
interpreter communication object.
get-input-stream
-> InputStream (none)
The get-input-stream method returns the input stream bound
to the interpreter communication object.
set-output-stream
-> none (OutputStream)
The set-output-stream method binds an output stream to the
interpreter communication object.
get-output-stream
-> OutputStream (none)
The get-output-stream method returns the output stream bound
to the interpreter communication object.
InputOutput
The InputOutput class 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-p predicate returns true, the valid-p predicate
false and the read method will return the eos character. 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 InputOutput constructor creates a default input/output
stream.
InputOutput
(String)
The InputOutput constructor 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 get method returns the next available byte from the
input stream but do not remove it.
set ->
none (String)
The set method sets the input string by first resetting the
push-back buffer and then initializing the input string with
the argument value.
Selector
The Selector class provides some facilities to perform i/o
multiplexing. The constructor takes 0 or several stream
arguments.The class manages automatically the
differentiation between the InputStream and the OutputStream
objects. 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 add method. When a call to the wait
method succeeds, the method returns the first available
stream. If the waitall method 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 mark method is designed to
mark the selector while the marked-p predicate returns true
if the stream has been marked.
Predicate
selector
Inheritance
Object
Constructors
Selector
(none)
The Selector constructor creates a default stream
selector.
Selector
([Boolean] [InputStream|OutputStream]*)
The Selector constructor 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 add method 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-add or the
output-add methods might be preferable.
input-add
-> none (InputStream)
The input-add method adds an input stream to the
selector.
output-add
-> none (OutputStream)
The output-add method adds an output stream to the
selector.
wait ->
Stream (none|Integer)
The wait method 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 wait method 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-get method 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-get method 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-length method returns the number of input streams
in the selector.
output-length
-> Integer (none)
The output-length method returns the number of output
streams in the selector.
mark ->
none (none)
The mark method marks a selector object.
marked-p
-> Boolean (none)
The marked-p predicate returns true if the selector has been
marked.
Logtee
The Logtee class 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-tee method.
Predicate
logtee-p
Inheritance
Logger
Constructors
Logtee
(none)
The Logtee constructor creates a default logger without an
output stream.
Logtee
(Integer)
The Logtee constructor creates a logger with a specific size
without an output stream. terminal
Logtee
(OutputStream)
The Logtee constructor creates a logger with an output
stream. The object is initialized to operate in write
mode.
Logtee
(Integer OutputStream)
The Logtee constructor 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 Logtee constructor 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-stream method sets the tee output stream. This
stream is different from the logger output stream
get-tee-stream
-> OutputStream (none)
The get-tee-stream method returns the object output
stream.
set-tee
-> none (Boolean)
The set-tee method 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-tee method returns the object tee flag. When the
flag is true, the logger writes the added message on the
output stream.
Pathname
The Pathname class 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 Pathname constructor creates a default path name without
file and directory names.
Pathname
(String)
The Pathname constructor creates a path name with a file
name. The first string argument is the file name.
Pathname
(String String)
The Pathname constructor 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 reset method reset the path name by removing all path
and file information.
dir-p ->
Boolean (none)
The dir-p predicate returns true if the path is a
directory.
file-p ->
Boolean (none)
The file-p predicate returns true if the path is a file.
set-file-name
-> none (String)
The set-file-name method set the path name file name. The
string argument is the file name.
get-file-name
-> String (none)
The get-file-name method returns the path name file
name.
add-directory-name
-> none (String)
The add-directory-name method add the directory name to the
directory path component. The string argument is the
directory name.
set-directory-name
-> none (String)
The set-directory-name method set the directory name file
name. The string argument is the directory name.
get-directory-name
-> String (none)
The get-directory-name method returns the path name
directory name.
length ->
Integer (none)
The length method returns the number of directory path
elements.
get-path
-> String (Integer)
The get-path method returns a directory path element by
index.
get-root
-> String (none)
The get-root method returns the root component of a
directory name.
get-full
-> String (none)
The get-full method returns the full path name by combining
the directory name with the file name.
add-path
-> none (String)
The add-path method 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 normalize method 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 Pathlist class 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 Pathlist constructor creates a default path list.
Pathlist
(Boolean|String)
The Pathlist constructor 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 reset method resets the path list by clearing the local
search flag and removing all path components.
local-p
-> Boolean (none)
The local-p predicate returns true if the local search flag
is set.
set-local-search
-> none (Boolean)
The set-local-search method sets the local search flag.
length ->
Integer (none)
The length method returns the number of directory path
elements.
get-path
-> String (Integer)
The get-path method returns a directory path element by
index.
add-path
-> none (String)
The add-path method add a new path component by name. The
string argument is the name to add.
file-p ->
Boolean (String)
The file-p predicate 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 resolve method 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-p function returns true if the argument name is a
directory name, false otherwise.
file-p ->
Boolean (String)
The file-p function returns true if the argument name is a
regular file name, false otherwise.
tmp-name
-> String (String?)
The tmp-name function 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-path function 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-path function 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-path function 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 rmfile function removes one or several files specified
as the arguments. If one file fails to be removed, an
exception is raised.
mkdir ->
none (String+)
The mkdir function creates one or several directories
specified as the arguments. If one directory fails to be
created, an exception is raised.
mhdir ->
none (String+)
The mhdir function 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 rmdir function 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-name function 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-path function 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-extension function returns the extension from a
path.
remove-extension
-> String (String)
The remove-extension function returns the extension from a
path. In order to get a base file name from a path, the
get-base-name function must be called first.
Directory
The Directory class 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 Directory constructor creates a directory object those
location is the current directory. If the directory cannot
be opened, an exception is raised.
Directory
(String)
The Directory constructor 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 mkdir method 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 rmdir method 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 rmfile method 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-name method returns the directory name. If the
default directory was created, the method returns the full
directory path.
get-list
-> List (none)
The get-list method 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-files method 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-subdirs method 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-name method 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-path method 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-name method 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-path method 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-name method 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-path method 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 Logtee class 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 Logtee constructor creates a default logger without an
output stream
Logtee
(Integer)
The Logtee constructor creates a logger object with a
specific size without an output stream.
Logtee
(Output)
The Logtee constructor creates a logger object with an
output stream.
Logtee
(Integer Output)
The Logtee constructor 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 Logtee constructor 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-stream method attaches the output stream to
the logtee object.
get-output-stream
-> Output (none)
The get-output-stream method returns the logtee output
stream.
set-tee
-> none (Boolean)
The set-tee method sets the logtee control flag. The control
flag controls the message display to the output stream.
get-tee
-> Boolean (none)
The get-tee method returns the logtee output stream.
NamedFifo
The NameFifo class 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 NamedFifo constructor creates a default named fifo
without a backing name. In this case the fifo cannot be read
or written by stream.
NamedFifo
(String)
The NamedFifo constructor creates a named fifo by name. The
name is used as a file name for reading or writing the
fifo.
NamedFifo
(String Boolean)
The NamedFifo constructor 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 read method reads the fifo file name and fill the
fifo.
write ->
none (none)
The write method writes the fifo contents to the fifo file
name.
set-name
-> none (String)
The set-name method sets the fifo file name.
FileInfo
The FileInfo is 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 update
method.
Predicate
file-info-p
Inheritance
Nameable
Constructors
(String)
The FileInfo constructor creates a file information by name.
The string argument is the file name to query.
Methods
length ->
Integer (none)
The length method returns the file size information.
get-modification-time
-> Integer (none)
The get-modification-time method returns the file
modification time. The time can be used as an argument to
the Time or Date object.
update ->
none (none)
The update method the file information data.