<CHAPTER ID="ZREF-ROUTER"><?dbhtml filename="zref-router.html">
<TITLE><COMMAND>Router</> Reference</TITLE>

<PARA>
The <COMMAND>router</> daemon makes all decisions affecting 
the processing of messages in ZMailer.
</PARA>

<PARA>
A mail message is submitted by placing it in a file in the
<FILENAME CLASS="DIRECTORY">$<VARNAME>POSTOFFICE</>/router/</> directory.
The  <COMMAND>router</> frequently scans this directory for new 
files and will lock and process them as it finds them. 
The result is a message control file that gets linked into 
the <FILENAME CLASS="DIRECTORY">$<VARNAME>POSTOFFICE</>/scheduler/</> and 
<FILENAME CLASS="DIRECTORY">$<VARNAME>POSTOFFICE</>/transport/</>
directories for use by the <COMMAND>scheduler</> in the next step
of message processing.
The original message file is then moved to the 
<FILENAME CLASS="DIRECTORY">$<VARNAME>POSTOFFICE</>/queue/</>
directory. 
</PARA>

<PARA>
The <COMMAND>router</>'s behaviour is controlled by a configuration
file read at startup.
It is really a  <COMMAND>zmsh</>(1) script that uses facilities provided 
builtin to the <COMMAND>router</>. 
</PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>Usage:</TERM><LISTITEM>

<PARA>
Invoking router without any arguments will do nothing (except make it read
its configuration file and promptly exit).
The normal startup method is to run the <COMMAND>zmailer</>(1) script, as
in ``<COMMAND>zmailer router</>''.
This will start the <COMMAND>router</> as a daemon and kill the previous 
incarnation of the <COMMAND>router</>.
</PARA>

<PARA>
<CMDSYNOPSIS>
  <COMMAND>router</>
    <ARG>-diksSV</ARG>
    <ARG>-f configfile</ARG>
    <ARG>-n #routers</ARG>
    <ARG>-o zmsh-options</ARG>
    <ARG>-t traceflag</ARG>
    <ARG>-L logfile</ARG>
    <ARG>-P postoffice</ARG>
</CMDSYNOPSIS>
</PARA>

</LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Parameters:</TERM><LISTITEM>
<PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>-d</></><LISTITEM><PARA>
Detach and run as a daemon. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-f <REPLACEABLE>configfile</></></TERM><LISTITEM><PARA>
Overrides the default configuration 
file <FILENAME>$<VARNAME>MAILSHARE</>/router.cf</>. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-i</></TERM><LISTITEM><PARA>
Run interactively, presenting a <COMMAND>zmsh</>  
session with the configuration file preloaded. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-k</></TERM><LISTITEM><PARA>
Kill the currently running router by 
sending it a <CONSTANT>SIGTERM</> signal. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-L <REPLACEABLE>logfile</></></TERM><LISTITEM><PARA>
Overrides the default  log file location 
<FILENAME>$<VARNAME>LOGDIR</>/router</>. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-n <REPLACEABLE>#routers</></></TERM><LISTITEM><PARA>
Starts the specified number of parallel router processes.
The default is a single router process. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-o <REPLACEABLE>zmsh-options</></></TERM><LISTITEM><PARA>
Sets the option string passed on the internal <COMMAND>zmsh</> invocation.
The default is <OPTION>-O</>. 
Note that the leading ``-'' is mandatory.
See <LINK LINKEND="zref-zmsh-options"><CITETITLE><COMMAND>zmsh</>(1)</CITETITLE>
</LINK> for the available options. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-P <REPLACEABLE>postoffice</></></TERM><LISTITEM><PARA>
Specifies an alternate 
<FILENAME CLASS="DIRECTORY">$<VARNAME>POSTOFFICE</>/</> directory. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-S</></TERM><LISTITEM><PARA>
Can be used to turn off non-serious syslogging. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-s</></TERM><LISTITEM><PARA>
Turns stability-flag off and on. Without this
flag, the search of new jobs will be done with (sometimes) 
timeconsuming care of organizing the job files into time order. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-t <REPLACEABLE>traceflag</></></TERM><LISTITEM><PARA>
Sets trace options, one per <OPTION>-t</> switch, even before the configuration
file is loaded.
This is otherwise equivalent to the builtin <COMMAND>trace</> command.
The currently known options are:
<OPTION>assign, bind, compare, db, final, functions, matched, memory,
on, regexp, resolv, rewrite, router, and sequencer</OPTION>. 
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-V</></TERM><LISTITEM><PARA>
Print version message and run interactively. 
</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA>

</LISTITEM></VARLISTENTRY>
</VARIABLELIST>

<PARA>
To restart a <COMMAND>router</> daemon: 
<SCREEN>
   <USERINPUT>router -dk</USERINPUT>
</SCREEN>
</PARA>

<PARA>
To test an address, start up an interactive session: 
<SCREEN>
  <USERINPUT>router -i</USERINPUT>
</SCREEN>
or if the ZMailer <COMMAND>sendmail</>(8) is installed: 
<SCREEN>
  <USERINPUT>sendmail -bt</USERINPUT>
</SCREEN>
</PARA>

<PARA>
Then just use the pre-defined functions.
</PARA>

<SECT1 ID="zmshref-script-language">
<TITLE>ZMSH Script Language</TITLE>

<PARA>
<COMMAND>zmsh</> is an implementation of the Bourne shell 
suitable for use with the ZMailer <COMMAND>router</>(8) as 
its configuration file language interpreter. It contains 
extensions that allow structured data (in the form of lists) 
to be manipulated.
</PARA>

<PARA> 
The shell supports three basic kinds of functions: Unix 
commands, user-defined functions, and builtin commands. 
The latter comes in two variations: normal functions which 
take string arguments and return a status code (much as an 
embedded Unix command would work), and list-manipulation 
functions which understand list arguments and can return 
list arguments. The defined functions can take any form 
of argument and return any form of value (a status code, 
a string, or a list).
</PARA>

<PARA>
Shell operations (pipes, backquote evaluation and substitution) 
will work between combinations of builtin functions, 
defined functions, and Unix commands.
</PARA>

<PARA>
The shell precompiles its input to a (possibly optimized) byte-code form,
which is then interpreted as required.
This means that the original form of the input is not kept around
<EMPHASIS>in-core</> for future reference.
If the input is an included file, the shell will try to save the byte-code 
form in a <FILENAME>.fc</> file associated with the input file. 
For example, if input is from <FILENAME>file.cf</>, the shell will try to
create <FILENAME>fc/file.fc</> and then <FILENAME>file.fc</>. 
These files will in turn be searched for and loaded (after a consistency
check) whenever a <FILENAME>.cf</> file is included.
</PARA>

<PARA>
The effects of input and output redirections are predicted 
prior to the execution of a command and its I/O setup.
</PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>Usage:</TERM><LISTITEM><PARA>

<CMDSYNOPSIS>
  <COMMAND>zmsh</COMMAND>
    <ARG>-CILOPRSYaefhinstuvx</ARG>
    <ARG>-c <REPLACEABLE>command</></ARG>
    <ARG><REPLACEABLE>script ...</></ARG>
</CMDSYNOPSIS>
</PARA>
</LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Parameters:</TERM><LISTITEM><PARA>

<VARIABLELIST ID="zref-zmsh-options">

<VARLISTENTRY><TERM><OPTION>-c command</OPTION></TERM><LISTITEM><PARA>

Run the given argument as a shell 
command script. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-a</OPTION></TERM><LISTITEM><PARA>

Automatically export new or changed shell 
variables.  

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-e</OPTION></TERM><LISTITEM><PARA>

Exit on non-zero status return of any command. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-f</OPTION></TERM><LISTITEM><PARA>

Disables filename generation. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-h</OPTION></TERM><LISTITEM><PARA>

Hash and cache the location of Unix commands. 
The option is set by default. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-i</OPTION></TERM><LISTITEM><PARA>

This shell is interactive, meaning prompts 
are printed when ready for more input, <LITERAL>SIGTERM</> signal 
is ignored, and the shell does not exit easily. This flag is 
automatically set if <LITERAL>STDIN</> and <LITERAL>STDERR</> are 
both attached to a <FILENAME>/dev/tty</>.

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-n</OPTION></TERM><LISTITEM><PARA>

Read commands but do not execute them. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-s</OPTION></TERM><LISTITEM><PARA>

Read commands from <LITERAL>STDIN</>.
If there are non-option arguments to the shell, the first of
these will be interpreted as a shell script to open on <LITERAL>stdin</>,
and the rest as arguments to the script. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-t</OPTION></TERM><LISTITEM><PARA>

Exit after running one command. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-u</OPTION></TERM><LISTITEM><PARA>

Unset variables produce an error on 
substitution. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-v</OPTION></TERM><LISTITEM><PARA>

Print shell input as it is read. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-x</OPTION></TERM><LISTITEM><PARA>

Print commands as they are executed. 

</PARA></LISTITEM></VARLISTENTRY>

</VARIABLELIST></PARA>
</LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Debug options:</TERM><LISTITEM><PARA>
<VARIABLELIST ID="zref-zmsh-debug-options">

<VARLISTENTRY><TERM><OPTION>-C</></TERM><LISTITEM><PARA>

Print code generation output onto <FILENAME>stdout</>.
If this option is doubled, the non-optimized code is printed out instead.

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-I</></TERM><LISTITEM><PARA>

Print runtime interpreter activity onto <FILENAME>/dev/tty</>.

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-L</></TERM><LISTITEM><PARA>

Print lexer output onto <FILENAME>stdout</>. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-O</></TERM><LISTITEM><PARA>

Optimize the compiled script.
If this option is doubled, the optimized code is also printed out. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-P</></TERM><LISTITEM><PARA>

Print parser output (S/SL trace output) onto <FILENAME>stdout</>. 

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-R</></TERM><LISTITEM><PARA>

Print I/O actions onto <FILENAME>/dev/tty</>.

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-S</></TERM><LISTITEM><PARA>

Print scanner output (token assembly) onto <FILENAME>stdout</>.

</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM><OPTION>-Y</></TERM><LISTITEM><PARA>

Open <FILENAME>/dev/tty</> for internal debugging use. 

</PARA></LISTITEM></VARLISTENTRY>

</VARIABLELIST>
</PARA>
</LISTITEM></VARLISTENTRY>
</VARIABLELIST>

</SECT1>


<SECT1 ID="zmshref-cfg-script-writing-rules">
<TITLE>Configuration Script Writing Rules</TITLE>

<SCREEN>
Text to be inserted here.
</SCREEN>

</SECT1>


<SECT1 ID=zmshref-script-security-issues>
<TITLE>Script Security Issues</TITLE>

<SCREEN>
Text to be inserted here.
</SCREEN>

</SECT1>


<SECT1 ID=zmshref-script-internal-functions>
<TITLE>Script Language Internal Functions</TITLE>

<PARA>
This section describes the <COMMAND>router</> internal functions.
</PARA>

<PARA>
FIXME! FIXME! some internal functions are missing from this listing!
</PARA>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.doublecolon">
<TITLE>``<FUNCTION>:</>'' (doublecolon)</TITLE>

<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</><LISTITEM><PARA>
<SYNOPSIS>
 : &lt;SPC&gt; anything else forming a command pipeline
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Description:</><LISTITEM><PARA>
	none
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Return Values:</><LISTITEM><PARA>
	0
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Options:</><LISTITEM><PARA>
	none
</PARA></LISTITEM></VARLISTENTRY>

<VARLISTENTRY><TERM>Notes:</><LISTITEM><PARA>
	none
</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</SECT2>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.include">
<TITLE>``<FUNCTION>.</>'', ``<FUNCTION>include</>''</TITLE>

<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 . <REPLACEABLE>scriptfilename</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Alternate syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 include <REPLACEABLE>scriptfilename</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

status of the script load

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This puts the running script to read more script from given filename.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>

<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.test">
<TITLE>``<FUNCTION>[</>'', ``<FUNCTION>test</>''</TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
<FUNCTION>[</> <REPLACEABLE>test parameters</> <FUNCTION>]</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Alternate syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
<FUNCTION>test</> <REPLACEABLE>test parameters</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM> 1 </TERM><LISTITEM><PARA>

True.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM> 0 </TERM><LISTITEM><PARA>

False.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM> -1 </TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<ITEMIZEDLIST>
<LISTITEM><PARA> File testing unary prefix functions:
<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>-b file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is block special.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION> -c file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is character special.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-d file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is a directory.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-f file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is a regular file.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-g file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is set-group-id.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-k file</OPTION></TERM><LISTITEM><PARA>

True if file has its ``sticky'' bit set.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-p file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is a named pipe.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-r file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is readable.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-s file</OPTION></TERM><LISTITEM><PARA>

True if file exists and has a size greater than zero.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-t {[fd]}</OPTION></TERM><LISTITEM><PARA>

True if <OPTION>fd</> is opened on a terminal. 
If <OPTION>fd</> is omitted, it defaults to 1 (standard output).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-u file</OPTION></TERM><LISTITEM><PARA>

True if file exists and its set-user-id bit is set.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-w file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is writable.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>-x file</OPTION></TERM><LISTITEM><PARA>

True if file exists and is executable.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA></LISTITEM>

<LISTITEM><PARA> String testing binary functions:
<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>str1 = str2</OPTION></TERM><LISTITEM><PARA>

True if the strings are equal.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>str1 != str2</OPTION></TERM><LISTITEM><PARA>

True if the strings are not equal.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA></LISTITEM>

<LISTITEM><PARA> Interget value testing binary functions:
<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>iexpr -eq iexpr</OPTION></TERM><LISTITEM><PARA>

True if values are equal.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>iexpr -ne iexpr</OPTION></TERM><LISTITEM><PARA>

True if values are not equal.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>iexpr -gt iexpr</OPTION></TERM><LISTITEM><PARA>

True if value1 is greater than value2.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>iexpr -ge iexpr</OPTION></TERM><LISTITEM><PARA>

True if value1 is greater or equal than value2.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>iexpr -lt iexpr</OPTION></TERM><LISTITEM><PARA>

True if value1 is less than value2.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>iexpr -le iexpr</OPTION></TERM><LISTITEM><PARA>

True if value1 is less or equal than value2.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA></LISTITEM>

<LISTITEM><PARA> File comparison binary functions:
<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>file1 -nt file2</OPTION></TERM><LISTITEM><PARA>

True if file1's mtime is newer than file2's.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>file1 -ot file2</OPTION></TERM><LISTITEM><PARA>

True if file1's mtime is older than file2's.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>file1 -ef file2</OPTION></TERM><LISTITEM><PARA>

True if both files have same inode, and device.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA></LISTITEM>

<LISTITEM><PARA> Logical functions:
<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>! expr</OPTION></TERM><LISTITEM><PARA>

Unary NOT

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>expr -a expr</OPTION></TERM><LISTITEM><PARA>

Binary AND

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>expr -o expr</OPTION></TERM><LISTITEM><PARA>

Binary OR

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>( expr )</OPTION></TERM><LISTITEM><PARA>

Parenthesis

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</PARA></LISTITEM>
</ITEMIZEDLIST>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This is basically the shell ``<FUNCTION>[</>'' a.k.a. 
``<FUNCTION>test</>'' program.

</PARA><PARA>

Do note that unlike more usual bourne-shells, this <EMPHASIS>does not</>
short-circuit logical evaluations, e.g. falseness of the left side of an AND
does not eliminate evaluation of the right side!

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.attributes">
<TITLE><FUNCTION>attributes</></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
  attributes object-reference
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

The property list symbol (4th) component 
of an address quad.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.basename">
<TITLE><FUNCTION>basename</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 basename pathname [ suffix ]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

ok, result string to <LITERAL>STDOUT</>.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

If a suffix is given and matches the filename, 
the suffix too is stripped from the filename.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the base filename of the pathname.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.break">
<TITLE><FUNCTION>break</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

<SYNOPSIS>
while ...
do
   ...
   break
   ...
done

case ...
   ...
   break
   ...
esac
</>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.builtin">
<TITLE><FUNCTION>builtin</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<EMPHASIS ROLE="BOLD">NOT IMPLEMENTED!</>
<SYNOPSIS>
builtin {builtin command name, and its params}
</SYNOPSIS>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

<EMPHASIS ROLE="BOLD">NOT IMPLEMENTED!</>
</PARA><PARA>

Ensures that named command is builtin within the scheduler,
and not a) external, b) script based.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!--
<SECT2 ID="zmshref.builtins">
<TITLE><FUNCTION>builtins</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

builtins

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

List builtin functions.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
 -->
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.car">
<TITLE><FUNCTION>car</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
car <REPLACEABLE>object-reference</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied lisp-object of object-reference's
<FUNCTION>car</> operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This command is synonymous to the <LINK LINKEND="zmshref.channel">
<CITETITLE><FUNCTION>channel</></></LINK>, and
<LINK LINKEND="zmshref.first"><CITETITLE><FUNCTION>first</></></LINK>
functions.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.cd">
<TITLE><FUNCTION>cd</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

<SYNOPSIS>
cd <REPLACEABLE>[directory]</>
</SYNOPSIS>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

<FUNCTION>cd</> successful.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.cdr">
<TITLE><FUNCTION>cdr</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
cdr <REPLACEABLE>object-reference</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied lisp-object of object-reference's
<FUNCTION>cdr</> operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This command is synonymous to the <LINK LINKEND="zmshref.rest">
<CITETITLE><FUNCTION>rest</></></LINK> function.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.channel">
<TITLE><FUNCTION>channel</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
channel <REPLACEABLE>object-reference</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

The channel (1st) component of an address quad.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

The <LINK LINKEND="zmshref.car"><CITETITLE><FUNCTION>car</></></LINK>, and
<LINK LINKEND="zmshref.first"><CITETITLE><FUNCTION>first</></></LINK>
functions are synonymous to this one.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.continue">
<TITLE><FUNCTION>continue</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 continue
</SYNOPSIS>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.daemon">
<TITLE><FUNCTION>daemon</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
daemon
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Starts the <COMMAND>router</> running in daemon mode, 
scanning the <FILENAME CLASS=DIRECTORY>$<VARNAME>POSTOFFICE</>/router/</>
directory every few seconds for message files to process.
This function is invoked automatically by other code in
the <COMMAND>router</> program and has no other purpose.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.db">
<TITLE><FUNCTION>db</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>add</>
  <ARG CHOICE=REQ><REPLACEABLE>database</></>
  <ARG CHOICE=REQ><REPLACEABLE>key</></>
  <ARG CHOICE=REQ><REPLACEABLE>value</></>
</CMDSYNOPSIS>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>flush</>
  <ARG CHOICE=REQ><REPLACEABLE>database</></>
</CMDSYNOPSIS>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>owner</>
  <ARG CHOICE=REQ><REPLACEABLE>database</></>
</CMDSYNOPSIS>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>print</>
  <ARG CHOICE=REQ><REPLACEABLE>database</></>
</CMDSYNOPSIS>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>remove</>
  <ARG CHOICE=REQ><REPLACEABLE>database</></>
  <ARG CHOICE=REQ><REPLACEABLE>key</></>
</CMDSYNOPSIS>
<CMDSYNOPSIS>
 <COMMAND>db</>
  <ARG CHOICE=REQ>toc</>
</CMDSYNOPSIS>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>a[dd]</OPTION></TERM><LISTITEM><PARA>

Add a <PARAMETER>key,value</> entry to the database, if possible.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>f[lush]</OPTION></TERM><LISTITEM><PARA>

Remove all entries from the database, 
if possible.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>o[wner]</OPTION></TERM><LISTITEM><PARA>

Print the account name of the owner 
of the database, if possible. This is usually determined by the 
files associated with the database.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>p[rint]</OPTION></TERM><LISTITEM><PARA>

Print all entries of the database, 
if possible. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>r[emove]</OPTION></TERM><LISTITEM><PARA>

Remove a <PARAMETER>key</> entry from the database, if possible.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><OPTION>t[oc]</OPTION></TERM><LISTITEM><PARA>

Print a table of defined relations 
and their associated information. This table has five columns, 
in order: the name of the relation, its type and subtype, cache 
entries and maximum size, flags, and associated files. See the 
<FUNCTION>relation</> function for more information.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

<INFORMALTABLE FRAME=ALL ID=tbl-zref-router-db-type-specific-notes>
<TITLE>DB type specific notes:</TITLE>
<TGROUP COLS=6 ALIGN=LEFT COLSEP=1 ROWSEP=1>
<COLSPEC COLNAME=C1-DBTYPE-NAME>
<COLSPEC COLNAME=C2-DBFUNC-ADD>
<COLSPEC COLNAME=C3-DBFUNC-FLUSH>
<COLSPEC COLNAME=C4-DBFUNC-OWNER>
<COLSPEC COLNAME=C5-DBFUNC-PRINT>
<COLSPEC COLNAME=C6-DBFUNC-REMOVE>
<THEAD>
<ROW>
  <ENTRY>DB type</ENTRY>
  <ENTRY>add</ENTRY>
  <ENTRY>flush</ENTRY>
  <ENTRY>owner</ENTRY>
  <ENTRY>print</ENTRY>
  <ENTRY>remove</ENTRY>
</ROW>
</THEAD>
<!-- <TFOOT> ... </TFOOT> -->
<TBODY>
<ROW>
  <ENTRY>incore</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>header</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>ordered</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>no</ENTRY>
</ROW>
<ROW>
  <ENTRY>unordered</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>hostsfile</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>no</ENTRY>
</ROW>
<ROW>
  <ENTRY>bind</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
</ROW>
<ROW>
  <ENTRY>ndbm</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>gdbm</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>dbm</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>yp (NIS)</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>bhash</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>btree</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>yes</ENTRY>
</ROW>
<ROW>
  <ENTRY>ldap</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>yes</ENTRY>
  <ENTRY>no</ENTRY>
  <ENTRY>no</ENTRY>
</ROW>
</TBODY>
</TGROUP>
</INFORMALTABLE>


</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.dblookup">
<TITLE><EMPHASIS>dblookup</></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
Does lookup via <FUNCTION>relation</> defined <EMPHASIS>dblookup</>
vector:
<SYNOPSIS>
<EMPHASIS>dblookup</> key
</SYNOPSIS>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM><EMPHASIS>cell</></TERM><LISTITEM><PARA>

Lookup result

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM><LITERAL>NULL</></TERM><LISTITEM><PARA>

Error.  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

The access function to the database facilities in the 
<COMMAND>router</>.

</PARA><PARA>

<EMPHASIS>FIXME! Notes about %[0-9] substitution rules, and their controls.</>

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.echo">
<TITLE><FUNCTION>echo</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
echo [-n] [string-expressions]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

        

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>-n</></TERM><LISTITEM><PARA>

Don't print newline at end of string.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.elements">
<TITLE><FUNCTION>elements</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
elements <REPLACEABLE>lisp-object</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<EMPHASIS>lisp-object</>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.envars">
<TITLE><FUNCTION>envars</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
envars
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Print internal variable tree.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.erraddron">
<TITLE><FUNCTION>erraddron</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
erraddron [file]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

??? (FIXME!)

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Specifies a filename to append all address 
parsing error messages to. If there is no argument given, the 
logging is stopped. This is primarily for curious postmasters 
or other collectors of address trivia.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.eval">
<TITLE><FUNCTION>eval</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
eval expression
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

status

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.exit">
<TITLE><FUNCTION>exit</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
exit
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes: </TERM><LISTITEM><PARA>

Exit from the shell with exit code.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.export">
<TITLE><FUNCTION>export</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
export [variable-name ...]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

??? FIXME

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Exports variable name(s). If no variables are given, 
export prints a list of which variables have been exported.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.filepriv">
<TITLE><FUNCTION>filepriv</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
filepriv file [uid]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

??? FIXME

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>1</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the numeric user id of the least 
privileged account that can modify the specified file.
</PARA>

<PARA>
This is determined by an approximation that pessimistically assumes that 
any file or directory writable by group or others is insecure, and
optimistically assumes that it is enough to check a file and its parent
directory instead of all the way to the filesystem root.
The reason for the latter is that if grandparent directories are insecure,
the system is likely to have just as bad potential problems as can be
created by using mail to run processes with forged powers (besides, doing
the full check would be quite expensive).
</PARA>

<PARA>
If a second argument is given, it is the numeric user id to assume 
for the file. This means only the parent directory will be checked 
for nonwritability and for having the same (or a 0) uid.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.first">
<TITLE><FUNCTION>first</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
first object-reference
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied lisp-object of 
object-reference's <FUNCTION>car</> operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This command is synonymous to the
<LINK LINKEND="zmshref.car"><CITETITLE><FUNCTION>car</></></LINK>, and
<LINK LINKEND="zmshref.channel"><CITETITLE><FUNCTION>channel</></></LINK>
commands.  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.gensym">
<TITLE><FUNCTION>gensym</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
gensym
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Generates and prints a new symbol name in the 
sequence <VARNAME>g0</> to <VARNAME>gN</> every time it is called. The 
sequence is reset and any symbol values destroyed after the <COMMAND>router</>
has processed a message. This function is used to generate new symbols, to 
hold attached address property lists, during alias expansion.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.get">
<TITLE><FUNCTION>get</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt get property-list key}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

{\tt property-list}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Returns a property list corresponding to key string.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.getopts">
<TITLE><FUNCTION>getopts</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt getopts optstring-name [arguments ...]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.grind">
<TITLE><FUNCTION>grind</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt grind lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to list of {\tt varcell}.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.groupmembers">
<TITLE><FUNCTION>groupmembers</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt groupmembers groupname}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the accounts that are listed as 
members of a group in the system groups file, one per line.
Note that accounts with the same login group id, but that are 
not listed in the groups file, will not appear in this list.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.hash">
<TITLE><FUNCTION>hash</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt hash [-r] [command names]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -r}</TERM><LISTITEM><PARA>

Path is flushed.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.homedirectory">
<TITLE><FUNCTION>homedirectory</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt homedirectory user}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the home directory of the specified 
user account.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.host">
<TITLE><FUNCTION>host</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt host object-reference}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

The host (2nd) component of an 
address quad.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.hostname">
<TITLE><FUNCTION>hostname</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt hostname [name]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Sets the {\em router}'s idea of the
system hostname. Without an argument the name is retrieved from
the system and printed. The {\em router} has no preconceived 
notion of what the hostname is, so Message-Id and Received headers 
will only be generated if a hostname has been set using this function.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.lappend">
<TITLE><FUNCTION>lappend</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt lappend varname anyvalue}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This appends content of list object ({\em anyvalue}) to named
{\em varname} variable.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>

</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.last">
<TITLE><FUNCTION>last</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt last lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Return a pointer to last cell of 
{\tt varcell}'s list.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.length">
<TITLE><FUNCTION>length</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt length lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

String of length of {\tt varcell}'s 
parameter list.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.list">
<TITLE><FUNCTION>list</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt list lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

{\tt lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.listaddresses">
<TITLE><FUNCTION>listaddresses</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt listaddresses [-e error-address] [-E errors-to-address] [-c comment]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -e}</TERM><LISTITEM><PARA>

Any syntax errors at list parsing will cause a 
report to be mailed to the given address.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -E}</TERM><LISTITEM><PARA>

If an error occurs while messages are being delivered, 
the `errors-to-address' can be used to force error message destination 
elsewhere than to the default `sender' of the message.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -c}</TERM><LISTITEM><PARA>

A comment will be inserted in the error report.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Filters an RFC822 address list on standard input 
to produce one normal form (no non-address tokens) address per line on 
its output. This function can be used to parse the alias file or .forward 
files or similar.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.listexpand">
<TITLE><FUNCTION>listexpand</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt listexpand [-c comment] [-e error-address] [-E errors-to-address] \$attribute \$localpart \$origaddr {\(<\)} listfile}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

{\tt lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -e error-address}</TERM><LISTITEM><PARA>

Any syntax errors at list 
parsing will cause a report to be mailed to the given address.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -E errors-to-address}</TERM><LISTITEM><PARA>

If an error occurs while messages 
are being delivered, the `errors-to-address' can be used to force error 
message destination elsewhere than to the default `sender' of the message.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -c comment}</TERM><LISTITEM><PARA>

A comment will be inserted in the error report.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Implements the most common pipeline where 
{\tt listaddresses} was used with more efficient memory consumption 
handling.


</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.login2uid">
<TITLE><FUNCTION>login2uid</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt login2uid username}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the uid associated with the specified
account name, if any. A side-effect is to add the GECOS name field of 
the account to the {\tt fullname} in-core database, to add the login 
name to uid mapping to the {\tt pwnam} in-core database, and to add 
the uid to login name mapping to the {\tt pwuid} in-core database.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.lreplace">
<TITLE><FUNCTION>lreplace</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>{\bf Syntax1:}</TERM><LISTITEM><PARA>

{\tt lreplace varname indexnum anyvalue}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\bf Syntax2:}</TERM><LISTITEM><PARA>

{\tt lreplace varname fieldname anyvalue}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This replaces designated field on {\em varname} variable containing
list-like data with {\em anyvalue} value.
</PARA>

<PARA>
The field designation can be given in numeric form, where
the field index can be numeric (first field is zero), or
{\em keyname} on key/value pair list.
</PARA>

<PARA>
If a key is not found (with key/value pairs), then designated pair
is added to the list.
</PARA>

<SCREEN>
  tt=(aa 11 bb 22 cc 33 dd 44)
  lreplace tt aa zz
  grind $tt
  (zz 11 bb 22 cc 33 dd 44)
  lreplace tt 0 aaa
  grind $tt
  (aaa 11 bb 22 cc 33 dd 44)
  lreplace tt zz aa
  grind $tt
  (aaa 11 bb 22 cc 33 dd 44 zz aa)
</SCREEN>

</LISTITEM></VARLISTENTRY>
</VARIABLELIST>

</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.malcontents">
<TITLE><FUNCTION>malcontents</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
malcontents}
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

ZMSH Debugging thing.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.printaliases">
<TITLE><FUNCTION>printaliases</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt printaliases [-v] [-o indexoutputfile] file}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -v}</TERM><LISTITEM><PARA>

Verbose.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -o indexoutputfile}</TERM><LISTITEM><PARA>

Each header line will also generate 
a {\tt header TAB byteoffset} line in the indexfile.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Reads RFC822 syntax header lines from the specified
file, parses them assuming contents must be an address list, and sorts 
and prints the header lines with all addresses in normal form. Comments 
are allowed; they extend from the character `\#' at the beginning of 
a line, or after an address, to the end of line. This function is used 
by the {\em newaliases(1)} program to generate the aliases database 
from a source file.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.process">
<TITLE><FUNCTION>process</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt process messagefile}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

The protocol switch function. It is called by
the {\tt daemon} function to process a message found in the 
{\tt \$POSTOFFICE/router/} directory. This function will 
in turn call an internal protocol-specific function which knows the 
syntax and semantics of the message file. The current version knows 
about messages submitted using the {\tt MSG\_RFC822} parameter to 
{\tt mail\_open(3)}. For that case, the protocol function is called 
{\tt rfc822}. {\em router} has a bit more complex directory 
semantics, than is stated above. See {\tt zmailer(3)} for details. 
Although the {\tt process} function is provided built in, it is 
usually overridden by a defined function in the {\em router} 
configuration file.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.read">
<TITLE><FUNCTION>read</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt read [variable]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>

Successful read.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.recase">
<TITLE><FUNCTION>recase</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt recase [-u \verb/|/ -l \verb/|/ -p] string}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -u}</TERM><LISTITEM><PARA>

Convert into uppercase.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -l}</TERM><LISTITEM><PARA>

Convert into lowercase.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -p}</TERM><LISTITEM><PARA>

Prettify.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

A case-mapping function that prints the parameter 
string in either all-uppercase, all-lowercase, or capitalized (pretty).

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.recipient">
<TITLE><FUNCTION>recipient</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt recipient}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Is a recipient address.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>

Is not.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

A boolean function that returns the value of 
the statement ``executing a header rewriting function and the address 
is a recipient address in a message header''.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.relation">
<TITLE><FUNCTION>relation</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<CMDSYNOPSIS>
  <COMMAND>relation</COMMAND>
  <ARG>-t <REPLACEABLE>dbtype</><ARG>,<REPLACEABLE>subtype</></ARG></ARG>
  <ARG>-f <REPLACEABLE>file</REPLACEABLE></ARG>
  <ARG>-e <REPLACEABLE>#</></ARG>
  <ARG>-s <REPLACEABLE>#</></ARG>
  <ARG>-bilmnu</ARG>
  <ARG>-d <REPLACEABLE>driver</></ARG>
  <ARG CHOICE=PLAIN>name</ARG>
</CMDSYNOPSIS>
</PARA>

<PARA>
Options are listed below. <OPTION>name</> is the name of the relation
that is wanted to be created. Examples:
<SCREEN>
relation -t bind,mx mxhost
relation -t ordered -f $MAILVAR/db/routes routes
relation -t ordered -b -f /usr/lib/news/active.sorted newsgroups
</SCREEN>

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>0</TERM><LISTITEM><PARA>

Relation is reated successfully, however possible database access are
not tried yet.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>1..7</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM><OPTION>-t <REPLACEABLE>dbtype</>[,<REPLACEABLE>subtype</>]</OPTION></TERM><LISTITEM><PARA>

One of the known types 
of databases, currently: 
<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt incore}</TERM><LISTITEM><PARA>

A database maintained in virtual memeory (using 
splay trees). This type should not be used for any database that must 
periodically be flushed, since all occupied memory can be freed.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt header}</TERM><LISTITEM><PARA>

A database type used to store RFC822 header 
semantics information. It is unlikely to be used for anything else.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt ordered}</TERM><LISTITEM><PARA>

A file with key-value pairs on every line, 
separated by whitespace, sorted by key. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt unordered}</TERM><LISTITEM><PARA>

A file with key-value pairs on every line, 
separated by whitespace. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt hostsfile}</TERM><LISTITEM><PARA>

{\em hosts(5)} file.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt bind}</TERM><LISTITEM><PARA>

The BIND implementation of a Domain Name System 
resolver. The subtype for this type is the name of a Resource Record 
type in the {\tt IN} class.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt ndbm}</TERM><LISTITEM><PARA>

The new DBM library. The BSD4.4 has a thing called 
{\tt db}, which is a different thing, but it can be used in place 
of {\tt ndbm} via its interface library. (The {\tt BSD4.4-db} 
does have only one database file, not two, like {\tt ndbm} does.)

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt gdbm}</TERM><LISTITEM><PARA>

The GNU implementation of the new DBM library. 
{\bf Note:} GDBM uses one file, which is named exactly as you 
parametrize it. This is unlike NDBM, which appends .dir and .pag to 
the supplied name!

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt dbm }</TERM><LISTITEM><PARA>

The old DBM library. There can be only one DBM 
open at the time, and this system keeps them all open all the time. 
Avoid if you can.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt yp}</TERM><LISTITEM><PARA>

The Network Information Service from Sun Microsystems 
Inc. (Later renamed to be NIS, the still newer NIS+ is not supported).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt btree}</TERM><LISTITEM><PARA>

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -f file}</TERM><LISTITEM><PARA>

A file associated with the database, typically 
the file containing the data, or the basename of DBM files or something 
similarly relevant to the database access routine. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -e\#}</TERM><LISTITEM><PARA>

The default time-to-live on cached information. 
When the information has been in the cache for this many seconds, it 
is discarded. The default is 0. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -s\#}</TERM><LISTITEM><PARA>

Sets the cache size to the specified number. 
The default is usually 10, depending on the database type. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -b}</TERM><LISTITEM><PARA>

If the key exists in the database, return the key 
as the value. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -i}</TERM><LISTITEM><PARA>

If the key exists, its value is a byte offset into 
a file named by the subtype for this database. The value then becomes 
the concatenation of the data on the lines following that offset which 
start with whitespace. This is used for the aliases file. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -l}</TERM><LISTITEM><PARA>

Map all keys to lowercase before searching.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -m}</TERM><LISTITEM><PARA>

Check for file content modification before every 
access. Reopen the file when a change is detected. This option is 
used when the {\em router} should discover changes to a database
underfoot so it need not be restarted to use new data. This is 
recommended on relations which use unordered, or ordered datasets 
(aliases, routes, ...), and especially if the system is configured 
to use {\tt mmap(2)} facility. Updating such databases should 
preferably use {\tt mv} command to move a new version of the 
database in place of the old one. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -n}</TERM><LISTITEM><PARA>

If the key exists in the database and the value is 
null or list, return the key as value. Otherwise return the value 
retrieved, if any. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -u}</TERM><LISTITEM><PARA>

Map all keys to uppercase before searching. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -d driver}</TERM><LISTITEM><PARA>

Specifies a search driver that allows
searching for structured keys using special knowledge. The 
argument to this option must be a known driver. Currently the 
only known driver is {\tt pathalias} which will search a
pathalias format database for an entry matching a domain name 
using the pathalias rules.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

On systems with {\tt USE\_MMAP} the ordered 
and unordered databases are r/o mapped into memory, and for ordered 
case, a special line-index is generated for speeding up the binary 
search. (Makes less system calls that way.)

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.rest">
<TITLE><FUNCTION>rest</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 rest <REPLACEABLE>object-reference</>
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied lisp-object of 
object-reference's <FUNCTION>cdr</> operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This command is synonymous to the <LINK LINKEND="zmshref.cdr"><CITETITLE>
<FUNCTION>cdr</></></LINK> command.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.return">
<TITLE><FUNCTION>return</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt return lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt lisp-object}</TERM><LISTITEM><PARA>

String contains a not ASCII digit character.    
(Returns a pointer to {\tt varcell}'s string.)

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt statusp}</TERM><LISTITEM><PARA>

ASCII digit character. (Returns numeric value.)

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt NULL}</TERM><LISTITEM><PARA>

Invalid lisp-object.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.returns">
<TITLE><FUNCTION>returns</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt returns lisp-object}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt string}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt lisp-object}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.rfc822">
<TITLE><FUNCTION>rfc822</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt rfc822 messagefile}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

{\tt status}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This function controls the parsing and 
processing of the message file in RFC822/976 format. It is 
called by the {\tt process} function. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.rfc822date">
<TITLE><FUNCTION>rfc822date</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt rfc822date}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the current time in RFC822 format. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.rfc822syntax">
<TITLE><FUNCTION>rfc822syntax</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt rfc822syntax address}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

This is a simple interface to the address 
parser. If the command line argument is a syntactically valid 
RFC822 address, this command is silent and returns 0 as exit 
status. If there is a parse error, a verbose error message is 
printed to {\tt stdout} and the function returns a non-0 
exit status. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.runas">
<TITLE><FUNCTION>runas</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>
<SYNOPSIS>
 runas user function [arguments...]
</SYNOPSIS>
</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Changes the current effective user id 
of the {\em router} process to that given (which may be 
numeric or an account name), then runs the specified function 
with the specified arguments, then switches the effective 
user id of the process back (to root). 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.sender">
<TITLE><FUNCTION>sender</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt sender}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Is a sender address.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>

Is not.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

A boolean function that returns the value of 
the statement ``executing a header rewriting function and the address 
is a sender address in a message header''. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.set">
<TITLE><FUNCTION>set</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt set [-a -e -f -h -n -t -u -v -x -L -C -P -S -k -] variable}

Without parameters {\tt set} prints variable values.



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied structure of {\tt car} 
operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -a}</TERM><LISTITEM><PARA>

Automatically export changed variables.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -e}</TERM><LISTITEM><PARA>

Exit on error exit status of any command.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -f}</TERM><LISTITEM><PARA>

Disable filename generation (no globbing).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -h}</TERM><LISTITEM><PARA>

Hash program locations.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -n}</TERM><LISTITEM><PARA>

Read commands but do not execute them.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -t}</TERM><LISTITEM><PARA>

Read and execute one command only.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -u}</TERM><LISTITEM><PARA>

Unset variables are error on substitution.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -v}</TERM><LISTITEM><PARA>

Print shell input lines as they are read.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -x}</TERM><LISTITEM><PARA>

Print commands as they are executed.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -L}</TERM><LISTITEM><PARA>

Trace LEXER processing (sslWalker).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -C}</TERM><LISTITEM><PARA>

Print branch and emit inputs (sslWalker).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -P}</TERM><LISTITEM><PARA>

Trace execution (sslWalker).

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -S}</TERM><LISTITEM><PARA>

Print input buffers when used (sslWalker). 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -k}</TERM><LISTITEM><PARA>

Not supported option.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt -}</TERM><LISTITEM><PARA>

Do nothing.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.shift">
<TITLE><FUNCTION>shift</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt shift [number]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Modifies caller's argument vector.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.sleep">
<TITLE><FUNCTION>sleep</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt sleep number}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.squirrel">
<TITLE><FUNCTION>squirrel</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt squirrel [-]event}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt -}</TERM><LISTITEM><PARA>

Set flag value to 0.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt {\(<\)}none>}</TERM><LISTITEM><PARA>

Set flag value to 1. 

The events are: 
\begin{itemize}
\item {\tt breakin}
\item {\tt badheader}
\item {\tt illheader}
\item {\tt nochannel}
\item {\tt nosender}
\end{itemize}


</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Sets the kinds of events that cause a message 
to be copied into the {\tt \$POSTOFFICE/postman/} directory. 
Whether or not a `{\tt -}' is necessary for an event depends on 
the current state of the event's flag. The usage message will 
indicate what to do to toggle the event flag. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.stability">
<TITLE><FUNCTION>stability</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt stability [on \verb/|/ off]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Determines whether the {\em router} will 
process incoming messages in arrival order (when on), or in random 
order determined by position in the router directory. The {\em router} 
will by default do the first queue scan in stable mode, and subsequent 
scans in unstable mode. The name of this command is the name for a 
similar characteristic of sorting algorithms. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.test2">
<TITLE>``<FUNCTION>test</>'', ``<FUNCTION>[</>''</TITLE>

<PARA>
See: ``<LINK LINKEND="zmshref.test"><CITETITLE><FUNCTION>[</></></>'',
a.k.a. ``<LINK LINKEND="zmshref.test"><CITETITLE><FUNCTION>test</></></>''
</PARA>

</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID="zmshref.times">
<TITLE><FUNCTION>times</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt times }

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.trace>
<TITLE><FUNCTION>trace</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt trace key1 ... keyN}

Enables tracing of the specified items. The valid keywords 
are listed in the options below. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt all}</TERM><LISTITEM><PARA>

Turns on all tracing options. You only 
do this to test the I/O capabilities of your system. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt assign}</TERM><LISTITEM><PARA>

Prints shell variable assignments. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt bind}</TERM><LISTITEM><PARA>

Prints various information from the 
code that calls the DNS resolver. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt compare}</TERM><LISTITEM><PARA>

Prints {\tt sift} statement 
pattern-selector comparisons. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt db}</TERM><LISTITEM><PARA>

Prints database lookups, including cache 
search and update information. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt final}</TERM><LISTITEM><PARA>

Prints the message envelope information 
after processing each message. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt functions}</TERM><LISTITEM><PARA>

Prints shell function calls and 
return values, with nesting indicated by indentation. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt matched}</TERM><LISTITEM><PARA>

Prints {\tt sift} statement 
pattern-selector matches. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt on}</TERM><LISTITEM><PARA>

Same as {\tt functions}. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt regexp}</TERM><LISTITEM><PARA>

Prints regular expression matching execution. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt resolv}</TERM><LISTITEM><PARA>

Turns on the {\tt RES\_DEBUG} flag in the 
{\tt BIND} resolver library, and prints various information 
from the code that calls the DNS resolver. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt rewrite}</TERM><LISTITEM><PARA>

Prints the tokenized addresses sent through 
the message header address rewriting functions. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt router}</TERM><LISTITEM><PARA>

Prints the tokenized addresses sent through 
the {\tt router} function. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt sequencer}</TERM><LISTITEM><PARA>

Prints the procedural steps taken during 
message processing. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt memory}</TERM><LISTITEM><PARA>

Prints memory allocation information after 
each message. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.trap>
<TITLE><FUNCTION>trap</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt trap [[script trap\_nro] ...]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

If no parameters are given, {\tt trap} prints all 
known traps.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.type>
<TITLE><FUNCTION>type</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt type [command ...]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.uid2login>
<TITLE><FUNCTION>uid2login</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt uid2login uid}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Prints the first account name associated with 
a specified user id, if any, or {\tt uid\#uid} if no account 
exists with that user id. It has the same side-effects as the 
{\tt login2uid} function. 

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.umask>
<TITLE><FUNCTION>umask</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt umask [octal-number-mask]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

Pointer to copied structure of {\tt car} 
operation.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

Without parameters default mask is 077.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.unset>
<TITLE><FUNCTION>unset</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt unset [variable ...]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.untrace>
<TITLE><FUNCTION>untrace</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt untrace key1 ... keyN}

Disables tracing of the specified items. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

<VARIABLELIST>
<VARLISTENTRY><TERM>{\tt 0}</TERM><LISTITEM><PARA>



</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>{\tt 1}</TERM><LISTITEM><PARA>

Error.

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

See the {\tt trace} function for 
valid keywords. 

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

  

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>


</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.user>
<TITLE><FUNCTION>user</FUNCTION></TITLE>


<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt user object-reference}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

The next-address (3rd) component of 
and address quad.

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>

</SECT2>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<SECT2 ID=zmshref.wait>
<TITLE><FUNCTION>wait</FUNCTION></TITLE>

<VARIABLELIST>
<VARLISTENTRY><TERM>Syntax:</TERM><LISTITEM><PARA>

{\tt wait [pid]}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Return Values:</TERM><LISTITEM><PARA>

{\tt retcode}

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Options:</TERM><LISTITEM><PARA>

none  

</PARA></LISTITEM></VARLISTENTRY>
<VARLISTENTRY><TERM>Notes:</TERM><LISTITEM><PARA>

none

</PARA></LISTITEM></VARLISTENTRY>
</VARIABLELIST>
</SECT2>
</SECT1>

</CHAPTER>
