home | help
SNOBOL4(1)			 CSNOBOL4 Manual		      SNOBOL4(1)

NAME
     snobol4 - SNOBOL4 interpreter

DESCRIPTION
     This  manual page describes CSNOBOL4, a port of the original Bell Telephone
     Labs (BTL) Macro Implementation of SNOBOL4 to the C language.

     The language and its implementation are  described  in  [Griswold1971]  and
     [Griswold1972].

     For command line options see snobol4cmd(1).

     Extensions  from  Catspaw SNOBOL4+, SPITBOL and SITBOL have been added, see
     snobol4ext(1).

     Includes BLOCKS (SNOBOL4B) extensions, see snobol4blocks(1).

   Changes
     The following behaviors have been changed from the original  Macro  SNOBOL4
     in ways that might effect old programs:

     INTEGER errors
	 INTEGER overflow does not cause expression failure.

     Listings are disabled by default
	 Default  listing side (when enabled by -LIST or the -l command line op-
	 tion is LEFT.	Listings are directed to standard error (or file  speci-
	 fied by the -l command line option.

     Messages
	 The  the  startup  banner  and  statistics (if enabled) are directed to
	 standard error.

	 Compilation error messages (including erroneous lines) appear on  stan-
	 dard error. Error messages reference the source file name and line num-
	 ber.

     Character set
	 see below.

     INPUT() and OUTPUT()
	 FORTRAN  formats  are not used to control I/O.  The 3rd argument to the
	 OUTPUT() and INPUT() functions is interpreted as a string  of	I/O  op-
	 tions,   The  4th  argument  is  used	to  specify  a	file  name,  see
	 snobol4io(1) for details.

     PUNCH variable
	 The PUNCH output variable no longer exists, the TERMINAL  variable  has
	 been added in it's place, see snobol4io(1).

     Statement separator
	 Control  lines and comment characters are valid after the (;) statement
	 separator.  Listing statement numbers show the statement number of  the
	 LAST statement on the line (rather than the first).

     &STLIMIT
	 &STLIMIT defaults to -1, see snobol4key(1).

     Tracing
	 VALUE	tracing applies to variables modified by immediate value assign-
	 ment ($ operator) and value  assignment  (.  operator)  during  pattern
	 matching.

   Extensions
     Further additions are documented in snobol4ext(1).

   Character set
     snobol4(1)  is  8-bit  clean, and uses the native character set.  Any 8-bit
     byte is accepted as a SNOBOL datum or in a  string  constant  of  a  SNOBOL
     source  program.	The value of the SNOBOL protected keyword &ALPHABET is a
     256-character string of all bytes from 0 to 255, in ascending order.

     On ASCII-based systems, any character with the 8th bit set  is  treated  as
     "alphabetic",  and  can  start, or be used in identifiers and labels.  This
     includes characters from the "upper half" of national  character  sets  and
     all bytes resulting from the UTF-8 encoding of Unicode characters.  Include
     file utf.sno implements pattern matching functions for UTF-8 sequences.

     Programs  may  be	entered in mixed case; By default lower case identifiers
     are folded to upper case (see &CASE and -CASE).  Case folding is  performed
     by  using	the C library islower(3) test, and then using toupper(3) to con-
     vert the lower-case characters to upper case.   When  using  UTF-8  encoded
     characters  in  code, case folding should be disabled, to prevent any bytes
     which appear to be lower case in the current locale from being modified.

     The following operator character sequences are permitted  and  represent  a
     cross between PDP-10 Macro SNOBOL, SITBOL and Catspaw SPITBOL usage:

     Assignment:	 =  _
     Comment line:	 *  #  |  ;  !
     Continuation line:  +  .

     Both  square brackets ([]) and angle brackets (<>) may be used to subscript
     arrays and tables.  The TAB (ASCII 9) character is accepted as whitespace.

     Underscore (_) and period (.) are legal within identifiers and labels.

     Note that the use of the pound sign for comments allows use of  the  script
     interpreter (hash-bang) sequence at the top of a file marked as executable:
     "#!/usr/local/bin/snobol4" or "#!/usr/bin/env snobol4"

     See snobol4op(1) for operators.

DIRECTORY SEARCH LIST
     A	directory search list is used for files specified in -INCLUDE directives
     and LOAD() function calls, and is constructed from:

     1. The current working directory (".").

     2. Any directories specified on the command line using -I options,  in  the
     order specified.

     3a.  Directories  from the the SNOPATH environment variable (see below), if
     defined.

     3b. If SNOPATH is not defined, the SNOLIB environment variable (or  a  com-
     piled in default) is used as base to add the following directories:

     *	    base/version/lib

     *	    base/version/local

     *	    base/local

     The  LOAD() function will also check for the file in shared subdirectory in
     each directory in the search path.

ENVIRONMENT
     SNOBOL4UNBUFFERED
	 If set to a non-null value, all stdio output will  be	unbuffered,  and
	 will be written immediately.

     SNOPATH
	 Is  a	list  of directories delimited by colons (semi-colons on VMS and
	 Windows) appended to the Directory Search List (see above).

     SNOLIB
	 SNOLIB is used to establish the base libary path if SNOPATH is not  de-
	 fined.   See  Directory  Search List above.  SNOLIB was the sole search
	 directory in versions of CSNOBOL4 prior to version 1.5.

     SNOBOL_PRELOAD_PATH
	 Is a list of source files delimited by colons (semi-colons on	VMS  and
	 Windows)   that   will  be  read  before  the	program  source.   Using
	 SNOBOL_PRELOAD_PATH will make your code less portable.

SEE ALSO
     sdb(1)		 SNOBOL4 Debugger
     snobol4cmd(1)	 command line options
     snobol4ctrl(1)	 control lines
     snobol4error(1)	 &ERRTYPE and &ERRTEXT values
     snobol4ext(1)	 extensions to BTL SNOBOL4
     snobol4func(1)	 built-in function list
     snobol4io(1)	 input/output
     snobol4key(1)	 keywords
     snobol4op(1)	 operators
     snobol4blocks(1)	 SNOBOL4B BLOCKS extension
     snopea(1)		 convert snopea documentation to roff and HTML
     snobol4dirs(3)	 directory access functions
     snobol4ezio(3)	 easy to use file I/O
     snobol4ffi(3)	 Foreign Function Interface functions
     snobol4fork(3)	 subprocess interface functions
     snobol4host(3)	 HOST and O/S functions
     snobol4logic(3)	 bit logic & formatting functions
     snobol4load(3)	 loading extension modules into SNOBOL4
     snobol4ndbm(3)	 keyed file access functions
     snobol4random(3)	 pseudo-random numbers functions
     snobol4readline(3)  input with line editing
     snobol4setup(3)	 loadable module builder
     snobol4sprintf(3)	 formatting function
     snobol4sqlite3(3)	 SQLite database interface functions
     snobol4sqlite3dbm(3)DBM interface using SQLite
     snobol4stat(3)	 file metadata functions
     snobol4stcl(3)	 Tcl/Tk interface functions
     snobol4time(3)	 date/time functions
     snolib(3)		 misc library functions
     snopea(7)		 A little "Plain Old Documentation" format for SNOBOL4

     http://www.regressive.org/snobol4
	 All things SNOBOL4 related.

     http://www.snobol4.com
	 Catspaw: commercial SPITBOL implementations, Free SNOBOL4+ for DOS.

     http://www.regressive.org/snobol4/doc/burks/tutorial/contents.htm
	 SNOBOL4 language tutorial (from Catspaw Vanilla SNOBOL4)

     [Griswold1971]
	 R. E. Griswold, J. F. Poage, and I. P. Polonsky, The  SNOBOL4	Program-
	 ming  Language,  2nd  ed.,  Prentice-Hall  Inc., 1971.  (aka the "green
	 book") http://www.regressive.org/snobol4/docs/books.html#green

     [Griswold1972]
	 R. E. Griswold, The Macro Implementation of SNOBOL4, W. H. Freeman  and
	 Co., 1972.  Book describing the implementation techniques used in Macro
	 SNOBOL4.  http://www.regressive.org/snobol4/docs/books.html#macro

     http://www.regressive.org/snobol4/doc/burks/manual/contents.htm
	 Catspaw Vanilla SNOBOL4 manual.

     ftp://ftp.snobol4.com/spitman.pdf
	 Catspaw Macro SPITBOL manual

     http://www.regressive.org/snobol4/docs/books.html#orange
	 Algorithms in SNOBOL4, James F. Gimpel, Wiley, New York, 1976.

AUTHORS
     Ralph E. Griswold, James F. Poage, Ivan P. Polonsky, et al (Macro SNOBOL4)

     Philip. L. Budne (CSNOBOL4)

     Mark Emmer (code from SNOBOL4+)

     Viktors Berstis (code from Minnesota SNOBOL4)

     James F. Gimpel (SNOBOL4B)

BUGS
     I/O is still tied to unit numbers.

     I/O retains some record oriented flavor (maximum line length on input).

     "Dynamic" storage cannot be expanded after startup.

     Integer math can never fail, even on overflow.

     Oversize integer constants may not be detected.

CSNOBOL4B 2.3.1 		 March 31, 2022 		      SNOBOL4(1)

home | help