NAME
s9e - Extended Scheme Interpreter
USAGE
s9e [-h?] [-gnqv] [-m size[m]] [-f program] [-d image] [-i] [-- argument ...]
DESCRIPTION
Scheme 9 from Empty Space is an interpreter for a broad subset of R4RS Scheme. The s9e command starts the extended interpreter. The extended interpreter defines some functions that are not defined in the Scheme Reports, but may prove useful in ``real-world'' programming.
EXTENDED PRIMITIVE FUNCTIONS
Do not use these primitives directly. Use the user-level procedures outlined in the next section instead.
Procedures typically indicate failure by returning #f. Procedures that would not otherwise return a more meaningful value return #t in case of success. When a procedure fails, the resulting Unix error number can be retrieved by calling unix:errno (or errno).
(unix:chdir string) ==> boolean Change the current working directory to string.
(unix:chmod string integer) ==> boolean Change the access bits of the file string to the mode integer.
(unix:chown string integer1 integer2) ==> boolean Change the ownership for the file string to user ID integer1 and the group ID integer2.
(unix:command-line) ==> list of string Return the command line arguments passed to s9e after the "--" argument.
(unix:errno) ==> integer Return the Unix error code set by the most recently failed call to a unix extension procedure.
(unix:exit integer) ==> undefined Terminate the s9e process and return integer as an exit code to the calling process.
(unix:flush output-port) ==> boolean Flush the given output port.
(unix:getcwd) ==> string Return the current working directory.
(unix:getenv string) ==> string Return the value of the environment variable string. If the variable is undefined, return #f.
(unix:getgid) ==> integer Return the group ID of the s9e process.
(unix:getgrnam string) ==> alist Return the group record for the group name string. The returned association list has the following members:
((name . string) ; group name(gid . integer)) ; group ID
(unix:getgrgid integer) ==> alist Return the group record for the group ID integer. See unix:getgrnam for the structure of the return value.
(unix:getpwent) ==> list Return a list of all users of the system.
(unix:getpwnam string) ==> alist Return the password record for the user name string. The returned association list has the following members:
((name . string) ; user name(uid . integer) ; user ID(gid . integer) ; group ID(gecos . string) ; real name(home . string) ; home directory(shell . string)) ; default shell
(unix:getpwuid integer) ==> alist Return the password record for the user ID integer. See unix:getpwnam for the structure of the return value.
(unix:getuid) ==> integer Return the user ID of the s9e process.
(unix:link string1 string2) ==> boolean Create a (hard) link string2 that refers to the same file as string1.
(unix:lock string) ==> boolean Create a lock file named ``string.lock''. If the file already exists when the function is called, return #f, else return #t. Unix:lock uses mkdir() to create the lock file, which is atomic on virtually all systems.
(unix:mkdir string integer) ==> boolean Create directory string with mode integer.
(unix:readdir string) ==> string Return a list of all file names contained in the directory string. When the given directory does not exist, return #f.
(unix:readlink string) ==> string Return the destination of the symbolic link string.
(unix:rmdir string) ==> boolean Remove directory string.
(unix:spawn string) ==> (input-port output-port) Spawn an inferior process running the command string. Return a list of two file descriptors where the first one can be used to read the output of the command and the second one to send input to the command. The command will be executed using
execl("/bin/sh", "/bin/sh", "-c", string, NULL);
(unix:stat string) ==> alist Return the file status of the file string. The returned association list has the following members:
((name . string) ; file name (size . integer) ; size in bytes (uid . integer) ; UID of owner (gid . integer) ; GID of owner (mode . integer) ; access bits (ctime . integer) ; inode change time (atime . integer) ; access time (mtime . integer) ; modification time (dev . integer) ; device ID of containing device (ino . integer) ; inode number (nlink . integer)) ; number of (hard) links
(unix:symlink string1 string2) ==> boolean Create a symbolic link string2 that points to the path string1.
(unix:system string) ==> boolean Run the command string and return its exit status (#t for success and #f for failure).
(unix:time) ==> integer Returns the number of seconds since the Unix epoch.
(unix:unlink string) ==> boolean Remove the file name string.
(unix:unlock string) ==> unspecific Remove the file ``string.lock''. If the files does not exist, do nothing.
(unix:utimes string) ==> boolean Set the access and modification time of the file string to the current time.
USER-LEVEL FUNCTIONS
Use these instead of the above primitives.
(chdir string) ==> boolean See unix:chdir.
(chmod string1 integer|string2) ==> boolean Change the mode of the file string1 to integer or string2. When an integer mode is specified, use its numeric value. A string mode must either represent an octal mode or have the format
user+bits or user-bits
where user is any combination of the letters ugo (denoting user, group, and others), and bits is any combinations of the letters rwx (denoting read, write, and execute permission, respectively). The letter a may be used to abbreviate ugo. For example,
(chmod "a+rw" "file")
will add read and write permission to file. Using a minus sign instead of a plus sign will remove the given permissions.
(chown string integer1|string1|#f integer2|string2|#f)
==> boolean Change the owning user of the file string to string1 or integer1 and the owning group of the file to string2 or integer2. Numeric values will be interpreted as user IDs and strings will be interpreted as user names. Replacing either the user or the group part with #f will leave that part unchanged. For instance,
(chown #f "wheel" "file")
will change the group of file to wheel, but leave its user unchanged.
(command-line) ==> list of string See unix:command-line.
(errno) ==> integer See unix:errno.
(exit integer) ==> See unix:exit. However, the argument of exit is optional and a return value of 0 is the default.
(flush output-port) ==> boolean See unix:flush.
(format-time string time-list) ==> string | #f Format a time specification as returned by unix-time->time according to the description in string. This a poor man's Common LISP format-style procedure intended for making time lists more readable. It returns #f if time-list is not a proper time list or string is erroneous (i.e.: contains a wrong format descriptor).
The following format descriptors are supported:
~w day of week (Mon, Tue, ...) ~y year ~:m number of month ~@m month name (Jan, Feb, ...) ~h hour ~m minute ~s second ~~ literal ~
When a single digit appears between a ~ and the rest of a format descriptor, this digit will be interpreted as a length and the resulting string will be padded to this length with zeros.
Example:
(format-time "~w ~4y-~@m-~2d ~2h:~2m:~2s"
'(1 2009 3 9 8 53 20))
==> "Tue 2009-Apr-09 08:53:20"
(getcwd) ==> string See unix:getcwd.
(getenv string) ==> string See unix:getenv.
(getgid) ==> integer See unix:getgid.
(getgrnam string) ==> alist See unix:getgrnam.
(getgrgid integer) ==> alist See unix:getgrgid.
(getpwent) ==> list See unix:getpwent.
(getpwnam string) ==> alist See unix:getpwnam.
(getpwuid integer) ==> alist See unix:getpwuid.
(getuid) ==> integer See unix:getuid.
(group-name string|integer) ==> string Return the group name for the group string or the group ID integer. (Yes, getting a group name for a group name is an identity operation.)
(group-gid string|integer) ==> string Return the group ID for the group string or the group ID integer. (Yes, getting a group ID for a group ID is an identity operation.)
(link string1 string2) ==> boolean See unix:link.
(lock string) ==> boolean See unix:lock.
(mkdir string integer) ==> boolean See unix:mkdir.
(readdir string) ==> list See unix:readdir.
(readlink string) ==> string See unix:readlink.
(rmdir string) ==> boolean See unix:rmdir.
(spawn string) ==> (input-port output-port) See unix:spawn.
(stat string) ==> alist See unix:stat.
(stat-name string) ==> string Return the file name of the file string.
(stat-size string) ==> integer Return the size of the file string.
(stat-uid string) ==> integer Return the UID of the owner of the file string.
(stat-gid string) ==> integer Return the GID of the owning group of the file string.
(stat-mode string) ==> integer Return the permission bits of the file string.
(stat-ctime string) ==> integer Return the inode change time of the file string.
(stat-atime string) ==> integer Return the access time of the file string.
(stat-mtime string) ==> integer Return the modification time of the file string.
(stat-dev string) ==> integer Return the device ID of the device on which the file string resides.
(stat-ino string) ==> integer Return the inode number of the file string.
(stat-nlink string) ==> integer Return the link count of the file string.
(symlink string1 string2) ==> boolean See unix:symlink.
(system string) ==> boolean See unix:system.
(time) ==> integer See unix:time.
(time->unix-time time-list) ==> integer | #f Convert a time list as described in unix-time->time to the number of seconds since the Unix epoch. Return #f if time-list is not a proper time list.
(unix-time->time integer) ==> time-list Convert the number of seconds since the Unix epoch given as the integer argument to a more useful representation:
(weekday ; 0..6 where 0 = Monday year ; 1970..2038 month ; 1..12 day ; 1..31, depends on month hour ; 0..23 minute ; 0..60 second) ; 0..60
(unlink string) ==> boolean See unix:unlink.
(unlock string) ==> unspecific See unix:unlock.
(user-name integer|string) ==> string Return the user name for the user string or the user ID integer. (Yes, getting a user name for a user name is an identity operation.)
(user-uid integer|string) ==> integer Return the user ID for the user string or the user ID integer. (Yes, getting a user ID for a user ID is an identity operation.)
(user-gid integer|string) ==> integer Return the group ID for the user string or the user ID integer.
(user-gecos integer|string) ==> string Return the GECOS information (full name) for the user string or the user ID integer.
(user-home integer|string) ==> string Return the home directory for the user string or the user ID integer.
(user-shell integer|string) ==> string Return the login shell for the user string or the user ID integer.
(utimes string) ==> boolean See unix:utimes.
SEE ALSO
AUTHOR
Nils M Holm <[email protected]>