.hd st$lu "internal symbol table lookup" 03/23/80
integer function st$lu (symbol, node, pred, table)
character symbol (ARB)
pointer node, pred, table
.sp
Library:  vswtlb (standard Subsystem library)
.fs
'St$lu' attempts to find the character-string symbol given as its first
argument in the symbol table given as its fourth argument.
If the symbol is present, a pointer to its node is returned in 'node'
and 'st$lu'  returns YES;
otherwise, 'st$lu' returns NO.
In both cases, 'pred' is set to the address of the link field of the
previous
node, i.e. the one that points to the desired node (if it is present)
or is at the end of the appropriate hash chain (if it is not present).
.sp
'St$lu' is not intended for general use;
the symbol table interface routines 'enter', 'lookup', and
'delete' are provided for that purpose.
.im
'St$lu' hashes the character string by summing the internal representations
of its characters and then reducing this number modulo the hash table size
(a prime number).
This hash is used as an index into a hash table containing heads of
linked lists of symbol table nodes.
The appropriate list is then searched linearly for a node
containing the desired symbol text.
The utility routine 'equal' is used for performing string comparisons.
.sp
If the symbol is found, then its index and its predecessor's link
field index are returned, along with the function value YES.
Otherwise, the address of the last link field in the appropriate
chain is returned, along with the function value NO.
The combination of node address/predecessor address is designed
to make insertion, deletion, and updating of symbol table nodes
relatively easy.
.am
pred, node
.ca
equal
.sa
enter (2), lookup (2), delete (2), mktabl (2), rmtabl (2),
dsget (2), dsfree (2), dsinit (2), sctabl (2)