Unit utils
This unit contains a "grab bag" of procedures without a good home, and which
don't have to be available by default (as compared to the [[Unit
extras|extras]] unit).
This unit uses the extras and srfi-13 units.
Executing shell commands with formatstring and error checking
system*
[procedure] (system* FORMATSTRING ARGUMENT1 ...)
Similar to (system (sprintf FORMATSTRING ARGUMENT1 ...)),
but signals an error if the invoked program should return a nonzero
exit status.
Iterating over input lines and files
for-each-line
[procedure] (for-each-line PROCEDURE [PORT])
Calls PROCEDURE for each line read from PORT (which defaults to the
value of (current-input-port). The argument passed to PROCEDURE
is a string with the contents of the line, excluding any line-terminators.
When all input has been read from the port, for-each-line returns some unspecified value.
for-each-argv-line
[procedure] (for-each-argv-line PROCEDURE)
Opens each file listed on the command line in order, passing one line
at a time into PROCEDURE. The filename - is interpreted as
(current-input-port). If no arguments are given on the command line
it again uses the value of (current-input-port). During execution of
PROCEDURE, the current input port will be correctly bound to
the current input source.
This code will act as a simple Unix cat(1) command:
(for-each-argv-line print)
Reading a file's contents
read-all
[procedure] (read-all [FILE-OR-PORT])
If FILE-OR-PORT is a string, then this procedure returns the contents of the file
as a string. If FILE-OR-PORT is a port, all remaining input is read and returned as
a string. The port is not closed. If no argument is provided, input will be read from the
port that is the current value of (current-input-port).
Shell argument quoting
qs
[procedure] (qs STRING [PLATFORM])
Escapes STRING suitably for passing to a shell command on PLATFORM.
PLATFORM defaults to the value of (build-platform) and indicates in
which style the argument should be quoted. On Windows systems, the string
is simply enclosed in double-quote (") characters, on UNIXish systems,
characters that would have a special meaning to the shell are escaped
using backslash (\).
Dynamic compilation
compile-file
[procedure] (compile-file FILENAME #!key options output-file load)
Compiles the Scheme source file FILENAME into a dynamically
loadable library by invoking the csc compiler driver. If the
library can be successfully created and load is not given or
true, the file is loaded into the current
Scheme process. options may be a list of strings which are passed
as additional command line options to csc. If output-file is
not given, then the compiled file is stored in a temporary location
and will be deleted when the process exits successfully.
When compilation and loading succeeds, the name of the compiled file
is returned.
Notes:
- loading the same compiled file multiple times is only supported on Linux
in the moment and should be considered unreliable. For this reason, a new temporary
file is created for every invocation of compile-file, unless an explicit
output file name is given.
- this procedure is compatible to the scheme-compile-file command in emacs' scheme-mode.
compile-file-options
[parameter] compile-file-options
A parameter that holds a list of default options that should be given
to csc after invocation of the compile-file procedure.
The initial default options are -scrutinize -O2 -d2.
Shell argument quoting
qs
[procedure] (qs STRING [PLATFORM])
Escapes STRING suitably for passing to a shell command on PLATFORM.
PLATFORM defaults to the value of (build-platform) and indicates in
which style the argument should be quoted. On Windows systems, the string
is simply enclosed in double-quote (") characters, on UNIXish systems,
characters that would have a special meaning to the shell are escaped
using backslash (\).
Previous: Unit posix
Next: Unit tcp