These files contain programs developed at the
Wisconsin State Laboratory of Hygiene.
If you have any questions or problems with them contact:
David E. Miran
Chief of Data Processing
Wisconsin State Laboratory of Hygiene
University of Wisconsin
Madison, Wi  53706

Phone (608) 262-0019

As much as possible I have tried to provide user level documentation and also
some guidelines on compiling these programs.
In many cases there will be a file called mkxx or makxx which is a shell file
for compiling the program in question. Look for one of these before trying
to compile any of these programs, especially the more complex ones.
To print the manual pages in directories man1, man234, and man8 use the
myman shell command and give the exact name of the file to format.
For example:  myman man1/extract.1
The file laa is the nroff macro package we use for manual pages.

The system we are running can be characterized as follows:
The file system is version 6 unix on a PDP-11/60.
We also have the lseek system call from version 7.
Our editor and shell are PWB/UNIX version 1.
Our C compiler and many utilities are version 7.
Most of the programs provided here should compile without difficulty using
a version 7 compiler.

CREDITS
The basis of the advanced spooler complex (discussed below) came from
the University of Wisconsin - Madison, Department of Computer Science,
as did the File system repair tools.
The program terminal is based on a program called utalk from the
University of New South Wales.
Other programs are either local modifications of standard UNIX
programs (usually recognizeable as such) or were developed by me.

SYSTEM MODIFICATIONS
The following modifications exist in our kernel.
We have implemented the tell and lseek system calls, along with seek.
We have implemented a lock system call.  The effect of this call is to lock the
process in core (make it non-swappable).  Only one process at a time may be
locked.  Others are put into a queue to wait their turn.  This facility is
used to support page at a time transmission from terminals.
The system calls above are in sys/syshyg.c. The mods for the lock itself are
in slp.c.
The most important modification is something called block raw mode, in tty.c.
This allows a raw mode where the process is not awakened every character, but
only after either a specified number of characters are ready or an end of
block character is encountered. Both the number of characters and the end of
block character can be changed with the stty system call.
This feature allows for high speed input to be handled efficiently.
Also, regular raw mode returns more than 1 character per read system call
if more than one is available and if more than one is requested.
The modifications are in tty.c, along with other modifications to support
Clist and other items being mapped out of kernel space (this feature is not
provided because it requires changes almost everywhere.
If you really want it give me a call.).
This tty.c is to provide a guide to modifying your own tty.c if you are running
a V6 or V7 system.  Do not try to install this one.

The following packages exist:
rje
This is a full remote job entry system designed to let a system running UNIX
submit jobs to run on a Univac 1100 running EXEC 1100 (formerly EXEC 8).
There are a few minor local modifications to the Univac 1100 protocol (NTR),
which are described in the documentation accompanying the rje package.

spool
An enhanced spooler.
This spooling system will allow you to queue jobs to the line printer,
the plotter, or any printing terminal.
Jobs may also be put on hold, restored, or switched to another printing device.
Printers may be reserved so the spooler will not print on them, to allow for
use of special forms.
A special program filters output to printing terminals, after setting the
proper line modes.
These programs were originally based on programs obtained from the
Department of Computer Science, University of Wisconsin - Madison.

vir
This is a record entry/retrieval system.
It was originally designed to allow entry and retrieval of patient information
records.
It is designed to take advantage of the formatted screen (protected field)
capabilities of modern terminals and also uses block mode transmission.
It allows you to maintain collections of records on a patient, with several
different record types all accessible on request.
A prime design goal was fast access to records.  For this purpose it uses
several sorted indexes with unsorted areas at the end.  These indexes are
sorted periodically (usually every night).
This package supports several types of terminals, including the Teleray Model 10
and the H.D.S. Concept 108.  Other terminal types may be added.

datasys
This directory includes various auxilary programs related to vir.
dent is a dumb formatted data entry program - essentially a formatted screen
keypunch replacement.
*** Extract ***
Extract is the data reformatting program which is used with files created by dent
or vir.  It allows record selection, reformatting, counting, and partitioning
into multiple files.
This is all done on the basis of checking the contents of specified fields.
It is a comprehensive reformatting and report generation tool.
At our facility most reports are simply shell files using extract, sed, sort,
and an enhanced version of pr.

proglist
proglist is a list of all programs on our system with a one line description
of their function.  Most nonstandard programs on this list are provided.

s1-7
This directory has enhanced versions of the standard programs ls, pr, and pwd.
ls - The Berkley V6 ls (one of them) with some other enhancements and group
     identification put back in.
pr - The standard V6 pr with many enhancements, especially some allowing
     multiline headings.
pwd - An enhanced version which almost never gets lost.  This works better on
     our system than either the V6 or V7 pwd.

s9 and s10
These directories contain the source for most locally developed programs other
than those in the directories rje, spool, vir, datasys.
Look through proglist to see what might be useful.  Some highlights on what
is noteworthy include the following:
terminal - a program to let you talk to another computer or other device.
        somewhat similar in intent to cu, but flexible enough to let you
        communicate with any device or computer.
rsort - fixed length binary record sorter (based on V6 sort).
bcal - calendar - 1 month per page - good for posting with schedules.
fastin - supports high speed input (with system modifications)
fscan - random access file scanning. Much better than cat for random peeks
        into a file.
labels - format multiline labels from mailing lists.
newuser/mkusr - get information from prospective new users and authorize them.
          Very useful if you need to add users frequently.
rcopy - fixed length record copy. Advantage over dd is that initial skips are
         via lseek, rather than reading file.
submit/subrun - submit batch jobs for one at a time execution overnight.

filesys
A set of tools for fixing up addled V6 file systems after a crash.
These tools let you read and repair inodes very easily.  A version 7 edition
of the change inode program (seti) is included, complements of the
department of Computer Science.

lib
contains local library additions.

sys
contains the following V6 kernel modules:
syshyg - local system calls (lseek, tell, lock)
tty - modifications for block raw mode (high speed input)
du - synchronous interface driver for Remote Job ENntry system
pltlp - combined plotter and line printer driver.
slp - minor mods for lock system call
tty.h, proc.h,param.h - useful header files for above kernel modules.

etc
samples of a few tables that belong in /etc for some programs

su
a few things the super user might find useful.
These are undocumented, except for comments in the code.
Some of them go with other documented items.
Items available, both in su and elsewhere include the following:
prwtmp, fixwtmp, ac - accounting, printing, and editing the accounting
       file (note ours has an extra 4 byte field).
       If you want to modify your accounting for an extra field I
       have also included init.c and login.c to show you how.
       Along with this is thist.c which gives you usage summaries in
       terms of use of each terminal and amount of time that any number
       of terminals is signed in.

memrd, memfix - read and patch kernel memory while running.
        very dangerous, use sparingly.
parrd, parset, parck - check and set memory parity control register.

Good luck
Feel free to call me if something looks good to you but you need help installing
it or figuring out how to use it the first time.
I am usually in my office (at least in the building) from 7 AM to 4PM
Central Time.
