
This directory contains the necessary programs and routines to implement a
fully functional client-server model completely intregrated with X-windows.
Interprocess communications is accomplished with semaphores and shared
memory sections.
There are basically three main routines:

	1. starter
	Used to invoke a new client.  Checks to make sure that the server
	is up and running first and then exec's another client.
	2. client
	An X based routine that brings up a main window, and four child
	windows. After that, once per second the client checks a semaphore
	(set by server if new data is ready). If the semaphore is set then
	the client checks the flags in each of the four
	shared memory sections to see if there is any new data to 
	display. This is done as a background work procedure that is
	invoked once per second.
	3. server
	A non X-based routine that does a stat (fstat) on each of four
	test files once per second.  Each time the fstat indicates that
	the file mod date has changed, the server opens the file and
	reads its contents into the appropriate shared memory section.
	Then it sets a semaphore to indicate to the clients that new
	data is available.  See the file sems.c for a further description
	of the semaphores.

Any number of clients can be invoked from any number of x-terminals, up to
an program imposed arbitrary limit of twelve.  Clients can also be
launched directly, without going through starter, but if the server is not
running clients so launched will exit with an error message. The server
may also be independently started (without going through starter).

*****

There are also several diagnostic/test programs in this directory:

	1. get_semvals
	Used to determine the number of semaphores the kernel was built with.

	2. getsemstatus
	Used to print out the status of all semaphores in the system.

	3. showSemaphores
	An X-based program to print a map of all semaphores in the system. This
	map is then constantly updated to show the state of the semaphores.
