CAP/CAP60.README

560 lines
24 KiB
Plaintext

CAP 6.0
-------
This distribution of CAP is an attempt to collect together all of the patches
available for cap50 and provides an opportunity to perform some very necessary
maintenance. The code contains the original "official" patches plus bug fixes
and extra features contributed by *many* people. Local configuration of the
extra features is controlled by the file 'm4.features'. For more details,
see Features below.
Other changes
-------------
* AUFS support for AFP 2.0 is (practically) complete (see below).
* 'Configure' will automatically recognize the host byte ordering.
* 'Configure' has support for more machines and custom local features.
* UAB is now bundled and configured with this CAP distribution.
* UAB now supports Asynchronous AppleTalk on a UNIX host.
* The format of 'atalk.local' has been extended for async appletalk.
* Zone names in 'atalk.local' MUST now be quoted to include spaces.
* A "free format" 'etalk.local' is used by EtherTalk LAPs (& UAB/UAR).
* atis is now Phase 2 NBP compatible (partial obj/type matches).
* There are more (& updated) manual entries and documentation.
* There are more contributed packages bundled with CAP.
Features
--------
Additional features have been incorporated into CAP. Most of these were
supplied as patch files from a variety of sources. In addition, some changes
were made at The University of Melbourne, these changes concentrated on making
AUFS comply with AFP2.0 specifications and adding extra facilities and host
support to Configure. Currently, AUFS supports ProDOS* (Apple IIgs)
workstations running AppleTalk, the extended directory and volume attributes
and the additional error result codes. AUFS supports user editable encrypted
passwords using the DISTRIB_PASSWDS feature.
* ProDOS requires the NOCASEMATCH feature, or use of upper-case
application filenames only.
Specific host support that was new with CAP 6.0 includes ...
A/UX 2.0 Native AppleTalk William Roberts <liam@cs.qmw.ac.uk>
IBM Risc 6000 AIX System V David Hornsby <djh@munnari.OZ.AU>
Silicon Graphics IRIS-4D/IRIX David Hornsby <djh@munnari.OZ.AU>
SCO Xenix System V Chip Salzenberg <chip@tct.com>
Sequent Balance William Roberts <liam@cs.qmw.ac.uk>
ICL DRS6000 Michael Brown <mgb@geol.utas.edu.au>
DEC OSF/1 Alpha Scooter Morris <scooter@genie.gene.com>
Amdahl UTS Mark Haynie <mnh@cat.amdahl.com>
Sun Solaris 2.N Andy Polyakov <appro@fy.chalmers.se>
Sony NEWS TAYA Shin'ichiro <taya@sm.sony.co.jp>
Control Data CD4000-EP/IX John Huntley <John.Huntley@zeus.cdc.com>
386/BSD, FreeBSD 2.0 Dave Matthews <dcjm@dcs.ed.ac.uk>
NetBSD 1.0 Paul Nash <paul@frcs.alt.za>
BSDI BSD/386 1.1 David Hornsby <djh@munnari.OZ.AU>
HP/Apollo Domain BSD 4.3 Darrell Skinner
<skinner@lpmi.polytechnique.fr>
The features file ("m4.features") can be edited from within Configure by
answering yes to the question "Do you wish to customise the feature list ?".
The contents of the file are not processed by Configure so you can edit the
feature list at any time then (re)generate the makefiles with "./gen.makes".
To include a particular feature, uncomment (remove '#') the definition line.
The available flags, their meanings and original authors are:
SHORT_NAMES
Include AUFS code to support short file names as required by
AppleShare client implementations on PCs.
Bridget Rogers <brogers@ub.d.umn.edu>
NOCASEMATCH
Make AUFS filenames case insensitive as in other AppleShare
servers and Mac applications.
Edward Moy <edmoy@violet.berkeley.edu>
SIZESERVER
Compile 'sizeserver' daemon for AUFS to obtain volume size
information. Useful with operating systems that have no
support for getmnt() or statfs() to determine the amount of
free space on a filesystem.
Edward Moy <edmoy@violet.berkeley.edu>
FIXED_DIRIDS
Implement server and AUFS code to provide support for
fixed directory and file IDs. The 'afpidsrvr' daemon must
be started before any AUFS processes. Refer to the file
"applications/aufs/afpid.notes" for more information.
John Forrest <jf@ap.co.umist.ac.uk>
Scooter Morris <scooter@gene.com>
LWSRV_AUFS_SECURITY
Require LWSRV LaserWriter spooler users to have an AUFS
volume connected (and therefore be password validated).
Phil Budne <phil@shiva.com>
LWSRV_LPR_LOG
Include stdout/stderr messages from lpr in the lwsrv log.
Rakesh Patel <rapatel@khnphwzhn.njin.net>
AUTHENTICATE
AUFS or LWSRV connections must comply with the rules
specified in "/etc/cap.auth". This may specify permit
or deny permission by network number and/or server type.
Refer to the file cap60/doc/cap.auth.doc for details.
Edward Moy <edmoy@violet.berkeley.edu>
STAT_CACHE
Provide a speed enhancement by caching UNIX stat(2) calls
within AUFS.
Dan Oscarsson <dan@dna.lth.se>
TREL_TIMEOUT
ATP transaction release packets (TREL) can sometimes be
lost. AUFS will timeout after 30 seconds and continue with
the next request. This option adds a second request
listener to avoid the timeout delays.
Dan Oscarsson <dan@dna.lth.se>
ATPREQCACHE
Cache ATP TREQ packets to avoid 2 second wait if request
control block (RqCB) not set up in time by AUFS.
Rudy Nedved <Rudy_Nedved@RUDY.FAC.CS.CMU.EDU>
RUTGERS
Include Rutgers specific code. You probably don't want
either this or MELBOURNE unless you check the sources.
MELBOURNE
Include Melbourne specific code.
USE_HOST_ICON
If available, the AUFS volume ICON will represent the
underlying machine hardware (instead of the BSD daemon).
PERMISSIVE_USER_NAME
Allow the AUFS login name (from the Chooser User Name) to be
partially matched to the gecos field in the password entry.
IE: you can login with full user name, first name or surname.
Jean-Luc Mounier <mounier@masi.ibp.fr>
ULTRIX_SECURITY
Activate AUFS login security based on an authorisation
file. Check this file if normal password field is "*".
Rusty Wright <rusty@groan.berkeley.edu>
DIGITAL_UNIX_SECURITY
Use Digital UNIX enhanced security for AUFS logins.
Andrew Greer <andrew@totara.its.vuw.ac.nz>
Richard Rogers <r.m.rogers@staffs.ac.uk>
USE_MAC_DATES
Keep the modification date of the Mac file intact when
copied to an AUFS volume (otherwise it is the latter of
the UNIX creation and modify times).
David Hornsby <djh@munnari.OZ.AU>
DEV_NIT
Allow an alternate name for the NIT interface. The default
name is "/dev/nit".
Austin Shelton <austin@chalmers.se>
APPLICATION_MANAGER
Control the maximum number of times an Application may be
run and optionally prevent Finder copying for AUFS mounted
volumes. More details in contrib/AppManager/README
David Hornsby <djh@munnari.OZ.AU>
DENYREADWRITE
Implement AFP Access/Deny modes on AUFS file accesses.
David Hornsby <djh@munnari.OZ.AU>
AUFS_README
Add '-r <arg>' option to AUFS. The <arg> is expected to
be a full path name to an explanatory README file and is
linked into the top level volume of a new AUFS user.
Edward Moy <edmoy@violet.berkeley.EDU>
AUFS_IDLE_TIMEOUT
Add -i and -I options to AUFS to disconnect users who
exceed the specified idle time. -I includes all users,
-i is for guest sessions only.
David Hornsby <djh@munnari.OZ.AU>
REREAD_AFPVOLS
A SIGUSR1 signal sent to AUFS causes the global AFP volumes
file to be re-read.
Eugene Bogaart <bogaart@serc.nl>
CLOSE_LOG_SIG
A SIGUSR2 signal sent to AUFS causes the log file to be
closed and then re-opened (allows the file to be truncated,
for example, by a script which regularly does something like
'cat > logfile; kill -USR2 <pid>'). See also PID_FILE.
Scooter Morris <scooter@gene.com>
PID_FILE
Cause AUFS to write a (named) process-ID file.
Scooter Morris <scooter@gene.com>
XDEV_RENAME
Allows AUFS to copy/move files across file systems.
Mark Abbott <m.abbott@ucl.ac.uk>
NOCHGRPEXEC
Make AUFS use the third argument to chown(2) instead of
exec'ing chgrp(1) to change group membership of file.
NB: Unavailable under System V, recommended for others.
Edward Moy <edmoy@violet.berkeley.EDU>
USEDIRSETGID
Set the group ID bit on directories whose group is not the
primary group of the AUFS user. Under SunOS and System V,
new files and directories are by default created with the
primary group unless the group ID bit of the parent is set.
David Hornsby <djh@munnari.OZ.AU>
USR_FILE_TYPES
Map UNIX filename suffix to Mac Type/Creator. The map file
may be global (specified with -F option to AUFS) or per
user (~/.afpfile or ~/afpfile). The mapping also controls
the file translation method used (ascii, text or raw). See
the sample file in cap60/extras/afpfile.
David Hornsby <djh@munnari.OZ.AU> et. al.
CREATE_AFPVOL
Create the .afpvols file, .finderinfo and .resource
directories in a subdirectory (default 'mac') of the home
directory of a new AUFS user (if they don't already exist).
An alternate subdirectory/volume name is specified with
the string -DCREATE_AFPVOL=\"other\" in m4.features
Heather Ebey <hebey@ucsd.edu>
CREATE_AFPVOL_NAME (now CREAT_AFPVOL_NAM)
Modifies the CREATE_AFPVOL option to use the user/account
name for the volume label instead of the value of the
CREATE_AFPVOL variable. Assumes CREATE_AFPVOL.
Craig Zook <zook@pat.mdc.com>
NETWORKTRASH
Under System 7.0, the "Network Trash Folder" mode is set
to 0x707 (world writeable). Defining NETWORKTRASH sets the
mode to that of the parent (top level) directory.
Edward Moy <edmoy@violet.berkeley.EDU>
ISO_TRANSLATE
Translate ISO 8859 characters in command line arguments
and configuration files into their Macintosh equivalents.
Likewise translate Macintosh characters to ISO 8859 for
etalk.local zone name, log file entries.
Austin Shelton <austins@cdg.chalmers.se>
ISO_FILENAMES
Extend ISO/Mac character translation to AUFS file names
(assumes ISO_TRANSLATE is in use)
Dan Oscarsson <Dan.Oscarsson@malmo.trab.se>
ISO_FILE_TRANS
Translate ISO 8859 characters in Creator "unix", Type
"TEXT" AUFS files into Mac characters on read and vice
versa on write (assumes ISO_TRANSLATE is in use).
Dan Oscarsson <Dan.Oscarsson@malmo.trab.se>
NCS_ALL_TEXT
Apply ASCII or ISO 8859 file translation to all files of
type "TEXT", regardless of Creator.
Dan Oscarsson <Dan.Oscarsson@malmo.trab.se>
LOGIN_AUTH_PROG
Allows AUFS -L command line argument to specify an external
authorization program for AUFS logins. See man/AUFS.8
Irwin S. Tillman <irwin@phoenix.Princeton.EDU>
PSJOBHEADER
If defined, PAPIF will check for an environmental variable of
the same name. The variable specifies a file which contains
a postcript header (for example to change paper trays or
print double sided) to be sent before the print job.
Jay Plett <jay@silence.princeton.nj.us>
DUPLEXMODE
If defined, PAPIF accepts a -2 option (also if the printer
name contains -dup*) to set double sided printing. Duplex
printing must be supported by the printer hardware.
Dan Mosedale <mosedale@genome.stanford.edu>
TRANS3
Setup PAPIF for 'psdman' from the TranScript 3.0 package.
Dan Mosedale <mosedale@genome.stanford.edu>
PASS_THRU
If defined for LWSRV, print jobs will be passed through
with no Adobe pre-processing. This is useful for spoolers
providing service for PCs.
Gavin Longmuir <gavin@coombs.anu.edu.au>
DONT_PARSE
If defined for LWSRV, print jobs will be passed through
with no Adobe pre-processing at all. This is useful for
spoolers which require an unaltered file, as the PASS_THRU
option does not disable some Adobe handling. The crtolf
option will continue to work if it is enabled with this
option.
Rakesh Patel <rapatel@rutgers.edu>
LPRARGS
Allows LWSRV -L command line arguments to be passed directly
to lpr. For example, printing via TransScript without
-T quote8bit set causes option-key characters to be printed
incorrectly. Setting -T quote8bit causes binary PostScipt
(usually gray scale images) to fail. In this situation use
LWSRV argument "-L-l" to pass "-l" to lpr.
Edward Moy <edmoy@violet.berkeley.EDU>
RUN_AS_USER & USER_REQUIRED
Attempt to map Mac Chooser/Owner name to a real UNIX user
name (based on map file, eg: cap60/extras/lib.cap.macusers)
then setuid() the lwsrv session as this user. IE: lpr can be
lprm'd as normal. USER_REQUIRED must find a match otherwise
it prints a failure message eg: cap60/extras/lib.cap.refused.
NB: no password authentication is provided.
Maarten Carels <maarten@fwi.uva.nl>
PROCSET_PATCH
If defined for LWSRV, procset "patches" are not passed
through to the printer. These patches are code changes
for Apple LaserWriters and can have strange effects if
used on non-Apple printers.
Alexander Dupuy <dupuy@tiemann.cs.columbia.edu>
ULT42PFBUG
Workaround for ULTRIX 4.2 packet filter problem (see Gotchas)
David Hornsby <djh@munnari.OZ.AU>
STEAL_PORTS
Extend DDP Dynamic Socket range down into the experimental
AppleTalk socket range 64 - 128. Adds another 64 possible
sockets for server use.
Rakesh Patel <rapatel@rutgers.edu>
David Hornsby <djh@munnari.OZ.AU>
USING_FDDI_NET
Includes code to determine if interface is running on
FDDI network and adjust packets accordingly. Digital UNIX
and Ultrix only at this stage.
Conrad Huang <conrad@cgl.ucsf.edu>
NOCAPDOTPRINTERS
If defined, PAPIF will not use /etc/cap.printers, instead
the first line of the file /etc/lp/printers/lw/comment (for
printer "lw") is expected to contain a fully qualified
AppleTalk NBP name for the printer, ie: lw:LaserWriter@Zone
This option is intended for use on Solaris 2.N hosts only.
Andy Polyakov <appro@fy.chalmers.se>
USESYSLOG
If defined, PAPIF will send Information, Warning and Debug
messages to syslog().
Andy Polyakov <appro@fy.chalmers.se>
DISTRIB_PASSWDS
If defined, CAP will use AUFS authentication methods that
involve exchanging encrypted random numbers instead of
sending passwords in clear text over the network. Refer to
manual entries aufsmkkey.8 and aufsmkusr.8 in cap60/man.
David Hornsby <djh@munnari.OZ.AU>
AFP_DISTPW_PATH
Specifies that the distributed password files used in
DISTRIB_PASSWDS be kept in a directory other than the
user's home directory. For example, you could use the
following -DAFP_DISTPW_PATH=\"/usr/local/lib/cap/upw\"
David Hornsby <djh@munnari.OZ.AU>
AFP_DISTPW_MODE
Modifies the file mode being enforced with DISTRIB_PASSWDS.
For use when user home directories are mounted via NFS. Uses
mode 0600 by default, use 0644 with NFS.
David Hornsby <djh@munnari.OZ.AU>
DEBUG_AFP_CMD
If defined, AUFS will dump detailed logs of AFP command I/O
parameters in the file specified with the AUFS -Z option.
Use in conjunction with Inside AppleTalk 2nd edition for
debugging the AUFS AFP implementation.
David Hornsby <djh@munnari.OZ.AU>
LOG_WTMP
If defined, AUFS will write an entry into the wtmp log file
on each successful AUFS connection. Allows usage tracking.
Gavin Longmuir <Gavin.Longmuir@anu.edu.au>
Heather Ebey <heather@sdcc6.ucsd.edu>
LOG_WTMP_FILE
Specifies alternate name for the wtmp file used in LOG_WTMP.
Heather Ebey <heather@sdcc6.ucsd.edu>
ADMIN_GRP
If defined, AUFS will check if the user is a member of a
special admin group and connect them with superuser privs.
Tim Leamy <ccctim@rocky.ucdavis.edu>
TEMPFILE
Allow the LWSRV temporary file path to be specified.
Serge <serge@zooks.ME.berkeley.edu>
USELPRSYM
Option to allow optional lpr '-s' (broken under OSF/1).
Serge <serge@zooks.ME.berkeley.edu>
The following were originally to be defined in m4.setup, they have
been moved to m4.features for convenience.
NONLXLATE - don't translate newlines on "line-at-a-time" reads
FULL_NCS_SUPPORT - National Character Support
GGTYPE="gid_t" - Host type definition for groups
DOCNAME - include document name in lpr job name
PAGECOUNT - include page count in lpr job name
ADOBE_DSC2_CONFORMANT - Conform to Adobe DSC2 specs
CAP Patches
-----------
The primary source of CAP information is, as always, the network newsgroup
comp.protocols.appletalk. This forum will continue to be used to disseminate
information about CAP 6.0 updates, but we would very much like to encourage a
slightly more formal approach to the process of propogating CAP patches.
Therefore, please send patches for CAP bug-fixes and new features to
cap@munnari.OZ.AU
Context diffs (from 'diff -c') are preferred, but not essential. Patches
received will be assigned a patch number, a priority and will be included in
regular (but not too frequent) CAP releases. In addition to then being sent
to comp.protocols.appletalk, the patches will be available via FTP from
munnari.OZ.AU (in mac/cap.patches)
ftp-ns.rutgers.edu (in pub/cap/cap.patches)
gatekeeper.DEC.COM (in pub/net/appletalk/cap/cap.patches)
ftp.kuis.kyoto-u.AC.JP (in net/cap/cap60.patches)
src.doc.ic.AC.UK (in mac/multigate/cap.patches)
The intent is to minimise the nightmare of trying to apply useful patches
that have come from divergent versions of the source code. Another goal is
to reduce the maintenance needed for CAP code, if the incremental patches are
applied in order, the result will be identical to any new release.
To apply the patches with an absolute minimum of effort, it is recommended
that you use the 'patch' program written by Larry Wall. This can be obtained
from sites that archive postings from the newsgroup comp.sources.unix in the
directory volume7/patch2. It is important to ensure that any patches for the
patch sources are applied, some CAP patches can fail if the unmodified patch
code is used.
The current patch level is recorded in the cap60/README file. New patches
are applied from the top level directory with the command
% patch -p < cap60.patches/cap60.patch0NN
where NN is the patch number. The -p option tells patch to obtain
information about which file to alter from the patch header (use -p0 on
a DEC Alpha under OSF/1). If you attempt to apply a patch more than once,
patch will enquire about "a reversed or previously applied patch", answering
yes to this will remove the patch, leaving the original file (and bug), this
is not good ...
CAP and AppleTalk Phase 2
-------------------------
CAP 6.0 supports EtherTalk Phase 2 using the SunOS NIT interface, the enet
packet filter (requiring kernel mods, see cap60/support/enet) and the ULTRIX
packet filter (ULTRIX 4.0 or later). It also is possible to use CAP in a
Phase 2 environment with IPTalk as indicated below.
Traditionally, the CAP transport mechanism uses UDP/IP packets. This is
called IPTalk (also known as KIP) and is a "non-extended" (1 net number
and 1 zone name) network. CAP with IPTalk can run on a LARGE variety of
UNIX platforms.
On some machines, CAP can also produce EtherTalk Phase 1 packets directly
(using Native EtherTalk, Kernel AppleTalk or UAB - the UNIX AppleTalk
Bridge). EtherTalk Phase 1 is also a "non-extended" network.
Macintoshes on EtherNet can speak EtherTalk Phase 1 or Phase 2. EtherTalk
Phase 2 networks are always "extended", allowing multiple network numbers
and zone names on a single cable. An "extended" network can be "restricted"
to have one net number and one zone name. This permits the Phase 2 routing
information to be translated into Phase 1 routing packet format. This is
not otherwise possible.
For completeness, LocalTalk networks can use either Phase 1 or Phase 2
AppleTalk packets, but such networks are always "non-extended".
In a brief summary of AppleTalk Phase 1 and Phase 2 differences on LocalTalk,
routing information (RTMP) packet formats are different. NBP packets allow a
new character (approxEquals or 0xc5) for partial NBP name and type matching.
Nodes are no longer required to send to the last RTMP sender that they heard
from, rather, they can choose to send to the "best" router. There are other
differences for Phase 1 and Phase 2 EtherTalk packets on EtherNet. These
differences relate mainly to delivery mechanisms.
If you use CAP with IPTalk and *NO* AppleTalk routing over IP (ie: via an
IP link between IP gateways) then you can use CAP with Phase 2, "extended"
networks with no restrictions (except of course, that you must have an
AppleTalk Gateway capable of talking IPTalk and EtherTalk Phase 2).
On the other hand, if you are using CAP and IPTalk with AppleTalk routing
over IP, or CAP with EtherTalk Phase 1, then your Phase 2 networks must all
be "restricted" and you need to have a gateway capable of operating in
"transition" mode (the problem with the first case is due to the way IPTalk
works rather than CAP. IPTalk 2 is under development and will solve this).
The gateway translates the packets from one format to another. Suitable
IPTalk/Phase 2 gateways are the Webster MultiPort Gateway (running Megan
2.1 or later) and the Shiva FastPath 4 (running KSTAR 8.0 or later). Most
earlier versions of the gateway code will happily translate from IPTalk to
either Phase 1 or LocalTalk.
See Also
--------
Manual entries cap60/man/*
Various documentation cap60/doc/*
Native EtherTalk cap60/support/ethertalk/README
Kernel AppleTalk lib/cap/abkas.c, netatalk-1.2 distribution
http://www.cs.mu.OZ.AU/appletalk/atalk.html
Gotchas
-------
There are various problems known to exist with CAP and particular UNIX
systems or programs.
ULTRIX:
You may see the error message
open: ln0: No such file or directory
when running aarpd. The problem is due to missing packet
filter devices in /dev/pf. For details on how to make the
devices, refer to the manual entry for 'packetfilter'.
ULTRIX 4.1:
There is a problem with packet filter code in ULTRIX 4.1
that prevents CAP writing packets to the network. Before
running CAP with 4.1 (on any hardware platform), request
the patched version of the file "net_common.o" from your
DEC Customer Support Center. You may also need to obtain
the updated "if_ln.o" to prevent problems with LAT.
ULTRIX 4.2/4.2A:
There are three known "problems" with packet filter code
and unicast/802.3 packet handling under ULTRIX 4.2. The
problems have been identified and fixed. Contact your
local DEC Customer Support Center and query the status
of patches for "net_common.o" and "pfilt.o". The problems
and WORKAROUNDS for UNPATCHED systems are as follows:
"unicast packets are not delivered properly to PF clients"
define COPYALL mode using 'ifconfig ... +copyall'
"802.3 (phase 2) AARP packets converted to EtherNet equiv."
apply CAP patch 75, define ULT42PFBUG in Configure
"3rd-party Mac EtherNet cards that round up odd 802.3 packets"
no workaround, requires new net_common.o, pfilt.o
with less stringent 802.3 length sanity checking.
ULTRIX 4.3
under ULTRIX V4.3 you may need to obtain a patched version of
/etc/lockd to use DENYREADWRITE code. A possible workaround is
to 'nfssetlock off' ... this will impact NFS mounted volumes.
HP/Apollo Domain BSD 4.3
Avoid using the //node/path syntax in afpvols, either
explicitly or from expansion of ~. If such a definition
appears in afpvols, the volume corresponding to it may
be visible in the Chooser but be unmountable or may not
appear in the Chooser. Other volumes defined after such
a line also may not show up in the Chooser. You may use
directories mounted on other nodes using soft links or
a path such as /../node/path. It is not clear how much of
the file locking carries over directories on other nodes.
See NOTES for avoiding the //node/path construction.
NFS
In some circumstances, CAP AUFS using NFS mounted
filesystems may complain about files being locked when
they are not obviously so. Ensure that you have the latest
NFS bugfixes for your UNIX platform.
Bug Fixes
---------
The following CAP 5.0 bug fixes were incorporated into CAP 6.0.
abpap.c.tickletimer Jim Guyton <guyton@rand.org>
abpaps.c.flowquantum William Roberts <liam@cs.qmw.ac.uk>
procset.c.looping William Roberts <liam@cs.qmw.ac.uk>
mips.ultrix.byteswap <rob@cs.aukuni.ac.nz>
snitch.c.stringlength Phil Farrell <farrell@pangea.stanford.edu>
papif.c.atpresponse Phil Farrell <farrell@pangea.stanford.edu>
papif.c.variousbugs Jeff Stearns <jeff@tc.fluke.COM>
papif.c.reverse Robert McLay <mclay@emx.utexas.edu>
afpos.c.strcmp JQ Johnson <jqj@duff.uoregon.edu>
simple.c.comment Mark Rawling <rcomr@koel.co.rmit.oz.au>
rtmp.c.nocase John Sellens <jmsellen@watmath.waterloo.edu>