The Horus Directory Tree: Where is Everything?

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.

Top-level Directory

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

conf

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.

doc

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.

doc/print

This directory contains the printable document files. Please read the doc/src section for a description of the different documents.

doc/src

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.

dir-address and dir-contact
These files are created by the dirsvr directory server utility. They contains the group and contact entity identifiers of the directory server process, and are used by other utilities to contact the name server. We rely on a shared file system here to make this transparent to the Horus users. In the absence of a shared file system, the user is responsible for copying these files to a place where they are accessible to the utilities.

include

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.

muts.h

This is the global include file that needs to be included by all MUTS applications, and therefore also by all HORUS applications.

include/muts

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.

include/horus

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.

machdep

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

src

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.

src/dirsvr

This directory contains the sources for the directory server and the client stubs.

src/muts

This directory contains the sources for the Multi-threading and Unreliable Transport Service.

src/ordering

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.

src/socket

This directory contains the sources for the socket layer over the Uniform Group Interface.

src/tools

This directory contains the sources of utilities to support the use of Horus. They are not loaded into the Horus system itself.

src/util

A directory with a hotch-potch of MUTS services and libraries.

src/hutil

A directory with a hotch-potch of Horus services and libraries.