Minor changes.
[egate.git] / doc / egate.sgml
index 9805f26..72963b6 100644 (file)
@@ -1,13 +1,13 @@
 <!doctype linuxdoc system>
 
 <!--
 <!doctype linuxdoc system>
 
 <!--
-  $Id: egate.sgml,v 1.5 1995/07/10 10:28:22 adam Exp $
+  $Id: egate.sgml,v 1.9 1996/04/25 10:21:53 adam Exp $
 -->
 
 <article>
 <title>Email/Z39.50 gateway guide
 <author>Europagate, 1995
 -->
 
 <article>
 <title>Email/Z39.50 gateway guide
 <author>Europagate, 1995
-<date>$Revision: 1.5 $
+<date>$Revision: 1.9 $
 <abstract>
 This document describes a Email server that provides access to the
 Z39.50 protocol.
 <abstract>
 This document describes a Email server that provides access to the
 Z39.50 protocol.
@@ -23,22 +23,24 @@ within the EUROPAGATE project. The first part of this document
 serves as an administrators guide, while the second part is a 
 follow-up on the Design deliverable (WP4.1) that outline the
 deviations from the design. Also, the second part contains
 serves as an administrators guide, while the second part is a 
 follow-up on the Design deliverable (WP4.1) that outline the
 deviations from the design. Also, the second part contains
-an overview of the source code.
+a quick overview of the source code.
 
 <sect>Compilation
 
 <p>
 An ANSI C compiler is required in order to compile the ES software.
 
 
 <sect>Compilation
 
 <p>
 An ANSI C compiler is required in order to compile the ES software.
 
-The ES can use either CNIDR's zdist package or the YAZ package from
+The ES can use either CNIDR's Zdist package or the YAZ package from
 Index Data to interface the Z39.50 protocol. So you need to obtain
 Index Data to interface the Z39.50 protocol. So you need to obtain
-either of these first.
+one of these first.
 
 
-The Zdist package can be found in:
+The zdist package can be found in:
 
 
-<url url="ftp://ftp.cnidr.org/pub/NIDR.tools/zdist/zdist102b1-1.tar.Z" >
+<htmlurl
+url="ftp://ftp.cnidr.org/pub/NIDR.tools/zdist/zdist102b1-1.tar.Z" 
+ name="ftp://ftp.cnidr.org/pub/NIDR.tools/zdist/zdist102b1-1.tar.Z">
 
 
-The Zdist package doesn't support result-set references. Also, it has a few
+The zdist package doesn't support result-set references. Also, it has a few
 bugs. Therefore we've included a patch <tt/zdist.patch/ which fixes
 some of these bugs.
 Run patch in the directory above <tt/zdist102b1-1/:
 bugs. Therefore we've included a patch <tt/zdist.patch/ which fixes
 some of these bugs.
 Run patch in the directory above <tt/zdist102b1-1/:
@@ -46,35 +48,40 @@ Run patch in the directory above <tt/zdist102b1-1/:
 $ patch <zdist.patch
 </verb></tscreen>
 
 $ patch <zdist.patch
 </verb></tscreen>
 
-YAZ can be found in:
+The ES server only depends on <tt>libz3950.a</tt> so you only need
+to build the zdist software in the directory <tt/libz3950/.
 
 
-<url url="ftp://ftp.algonet.se/pub/index/yaz/">.
+YAZ can be found at the FTP host:
+
+<htmlurl url="ftp://ftp.indexdata.dk/index/yaz"
+ name="ftp://ftp.indexdata.dk/index/yaz">
 
 The ES also use GNU's regex package to parse regular expressions. 
 The ES has been tested with regex-0.12. Some systems, such as Linux,
 
 The ES also use GNU's regex package to parse regular expressions. 
 The ES has been tested with regex-0.12. Some systems, such as Linux,
-comes with the regex package preinstalled.
+come with the regex package preinstalled.
 
 Unpack <tt>egate.tar.gz</tt> and edit the top level <tt/Makefile/. Specify
 where the GNU regex package is located and specify whether you use
 YAZ or zdist. One some systems, you may have to set the <tt/NETLIB/ as
 well.
 
 
 Unpack <tt>egate.tar.gz</tt> and edit the top level <tt/Makefile/. Specify
 where the GNU regex package is located and specify whether you use
 YAZ or zdist. One some systems, you may have to set the <tt/NETLIB/ as
 well.
 
-You may wish to set <tt/CC/ and <tt/CFLAGS/ in your shell, since these
-will affect the compilation &mdash; these are not set in the <tt/Makefile/.
+The shell variables <tt/CC/ and <tt/CFLAGS/ are used by the
+<tt/Makefile/ so you may modify these before compiling.
 
 
-Now, type <tt/make/. 
+Now, type <tt/make email/. 
 
 <sect>Installation
 
 <p>
 
 <sect>Installation
 
 <p>
-If the compilation was successful, you should install the software.
-Edit the <tt/Makefile/ and set the LIBDIR to the installation
+If the compilation succeeds, you should install the software in some
+system location.
+Edit the <tt/Makefile/ and set EMAILLIBDIR to the installation
 directory. Since, the ES is executed by the mail system, and not by a
 user, this directory shouldn't be globally executable.
 
 directory. Since, the ES is executed by the mail system, and not by a
 user, this directory shouldn't be globally executable.
 
-When satisfied, type <tt/make install/.
+When satisfied, type <tt/make install.email/.
 
 
-Three executables are installed in LIBDIR:
+Three executables are installed in EMAILLIBDIR:
 <descrip>
 <tag/eti/ The email transport interface. This program receives
 incoming mail, identifies the user, and delivers the mail request
 <descrip>
 <tag/eti/ The email transport interface. This program receives
 incoming mail, identifies the user, and delivers the mail request
@@ -93,7 +100,7 @@ The <tt/sendmail/ or a similar program delivers the mail to the
 you create a special user and group for the ES software. In this case
 you should use <tt/chmod/ to and set the 'set user ID on execution'
 bits on the executable files and give that user read/write/execute
 you create a special user and group for the ES software. In this case
 you should use <tt/chmod/ to and set the 'set user ID on execution'
 bits on the executable files and give that user read/write/execute
-permissions in LIBDIR.
+permissions in EMAILLIBDIR.
 
 The mail system needs to know about the ES. Pick some name that serves
 as the ES user and edit <tt/aliases/ used by your mail system (usually 
 
 The mail system needs to know about the ES. Pick some name that serves
 as the ES user and edit <tt/aliases/ used by your mail system (usually 
@@ -101,7 +108,7 @@ as the ES user and edit <tt/aliases/ used by your mail system (usually
 
 <tt>es:"|/usr/local/lib/es/eti </tt><em>options</em><tt>"</tt>
 
 
 <tt>es:"|/usr/local/lib/es/eti </tt><em>options</em><tt>"</tt>
 
-In this example the mail user name was <tt/es/ and the LIBDIR was
+In this example the mail user name is <tt/es/ and the EMAILLIBDIR is
 <tt>/usr/local/lib/es</tt>.
 
 The ES system can operate with or without the monitor. When using
 <tt>/usr/local/lib/es</tt>.
 
 The ES system can operate with or without the monitor. When using
@@ -445,7 +452,7 @@ The work was roughly carried out as follows:
  implemented which maps a email username to a unique integer (email userid). 
 <item>The protocol persistency was implemented and more CCL commands
  were added.
  implemented which maps a email username to a unique integer (email userid). 
 <item>The protocol persistency was implemented and more CCL commands
  were added.
-<item>The MONITOR program was implemented.
+<item>The monitor program was implemented.
 </enum>
 
 The following sections cover the most important modules in the ES and
 </enum>
 
 The following sections cover the most important modules in the ES and
@@ -506,6 +513,9 @@ Information about each result set includes:
 <item>query
 </itemize>
 
 <item>query
 </itemize>
 
+A persistency file is removed each time a new target is selected.
+It is our experiences that the persistency files are very small.
+
 <sect1>CCL
 
 <p>
 <sect1>CCL
 
 <p>
@@ -526,10 +536,117 @@ CCL parser itself is not tied to Bib-1.
 <sect1>FML
 
 <p>
 <sect1>FML
 
 <p>
+The FML system is used to handle the presentation of MARC
+records. There are some deviations to the design report, however.
+The most important changes are:
+<itemize>
+<item>The <tt/expr/ function is not implemented. Instead arithmetic
+operators <tt/plus/, <tt/minus/, <tt/mult/ and <tt/div/ are
+implemented. Also relational operators <tt/gt/, <tt/lt/ ... are
+implemented.
+<item>The <tt/lindex/ function is called <tt/index/ and it is a binary
+operator where the left operand is the list and the right operand is
+the index integer.
+<item>The MARC extraction routines are not implemented.
+Instead, a MARC record is transferred as an argument
+to a formatting-routine (in list notation). The formatting
+routine then extracts fields from the list by list/string
+manipulation functions.
+<item>A new statement, <tt/bin/, is implemented to define
+binary operators (functions). 
+</itemize>
 
 <sect1>IPC
 
 <p>
 
 <sect1>IPC
 
 <p>
+As described in the design, FIFOs are used to communicate between
+the ETI, monitor and kernel. The ES can run without the monitor,
+however. The primary reason for the presence of the monitor was
+to assure that the kernel releases the resources used by the
+persistency layer. But, since the persistency layer did turn out to
+use virtually no disk space at all, there was no point in starting
+a kernel process to remove its files &mdash; hence this facility 
+was not implemented. The only purpose of the monitor is to keep the
+number of running kernels at a maximum level and even that
+is probably useless since most unices will swap kernel processes
+out anyway.
+
+The idle time
+before a kernel exits and saves its persistency file is not
+controlled by the monitor. Saving the persistency file and
+keeping it is usually a good approach &mdash; even when a
+user doesn't reference/show old result-sets since the user
+has a notion of <em/current target/ and database.
+
+<sect1>Source
+
+<p>
+In this section a short description of each source module is
+given. Each module is implemented in a separate sub directory. 
+Any public headers are located in the <tt/include/ directory.
+
+<descrip>
+<tag/res+log/ is an implementation of the logging system
+and the resource management sub system. Note that the
+resource module depends on the logging facility. Logging
+is implemented in <tt>gw-log.c</tt> and <tt/gw-log.h/. The
+file <tt>gw-log-test.c</tt> is small test program for the
+logging system. The core of the resource management is implemented
+in <tt>gw-res.c</tt>. The files <tt>gw-res-bool.c</tt> and
+<tt>gw-res-int.c</tt> implement two utility routines &mdash
+on top of the resource management. The header file
+<tt>gw-resp.h</tt> is a private header file and <tt>gw-res.h</tt>
+is a public header file.
+
+<tag/ccl/ implements CCL to RPN mapping and a tokenization 
+ utility for other CCL commands. The mapping function is
+ implemented in <tt>cclfind.c</tt>. Qualifiers are handled in 
+ <tt>cclqual.c</tt> while reading of qualifier mappings from a
+ file is implemented in <tt>cclqfile.c</tt>. Scanning is implemented
+ in <tt>ccltoken.c</tt>. String utilities, which might be changed if
+ other character sets are needed, is implemented in
+ <tt>cclstr.c</tt>. Table of error messages is implemented in
+ <tt>cclerrms.c</tt>.
+
+<tag/util/ implements various utilities:
+  <descrip>
+  <tag>MARC utility</tag> implemented in <tt>iso2709</tt>...
+  <tag>Database utility</tag> implemented in <tt>gw-db.[ch]</tt>. This
+   utility is used to map a user (email) to an integer.
+  <tag>String queue utility</tag> implemented in <tt>strqueue.[ch]</tt>. This
+   utiltiy is used to queue incoming mail in the ETI, kernel and
+   the monitor.
+  <tag>Pretty printer</tag> implemented in <tt>ttyemit.[ch]</tt>
+   &mdash; used by the URP.
+  <tag>FIFO IPC utiltiy</tag> implemented in <tt>gip*.[ch]</tt> &mdash;
+   used by the ETI, kernel and monitor.    
+  </descrip>
+
+<tag/fml/ implements FML. The top level functions are implemented
+ in <tt>fml.c</tt>, <tt>fmlcall.c</tt> and <tt>fmlcalls.c</tt>.
+ Scanning is implemented in <tt>fmltoken.c</tt>.
+ Memory management is implemented in <tt>fmlmem.c</tt>. 
+ Arithmetic operators are implemented in <tt>fmlarit.c</tt>. 
+ String manipulation functions are implemented in <tt>fmlstr.c</tt>.
+ Relational operators are implemented in <tt>fmlrel.c</tt>.
+ List maniuplations are performed in <tt>fmllist.c</tt>.
+ FML symbol table management is implemented in <tt>fmlsym.c</tt>.
+ Conversion from ISO2709 to list notation is implemented in
+ <tt>fmlmarc.c</tt>.
+
+<tag/zlayer-zdist/ implements the high-level Z39.50 API on top
+  of Zdist. This task is implemented in <tt>zaccess.c</tt>. The
+ public header file is called <tt>zaccess.h</tt>.
+
+<tag/zlayer-yaz/ implements the high-level Z39.50 API on top
+  of YAZ. This task is implemented in <tt>zaccess.c</tt>. The
+ public header file is called <tt>zaccess.h</tt>.
+
+<tag/kernel/ implements the ETI, kernel and monitor. The kernel
+ itself is implemented in <tt>main.c</tt>, <tt>urp.c</tt> and
+ <tt>persist.c</tt>. The ETI is implemented in <tt>eti.c</tt> and
+ the monitor is implemented <tt>monitor.c</tt>.
+</descrip>
 
 <sect>LICENSE
 
 
 <sect>LICENSE