SLSH(1) SLSH(1)
NAME
slsh - Interpreter for S-Lang scripts
SYNOPSIS
slsh [
--help ] [
--version ] [
-g ] [
-n ] [
--init file ] [
--no- readline ] [
-e string ] [
-i ] [
-q, --quiet ] [
-t ] [
-v ] [
-|script-file args... ]
DESCRIPTION
slsh is a simple program for interpreting S-Lang scripts. It
supports dynamic loading of S-Lang modules and includes a readline
interface for interactive use.
OPTIONS
--help Show a summary of options
--version Show
slsh version information
-g Compile with debugging code, tracebacks, etc
-n Don't load the personal initialization file
--init file Use this file instead of ~/.slshrc
--no-readline Do not use a readline interface for the interactive mode
-e string Execute ``string'' as S-Lang code.
-i Force interactive mode. Normally
slsh will go into
interactive mode if both stdin and stdout are attached to a
terminal.
-q, --quiet Startup quietly by not printing the version and copyright
information.
-t Normally,
slsh will call slsh_main if it is defined. This
option prevents that from happening making it useful for
checking for syntax error.
-v Show verbose loading messages. This is useful for seeing what
files are being loaded.
INITIALIZATION
Upon startup, the program will try to load
slsh.rc as follows. If
either SLSH_CONF_DIR or SLSH_LIB_DIR environment variables exist,
then
slsh will look look in the corresponding directories for
slsh.rc. Otherwise it will look in:
$(prefix)/etc/ (as specified in the Makefile)
/usr/local/etc/ /usr/local/etc/slsh/ /etc/ /etc/slsh/ The
slsh.rc file may load other files from slsh's library directory
in the manner described below.
Once
slsh.rc has been loaded,
slsh will load $HOME/.slshrc if
present. Finally, it will load the script specified on the command
line. If the name of the script is -, then it will be read from
stdin. If the script name is not present, or a string to execute was
not specified using the -e option, then
slsh will go into interactive
mode and read input from the terminal. If the script is present and
defines a function called slsh_main, that function will be called.
LOADING FILES
When a script loads a file via the built-in evalfile function or the
require function (autoloaded by slsh.rc), the file is searched for
along the SLSH_PATH as specified in the Makefile. An alternate path
may be specified by the SLSH_PATH environment variable.
The search path may be queried and set during run time via the
get_slang_load_path and set_slang_load_path functions, e.g.,
set_slang_load_path ("/home/bill/lib/slsh:/usr/share/slsh");
INTERACTIVE MODE
When
slsh is invoked without a script or is given the
-i command line
argument, it will go into into interactive mode. In this mode, the
user will be prompted for input. The program will leave this mode
and exit if it sees an EOF (Ctrl-D) or the user exits by issuing the
quit command.
If an uncaught exception occurs during execution of a command, the
error message will be shown and the user will be prompted for more
input.
Any objects left on the stack after a command will be printed and the
stack cleared. This makes interactive mode useful as a calculator,
e.g.,
slsh> 3*10;
30
slsh> x = [1:20];
slsh> sum (sin(x)-cos(x));
0.458613
slsh> quit;
Note that in this mode, variables are automatically declared.
The interactive mode also supports command logging. Logging is
enabled by the start_log function. The stop_log function will turn
off logging. The default file where logging information will be
written is
slsh.log. An alternative may be specified as an optional
argument to the start_log function:
slsh> start_log;
Logging input to slsh.log
.
.
slsh> stop_log;
slsh> start_log("foo.log");
Logging input to foo.log
.
.
slsh> stop_log;
slsh> start_log;
Logging input to foo.log
Similarly, the save_input function may be used to save the previous
input to a specified file:
slsh> save_input;
Input saved to slsh.log
slsh> save_input ("foo.log");
Input saved to foo.log
As the above examples indicate, lines must end in a semicolon. This
is a basic feature of the language and permits commands to span
multiple lines, e.g.,
slsh> x = [
1,2,3,
4,5,6];
slsh> sum(x);
For convenience some users prefer that commands be automatically
terminated with a semicolon. To have a semicolon silently appended
to the end of an input line, put the following in
$HOME/.slshrc file:
#ifdef __INTERACTIVE__
slsh_append_semicolon (1);
#endif
The interactive mode also supports shell escapes. To pass a command
to the shell, prefix it with !, e.g.,
slsh> !pwd
/grandpa/d1/src/slang2/slsh
slsh> !cd doc/tm
slsh> !pwd
/grandpa/d1/src/slang2/slsh/doc/tm
Finally, the interactive mode supports a help and apropos function:
slsh> apropos list
apropos list ==>
List_Type
list_append
list_delete
.
.
slsh> help list_append
list_append
SYNOPSIS
Append an object to a list
USAGE
list_append (List_Type, object, Int_Type nth)
.
.
For convenience, the help and apropos functions do not require the
syntactic constraints of the other functions.
READLINE HISTORY MECHANISM
By default,
slsh is built to use the S-Lang readline interface, which
includes a customizable command completion and a history mechanism.
When
slsh (or any S-Lang application that makes use of this feature)
starts in interactive mode, it will look for a file in the user's
home directory called
.slrlinerc and load it if present. This file
allows the user to customize the readline interface and enable the
history to be saved between sessions. As an example, here is a
version of the author's
.slrlinerc file:
% Load some basic functions that implement the history mechanism
() = evalfile ("rline/slrline.rc");
% The name of the history file -- expands to .slsh_hist for slsh
RLine_History_File = "$HOME/.${name}_hist";
% Some addition keybindings. Some of these functions are defined
% in rline/editfuns.sl, loaded by rline/slrline.rc
rline_unsetkey ("^K");
rline_setkey ("bol", "^B");
rline_setkey ("eol", "^E");
rline_setkey (&rline_kill_eol, "^L");
rline_setkey (&rline_set_mark, "^K^B");
rline_setkey (&rline_copy_region, "^Kk");
rline_setkey (&rline_kill_region, "^K^V");
rline_setkey (&rline_yank, "^K^P");
rline_setkey ("redraw", "^R");
#ifexists rline_up_hist_search
% Map the up/down arrow to the history search mechanism
rline_setkey (&rline_up_hist_search, "\e[A");
rline_setkey (&rline_down_hist_search, "\e[B");
#endif
#ifexists rline_edit_history
rline_setkey (&rline_edit_history, "^Kj");
#endif
% Add a new function
private define double_line ()
{
variable p = rline_get_point ();
variable line = rline_get_line ();
rline_eol ();
variable pend = rline_get_point ();
rline_ins (line);
rline_set_point (pend + p);
}
rline_setkey (&double_line, "^K^L");
MISCELLANEOUS SCRIPTS
Several useful example scripts are located in
$prefix/share/slsh/scripts/, where $prefix represents the
slsh installation prefix (
/usr,
/usr/local,...). These scripts include:
sldb A script that runs the S-Lang debugger.
jpegsize Reports the size of a jpeg file.
svnsh A shell for browsing an SVN repository.
AUTHOR
The principal author of
slsh is John E. Davis <www.jedsoft.org>. The
interactive mode was provided by Mike Noble. The S-Lang library upon
which
slsh is based is primarily the work of John E. Davis with help
from many others.
This manual page was originally written by Rafael Laboissiere for the
Debian system (but may be used by others).
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU General Public License, Version 2 any
later version published by the Free Software Foundation.
On Debian systems, the complete text of the GNU General Public
License can be found in
/usr/share/common-licenses/GPL 19 February 2021 SLSH(1)