This page takes you on a scenic tour of the Horus source tree. The page is structured as the tree itself: directories are described by sections, and subdirectories by subsections thereof. To some extend the Horus tree is supposed to be self-describing: each directory contains (rather: is supposed to contain) a README file describing the contents of that particular directory.
This page is not written as bedside reading material. The sections are more or less in alphabetical order of the names of the directories, and forward references are frequently made. Front to back reading might therefore be frustrating. The reader be guided by his/her interest.
If you wish to start building Horus utilities, start reading the ``conf'' section. The directory tree basically contains four kinds of objects: machine-independent source files, machine-dependent source files, object files for different configurations, and other files like documentation files such as this one. This directory has at least the following subdirectories:
conf configurations doc documentation etc administrative files include machine-independent, global include files machdep machine-dependent source files src machine-independent sources
This directory contains a subdirectory for each configuration. Each such configuration contains at least the following files:
README English text that describes the configuration CONF to build Horus.mk Makefile.conf ditto Makefile to build utilities muts_conf.h contains global #defines conf.c contains a table of initialization routines../../src/tools/config uses CONF and Makefile.conf to build a Makefile called Horus.mk. When running "make -f Horus.mk", the library libhorus.a is built which has to be linked with all Horus applications. The Makefile builds common Horus utilities as xxx_test and dirsvr.
Feel free to add new configurations. In fact, if you made interesting ones, let us know.
This directory contains the sources, and formatted output files of our documents. The sources with their corresponding Makefiles may be found in the src directory, and the output files in the print directory. These output files are mostly, if not exclusively, in PostScript. (NOTE: the sources, the output files, or both may be missing from the distribution.) These documents, and others, may also be retrieved by anonymous ftp from the ftp.cs.cornell.edu:pub/isis/horus directory.
This directory contains the printable document files. Please read the doc/src section for a description of the different documents.
This directory contains the sources of the documents. There is a subdirectory for each document. In each of these directories, type make to create the output file. Unfortunately, how to create an output file depends very much on local circumstances, so you will usually have to adapt the Makefile. Note that the distribution comes with formatted versions of these documents, so that usually this is unnecessary. .NH 2 etc
This directory contains globally used configuration files. Some are included in the distribution, others are dynamically created. This directory is searched by default for these files, but another directory may be specified by setting the MUTS_ETC shell environment variable.
This is the public include directory used by the Horus system and by applications that use Horus. All application need to include the file ``muts.h,'' and usually a set from the ``muts'' subdirectory.
This is the global include file that needs to be included by all MUTS applications, and therefore also by all HORUS applications.
This directory contains included files for the different libraries and modules at the MUTS level. These files may be included in application sources as follows:
#include "muts/xyz.h"The "muts/" part is important to avoid name clashes with include files of other software packages. Other than in UNIX, we include each include file only once, so there is no need to have #ifndef/#define sequences in these files.
This directory contains included files for the different libraries and modules at the HORUS level. These files may be included in application sources as follows:
#include "horus/xyz.h"The "horus/" part is important to avoid name clashes with include files of other software packages. Other than in UNIX, we include each include file only once, so there is no need to have #ifndef/#define sequences in these files.
This directory contains the machine-dependent sources. Machine-dependent here includes both operating system and hardware dependencies. There is a subdirectory for each class of architectures. Many configurations choose one of the basic architectures (using the MACH variable in the CONF script), but may borrow files from other architectures. For example, many configurations make use of the nbsd/udp.c file (which contains the socket driver to IP and UDP), even though they do not belong in the bsd architecture.
Each subdirectory usually contains at least the following files:
md_time.c timer management muts_machdep.h machine-dependent definitions for MUTS thread.c threads and locks
This directory contains all the machine-independent sources. It contains a subdirectory for each module, and the subdirectory ``ordering'' for each of the Horus layers.
This directory contains the sources for the directory server and the client stubs.
This directory contains the sources for the Multi-threading and Unreliable Transport Service.
This is a directory that contains a subdirectory for each of the Horus group message ordering protocols. Each can be run over any Uniform Group Interface layer, and in turn provides the Uniform Group Interface itself.
This directory contains the sources for the socket layer over the Uniform Group Interface.
This directory contains the sources of utilities to support the use of Horus. They are not loaded into the Horus system itself.
A directory with a hotch-potch of MUTS services and libraries.
A directory with a hotch-potch of Horus services and libraries.