SNOBOL4FUNC(1) | CSNOBOL4B 2.3.2 | Janurary 1, 2024

NAME

snobol4func – SNOBOL4 summary of built-in functions

DESCRIPTION

ANY(charset)
Pattern: returns a pattern that matches one character in the STRING charset. Standard.

APPLY(func,arg1,...)
Function: calls function func with the supplied arguments. Standard.

ARBNO(pattern)
Pattern: returns a pattern that matches zero or more repeats of pattern. Standard.

ARG(func,n)
Function: returns the name of the nth argument to function func. Standard.

ARRAY(proto,value)
Data: Creates an ARRAY object. Standard.

ATAN(arg)
Math: Returns the principal value of the arc tangent of its argument. Catspaw Macro SPITBOL extension, added in CSNOBOL4 1.4.

BACKSPACE(unit)
I/O: Not implemented!! See SET() and SSET(). Standard.

BREAK(charset)
Pattern: Returns a pattern that matches successively longer runs (zero or more) characters NOT in string charset. Standard.

BREAKX(charset)
Pattern: A pattern function used for fast scanning. BREAKX(str) is equivalent to BREAK(str) ARBNO(LEN(1) BREAK(str)).

In other words BREAKX matches a sequence of ever larger strings terminated by a break set. BREAKX can be used as a faster matching replacement for ARB: BREAKX('S') 'STRING' always runs faster than ARB 'STRING' since it only attempts matching 'STRING' at locations where an 'S' has been detected. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.

CHAR(n)
String: takes an integer from 0 to 255 and returns the nth character in &ALPHABET. SPITBOL 360 extension, added in CSNOBOL4 version 0.98. SNOBOL4+ has a CHR() function.

CHOP(real)
Math: truncates the fractional part of its argument (rounding towards zero), and returns a REAL value. Catspaw SNOBOL4+ extension(?), added in CSNOBOL4 version 0.98.4.

CLEAR()
Interpreter: Clears ALL natural variable values (including predefined pattern variables ABORT, ARB, BAL, FENCE, REM, and SUCCEED). Standard.

CODE(str)
Interpreter: Compiles the argument as source code and returns a CODE value, suitable for use with :<code>. If execution falls off the end of the code, the program will exit. Standard.

COLLECT(n)
Interpreter: Triggers garbage collection. Returns failure if less than n bytes are available after collection. Standard.

CONVERT(value,type)
Data: Convert value to data type type. Can convert TABLE to ARRAY for iteration over members. Standard. Supports conversion to NUMERIC, SPITBOL 360 extension, added in CSNOBOL4 version 0.99.4.

COPY(value)
Data: returns a copy of the supplied value. Must be an ARRAY or a DATA object. Copy is `shallow”: the returned object will point to the same objects as the source container. Standard.

COS(argument)
Math: Return cosine of argument in radians. Catspaw Macro SPITBOL extension, added in CSNOBOL4 version 0.98.4.

DATA(prototype)
Data: Declares a DATA struct type. prototype is of the form name(field,...). name is declared as a “constructor” function, and each field is declared as an “accessor” function for the type. Any number of types can use the same field names (regardless of position). Standard.

DATATYPE(value)
Data: Returns a string with the data type of value, one of: ARRAY, BLOCK, CODE, EXPRESSION, EXTERNAL, INTEGER, NAME, PATTERN, REAL, STRING, TABLE, or a DATA() type name. Standard.

DATE()
String: returns MM/DD/YYYY HH:MM:SS. Standard. For compatibility with Catspaw Macro SPITBOL, since CSNOBOL4 version 0.99.4 DATE(0) returns strings of the form MM/DD/YY HH:MM:SS, and DATE(2) returns strings of the form YYYY-MM-YY HH:MM:SS.

DEFINE(prototype[,label])
Functions: declares a function using prototype of the form “name([argname,...])[localname,...]”. Optional label supplies the function entry point. Standard.

DELETE(filename)
I/O: A predicate which tries to remove the named file, and fails if it cannot. SITBOL extension: added in CSNOBOL4 version 0.98.5.

DETACH(name)
I/O: Detach any I/O associations for named variable. Standard.

DIFFER(val1,val2)
Predicate: Succeeds if the supplied values refer to different objects, strings, or numeric values. Standard.

DUMP(n)
Data: dumps natural variable values to stdout if argument n is non-zero. Standard.

DUPL(string,n)
String: Returns a string with n copies of argument string. Standard.

ENDFILE(unit)
I/O: Closes the file attached to I/O unit unit. Standard.

EQ(i1,i2)
Predicate: Succeeds if i1 is arithmetically equal to i2. Standard.

EVAL(v)
Interpreter: Evaluates v (an unevaluated expression, INTEGER, REAL, or STRING), and returns the result; returns failure on syntax error or the expression fails. Standard.

EXIT(arg)
System: Passes process control to a shell to execute arg as a command. Returns failure if arg is not a STRING. Macro SPITBOL extension(?), added in CSNOBOL. Does NOT implement “save file” feature of SPITBOL.

EXP(x)
Math: Returns the value e ** x. Catspaw SNOBOL4+ extension, added in CSNOBOL4 version 0.98.4.

EXTERNAL_DATATYPE(x)
Functions: Returns a string for the datatype name for an EXTERNAL type returned by an external function created by LOAD(). Inspired by the DATACODE() function in Fred Weigel's SNOBOL4X extensions. CSNOBOL4 extension, added in CSNOBOL4 version 2.2.

EXTERNAL_MODULE_NAME(x)
Functions: Returns a string for (internal) module name for an EXTERNAL type returned by an external function created by LOAD(). CSNOBOL4 extension, added in CSNOBOL4 version 2.2.

EXTERNAL_MODULE_PATH(x)
Functions: returns a string for the path to an object file for the module for an EXTERNAL type returned by an external function created by LOAD(). CSNOBOL4 extension, added in CSNOBOL4 version 2.2.

FIELD(name,n)
Data: Returns a string with the name of the nth member of DATA() type name. Standard.

FILE(string)
I/O: A predicate which tests if a file exists, and fails if it does not. SITBOL extension, added in CSNOBOL4 version 0.98.5.

FILE_ABSPATH(string)
I/O: A predicate which returns null if its argument is an absolute file path, and failure if the path is relative. CSNOBOL4 extension, added in CSNOBOL4 version 1.5.

FILE_ISDIR(string)
I/O: A predicate which returns the null string if its argument is the pathname of a directory, and returns failure if not. CSNOBOL4 extension, added in CSNOBOL4 version 1.5.

FREEZE(table)
Data: prohibits creation of new entries in the referenced table. This is useful once a table has been initialized to avoid creating empty entries on lookups that fail. This can greatly improve program speed, since frozen tables will not become clogged with empty entries. Lookups for uninitialized entries will return the null string. Attempts to assign to a non-existent entry will cause a “Variable not present where required” error. Catspaw SNOBOL4+ extension, added in CSNOBOL4 version 0.98.2.

FUNCTION(name)
Function: A predicate which evaluates its argument as a string (with case folding), and returns the null string if a function with that name exists and fails if it does not. SITBOL extension, added in CSNOBOL4 version 0.99.44.

GE(i1,i2)
Predicate: Succeeds if i1 is arithmetically equal than or equal to i2. Standard.

GT(i1,i2)
Predicate: Succeeds if i1 is arithmetically equal than i2. Standard.

HOST(i,...)
Host O/S functions. See snobol4host(3). Macro SPITBOL extension, added in CSNOBOL4 version 0.98.4.

IDENT(v1,v2)
Predicate: Succeeds if the supplied values refer to the same object, string, or numeric value. Standard.

INPUT(variable,unit,opt,name)
I/O: Associate variable for input, see snobol4io(1). Standard.*

INTEGER(value)
Predicate: Succeed if value is an INTEGER. Standard.

IO_FINDUNIT()
I/O: Returns an unused I/O unit number for use with the INPUT() or OUTPUT() functions. IO_FINDUNIT() is meant for use in subroutines which can be reused. IO_FINDUNIT() will never return a unit number below 20. CSNOBOL4 extension, added in version 0.99.4.

ITEM(a,i1,...)
Data: Reference an element of an ARRAY or TABLE which is the result of an expression (ie; $variable). Standard.

LABEL(name)
Predicate: Evaluates argument as a name (with case folding), and returns the null string if a label with that name has been defined, and fails if it does not. Steve Duff's Macro SPITBOL extension, added in CSNOBOL4 version 1.5 (Added in CSNOBOL4 version 0.99.44, but unreliable until version 1.5).

LABELCODE(name)
Interpreter: Evaluates argument as a name (with case folding), and returns the CODE (if any) associated with the label of that name, or fails. SITBOL extension, added in CSNOBOL4 2.1.

LE(i1,i2)
Predicate: tests if first argument is arithmetically less than or equal to second argument. Standard.

LEN(n)
Pattern: Returns a PATTERN which matches exactly n characters. Standard.

LEQ(s1,s2)
Predicate: tests if first argument is lexically equal to second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LGE(S1,S2)
Predicate: tests if first argument is lexically greater than or equal to second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LGT(s1,s2)
Predicate: tests if first argument is lexically greater than second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LLE(s1,s2)
Predicate: tests if first argument is lexically less than or equal to second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LLT(s1,s2)
Predicate: tests if first argument is lexically less than second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LNE(s1,s2)
Predicate: tests if first argument is lexically different from second argument. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

LN(value)
Math: an alias for LOG(), Catspaw SNOBOL4+ extension, added in CSNOBOL4 version 1.4.

LOAD(prototype,file)
Function: Load an external function from dynamically loaded library file. Standard.

LOCAL(name,n)
Interpreter: Returns a STRING with the nth argument to function named name. Standard.

LOG(value)
Math: returns the natural logarithm of its argument. Catspaw SNOBOL4+ extension, added in CSNOBOL4 version 0.98.4.

LPAD(str,n,char)
String: Takes the first argument (subject) string, and left pads it out to the length specified in the second argument, using the first character of the optional third argument. If the third argument is missing, or is the null string, spaces will be used for padding. The subject will be returned unmodified if already long enough. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.

LT(i1,i2)
Predicate: Succeeds if i1 is arithmetically less than i2. Standard.

NE(i1,i2)
Predicate: Succeeds if i1 is arithmetically not equal to i2. Standard.

NOTANY(charset)
Pattern: Returns a pattern which matches on character NOT present in STRING charset. Standard.

OPSYN(new,old,n)
Interpreter: If n omitted (or zero), new and old are treated as function names, and new becomes a synonym for old: A call to a synonym MUST have the correct number of arguments; trailing arguments can NOT be omitted. If n is 1, new and old are treated as unary operators, or function names. If n is 2, new and old are treated as binary operators, or function names. Standard.

ORD(string)
String: returns the INTEGER ordinal value (zero to 255) of the first character in its string argument (the inverse of CHAR()). CSNOBOL4 extension, added in version 0.99.44. SNOBOL4+ has an ASC() function.

OUTPUT(variable,unit,options,name)
I/O: Associate variable for output, see snobol4io(1). Standard*.

POS(n)
Pattern: Returns a pattern which succeeds if the pattern matching cursor is at (non-negative INTEGER) position n, or fails. Standard.

PROTOTYPE(a)
Data: Returns the prototype of ARRAY a. Standard.

REMDR(n,m)
Math: Returns the remainder from dividing INTEGER n with INTEGER m. Standard.

RENAME(new,old)
I/O: A predicate which attempts to rename the file named by old to the name new. SITBOL extension: added in CSNOBOL4 version 0.98.5. Unlike the SITBOL version, if the target file exists, it will be removed.

REPLACE(str,charset1,charset2)
String: Returns a string with each character str that appears in charset1 replaced by the corresponding character in . Standard.

REVERSE(str)
String: returns its subject string in reverse order. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

REWIND(unit)
I/O: Reset input pointer of file associated with unit to start of file. Standard.

RPAD(str,n,char)
String: Takes the first argument (subject) string, and right pads it out to the length specified in the second argument, using the first character of the optional third argument. If the third argument is missing, or is the null string, spaces will be used for padding. The subject will be returned unmodified if already long enough. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.

RPOS(n)
Pattern: Returns a pattern which succeeds if the pattern matching cursor is at (non-negative INTEGER) position n, counting from the end of the subject string, or fails. Standard.

RSORT(ta,c)
Data: see SORT(). Macro SPITBOL extension(?), added in CSNOBOL4 version 0.98.

RTAB(n)
Pattern: Returns a PATTERN which matches all characters up to (non-negative INTEGER) position n, counting from the end of the subject string; matching fails if cursor is past position n. REM is a synonym for RTAB(0). Standard.

SERV_LISTEN(family,type,service)
I/O: takes three STRING arguments and makes snobol4(1) into a network server process. family must be either "inet" for an Internet Protocol v4 socket, "inet6" for an Internet Protocol v6 socket, or "unix" for a local (“unix domain”) socket. The second argument, TYPE must be "stream", and the third argument, service must be a port number or service name (for an internet socket), or a pathname (for a "unix" socket). SERV_LISTEN() listens for incoming requests, accepts them, then “forks” a child process and returns an integer file descriptor which can be opened for bidirectional I/O using a "/dev/fd/n" magic pathname. The original (“parent”) process never returns from the SERV_LISTEN() call. This function is only available on systems with the “fork” system call, which makes a child process which is an identical copy of the parent process. CSNOBOL4 extension, added in version 0.99.44

SET(unit,offset,whence)
I/O: Seeks the file pointer of an open file. The first argument is an I/O unit number, the second is an integer offset. The third argument, an integer determines from “whence” the file pointer will be adjusted. If whence is zero the starting point is the beginning of the file, if whence is one, the starting point is the current file pointer, and if whence is two, the starting point is the end of the file. SET() returns the new file pointer value. On systems with 64-bit file pointers and 32-bit integers the values will be truncated to 32 bits, and only the first and last 4 gigabytes of a file can be accessed directly: see SSET(). Catspaw Macro SPITBOL extension, added in CSNOBOL4 version 0.99.1.

SETEXIT(label)
Interpreter: The argument to SETEXIT() is the name of a label to pass control to if a subsequent error occurs, when the keyword &ERRLIMIT is non-zero. The value of &ERRLIMIT is positive, it is decremented when the error trap occurs. A SETEXIT() call with a null argument causes cancellation of the intercept. Subsequent errors will terminate execution as usual with an error message. The result returned by SETEXIT() is the previous intercept setting (i.e., a label name or null if no intercept is set). This can be used to save and restore the SETEXIT() conditions in a recursive environment, or chain handlers.

The error intercept routine may inspect &ERRTYPE, &ERRTEXT, &LASTNO, &LASTFILE, &LASTLINE, and take one of the following actions:

1. Branching to the special label ABORT causes error processing to resume as though no error intercept had been set.

2. Branching to the special label CONTINUE causes program execution to resume by taking the failure exit of the statement in error.

3. Branching to the special label SCONTINUE causes execution to resume at the point of interruption.

4. If the error occurred inside a function (&FNCLEVEL is non-zero), branch to labels RETURN, FRETURN, or NRETURN to return from the function.

The error intercept routine must reissue the SETEXIT() in order to catch further errors. Handlers cannot be nested: only one copy of the saved execution state is kept.

SPITBOL 360 extension, added in CSNOBOL4 version 1.4.

SIN(argument)
Math: Return sine of argument in radians. Catspaw Macro SPITBOL extension, added in CSNOBOL4 version 0.98.4.

SIZE(string)
String: returns the length of the STRING argument. Standard.

SORT(ta,c)
Data: takes two arguments. The first can be either an array or a table. If the first argument is an array, it may be singly-dimensioned in which case the second argument, if non-null should indicate the name of a field of a programmer defined data type to use to access the sort key. Otherwise the first argument should be a table or a doubly-dimensioned array, in which case the second argument may an integer indicating the array column on which to sort. If the second argument is null, it is taken to be 1. The array (or table) is not modified; a new array is allocated and returned. SORT() sorts elements in ascending order, while RSORT() sorts in descending order.

Example: for a table TAB of integers, indexed by strings being used to tabulate word counts FREQ = RSORT(TAB,2) returns an array such that FREQ<1,1> contains the most frequent word while FREQ<1,2> contains the number of occurrences of that word. While WORDS = SORT(TAB,1) returns an array with the rows by the lexicographical ordering of the words; WORDS<1,1> contains the lexicographically first word and WORDS<1,2> contains the number of occurrences of that word. Macro SPITBOL extension(?), added in CSNOBOL4 version 0.98.

SPAN(charset)
Pattern: Returns a pattern that matches the longest run of one or more characters in string charset. Standard.

SQRT(argument)
Math: Return the square root. Fails if the argument is negative. Catspaw Macro SPITBOL extension, added in CSNOBOL4 version 0.90.

SSET(unit,offset,whence,scale)
I/O: “scaled set” function, to handle files larger than 4GB on systems with 32-bit INTEGER variables. The first three arguments analogous to the same arguments for the SET() function. The last parameter is used as a multiplicative scaling factor on the offset parameter, and as a divisor on the return value. When used in combination with relative SET() calls (whence of one), any file offset can be achieved, even when system file offsets are larger than can be represented in a SNOBOL4 INTEGER. Support for “Large Files” is enabled when available, but not all file systems support large files. CSNOBOL4 extension, added in version 0.99.44.

STOPTR(name,type)
Interpreter: Disable type tracing for name. Standard. SPITBOL 360 extension of first letter of trace type accepted since CSNOBOL4 2.0.

SUBSTR(subject,pos,len)
String: Takes a subject string as its first argument, and returns the substring starting at the position specified by the second argument (one-based) with a length specified by the third argument. If the third argument is missing or zero, the remainder of the string is returned. SPITBOL 360 extension, added in CSNOBOL4 version 0.98.2.

TAB(n)
Pattern: Returns a PATTERN which matches all characters up to (non-negative INTEGER) position n; matching fails if cursor is past position n. Standard.

TABLE(n,m)
Data: Return a TABLE object, with (optional) initial size n and additional extent size m. Standard.

TAN(argument)
Math: Return tangent of argument in radians. Catspaw SNOBOL4+ extension?, added in CSNOBOL4 version 0.98.4.

THAW(table)
Data: restores normal entry creation behavior after FREEZE(). Catspaw SNOBOL4+ extension, added in CSNOBOL4 version 0.98.2.

TIME()
Interpreter: Returns program execution time in milliseconds. Standard (returning INTEGER). Returns REAL since CSNOBOL4 0.99.44.

TRACE(name[,type[,tag[,func]]])
Intrepreter: Associates name for type ('VALUE' (default), 'CALL', 'RETURN', 'FUNCTION', 'LABEL', 'KEYWORD') tracing. tag is included in trace output if name is not a natural variable; func is optional name of function to call with name and tag arguments. See snobol4key(1) &TRACE (must be non-zero to enable TRACE. Standard. SPITBOL 360 extension of first letter of trace type accepted since CSNOBOL4 2.0.

TRIM(str)
String: Returns str with trailing blanks and tabs removed. Standard.

UNLOAD(name)
Function: Removes the function definition for function name. Standard.

VALUE(name)
Interpreter: An “accessor” function, defined for STRING and NAME, so that user data types can declare a VALUE field, and allow uniform treatment of variables and user types. Standard.

VDIFFER(v1,v2)
Misc: If the two arguments, DIFFER(), the first argument's value is returned. This is intended to be used in contexts where DIFFER(X) X would otherwise have been used. Extension from Steve Duff's Macro SPITBOL, added in CSNOBOL4 version 0.99.44.

NOTES

A “predicate” is a function that either returns the null string or failure.

An “accessor” is a function which returns it's value by NAME (and can be used on the right hand side of an assignment).

BUGS

Descriptions are too brief!!

See http://www.regressive.org/snobol4/docs/books.html#green for Standard function definitions.

Need to research origins of Macro SPITBOL extensions.

SEE ALSO

snobol4(1), snobol4blocks(1).