diff --git a/doc/Protocol-A.texi b/doc/Protocol-A.texi
new file mode 100644
index 0000000000000000000000000000000000000000..43a280f6209872dba6153c532756d1459ecb0b4a
--- /dev/null
+++ b/doc/Protocol-A.texi
@@ -0,0 +1,1980 @@
+\input texinfo                         @c -*-texinfo-*-
+@c $Id: Protocol-A.texi,v 1.1 1996/01/13 16:38:27 byers Exp $
+@c %**start of header
+@setfilename protocol-a.info
+@settitle LysKOM Protocol A
+@setchapternewpage odd
+@c %**end of header
+@iftex
+@parindent 0pt
+@end iftex
+
+@ifinfo
+This is the specification of LysKOM Protocol A v. 8.0
+
+Copyright @copyright{} 1995 Lysator ACS.
+
+Permission is granted to make and distribute verbatim copies of this
+specification provided the copyright notice and this permission notice
+are preserved on all copies.
+@end ifinfo
+
+@titlepage
+@sp 10
+@title{LysKOM Protocol A}
+@sp 2
+@subtitle{Protocol version 8.0}
+@sp 2
+@author by the LysKOM Developers
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1995 Lysator ACS
+
+Permission is granted to make and distribute verbatim copies of this document
+provided the copyright notice and this permission notice are preserved on all
+copies.
+
+Modified versions of this document may be redistributed with the added
+condition that all modifications not cleared with the LysKOM development group
+are clearly marked and that the entire modified work be redistributed under the
+same conditions as the original.
+
+Permission is granted to copy and distribute translations of this manual into
+another language under the same conditions as for modified versions.
+
+@end titlepage
+
+@ifinfo
+@node Top, Overview, (dir), (dir)
+@comment node-name, next, previous, up
+This document specifies LysKOM Protocol A, version 8.0
+
+@menu
+* Overview::
+* Introduction::
+* Data Types::
+* Protocol Requests::
+* Asynchronous Messages::
+* Examples::
+@end menu
+@end ifinfo
+
+@node Overview, Document Revision History, Top, Top
+@chapter Overview
+
+LysKOM is a conferencing system@footnote{Or in modern terms, enabling
+technology for Computer-Supported Cooperative Work (CSCW).}. Similar systems
+were QZ-KOM and PortaCOM@footnote{Also known as ``PottaKOM'' and
+``BortaKOM.''}. The LysKOM system is copyrighted by Lysator Academic Computing
+Society and distributed under conditions of the GNU Public License. LysKOM and
+its documentation is provided ``as is'' without warranty of any kind.
+
+This document specifies version 8.0 of protocol A used between a LysKOM client
+and a LysKOM server. Anything described here as ``unspecified'' is liable to
+change in future protocol versions.
+
+This specification is the work of several people. The main contributors have
+been Per Cederqvist @code{<ceder@@lysator.liu.se>}, 
+@ifinfo
+P�r
+@end ifinfo
+@iftex
+P@"ar
+@end iftex
+Emanuelsson @code{<pell@@lysator.liu.se>}, Thomas Bellman
+@code{<bellman@@lysator.liu.se>}, Lars Aronsson
+@code{<aronsson@@lysator.liu.se>}, David Byers @code{<byers@@lysator.liu.se>},
+Linus Tolke @code{<linus@@lysator.liu.se>} and
+@ifinfo
+Kent Engstr�m
+@end ifinfo
+@iftex
+Kent Eng@-str@"om@penalty-10000
+@end iftex
+@code{<kent@@lysator.liu.se>}.
+
+The LysKOM developers can be reached by email to @code{lyskom@@lysator.liu.se}.
+
+@menu 
+* Document Revision History::
+* Protocol Revision History::
+* Protocol Design Principles::
+* Notation::
+@end menu
+
+@node Document Revision History, Protocol Revision History, Overview, Overview
+@section Document Revision History
+
+@table @asis
+@item 8.0: 1995-11-10
+Protocol version 8 is being documented. This specification was translated to
+English and converted to Texinfo by David Byers.
+
+@item 7.1: 1995-01-08.
+Protocol and document revision history were added by Per Cederqvist. Outline
+mode was used to make the document more manageable. This version was
+distributed with lyskomd 1.7.1.
+
+@item 7.0: 1994-12-31.
+The first specification with a version number. All calls that had been added
+since 1991-06-25 were documented. Pell and Per Cederqvist did the deed. This
+version was distributed with lyskomd 1.7.0.
+
+@item 1993-05-19.
+Linus Tolke wrote comments for some calls that were without comments.
+
+@item 1992-07-06.
+Linus Tolke converted the document to ISO 8859-1.
+
+@item 1991-08-12.
+Per Cederqvist started using version control for documentation.
+
+@item 1991-06-25.
+Lars Aronsson documented the protocol that was in use at the time.
+@end table
+
+@node Protocol Revision History, Protocol Design Principles, Document Revision History, Overview
+@section Protocol Revision History
+
+@subsection Protocol version 8.0
+
+@table @asis 
+@item Added Functionality
+@itemize @bullet
+@item
+30=add-recipient: Can change recpt to cc_recpt and vice versa.
+@item
+21=set-conf-type: Accepts Conf-Type and Extended-Conf-Type.
+@item
+10=create-conf: Accepts Conf-Type and Extended-Conf-Type.
+@end itemize
+
+@item New Commands
+@itemize @bullet
+@item
+77=set-last-read
+@item
+78=get-uconf-stat
+@end itemize
+@end table
+
+@subsection Protocol version 7 (first implemented in lyskomd 1.7.0)
+
+@table @asis
+@item Added Functionality
+@itemize @bullet
+@item
+53=send-message: Recipient can be a conference or a person.
+@end itemize
+
+@item New Commands
+@itemize @bullet
+@item
+74=re-z-lookup
+@item
+75=get_version_info
+@item
+76=lookup_z_name
+@end itemize
+
+@item Other
+@itemize @bullet
+@item
+Det asynkrona meddelanded 1=i-am-off has been removed
+@end itemize
+@end table
+
+@subsection Protocol Version 6 (first implemented in lyskomd 1.4.0)
+
+@table @asis
+@item New Calls
+@itemize @bullet
+@item
+67=lookup_person
+@item
+68=lookup_conf
+@item
+69=set_client_version
+@item
+70=get_client_name
+@item
+71=get_client_version
+@item
+72=mark_text
+@item
+73=unmark_text
+@end itemize
+@end table
+
+
+@subsection Protocol Version 5 (first implemented in lyskomd 1.3.0)
+
+@table @asis
+@item New Calls
+@itemize @bullet
+@item
+65=re_lookup_person
+@item
+66=re_lookup_conf
+@end itemize
+@end table
+
+@subsection Protocol Version 4 (first implemented in lyskomd 1.1.1)
+
+@table @asis
+@item New Calls
+@itemize @bullet
+@item
+62=login
+@item
+63=who_is_on_ident
+@item
+64=get_session_info_ident
+@end itemize
+@end table
+
+@subsection Protocol Version 3 (first implemented in lyskomd 1.1.0)
+
+@table @asis
+@item New Calls
+@itemize @bullet
+@item
+61=find_previous_text_no
+@item
+60=find_next_text_no
+@item
+59=create_anonymous_text
+@item
+58=get_last_text
+@end itemize
+@end table
+
+@subsection Protocol Version 2 (first implemented in lyskomd 0.30.0)
+
+@table @asis
+@item New Calls
+@itemize @bullet
+@item
+57=set_user_area
+@end itemize
+@end table
+
+@subsection Protocol Version 1 (first implemented in lyskomd 0.29.2)
+
+@table @asis
+@item New Calls
+All calls from 0--56.
+@end table
+
+
+@node Protocol Design Principles, Notation, Protocol Revision History, Overview
+@section Transport Protocol Requirements
+
+LysKOM protocol A can be run on top of any reliable, bidirectional,
+8-bit data stream. All current implementations use TCP/IP. At Lysator
+port 4894 is used on the host @code{kom.lysator.liu.se}.
+
+Data in protocol A is ASCII clear text except within hollerith strings, where
+arbitrary eight-bit characters are allowed. Data arguments are separated by
+whitespace. The reason for this unorthodox design is that the protocol should
+be usable from a text-only terminal, something that is very useful during
+server and early client development.
+
+
+@node Notation, , Protocol Design Principles, Overview
+@section Notation
+
+This specification uses a BNF-like grammar to describe the protocol and its
+data elements. It does not use ASN.1 because we don't know ASN.1 and probably
+wouldn't like it very much even if we did.
+
+Data fields have been  given names that start with  a lower-case  letter. Data
+types have names that start with an upper-case letter. The operator @code{::=}
+defines the name to its left and @code{:} (a colon) specifies a type. Comments
+start with  @code{!} (exclamation mark) and   alternatives are separated  by a
+@code{|}  (vertical bar.) A  @code{;} (semicolon) terminates statements in the
+grammar. In some specifications there  are literal strings. There  is to be no
+whitespace before or after  literal strings unless  there is whitespace in the
+literal itself.
+
+
+@node Introduction, , , Top
+@chapter Introduction
+
+This chapter introduces the concepts used in LysKOM, such as articles,
+conferences and sessions. 
+
+@menu
+* Articles ::
+* Conferences ::
+* Persons and Sessions ::
+* The Misc-Info List ::
+* Security ::
+* Membership and Reading::
+* Client-Server Dialog ::
+@end menu
+
+
+@node Articles, Conferences, , Introduction
+@section Articles
+
+An article is represented as a value of the type @code{Text-Stat} and a
+string containing the article contents. An article will usually have one
+or more recipients and may be a comment or footnote to other
+articles. Each article is kept in the database until it is older than
+the @code{nice} value of each of its recipients and it is not marked by
+any user.
+
+Currently there is a structure called a @code{Misc-Info-List} associated with
+the @code{Text-Stat}. This list contains information about recipients,
+senders, comments and footnotes. In the future the information contained in
+the @code{Misc-Info-List} will be integrated into the @code{Text-Stat}.
+
+Every article has at least one number, the global article number. Global
+numbers are assigned in ascending order to new articles, and are never
+reused. If an article has recipients it will also have a local number for each
+recipients. Local numbers are used in some data structures to provide more
+compact storage and to provida an ordering of articles for a particular
+recipient. Local numbers are assigned in ascending order and are never reused
+for a particular recipient, though different recipients will have articles
+with the same local numbers.
+
+Occasionally it is necessary to map between local and global numbers. The
+server call @code{get-map} does this.
+
+
+
+@node Conferences, Persons and Sessions, Articles, Introduction
+@section Conferences
+
+Conferences hold articles. They are represented in the protocol as a data type
+called @code{Conference}. Each conference has a @emph{creator}, the person who
+created the conference, and a @emph{supervisor}, a conference whose members can
+modify the conference. If the supervisor is a person, the members of that
+person's letterbox are supervisors, which in most cases is only that person.
+We have also introduced a type called @code{UConference} (pronounced
+micro-conf-stat) which holds a subset of the information contained in the full
+@code{Conference} type. Use the @code{UConference} type whenever possible since
+it places a much smaller load on the LysKOM server.
+
+Each conference has a type, which is essentially a collection of boolean
+flags. Currently the types @code{rd-prot}, @code{letterbox},
+@code{secret}, @code{original} and @code{anarchy} are defined.
+
+@table @code
+@item rd-prot
+The conference is protected from reading by non-members. Persons become
+members by having one of the existing members or supervisors add him or
+her to the conference. This restriction is enforced by the server.
+@item original
+Conferences of this type are intended for original articles
+only. Comments are to be redirected to the super-conference
+instead. This restriction is currently not enforced by the server;
+clients must implement this functionality.
+@item letterbox
+Conferences of this type are connected to persons. Letters to a person are
+sent to the letterbox and the name of the letterbox is synchronised with the
+person name. It is currently not possible to explicitly set or clear this flag
+on a conference.
+@item secret
+Conferences of this type are secret. The server will not divulge any
+information of the existence of the conference to persons who are not
+members or supervisors of the conference. If a letterbox is made secret,
+that person cannot log in using the person name, but must specify a
+person number instead.
+@item anarchy
+Conferences of this type accept anonymous articles. Other conferences will
+reject anonymous articles. This restriction is currently not enforced by the
+server, but will be soon.
+@end table
+
+
+
+@node Persons and Sessions, The Misc-Info List, Conferences, Introduction
+@subsection Persons and Sessions
+
+Persons are represented in the protocol by values of the type
+@code{Person}. Associated with persons are statistics, a set of personal flags
+and a set of privileges (@pxref{Security}.) Persons are also associated with a
+conference that has the same number as the person and the @code{letterbox} bit
+set.
+
+Connections to the server are represented as values of the type
+@code{Session-Info-Ident} or @code{Session-Info}. Sessions have session number
+that are unique for each session in the lifetime of the server execution. A
+single user can have several sessions running at once. The session is not
+released until the network connection is closed; a user can log in and out
+repeatedly in a single session.
+
+
+@node The Misc-Info List, Security, Persons and Sessions, Introduction
+@section The Misc-Info List
+
+The @code{Misc-Info} list contains tagged data. The fields are sent in groups
+pertaining to a particular type of information: information about recipient;
+carbon copy recipient, comment to; footnote to; comment in and footnote in. The
+information groups may be sent in any order and there may be any number of
+groups. Within each group the elements are always sent in the order listed
+below.
+
+@subsubsection Recipient
+
+@table @code
+@item recpt
+Starts a recipient group. It contains the conference number of a recipient of
+the article.
+@item loc-no
+Always present within a recipient group. It contains the local text number of
+the article in the conference specified by the preceding @code{recpt} field.
+@item rec-time
+If the recipient is a person, this element is added by the server when the
+recipient marks the article as read. It contains the time when the text was
+read.
+@item sent-by
+Present when the recipient was added by a person other than the author (after
+the article was created.) It contains the person number of the person who added
+the recipient.
+@item sent-at
+Present when the recipient was added after the article was created. It contains
+the time when the recipient was added.
+@end table
+
+
+@subsubsection Carbon Copy (CC) Recipient
+
+The carbon-copy recipient group is identical to the recipient group above. The
+difference is how new comments to an article with a recipient or carbon-copy
+recipient are treated. A comment to an article is sent to all recipients, but
+not to carbon-copy recipients of the original article.
+
+@table @code
+@item cc-recpt
+Starts a carbon-copy recipient group. It contains the conference number of a
+carbon-copy recipient of the article.
+@item loc-no
+Always present in a CC recipient group. It contains the local text number of
+the article in the conference specified by the most recent @code{cc-recpt}
+field.
+@item rec-time
+Present after the CC recipient has read the article. It contains the time when
+the article was read.
+@item sent-by
+Present when a CC recipient was added by a person other than the author
+after the article had been created. It contains the person number of the
+person who added the cc recipient.
+@item sent-at
+Present when a CC recipient was added after the article had been
+created. It is the time when the CC recipient was added.
+@end table
+
+
+@subsubsection Comment To
+
+@table @code
+@item comm-to
+Always present when the article is a comment to another article.
+@item sent-by
+Present when the article was added as a comment by a person other than
+the author, after the article had been created. It contains the person
+number of the person who added the article as a comment.
+@item sent-at
+Present when the article was added as a comment after the article had
+been created. It contains the time when is was added as a comment.
+@end table
+
+
+@subsubsection Footnote To
+
+@table @code
+@item foot-to
+Always present when the article is a footnote to another article.
+@item sent-at
+Present when the article was added as a footnote after the article had
+been created. It contains the time when is was added as a footnote.
+@end table
+
+
+@subsubsection Comment in
+
+@table @code
+@item comm-in
+Present when there are comments to this article. It contains the article
+number which is a comment to this article.
+@end table
+
+
+@subsubsection Footnote in
+
+@table @code
+@item foot-in
+Present when there are footnotes to this article. It contains the
+article number which is a footnote to this article.
+@end table
+
+
+@node Security, Membership and Reading, The Misc-Info List, Introduction
+@subsection Security
+
+Security in LysKOM is based on two components. Each person has a set of
+privileges and each session has a security level. Rights in the system
+require both the sufficient privileges and a sufficient security
+level. The privileges currently available are wheel, admin, statistic,
+create-conf, create-pers and change-name. Security levels range from 0
+to 255.
+
+
+@table @code
+@item wheel
+@emph{Normally not assigned}
+@table @asis
+@item Level 0
+Person may always log in, even when LysKOM is crowded.
+@item Level 6
+Person may set Priv-Bits for all persons.
+@item Level 7
+Person may set password for all persons.
+@item Level 8
+Person acts as supervisor for everything.
+@item Level 10
+Person can read all articles.
+@end table
+
+@item admin
+@emph{Normally not assigned}
+@table @asis
+@item Level 1
+Shut down the server@*
+Set motd_of_kom@*
+Read last_login
+@item Level 2
+Read status of secret conferences and persons@*
+Read the protected parts of person and conference statuses@*
+Read the entire text status, even when there are secret recipients
+@item Level 3
+Change everybody's names
+@item Level 4
+Add/remove members@*
+Add/remove recipients to articles
+@item Level 5
+Set super-conference@*
+Remove articles
+@item Level 6
+Set administrator
+@end table
+
+@item statistic
+@emph{Normally not assigned}
+@table @asis
+@item Level 2
+Read the statistics portions of persons, even if protected
+@end table
+
+@item create_conf
+@emph{Normally assigned}
+@table @asis
+@item Level 0
+Create conferences
+@end table
+
+@item create_pers
+@emph{Normally assigned}
+@table @asis
+@item Level 0
+Create persons
+@end table
+
+@end table
+
+
+@node Membership and Reading, Client-Server Dialog, Security, Introduction
+@section Membership and Reading
+
+Persons' memberships in conferences are represented in the protocol as arrays
+of @code{Membership}-typed values. This structure contains a record of what
+the person has read in that conference.
+
+The first part of the record is the @code{last-text-read} field. It contains
+the highest local text number such that the person has read every text with an
+equal or lower local number. The second part of the record is the
+@code{read-texts} array, which contains the local text numbers higher than
+@code{last-text-read} that are also read.
+
+Finding out which articles a person has read in a particular conference
+requires a few calls. Normally, a client will retrieve a batch of perhaps 50
+articles at a time. The outline of the process is as follows:
+
+@enumerate
+@item Fetch the membership to get the @code{last-text-read}
+@item Translate 50 local numbers starting as @code{last-text-read} to global
+numbers.
+@item Remove the local numbers that are in @code{read-texts} from the result
+@item Get and translate more texts as needed.
+@end enumerate
+
+The process is complicated because of the translation between local and global
+text numbers. In the future there will hopefully be a single call that does
+this work in the server. 
+
+
+@node Client-Server Dialog, ,Membership and Reading , Introduction
+@section Client-Server Dialog
+
+The client-server dialog consists of two phases, establishing the connection
+and the LysKOM session itself.
+
+@subsection Connecting to the Server
+
+A connection to the server is initiated by connecting to the appropriate
+network port@footnote{The default port for a LysKOM server is 4894} and sending
+a single letter which is used to select a protocol version followed by
+connection information required by that protocol. In protocol A the connection
+information is a Hollerith string saying who the user connecting is followed
+by a hewline character.
+
+When the server has accepted the connection its reply is
+protocol-dependent. Protocol A servers will reply with the string
+@code{LysKOM} on a single line.
+
+@example
+        % telnet kom.lysator.liu.se
+        Trying 130.236.254.151 ...
+        Connected to varg.lysator.liu.se.
+        Escape character is '^]'.
+        A5Hbyers
+        LysKOM
+@end example
+
+After connecting, calls to the server can be made. Most calls require the user
+to log in, but some calls can be made without a log-in. Calls to the server
+are made by sending a reference number followed by the call as specified.
+
+@example
+        server-call ::=
+                ( ref-no        :       INT32;
+                  request       :       Protocol-Request;
+                )
+@end example
+
+At some future point the server will reply with the result of the request or
+an error code preceded by an indicator and the reference number.
+
+@example
+        server-reply ::= ok-reply | error-reply;
+
+        ok-reply ::=
+                ( "="
+                  ref-no        :       INT32;
+                  reply-data;
+                )
+
+        error-reply ::=
+                ( "%"
+                  ref-no        :       INT32;
+                  error-no      :       Error-No;
+                  error-statuc  :       INT32;
+                )
+
+        error-no ::= INT32;
+@end example
+
+Our notation is not flexible enough to specify the two-way nature of the
+communication. @code{ref-no} in the reply is always the same as @code{ref-no}
+in the corresponding request. @code{reply-data} depends on which request was
+made and is specified together with each request.
+
+Please note that there is no whitespace after the initial indicator in the
+reply.
+
+
+@node Data Types, , , Top
+@chapter Data Types
+
+The data types in protocol A come in two flavors. The first (vanilla) are the
+simple data types from which the LysKOM (chocolate) data types are
+built. Simple data types include things like integers and strings while
+complex data types include things such as conferences and people.
+
+@menu
+* Simple Data Types::
+* LysKOM Data Types::
+@end menu
+
+@node Simple Data Types, LysKOM Data Types, Data Types, Data Types
+@section Simple Data Types
+
+Data elements are sent from client to server separated by one or more ASCII
+spaces (0x20), tab characters (0x09), line feeds (0x0A) or carriage returns
+(0x0D.) In messages from server to client the data elements are separated by
+exactly one space character and the entire message terminated with a line
+feed.
+
+
+@subsection Integers
+
+@dfn{INT32}, @dfn{INT16}, @dfn{INT8} and @dfn{BOOL} are non-negative integers
+which must fit in 32, 16, 8 and 1 bits, respectively. They are transmitted to
+the server in ASCII-encoded decimal notation.
+
+
+@subsection Strings
+
+@dfn{HOLLERITH} denotes character strings of arbitrary length. They are
+transmitted as @code{<n>H<text>} where @code{<text>} is the string and
+@code{<n>} is the number of characters in @code{<text>} in decimal
+notation. All byte values are allowed in the string itself, including nulls.
+
+
+
+@subsection Bit Strings
+
+@dfn{BITSTRING} is a string of bits, commonly used for a set of boolean-valued
+flags. Bit strings are denoted as
+
+@example
+        BITSTRING ( name-1; name-2; name-3; ... )
+@end example
+
+in this specification. They are transmitted as a sequence of ASCII ones and
+zeroes in the order the fields are listed.
+
+For instance, given the specification
+
+@example
+        shape-of-world : BITSTRING (
+                is-flat;
+                is-round;
+                is-2d;
+                is-3d;
+        )
+@end example
+
+most peoples idea of @code{shape-of-world} would be sent as @code{0101} (round
+and three-dimensional.)
+
+
+@subsection Arrays
+
+@dfn{ARRAY} is a list of a fixed number of elements of a single type. The
+specification for an array is @code{ARRAY <type>} where @code{<type>} is the
+type of the array elements.
+
+Arrays are transmitted as an @code{<n> @{ <element> <element> ... @}} where
+@code{<n>} is the number of elements and each @code{<element>} is an element
+of the array. A special case is when the array is empty, in which case it is
+transmitted as @code{0 *}.
+
+In some calls the client can ask the server not to send the array contents,
+only its length. In these cases the array is transmitted as @code{<n> *} where
+@code{<n>} is the number of elements in the array.
+
+
+@subsection Selection
+
+@dfn{SELECTION} is tagged data. It consists of an INT32 selector followed by a
+tail of an arbitrary type and is specified as
+
+@example
+        SELECTION (
+                <n>=<name>        <tail> : <type>;
+                <n>=<name>        <tail> : <type>;
+                ...
+        )
+@end example
+
+where each @code{<n>} is the selector value, @code{<name>} the selector name
+and @code{<tail>} the name of the selector tail and @code{<type>} its type.
+
+When transmitted, the selector is transmitted as an INT32 followed by the tail
+belonging to that selector. For instance, given the specification
+
+@example
+        phrase : SELECTION (
+               1=hello          name : HOLLERITH;
+               2=howdy          ;
+        )
+@end example
+
+two legal messages of the type @code{phrase} are @samp{1 4HJohn} and @samp{2}.
+
+
+@subsection RPC
+
+@dfn{RPC} is a notation used to specify calls to the server. An RPC
+specification has the following form:
+
+@example
+        RPC (
+                <call> [<n>] ( <request> ) -> <reply> ;
+                <call> [<n>] ( <request> ) -> <reply> ;
+        )
+@end example
+
+where each @code{<call>} is the name of a call, @code{<n>} is the call number,
+@code{<request>} is a single data element sent as a request and @code{<reply>}
+is a single data element sent in reply from the server.
+
+RPC calls are trasmitted as @code{<n> <request>} where @code{<n>} and
+@code{<request>} have the same meaning as above. Note that in the client-server
+dialog a reference number must also be supplied with each request. This
+reference number is not part of the RPC itself, but is required for
+communications @xref{Client-Server Dialog}.
+
+
+
+@subsection Structure
+
+Structures are collections of several data items. In the specification they
+are written as
+
+@example
+        ( <name> : <type> ;
+          <name> : <type> ;
+          ...
+        )
+@end example
+
+where each @code{<name>} is the name of a data field and the corresponding
+@code{<type>} is its type. 
+
+Structures are transmitted as a sequence of their fields.
+
+
+@node LysKOM Data Types, , Simple Data Types, Data Types
+@section LysKOM Data Types
+
+In this section the data types specific to LysKOM are defined. Most of these
+will probably make very little sense until you know what calls there are. This
+section does not include the server calls or asynchronous messages, even
+though these are also data types.
+
+Since the types defined here are all based on the simple types, the
+definitions are more concise in this section.
+
+@subsection Common Types
+
+The types defined in this section are fairly simple and used in many of the
+more complex data types. 
+
+@subsubsection Time
+
+@example
+        Time ::=
+              ( seconds         :       INT32;
+                minutes         :       INT32;
+                hours           :       INT32;
+                day             :       INT32;
+                month           :       INT32;
+                year            :       INT32;
+                day-of-week     :       INT32;
+                day-of-year     :       INT32;
+                is-dst          :       BOOL;
+              )
+@end example
+
+@code{Time} is used to specify times in several data structures. The fields
+@code{seconds}, @code{minutes} and @code{hours} give wall clock time.
+@code{day} is the day of month and @code{month} is the current month, starting
+with zero for January. @code{year} is the number of years since
+1900. @code{day-of-week} is the current weekday, with zero used for
+Sunday. @code{day-of-year} is how many days of the year have passed starting
+with zero and @code{is-dst} is true when the time indicated is daylight
+savings time.
+
+When the server receives a @code{Time} structure from a client it ignores the
+@code{day-of-week} and @code{day-of-year} fields. 
+
+All times are expressed in the time zone of the server.
+
+@subsubsection Conference Numbers
+
+@example
+        Conf-No         ::=     INT16;
+        Conf-No-List    ::=     ARRAY Conf-No
+@end example
+
+These two types denote conference numbers. @code{Conf-No} is used when only a
+single number is permitted and @code{Conf-No-List} when multiple conference
+numbers can be specified.
+
+
+@subsubsection Text Numbers
+
+@example
+        Text-No         ::=     INT32;
+        Local-Text-No   ::=     INT32;
+        Text-List       ::=
+              ( first-local-no  :       Local-Text-No;
+                texts           :       ARRAY Text-No;
+              )
+@end example
+
+These three types are used to indicate articles in the LysKOM
+database. @code{Text-No} is a global text number and @code{Local-Text-No} a
+local text number. @code{Text-List} is used when a mapping from local to
+global numbers are required.
+
+@subsubsection Person and Session Numbers
+
+@example
+        Pers-No         ::=     Conf-No;
+        Pers-List       ::=     ARRAY Pers-No;
+        Session-No      ::=     INT32;
+@end example
+
+@code{Pers-No} is used to indicate a person and @code{Pers-List} to indicate
+several. @code{Session-No} is used in a few data structures relating to
+information about active LysKOM sessions.
+
+
+
+@subsection Conference Types
+
+@example
+        Conf-Type ::= BITSTRING
+              ( rd_prot;
+                original;
+                secret;
+                letterbox;
+              )
+
+        Extended-Conf-Type ::=  BITSTRING
+              ( rd_prot;
+                original;
+                secret;
+                letterbox;
+                anarchy;
+                reserved1;
+                reserved2;
+                reserved3;
+              )
+
+        Any-Conf-Type   ::=     Conf-Type | Extended-Conf-Type;
+@end example
+
+These types are used to specify the type of a conference. @code{Conf-Type} is
+used in data types and calls that were created before version 8.0 of the
+protocol and has been augmented in @code{Extended-Conf-Type}. The type
+@code{Any-Conf-Type} is used when either is admissible.
+
+The bits have the following meaning (@pxref{Conferences}, for more info.)
+
+@table @code
+@item rd_prot
+If unset anyone can add themselves as members to the conference.
+
+@item original
+If set, comments are not allowed in the conference.
+
+@item secret
+If set the conference is secret. It's existence will only be revealed to
+members and supervisors.
+
+@item letterbox
+Set if the conference is a person's mailbox.
+
+@item anarchy
+Set if anonymous articles are allowed in the conference.
+
+@item reserved1
+@itemx reserved2
+@itemx reserved3
+Reserved for future use. The values of these bits should be never be modified
+or used by clients who do not know their meaning. When a new conference is
+created these should always be set to zero.
+@end table
+
+
+@subsection Conference Search Results
+
+@example
+        Conf-Z-Info ::= 
+              ( name    :       HOLLERITH;
+                type    :       Conf-Type;
+                conf_no :       Conf_no;
+              )
+
+        Conf-Z-Info-List ::= ARRAY Conf-Z-Info;
+@end example
+
+These types are used for the result of some calls that search for conferences
+based on their names.
+
+
+@subsection Conference Status Types
+
+@example
+        Garb-Nice ::= INT32;
+
+        Conference ::=   
+                ( name                  :       HOLLERITH;
+                  type                  :       Conf-Type;
+                  creation-time         :       Time;
+                  last-written          :       Time;
+                  creator               :       Pers-No;
+                  presentation          :       Text-No;
+                  supervisor            :       Conf-No;
+                  permitted-submitters  :       Conf-No;
+                  super-conf            :       Conf-No;
+                  msg-of-day            :       Text-No;
+                  nice                  :       Garb-Nice;
+                  no-of-members         :       INT16;
+                  first-local-no        :       Local-Text-No;
+                  no-of-texts           :       INTEGER;
+                )
+
+        UConference ::=
+                ( name                  :       HOLLERITH;
+                  type                  :       Extended-Conf-Type;
+                  highest-local-no      :       Local-Text-No;
+                  nice                  :       Garb-Nice;
+                )
+@end example
+
+These three types are used to specify information about a
+conference. @code{Garb-Nice} is a quantity used to specify how long articled
+are kept in a conference before being removed. @code{Conference} is the full
+information about a conference and @code{UConference} is brief information
+about a conference.
+
+The fields of @code{Conference} are
+
+@table @code
+@item name
+The name of this conference.
+@item type
+The type of the conference.
+@item creation-time
+The date and time when the conference was created.
+@item last-written
+The date when something was last written in the conference.
+@item creator
+The person who created the conference.
+@item presentation
+The article containing the conference presentation or zero if the conference
+has no presentation.
+@item supervisor
+The conference@footnote{The @code{supervisor} may be a person, in which case
+the members of that person's letterbox become supervisors.} who supervises this
+conference.
+@item permitted-submitters
+The conference whose members@footnote{@code{permitted-submitters} can be a
+person, in which case all persons who are members of the associated letterbox
+are allowed to submit articles to the conference.}  may submit articles to the
+conference, or zero if anyone may do so.
+@item super-conf
+The conference that receives comments if this conference does not accept
+them. Zero means the author of the comment in question.
+@item msg-of-day
+The conference notice, if any. 
+@item nice
+The number of days an article should be kept before being removed from the conference.
+@item no-of-members
+The number of members of this conference.
+@item first-local-no
+The local number of the oldest existing article in the conference.
+@item no-of-texts
+The number of articles in the conference.
+@end table
+
+The fields of @code{UConference} are
+
+@table @code
+@item name
+The name of this conference.
+@item type
+The conference type. Note that this is an extended conference type, unlike the
+type field of @code{Conference}.
+@item highest-local-no
+The local number of the newest article in the conference.
+@item nice
+The number of days an article should be kept before being removed from the conference.
+@end table
+
+
+@subsection Server Information
+
+@example
+        Info ::=    
+              ( version         :       INT32;
+                conf-pres-conf  :       Conf-No;
+                pers-pres-conf  :       Conf-No;
+                motd-conf       :       Conf-No;
+                kom-news-conf   :       Conf-No;
+                motd-of-lyskom  :       Text-No;
+              )
+@end example
+
+This data type contains information about the LysKOM server. The fields are
+
+@table @code
+@item version
+The server version encoded as a number @code{aabbcc} where @code{aa} is the
+major version number, @code{bb} the minor number and @code{cc} the secondary
+minor version. For instance, @code{10607} is version 1.6.7 of the server. If
+greater than 10699 the @code{get-version-info} should be used instead.
+@item conf-pres-conf
+The conference that contains conference presentations.
+@item pers-pres-conf
+The conference that contains person presentations.
+@item motd-conf
+The conference that contains conference and person notices.
+@item kom-news-conf
+The conference that contains news about LysKOM.
+@item motd-of-lyskom
+The number of an article to display when LysKOM is entered or zero if there is
+none.
+@end table
+
+
+@subsection Person Status Types
+
+@example
+        Person ::=
+              ( username                :       HOLLERITH;
+                privileges              :       Priv-Bits;
+                flags                   :       Personal-Flags;
+                last-login              :       Time;
+                user-area               :       Text-No;
+                total-time-present      :       INT32;
+                sessions                :       INT32;
+                created-lines           :       INT32;
+                created-bytes           :       INT32;
+                read-texts              :       INT32;
+                no-of-text-fetches      :       INT32;
+                created-persons         :       INT16;
+                created-confs           :       INT16;
+                first-created-local-no  :       INT32;
+                no-of-created-texts     :       INT32;
+                no-of-marks             :       INT16;
+                no-of-confs             :       INT16;
+              )
+
+        Personal-Flags ::= BITSTRING 
+              ( unread-is-secret;
+                flg2;
+                flg3;
+                flg4;
+                flg5;
+                flg6;
+                flg7;
+                flg8;
+              )
+
+
+        Priv-Bits ::= BITSTRING 
+              ( wheel;
+                admin;
+                statistic;
+                create_pers;
+                create_conf;
+                change_name;
+                flg7;
+                flg8;
+                flg9;
+                flg10;
+                flg11;
+                flg12;
+                flg13;
+                flg14;
+                flg15;
+                flg16;
+              )
+@end example
+
+These types are used to specify information about persons. @code{Person}
+contains the information about a person, @code{Personal-Flags} contains flags
+set by the user and @code{Priv-Bits} contains the person's privileges.
+
+The fields of @code{Person} are
+
+@table @code
+@item username
+The name of the user.
+@item privileges
+The privileges of the person.
+@item flags
+Flags set by the user.
+@item last-login
+The time when the person last logged on.
+@item user-area
+The text number of the person's user area or zero if the person has no
+user area.
+@item total-time-present
+The number of seconds the person has been using LysKOM. 
+@item sessions
+The number of sessions the person has initiated.
+@item created-lines
+The number of lines of articles the person has written.
+@item created-bytes
+The number of characters the person has written.
+@item read-texts
+The number of articles the person has read.
+@item no-of-text-fetches
+The number of texts the person has retrieved from the server.
+@item created-persons
+The number of other persons this person has created.
+@item created-confs
+This holds the number of conferences created by the person.
+@item first-created-local-no
+The local number of the earliest existing article written by the person. The
+local number applies to a local-to-global mapping containing all articles
+written by the person.
+@item no-of-created-texts
+This holds the number of articles written by the person.
+@item no-of-marks
+The number of marked texts this person has.
+@item no-of-confs
+The numer of conferences the person is a member of.
+@end table
+
+
+@subsection Membership Information
+
+@example
+        Member          ::=     Pers-No;
+        Member-List     ::=     ARRAY Member;
+
+        Membership ::=
+              ( last-time-read  :       Time;
+                conference      :       Conf-No;
+                priority        :       INT8;
+                last-text-read  :       Local-Text-No;
+                read-texts      :       ARRAY Local-Text-No;
+              )
+
+        Membership-List ::=     ARRAY Membership;
+@end example
+
+These data types contain information about which conferences a person is a
+member of and what that person has unread in the conference. @code{Member}
+represents a member and @code{Member-List} several. @code{Membership} is
+information pertaining to the membership of a single person. Its fields are
+
+@table @code
+@item last-time-read
+The time when the person last read anything from the conference.
+@item conference
+The conference this membership data pertains to.
+@item priority
+The priority the person has assigned to the conference. The hihger the number,
+the higher the priority. In the future, priority zero will be used to indicate
+a passive membership.
+@item last-text-read
+The local number of last text read in the conference.
+@item read-texts
+Additional texts beyond @code{last-text-read} that have also been read.
+@end table
+
+
+@subsection Article Marks
+
+@example
+        Mark ::= 
+                ( text-no       :       Text-No;
+                  type          :       INT8
+                )
+
+        Mark-List ::= ARRAY Mark;
+@end example
+
+These data types hold information about a person's marks on
+articles. @code{Mark} holds information on a single mark and @code{Mark-List}
+on several.
+
+The fields of @code{Mark} are
+
+@table @code
+@item text-no
+The text number marked.
+@item type
+The mark value.
+@end table
+
+Before version eight of protocol A, the meaning of the mark value was
+unspecified. Work is underway to specify the meaning of certain mark values.
+
+
+
+@subsection Article Information
+
+@example
+        Misc-Info ::= SELECTION
+                ( 0=recpt       recipient       :       Conf-No;
+                  1=cc-recpt    cc-recipient    :       Conf-No;
+                  2=comm-to     comment-to      :       Text-No;
+                  3=comm-in     commented-i     :       Text-No;
+                  4=footn-to    footnote-to     :       Text-No;
+                  5=footn-in    footnoted-in    :       Text-No;
+                  6=loc-no      local-no        :       Local-Text-No
+                  7=rec-time    received-at     :       Time;
+                  8=sent-by     sender          :       Pers-No;
+                  9=sent-at     sent-at         :       Time;
+               )
+
+        Text-Stat ::=
+              ( creation-time   :       Time;
+                author          :       Pers-No;
+                no-of-lines     :       INTEGER;
+                no-of-chars     :       String-Size;
+                no-of-marks     :       INT16;
+                misc-info       :       ARRAY Misc-Info;
+              )
+@end example
+
+These two structures contain information about a single
+article. @code{Text-Stat} contains core information about the article and
+@code{Misc-Info} contains miscellaneous information related to the article.
+In the future, @code{Misc-Info} will become obsolete and @code{Text-Stat}
+will be extened with more information.
+
+A @code{Text-Stat} consists of the following:
+
+@table @code
+@item creation-time
+The time when the article was created.
+@item author
+The author of the article.
+@item no-of-lines
+The number of lines in the article.
+@item no-of-chars
+The number of characters in the article.
+@item no-of-marks
+The number of marks added to this article by persons.
+@item misc-info
+The @code{Misc-Info} list for this article.
+@end table
+
+@code{Misc-Info}, when sent to the client, is sent in a particular order
+(@pxref{The Misc-Info List}. The variants @code{Misc-Info} are (briefly):
+
+@table @code
+@item recpt
+Used to specify recipients of the article.
+@item cc-recpt
+Specifies recipients who have received a copy of the article but who will
+not receive comments.
+@item comm-to
+Specifies an article this article is a comment to.
+@item comm-in
+Specifies an article in which there are comments to this article.
+@item footn-to
+Specifies an article this article is a footnote to.
+@item footn-in
+Specifies an article to which this article is a footnote.
+@item loc-no
+Specifies the local text number of this article in the conference specified by
+@code{recpt} or @code{cc-recpt}.
+@item rec-time
+Specifies the time when this article was received by the conference specified
+by @code{recpt} or @code{cc-recpt}.
+@item sent-by
+Specifies who sent this article to the conference specified by @code{recpt} or
+@code{cc-recpt}.
+@item sent-at
+Specifies when the article was sent to the conference specified by
+@code{recpt} or @code{cc-recpt}.
+@end table
+
+
+@subsection Who Information
+
+@example
+        Who-Info-Old ::=
+              ( person                  :       Pers-No;
+                what-am-i-doing         :       HOLLERITH;
+                working-conference      :       Conf-No;
+              )
+
+        Who-Info-List-Old ::= ARRAY Who-Info-Old;
+
+        Who-Info ::=
+              ( person                  :       Pers-No;
+                working-conference      :       Conf-No;
+                session                 :       Session-No;
+                what-am-i-doing         :       HOLLERITH;
+                username                :       HOLLERITH;
+              )
+
+        Who-Info-List ::= ARRAY Who-Info;
+
+        Who-Info-Ident ::=
+              ( person                  :       Pers-No;
+                working-conference      :       Conf-No;
+                session                 :       Session-No;
+                what-am-i-doing         :       HOLLERITH;
+                username                :       HOLLERITH;
+                hostname                :       HOLLERITH;
+                ident-user              :       HOLLERITH;
+              )
+
+        Who-Info-Ident-List ::= ARRAY Who-Info-Ident;
+@end example
+
+These structures are used to retrieve and set information on who is currently
+using LysKOM. The types marked as ``old'' are obsolete but are included for
+completeness. @code{Who-Info-Old} identifies a user who is currently using
+LysKOM and @code{Who-Info-List-Old} identifies several. @code{Who-Info} is
+used to set information about a session and is returned by one obsolete
+call. @code{Who-Info-Ident} is the preferred data type to use.
+
+
+The fields of @code{Who-Info-Old} are
+@table @code
+@item person
+The person the information is about.
+@item what-am-i-doing
+A client-supplied string saying what the person is doing.
+@item working-conference
+The conference the person is currently in.
+@end table
+
+The fields of @code{Who-Info} are
+@table @code
+@item person
+The person the information is about.
+@item working-conference
+The conference the person is currently in.
+@item session
+The person's session number.
+@item what-am-i-doing
+A client-supplied string saying what the person is doing.
+@item username
+The name of the ``real'' user constructed from @code{hostname} and
+@code{ident-user} (see below) and information from the client.
+@end table
+
+
+
+The fields of @code{Who-Info-Ident} are
+@table @code
+@item person
+The person the information is about.
+@item working-conference
+The conference the person is currently in.
+@item session
+The person's session number.
+@item what-am-i-doing
+A client-supplied string saying what the person is doing.
+@item username
+The name of the ``real'' user constructed from @code{hostname} and
+@code{ident-user}.
+@item hostname
+The host the connection originated at.
+@item ident-user
+The user name according to the Ident 
+@ifinfo
+daemon
+@end ifinfo
+@iftex
+d@ae{}mon
+@end iftex
+ at the user's machine or ``unknown'' if Ident was not used.
+@end table
+
+
+
+@subsection Session Information
+@example
+        Session-Info ::= 
+              ( person                  :       Pers-No;
+                working-conference      :       Conf-No;
+                session                 :       Session-No;
+                what-am-i-doing         :       HOLLERITH;
+                username                :       HOLLERITH;
+                idle-time               :       INTEGER;
+                connection-time         :       Time;
+              )
+
+        Session-Info-Ident ::= 
+              ( person                  :       Pers-No;
+                working-conference      :       Conf-No;
+                session                 :       Session-No;
+                what-am-i-doing         :       HOLLERITH;
+                username                :       HOLLERITH;
+                hostname                :       HOLLERITH;
+                ident-user              :       HOLLERITH;
+                idle-time               :       INTEGER;
+                connection-time         :       Time;
+              )
+@end example
+
+These data types give information about a particular LysKOM
+session. @code{Session-Info} has been superseded by @code{Session-Info-Ident}
+but is documented here for completeness. 
+
+The fields of @code{Session-Info} are
+@table @code
+@item person
+The person using this session.
+@item working-conference
+The conference the session is currently in.
+@item session
+The number of this session.
+@item what-am-i-doing
+A client-supplied string saying what the person is currently doing.
+@item username
+The name of the ``real'' user (see @code{Who-Info} above.)
+@item idle-time
+The number of seconds since the last server call.
+@item connection-time
+The time when the connection was initiated. This is not the same as the amount
+of time the person has been on.
+@end table
+
+The fields of @code{Session-Info-Ident} are
+@table @code
+@item person
+The person using this session.
+@item working-conference
+The conference the session is currently in.
+@item session
+The number of this session.
+@item what-am-i-doing
+A client-supplied string saying what the person is currently doing.
+@item username
+The name of the ``real'' user (see @code{Who-Info-Ident} above.)
+@item hostname
+The host the connection originated at.
+@item ident-user
+The user name accoring to the Ident
+@ifinfo
+daemon
+@end ifinfo
+@iftex
+d@ae{}mon
+@end iftex
+at the user's machine or ``unknown''
+if Ident was not used.
+@item idle-time
+The number of seconds since the last server call.
+@item connection-time
+The time when the connection was initiated. This is not the same as the amount
+of time the person has been on.
+@end table
+
+@node Protocol Requests, , , Top
+@chapter Protocol Requests
+
+This chapter deocuments all calls that can be made to the server. All calls
+are annoted with the protocol version in which they appeared and their current
+status, which is one of
+
+@table @samp
+@item Experimental
+The call is experimental. No client should rely on the existence of this
+call. Experimental calls that are useful will often become recommended in
+future versions.
+@item Recommended
+The call is a standard call. Clients are recommended to use these calls rather
+than experimental or obsolete ones. Servers are required to implement all
+recommended calls.
+@item Obsolete
+The call should no longer be used by clients. Servers should implement these,
+or  they will be incompatible with old client versions.
+@end table
+
+@menu
+  Call Name               Ststus Description                             Number
+-------------------------------------------------------------------------------
+* login-old::                  O Log in to LysKOM. Call 62 is preferred     (0)
+* logout::                       Log out. Call 62 to log in again           (1)
+* pepsi::                        Change current conference                  (2)
+* change-name::                  Change name of a conference or person      (3)
+* change-what-i-am-doing::       Whance what-am-i-doing in who information  (4)
+* create-person::                Create a person                            (5)
+* get-person-stat-old::        O Get person information. Use call 49        (6)
+* set-priv-bits::                Set privileges of a person                 (7)
+* set-passwd::                   Set password of a person                   (8)
+* query-read-texts::             Get info on what is read                   (9)
+* create-conf::                  Create a conference                       (10)
+* delete-conf::                  Delete a conference                       (11)
+* lookup-name::                O Look up a name. Replaced by call 76       (12)
+* get-conf-stat-old::          O Get conference information. Use call 50   (13)
+* add-member::                   Add a member to a conference              (14)
+* sub-member::                   Remove a member from a conference         (15)
+* set-presentation::             Set the presentation of a conference      (16)
+* set-etc-motd::                 Set conference notice                     (17)
+* set-supervisor::               Set supervisor of a conference            (18)
+* set-permitted-submitters::     Set permitted subumitters of a conference (19)
+* set-super-conf::               Set super-conference of a conference      (20)
+* set-conf-type::                Set the type of a conference              (21)
+* set-garb-nice::                Set garb-nice of a conference             (22)
+* get-marks::                    Get marks for a person                    (23)
+* mark-text-old::              O Mark a text. Replaced by calls 72 and 73  (24)
+* get-text::                     Get an article or part of an article      (25)
+* get-text-stat::                Get text status information               (26)
+* mark-as-read::                 Mark an article as read in a conference   (27)
+* create-text::                  Create an article                         (28)
+* delete-text::                  Delete an article                         (29)
+* add-recipient::                Add a recipient to an article             (30)
+* sub-recipient::                Remove a recipient from an article        (31)
+* add-comment::                  Add a comment to an article               (32)
+* sub-comment::                  Remove a comment from an article          (33)
+* get-map::                      Map local text numbers to global ones     (34)
+* get-time::                     Get the current time                      (35)
+* get-info::                     Get server information                    (36)
+* add-footnote::                 Add an article as a footnote to another   (37)
+* sub-footnote::                 Remove a foornote from an article         (38)
+* who-is-on-old::              O Get active sessions. Replaced by call 63  (39)
+* set-unread::                   Set number of unread in a conference      (40)
+* set-motd-of-lyskom::           Set LysKOM message of the day             (41)
+* enable::                       Set security level                        (42)
+* sync-kom::                     Save the database                         (43)
+* shutdown-kom::                 Shut LysKOM down                          (44)
+* broadcast::                  O Broadcast a message. Replaced by call 53  (45)
+* get-membership::               Get membership for a person               (46)
+* get-created-texts::            Get texts created by a user               (47)
+* get-members::                  Get members of a conference               (48)
+* get-person-stat::              Get status information for a person       (49)
+* get-conf-stat::                Get status information for a conference   (50)
+* who-is-on::                  O Get current sessions. Replaced by call 63 (51)
+* get-unread-confs::             Get conferences with unread articles      (52)
+* send-message::                 Send a personal message                   (53)
+* get-session-info::           O Get session information. Use call 64      (54)
+* disconnect::                   Disconnect a session                      (55)
+* who-am-i::                     Get current session number                (56)
+* set-user-area::                Set a person's user area                  (57)
+* get-last-text::              E Get text created before a certain time    (58)
+* create-anonymous-text::      E Create an anonymous text                  (59)
+* find-next-text-no::          E Get next text number                      (60)
+* find-previous-text-no::      E Get previous text number                  (61)
+* login::                        Log in to LysKOM                          (62)
+* who-is-on-ident::              Get current sessions                      (63)
+* get-session-info-ident::       Get session information                   (64)
+* re-lookup-person::           O Look up a person based on name            (65)
+* re-lookup-conf::             O Look up a conference based on name        (66)
+* lookup-person::              O Find persons matching abbreviated name    (67)
+* lookup-conf::                  Find conference matching abbreviated name (68)
+* set-client-version::           Set the name and version the client       (69)
+* get-client-name::              Get the name of the client                (70)
+* get-client-version::           Get the version of the client             (71)
+* mark-text::                    Mark a text                               (72)
+* unmark-text::                  Unmark a text                             (73)
+* re-z-lookup::                  Lookup for conferences and persons        (74)
+* get-version-info::             Get protocol version of server            (75)
+* lookup-z-name::                Look up an abbreviated name               (76)
+* set-last-read::              E Set text last read in a conference        (77)
+* get-uconf-stat::             E Get abbreviated conference status         (78)
+@end menu
+
+@iftex
+@section Available Requests
+@end iftex
+
+@node login-old, logout, , Protocol Requests
+@subsection login-old (1) Obsolete
+
+@example
+        login-old <0> (( person : Pers-No;
+                         passwd : HOLLERITH )) -> ( );
+@end example
+
+Log in as a person. This call has been replaced by call 62, @ref{login}.
+
+@node logout, pepsi, login-old, Protocol Requests
+@subsection logout (1) Recommended
+
+@example
+        logout <1> ( ) -> ( );
+@end example
+
+Log out from LysKOM. This call never fails. 
+
+This call does not disconnect the session; use @ref{disconnect} for
+that. After issuing a logout call the client can reconnect as the same or a
+different person using the @ref{login} command.
+
+For a client that needs to log in as several different users, issuing multiple
+logout and login requests during one session is faster and places less load on
+the server than does creating new sessions.
+
+@node pepsi, change-name, logout, Protocol Requests
+@subsection pepsi (1) Recommended
+
+@example
+        pepsi <2> ( conference : Conf-No ) -> ( ) ;
+@end example
+
+Change current conference of a session. The name of this call is a joke
+(if you figure it out, email us, but I'm not telling.) I haven't figured out
+what good this call is yet.
+
+@node change-name, change-what-i-am-doing, pepsi, Protocol Requests
+@subsection change-name (1) Recommended
+
+@example
+        change-name <3> (( conference : Conf-No;
+                           new-name   : HOLLERITH )) -> ( ) ;
+@end example
+
+This call changes the name of a conference or a person. To change the name of
+a conference the session issuing the call must be logged in as a person who
+either has special privileges or is the supervisor of the conference.
+
+@node change-what-i-am-doing, create-person, change-name, Protocol Requests
+@subsection change-what-i-am-doing (1) Recommended
+
+@example
+        change-what-i-am-doing <4> ( what-am-i-doing : HOLLERITH )
+                -> ( );
+@end example
+
+This call tells the server what the logged-in user is doing. The string is
+usually displayed when a user requests that a client list who is using
+LysKOM. Clients are encouraged to use this call creatively.
+
+
+@node create-person, get-person-stat-old, change-what-i-am-doing, Protocol Requests
+@subsection create-person (1) Recommended
+
+@example
+        create-person <5> (( name   : HOLLERITH;
+                             passwd : HOLLERITH; )) -> Pers-No;
+@end example
+
+This call requests that the server create a new person with the name and
+password given as arguments. To create a person the session must be logged in
+as a person with sufficient privileges.
+
+@i{Example:}
+@example
+        1 5 24HLysKOM Statistics Daemon 6Hsecret
+        @i{=1 6}
+@end example
+
+This example creates a new person named ``LysKOM statistics Daemon'' with the
+password ``secret.'' The server has returned the person number six for the
+person.
+
+@node get-person-stat-old, set-priv-bits, create-person, Protocol Requests
+@subsection get-person-stat-old (1) Obsolete
+
+@example
+        get-person-stat-old <6> (( person : Pers_No;
+                                   mask   : INT32 ))
+                -> Person;
+@end example
+
+I don't know how this call works. It's obsolete and has been replaced by call
+49 @ref{get-person-stat}.
+
+@node set-priv-bits, set-passwd, get-person-stat-old, Protocol Requests
+@subsection set-priv-bits (1) Recommended
+
+@example
+        set-priv-bits <7> (( person     : Pers-No;
+                             privileges : Priv-Bits; )) -> ( );
+@end example
+
+This call sets the privileges of a person (see @ref{Security}.) To
+successfully issue this call the session must be logged in as a person with
+sufficient privileges.
+
+@i{Example:}
+@example
+        1 7 6 0010000000000000
+        @i{=1}
+@end example
+
+This example sets the privileges of person 6 to nothing but
+@code{statistic}. This particular set of privileges might be useful for a
+person used by a statistics-collecting
+@ifinfo
+daemon.
+@end ifinfo
+@iftex
+d@ae{}mon.
+@end iftex
+
+@node set-passwd, query-read-texts, set-priv-bits, Protocol Requests
+@subsection set-passwd (1) Recommended
+
+@example
+        set-passwd <8> (( person  : Pers-No;
+                          old-pwd : HOLLERITH;
+                          new-pwd : HOLLERITH; )) -> ( );
+@end example
+
+This call is used to set the password of a person. Providing @code{old-pwd}
+matches @code{person}'s old password, that person's password is changed to
+@code{new-pwd}. Any person may set it's own password. In addition persons with
+sufficient privileges may ser other persons' passwords.
+
+@i{Example:}
+@example
+        1 8 5 6Hgazonk 7Ht9go8hw
+        @i{=1}
+@end example
+
+This example sets the password of the LysKOM administrator to ``t9go8hw''
+provided that the old password was ``gazonk.''
+
+@node query-read-texts, create-conf, set-passwd, Protocol Requests
+@subsection query-read-texts (1) Recommended
+
+@example
+        query-read-texts <9> (( person     : Pers-No;
+                                conference : Conf-No; ))
+                -> ( read-texts : Membership );
+@end example
+
+This call is used to find the number of unread texts in a conference. The data
+it returns is actually a membership structure which specifies which texts have
+been read. It is up to the client to transform the data to a more usable form.
+@code{person} is the person being queried is to be made and @code{conference}
+is the conference in question.
+
+Calling @code{query-read-texts} does not require the session to be logged in.
+
+@i{Example:}
+@example
+        1 9 6 1
+        @i{=1 32 5 11 12 7 93 1 193 1 1 20 133 3 @{ 135 136 137 @}}
+@end example
+
+This example finds the read texts for user 6 in conference 1. The returned data
+indicates that the user last read conference 1 (the tenth number) on Monday
+July 12th, 1993 at 11:05:32 (the first nine numbers), that the person has
+assigned priority 20 to the conference (the eleventh number) and that all
+articles up to and including local number 133 plus articles 135, 136 and 137
+have been read.
+
+@node create-conf, delete-conf, query-read-texts, Protocol Requests
+@subsection create-conf (1) Recommended
+
+@example
+        create-conf <10> (( name : HOLLERITH;
+                            type : Any-Conf-Type; ))
+                -> ( conference : Conf-No );
+@end example
+
+This call is used to create new conferences. @code{name} is the name of the new
+conference and @code{type} is its type. If successful, the call returns the
+conference number of the newly created conference. 
+
+To use this call the session must have logged in as a user with privileges to
+create conferences (@pxref{Security}).
+
+@i{Example}
+@ifinfo
+@example
+        1 10 13HInl�gg �t mig 00001000
+        @i{=1 7}
+@end example
+@end ifinfo
+@iftex
+@example
+        1 13HInl@"a{}gg @aa{}t mig 00001000
+        @i{=1 7}
+@end example
+@end iftex
+
+This example creates a new conference named
+@ifinfo
+``Inl�gg �t
+@end ifinfo
+@iftex
+``Inl@"a{}gg @aa{}t 
+@end iftex
+mig''@footnote{This conference is a standard Lysator conference. It's
+all Padrone's fault.}  which accepts all users as members and accepts
+anonymous articles. The server returns 7 as the new conference number.
+
+@node delete-conf, lookup-name, create-conf, Protocol Requests
+@subsection delete-conf (1) Recommended
+
+@example
+        delete-conf <11> ( conf : Conf-No; ) -> ( );        
+@end example
+
+This call deletes the conference @code{conf} from the LysKOM
+database. Only privileged users and the supervisors of a conference may
+delete it. @b{[Is it possible to delete mailboxes?]}
+
+@example
+        1 11 7
+        @i{=}
+@end example
+
+This example shows the successful deletion of conference number seven.
+
+@node lookup-name, get-conf-stat-old, delete-conf, Protocol Requests
+@node get-conf-stat-old, add-member, lookup-name, Protocol Requests
+@node add-member, sub-member, get-conf-stat-old, Protocol Requests
+@node sub-member, set-presentation, add-member, Protocol Requests
+@node set-presentation, set-etc-motd, sub-member, Protocol Requests
+@node set-etc-motd, set-supervisor, set-presentation, Protocol Requests
+@node set-supervisor, set-permitted-submitters, set-etc-motd, Protocol Requests
+@node set-permitted-submitters, set-super-conf, set-supervisor, Protocol Requests
+@node set-super-conf, set-conf-type, set-permitted-submitters, Protocol Requests
+@node set-conf-type, set-garb-nice, set-super-conf, Protocol Requests
+@node set-garb-nice, get-marks, set-conf-type, Protocol Requests
+@node get-marks, mark-text-old, set-garb-nice, Protocol Requests
+@node mark-text-old, get-text, get-marks, Protocol Requests
+@node get-text, get-text-stat, mark-text-old, Protocol Requests
+@node get-text-stat, mark-as-read, get-text, Protocol Requests
+@node mark-as-read, create-text, get-text-stat, Protocol Requests
+@node create-text, delete-text, mark-as-read, Protocol Requests
+@node delete-text, add-recipient, create-text, Protocol Requests
+@node add-recipient, sub-recipient, delete-text, Protocol Requests
+@node sub-recipient, add-comment, add-recipient, Protocol Requests
+@node add-comment, sub-comment, sub-recipient, Protocol Requests
+@node sub-comment, get-map, add-comment, Protocol Requests
+@node get-map, get-time, sub-comment, Protocol Requests
+@node get-time, get-info, get-map, Protocol Requests
+@node get-info, add-footnote, get-time, Protocol Requests
+@node add-footnote, sub-footnote, get-info, Protocol Requests
+@node sub-footnote, who-is-on-old, add-footnote, Protocol Requests
+@node who-is-on-old, set-unread, sub-footnote, Protocol Requests
+@node set-unread, set-motd-of-lyskom, who-is-on-old, Protocol Requests
+@node set-motd-of-lyskom, enable, set-unread, Protocol Requests
+@node enable, sync-kom, set-motd-of-lyskom, Protocol Requests
+@node sync-kom, shutdown-kom, enable, Protocol Requests
+@node shutdown-kom, broadcast, sync-kom, Protocol Requests
+@node broadcast, get-membership, shutdown-kom, Protocol Requests
+@node get-membership, get-created-texts, broadcast, Protocol Requests
+@node get-created-texts, get-members, get-membership, Protocol Requests
+@node get-members, get-person-stat, get-created-texts, Protocol Requests
+@node get-person-stat, get-conf-stat, get-members, Protocol Requests
+@node get-conf-stat, who-is-on, get-person-stat, Protocol Requests
+@node who-is-on, get-unread-confs, get-conf-stat, Protocol Requests
+@node get-unread-confs, send-message, who-is-on, Protocol Requests
+@node send-message, get-session-info, get-unread-confs, Protocol Requests
+@node get-session-info, disconnect, send-message, Protocol Requests
+@node disconnect, who-am-i, get-session-info, Protocol Requests
+@node who-am-i, set-user-area, disconnect, Protocol Requests
+@node set-user-area, get-last-text, who-am-i, Protocol Requests
+@node get-last-text, create-anonymous-text, set-user-area, Protocol Requests
+@node create-anonymous-text, find-next-text-no, get-last-text, Protocol Requests
+@node find-next-text-no, find-previous-text-no, create-anonymous-text, Protocol Requests
+@node find-previous-text-no, login, find-next-text-no, Protocol Requests
+@node login, who-is-on-ident, find-previous-text-no, Protocol Requests
+@node who-is-on-ident, get-session-info-ident, login, Protocol Requests
+@node get-session-info-ident, re-lookup-person, who-is-on-ident, Protocol Requests
+@node re-lookup-person, re-lookup-conf, get-session-info-ident, Protocol Requests
+@node re-lookup-conf, lookup-person, re-lookup-person, Protocol Requests
+@node lookup-person, lookup-conf, re-lookup-conf, Protocol Requests
+@node lookup-conf, set-client-version, lookup-person, Protocol Requests
+@node set-client-version, get-client-name, lookup-conf, Protocol Requests
+@node get-client-name, get-client-version, set-client-version, Protocol Requests
+@node get-client-version, mark-text, get-client-name, Protocol Requests
+@node mark-text, unmark-text, get-client-version, Protocol Requests
+@node unmark-text, re-z-lookup, mark-text, Protocol Requests
+@node re-z-lookup, get-version-info, unmark-text, Protocol Requests
+@node get-version-info, lookup-z-name, re-z-lookup, Protocol Requests
+@node lookup-z-name, set-last-read, get-version-info, Protocol Requests
+@node set-last-read, get-uconf-stat, lookup-z-name, Protocol Requests
+@node get-uconf-stat, , set-last-read, Protocol Requests
+
+
+
+
+@node Asynchronous Messages, , , Top
+@chapter Asynchronous Messages
+
+@node Examples, , , Top
+@chapter Examples
+
+
+@bye