\section{User Interface}
\label{userint}

The original interface was selected for
its simplicity and, for some of us, familiarity.  It is a
terminal-oriented, shell-like interface which loops through a
prompt-input-execute sequence.

The user is presented with the idea of a meeting being attended, and a
``current'' transaction within that meeting; he may go to a different
meeting with the {\tt goto} command, or run one of many commands
within a meeting.  The commands available for examining the contents
of a meeting include {\tt list} and {\tt print}; each command takes
one or more transaction numbers as arguments.  Transaction numbers
may be specified as integers or ranges of integers, or symbolically,
such as {\tt current}, {\tt pref}, or {\tt first}.

Naturally, some method for entering transactions is needed.  We
provide the {\tt talk} command for
entering transactions to start new chains, or to stand by themselves,
and {\tt reply} to enter a response to an existing transaction.
The {\tt talk} command requests a subject, then allows the user to enter
the text of his message.  It uses a simple line-input
interface, terminating the message on input of a line containing only
a `.' or
escaping to run an editor program specified by the environment
variable ``EDITOR'' on \verb|~e|.  Although the protocol
does permit
new subjects for any transaction, the {\tt reply} command currently
assumes a subject derived from the message being replied to, prefixed
with {\tt Re:} if it is not already present.  A {\tt delete} command
is also
provided.

There are also commands for dealing with several meetings.  Aside from
the {\tt goto} command mentioned above, we have provided the
{\tt check\_meetings} command, which checks whether any meetings the user
attends have changed since the user last attended them.  The command
{\tt next\_meeting} can be used to step through this list meeting by
meeting, allowing the user to view new transactions in all
meetings he attends.
