Structure:
	init
	dm -> console login
	  X server
	  X console -> restarts
	  X login -> xsession script

dm reads config file:

># DM Configuration for RT
>#prog	 command line
>X	 /etc/Xibm -v :0
>console /mit/xdm/old/xconsole/rtbin/xconsole -display unix:0
>login	 /etc/athena/xdm/xlogin -config /etc/athena/xdm/xlogin-config -display unix:0

which specifies three processes.  If console exits, it is restarted.
If login exits with special status, dm cleans up and execs /bin/login.
If server exits or login exits, dm cleans up and exits.  Cleanup
consists of killing remaining children, cleaning utmp and wtmp,
kdestroy on tickets associated with login tty, and if indicated,
removing user from /etc/passwd who was logged in on tty.  The need to
remove the user from /etc/passwd is indicated by xlogin sending a
SIGUSR1 to it's parent.  The dm is currently about 10K long.



The X server will be started with a font path that only includes the
directory on the root.  The activate script will add an additional
font directory which contains all of the fonts.  Deactivate will
remove this directory from the font path.



The console program is written in Craig Fields' x library and will be
about 80K.  It will recognize most X resources.  On SIGUSR1, it will
unmap itself.  On SIGUSR2, it will show itself.  On SIGHUP, it will
exit cleanly, writing it's console data to a tmp file.  Since the
display manager restarts it on exit, a user may load resources into
the server, and SIGHUP their console, which will start a new one with
their resources.  The console will just read from stdin, which the
display manager has setup to be the console.

config_console is a setuid program which reads the console pid file
(/etc/console.pid) and sends it the appropriate signal depending on
argv[0] and command line options:
	config_console or -config
	show_console or -show
	hide_console or -hide
Arguments take precedence, then argv[0], then it defaults to config.



Xlogin is written in Xt with the Athena widgets and the widget
creation library.  It puts up the greeting window with a timeout.  Any
key event restarts that timeout, and starts activation if the
workstation is not activated.  If the timeout occurs, it goes into
screensaver mode.  In screensaver mode, there is a long timeout and a
short timeout.  The short timeout moves the greeting around the
screen.  The long timeout runs deactivate.  Any key or mouse movement
restores the login window and starts activation.

When the user has finished entering username and password, xlogin
waits for the activation to finish if it has not.  There is a timeout
on this wait as well, after which point it will go on as if the
activate had finished.  Login will go through the usual verify
sequence.  If the user must be added to the password file, it will
send a SIGUSR1 to it's parent so that the display manager knows to
clean up the passwd file.  Any error during verification causes an
error popup to appear and control to return to the XtMainLoop().
After a timeout or button press, the popup will disappear and login
will reset itself.  On successful login, xlogin will exec the xsession
script in it's place.

Associated with the menu items will be flags and file names or
callback functions.  The flag indicates if the workstation must be
activated for this menu item to work.  The file name is a script or
program to run when the menu item is selected.  The callback is for
internally implemented menu items (like restart, login on console, or
sesion style).

