Current Protocol version: 2.4

Protocol revision history:
	1.0	* Original version
	2.0	* Added the gtf request - Get Transaction in File
		* Added the gpv request - Get Protocol Version
	2.1	* Modified routines that return the transaction info to
		  include the flags field as the last entry in the list.
		* Modified the formatted transaction format to include
		  a 'F' after the transaction number if the flag field
		  is set.
		* Added the sfl request - Set transacton Flags
	2.2	* Added the am request - Add meeting
		* Added the dm request - Delete meeting
		* Added the pacl request - Print acl
		* Added the sacl request - Set acl
		* Added the dacl request - Delete acl
		* Added the dt request - Delete transaction
		* Added the rt request - Retrieve transaction
		* Added the ls request- List transactions
	2.3	* Deleted the gcm request - (not used in any clients)
		* Modified the gpv request to add a build string 
		* Added the soft sender field
	2.4	* Changed sacl request --- the mode field can be "" quoted
		* Changed ss request so that it returns ()
	2.5	* Added the scd request --- set current direction
		* Added the gtfc request --- get transaction file cached
		* Added the it request --- invalidate transaction	
		* Added the itn request --- invalidate transaction and
				neighbors
		* Added the im request --- invalidate meeting

edsc expects a set of lines, in the form of S-expressions (no quoted
strings).  It returns S-expressions with quoted strings.  This might
change if this is too burdensome.  If the first character of the line
is a ";", then this indicates an error message.  If the first
character of the line is a "-", this is a warning.  The next line will
be the response to the operation.

---------------------------------------------------------------
Request: (gmi mtg-name)

Returns information about the given meeting.  This is an
s-expression of the form:

  (location long-name chairman first last lowest highest date-created
   date-modified public access_modes highest-seen)

---------------------------------------------------------------
Request: (quit)

Quits out of edsc.

---------------------------------------------------------------
Request: (gti trn-num mtg-name)

Get transaction info:
Gets information about transaction trn-num in meeting mtg-name.  The
information is returned in the form:

  (current prev next pref nref fref lref chain-index date-entered
   num-lines num-chars subject author flags)

(The last entry in the list, flags, was added in protocol version 2.1.)

---------------------------------------------------------------
Request: (gt trn-num mtg-name)

get_transaction:  Gets a pretty version of the transaction.  This returns
the number of lines in the transaction:
  (num-lines)

followed by the actual transaction itself.

---------------------------------------------------------------
Request: (grt trn-num mtg-name)

Get raw transaction:  This returns the transaction in raw form, without
any formatting.  It returns the number of characters in the transaction:
  (num-chars)

followed by the transaction itself.

---------------------------------------------------------------
Request: (gml)

Get meeting list:  Returns a list of meetings that the user attends,
along with an indication whether it has changed or not.  It returns
this as a list.  Each item in this list is a list itself, with the first
element being a flag if the meeting has changed (0 or 1).  The rest of the
list are the various aliases of the meeting.  Here is a sample return list:

  ((1 "Cheery_thoughts" "ping") (0 "Central_america" "ca"))

If there is an error while trying to get to a meeting, the 0 or 1 at
the head of the list is replaced with a string indicating the error
that was found while trying to access that meeting.
---------------------------------------------------------------
Request: (ss trn-num mtg-name)

Set seen:  Sets the highest seen transaction in mtg-name to be trn-num.

In version 2.4, returns "()".
---------------------------------------------------------------
Request: (at reply-trn file-name mtg-name)

Add transaction:  Adds a transaction to the discuss meeting mtg-name.  If
reply-trn is non-zero, the new transaction is chained to that transaction.
file-name is the filename with the contents of the meeting.  The subject
is taken from the next line.  This request returns the resulting transaction
number, in an S-expression:

(new-trn-num)

---------------------------------------------------------------
Request: (nut trn-num mtg-name)

Next undeleted transaction:  Returns the number of the next undeleted
transaction following trn-num in the meeting, even if trn-num happens
to be deleted.  Returns it in an S-expression:

(next-trn-num)

---------------------------------------------------------------
Request: (grtn mtg-name)

Returns transaction info (as in gti above) corresponding to a random
transaction in the meeting.  Returns it in an S-expression:

  (current prev next pref nref fref lref chain-index date-entered
   num-lines num-chars subject author flags)

(The last entry in the list, flags, was added in protocol version 2.1.)

---------------------------------------------------------------
Request: (gtf file-name trn-num mtg-name)

Get transaction-file.  Gets a pretty version of the transaction (as in
gt above) and stores it in file-name.  After the transfer is complete,
it returns information about the transaction (as in gti above):

  (current prev next pref nref fref lref chain-index date-entered
   num-lines num-chars subject author flags)

(The last entry in the list, flags, was added in protocol version 2.1.)
---------------------------------------------------------------
Request: (gtfc direction trn-num mtg-name)

Get transaction-file cached.  Gets a pretty version of the transaction
(as in gtf above) and stores it a file.  After the transfer is
complete, it returns a list where the car is the filename where the
transaction can be found and the cdr is information about the
transaction (as in gti above):

  (filename current prev next pref nref fref lref chain-index 
   date-entered num-lines num-chars subject author flags)

If direction is between 1 and 4, then the current direction of cache
travel (which is used for the caching hueristics) is set as follows:

#define CACHE_DIR_NEXT		1
#define CACHE_DIR_PREV		2
#define CACHE_DIR_NREF		3
#define CACHE_DIR_PREF		4

---------------------------------------------------------------
Request: (sfl new-flag trn-num mtg-name)

Set transaction file.  Set the flags field of the transaction
specified by trn-num and mtg-num to new-flag.  Returns the null list.
---------------------------------------------------------------
Request: (am host pathname)

Add meeting.  Adds the meeting pointed to by the host and pathname 
to the user's .meetings file.  Returns the following list
	
	(1 alias-1 alias-2 ...)

which is similar to the format used for an individual meeting in (gml)
---------------------------------------------------------------
Request: (dm meeting)

Delete meeting.  Deletes the specified meeting.  Returns the name of
the deleted meeting. 
---------------------------------------------------------------
Request: (pacl filename meeting)

Print ACL.  Prints the ACL for the specified meeting to the file 
specified by filename.  Returns the null list.
---------------------------------------------------------------
Request: (sacl modes principal meeting)

Set ACL.  Sets the ACL for the specified principal in meeting to 
be modes.  Returns the null list.  The mode field may be double
quoted.  To set a principal's access to null, the mode field should 
contain "".
---------------------------------------------------------------
Request: (dacl principal meeting)

Delete ACL.  Deletes the specified principal from ACL on that meeting.
Returns the null list.
---------------------------------------------------------------
Request: (dt trn-num meeting)

Delete transaction.  Deletes the transaction specified by trn-num
in meeting.  Returns the null list.
---------------------------------------------------------------
Request: (rt trn-num meeting)

Retrieve transaction.  Retrieves the transaction specified by trn-num
in meeting.  Returns the null list.
---------------------------------------------------------------
Request: (ls filename low high filter-flags meeting)

List transaction.  Output a list of transaction to the file specified
by filename.  Low and high specify the range of the transaction to be
listed.  filter-flags conists of the following values or'ed together:

#define flag_AREF		8
#define flag_LONG_SUBJ		4096

/* filtering flags */
#define filter_INCLUDE_DELETED 1
#define filter_ONLY_DELETED    2
#define filter_ONLY_INITIAL    4
#define filter_ONLY_TERMINAL   16
#define filter_FLAG_SET        32
#define filter_FLAG_RESET      64

Returns the null list when the output file has been written and closed.
---------------------------------------------------------------
Request: (scd direction)

Set current direction.  This is used for the cacheing hueristics.
The direction is an integer from 1 to 4:

#define CACHE_DIR_NEXT		1
#define CACHE_DIR_PREV		2
#define CACHE_DIR_NREF		3
#define CACHE_DIR_PREF		4

---------------------------------------------------------------
Request: (im meeting)

Invalidate meeting.  Invalidates from the cache all transactions from
the specified meeting.  Returns the null list.

---------------------------------------------------------------
Request: (it trn-num meeting)

Invalidate transaction.  Invalidates the specified transaction, if it
is in the cache.  Returns the null list.

---------------------------------------------------------------
Request: (itn trn-num meeting)

Invalidate transaction and neighbors.  Invalidates the specified
transaction and all of its neigbors from the cache.  Returns the null
list. 

---------------------------------------------------------------
Request: (gpv)

Get protocol version.  Returns the protocol version of edsc multplied
by ten.  Thus, if the version number is 2.0, it will return (20).
(Used to detect version skew between discuss.el and edsc.)

In version 2.4 and beyond, the second element in the return list is a
string describing when the edsc backed was compiled.
