-- (C) Copyright International Business Machines Corporation 23 January 
-- 1990.  All Rights Reserved. 
--  
-- See the file USERAGREEMENT distributed with this software for full 
-- terms and conditions of use. 

Hermes Language System, Release 0.8 (alpha)

This directory is the root of the Hermes language system tree.  The file
USERAGREEMENT describes the conditions for using Hermes.  The file INSTALLATION
describes how to install the Hermes system.

The language tutorial and manual is available in hardcopy only; it has been
published by Prentice Hall, "Hermes, A Language for Distributed Computing",
1991, ISBN 0-13-389537-8.

If you have problems, questions, comments, bug reports, etc. send them
to hermes@watson.ibm.com.  If other people want copies of the system,
send mail to hermes-request@watson.ibm.com.  If you want to buy the
manual, try your local college bookstore, or write to:

	Prentice Hall
	Englewood Cliffs, NJ 07632

The Hermes system consists of two basic parts: one written in C, and the other
written in Hermes.  The C code (parser, abstract machine interpreter, run-time
environment) is written as portably as possible and should be easy to port to
any 32-bit Unix machine that supports long filenames, BSD sockets, and the Sun
RPC/XDR protocols.  Binaries are included for IBM RS/6000 AIX 3.1, IBM RT
4.3 bsd, Sun 3 and Sun 4 SunOS 4.0.3, NeXT, Convex and HP 9000 Series HP-UX.

The Hermes code is compiled into a machine-independent binary format using XDR,
so that Hermes binaries can be shared by heterogeneous architectures mounting
the same filesystem.  A full set of Hermes binaries is included (in sub-
directory bin), so it should not be necessary to recompile them unless you 
wish to change some part of the system.

This is an alpha release of the Hermes system.  Interfaces are subject to
change, and the language itself is very likely to undergo some changes.
Documentation and testing of some features is still in progress (particularly
the network code).  The windows are being converted to X; currently they have
only been tested under SunView and on the RS/6000 on X11R3.

Subdirectories
--------------
asm		C code: converts Hermes abstract machine code programs into
		compiled Hermes program objects.  Used to bootstrap the 
		compiler.

bin		Machine-independent compiled Hermes programs (in XDR format).

cfunc		C code: fake Hermes processes written in C for Hermes-Unix
		interoperability.

chaux		Configuration file, include files, and other miscellaneous
		files required by the chcode utility

chcode		Hermes code: utility to generate C code from compiled Hermes 
		programs 

cherm		C code: utility routines to allow yacc compiler front end and
		cfunc processes to operate on Hermes structures from C.

codegen		Hermes code: the code generator for Hermes.

construct	C code: utility routines used to construct hermes objects.

demo		Hermes code: a demonstration Hermes application: a distributed
		appointment scheduler (requires windows, below).

disassembler	Hermes code: converts a compiled Hermes program object into
		assembler code (see asm, above).

doc		User's manual and other minor documentation.  

fe		C, lex, and yacc code: parser for the Hermes compiler.  
		Converts source text into an "abstract program object" which is
		a Hermes data structure.

gnu		Gnu emacs mode for Hermes.

hermes		Hermes code: top-level routines for the Hermes system: root
		process, standard I/O, etc.

include		C code: include files shared by the rest of the C code.

interface	Hermes code: definitions modules used by the rest of the Hermes
		code.  Look here for all important interface definitions.

li		C code: the interpreter and run-time system for Hermes.

lib		C code: standard support: linked lists, storage allocation,
		asynchronous rpc handling, etc.

make		Shared makefile code for the rest of the system.

mbin		Machine-dependent binaries for IBM RS/6000 AIX 3.1 and RT
                4.3bsd, Sun 3 and Sun 4 SunOS 4.0.3, NeXT, Convex, and
		HP 9000 HP-UX.  Others will be included in future releases.

optimize	Hermes code: optimization phases for the compiler (not yet
		used).

sysbin		Shell scripts to run the Hermes programs, intended for 
		installation in your local binaries directory (/usr/local/bin).

tools		Hermes code: various tools: shells, resource managers, string
		handling, remote execution, etc.  Not required for building the
		compiler, except for tools/cache.

tutorial_examples
		Online code for the Hermes tutorial examples.

type		Hermes code: the type-checker portion of the compiler.

typestate	Hermes code: the typestate-checker portion of the compiler.

windows		Hermes code: very primitive window support - allows multiple
		text windows to be opened.
		C Code: in sub-directories supports SunView and RS/6000 X11R3.


Note: In our current release, we provide two pre-built executable
components for some Sun architectures.  One, named by the sun
architecture name (e.g. "sun4"), is suitable for running on version
4.1 or later of SunOS, and includes support for running
chcode-transformed binaries by dynamically linking system object files
as needed.  The other, named by the architecture name suffixed by
"_nodl" (e.g. "sun4_nodl") is suitable for versions of SunOS prior to
4.1 (e.g. 4.0.3).  They are incapable of using chcode-transformed
binaries, as those versions of SunOS do not support the dlopen()
interface to the dynamic linker and loader.  Note that the "hermes"
shell script will automatically make the necessary adjustment to your
HARCH environment variable, by checking whether the file
/usr/include/dlfcn.h exists.


Acknolwedgements
----------------

The following individuals have made substantial contributions to the
development of this software and/or the design of the Hermes Language
while working at the IBM T. J. Watson Research Center: Joel Auslander,
David Bacon, Crispin Cowan, Arthur Goldberg, Andy Lowry, Jim Russell,
Bill Silverman, Rob Strom, Danny Yellin, Shaula Yemini.  Willard
Korfhage of the Polytechnic University in Brooklyn, NY, with his
students, has contributed considerably in the form of software and
documentation.  In particular, Willard ported Hermes to the HP9000
series and Convex platforms.  Rob Lehman and Seth Strumpf, of the
Columbia University Center for Computing Activities, ported Hermes to
the NeXT platform.  In preparing new releases, it is important for us
to be able to build Hermes on platforms to which it has been
externally ported but to which we have no internal access.  The
following have made such platforms available to us for this work:
Columbia University Department of Computer Science (particularly, the
DCC project of Prof.  Yechiam Yemini, and also Henry Massalin);
Columbia University Center for Computing Activities; Polytechnic
Univerisity; and University of Western Ontario in London, Ontario.
We are very grateful for all this help.
