Mon Apr 13 15:06:15 BST 1998    Paul Anderson <paul@dcs.ed.ac.uk>

	* Release 3.1.5
	* Hacked AMD stuff to work with redhat 5.0 which defines sys_errlist

Tue Mar 31 16:22:14 BST 1998    Paul Anderson <paul@dcs.ed.ac.uk>

	* Release 3.1.4
	* More minor portability stuff

Tue Mar 31 14:14:47 BST 1998    Paul Anderson <paul@dcs.ed.ac.uk>

	* Release 3.1.3
	* Small portability problems (Sun CC)

Wed Feb 11 11:48:27 GMT 1998	Paul Anderson <paul@dcs.ed.ac.uk>

        * Release 3.1.2
	* Fixed small problems with portability
	
Tue Feb 10 09:07:40 GMT 1998	Paul Anderson <paul@dcs.ed.ac.uk>

	* Release 3.1.1
	* First release of Version 3.1

$Log: ChangeLog,v $
Revision 1.4  1998/03/31 15:39:07  paul
-

Revision 1.3  1998/03/31 13:40:03  paul
-

Revision 1.2  1998/02/11 11:54:55  paul
-

Revision 1.1  1998/02/10 15:29:22  paul
-

# Revision 2.86  1996/07/02  10:40:29  paul
# 1) Turned arounf the .tar.gz
#
# Revision 2.85  1996/07/02  10:31:31  paul
# 1) Another trivial man page bug
#
# Revision 2.84  1996/07/02  10:25:10  paul
# 1) Fixed conditional bug in man page
#
# Revision 2.83  1996/01/09  12:42:20  paul
# 1) Fixed permissions on cache file which was previously world-writable.
#
# Revision 2.82  1995/06/26  16:04:10  paul
# 1) Oops. A silly typo.
#
# Revision 2.81  1995/06/26  16:00:33  paul
# 1) It's hard to believe, but I'm fairly sure there has been a bug in
# the AVL FreeNode code. I don't understand why this hasn't shown up. I
# only found it when I tried to use the AVL code for something else. I
# guess I could be missing something, but here goes ... I'm fixing it.
#
# Revision 2.80  1995/05/03  07:50:43  paul
# 1) Changed configuration for SGI for latest version of IRix, as
#    suggested by ajs.
#
# Revision 2.79  1994/09/09  07:50:51  paul
# *) Added support for YP compatibility to Solaris version.
#
# *) -V now prints out the domain name.
#
# Revision 2.78  1994/09/08  16:25:45  paul
# (*) Changed "export" target in makefile to install stuff in WWW area.
#
# (*) Fixed bug with NULL domain name
#
# Revision 2.77  1994/02/16  11:03:04  paul
# (*) Included patches for "noidcheck" option implemented by
#     Alain.Peyrat@cern.ch.
#
# Revision 2.76  1994/01/24  14:17:00  paul
# *** empty log message ***
#
# Revision 2.75  1994/01/17  13:57:01  paul
# Fixed problem with default domainname
#
# Revision 2.74  1993/11/26  15:20:53  paul
# 1) Added "project" target to the makefile to interface with the Lemacs
#    menus.
#
# 2) Fixed a bug which caused filenames with spaces to generate syntax
#    errors in the cache file. Filenames containing CR characters
#    can't be stored sensibly in the cache file and are never cached.
#    I suppose this ought to generate a warning or something.
#
# Revision 2.72  1993/07/08  11:02:03  paul
# 1) Ported to latest version of Sequent O/S.
#
# Revision 2.71  1993/07/07  13:54:24  paul
# 1) A couple of small changes to make it compile on the NeXT again.
#    NeXT has no "cut" command & no utime.h.
#
# Revision 2.70  1993/06/30  14:59:03  paul
# 1) Sigh. stupid spelling mistake meant that the sgi version 2.69 was
#    *still* broken. Fixed it this time, hopefully.
#
# Revision 2.69  1993/06/30  11:48:53  paul
# 1) Fixed a bug in the SGI header file handling.
#
# 2) This version builds on sun4, sun4-51, sun3, hp900, mips & sgi.
#
# Revision 2.68  1993/06/30  10:44:40  paul
# 1) Inhibited logging of "permission changed messages" when attempting
#    to change permissions of a link on an OS which doesn't support
#    this. Ditto ownership. Tidied up the code here quite a bit as well.
#
# 2) Corrected a bug which only showed up when ewere printing all these
#    error messages - we were always trying to change the perms of the
#    dst object to make it the same perms as the src object. This
#    doesn't make sense if the dst is a link (cache or otherwise), so
#    now we only change the perms if the two objects have the same type.
#
# 3) Added a TAGS target to the makefile.
#
# 4) Created a separate config.h file to make it easier to port.
#
# 5) Made a whole load of small changes to get things through lint under
#    Solaris 2.2. This is the version of lint that we are going to use
#    from now on. It hasn't been put through lint on other platforms.
#    This process did show up quite a few oddities, including some
#    things that were technically bugs.
#
# 6) We don't attempt to lint the regexp code anymore. This is imported
#    code, like the AMD stuff.
#
# Revision 2.67  1993/06/23  14:55:59  paul
# 1) Fixed bug which caused certain permission errors not to be reported
#    when running as root over NFS.
#
# Revision 2.66  1993/06/23  10:48:08  paul
# 1) Inverted sense of "-w" flag.
#
# Revision 2.65  1993/06/23  10:33:28  paul
# 1) Fixed silly bug in conditional for unistd.
#
# Revision 2.64  1993/06/23  10:25:03  paul
# 1) Added dummy routines LinkChmod() and LinkChown(). These are called
#    to change the attributes of a symbolic link when the operating
#    system doesn't have an appropriate system call. Currently, they
#    just generate a warning message.
#
# 2) The Link* routines are now called in all the appropriate places.
#    This removes the errors generated by System V machines trying to
#    change the attributes of the target file, rather than the link
#    itself.
#
# 3) Added -w to inhibit warning messages.
#
# Revision 2.63  1993/03/31  11:21:57  paul
# *) Fixed bug reported by Sam Horrocks <sam@ics.uci.edu> -
#
#    "Lfu will core dump if it runs out of space while trying to make
#    a symlink in the destination directory.  If you have a config
#    file that doesn't use any of the caching features, none of the
#    cache variables are initialized, but later on when trying to free
#    up space, the caching routines are called and use the uninitialized
#    variables."
#
# Revision 2.62  1993/03/18  10:55:12  paul
# *) Fixed bug in Solaris II version which should use lchown instead
#    of chown.
#
# *) Added some libraries to the makefile to get the monitor to compile
#    under Solaris II.
#
# Revision 2.61  1993/02/26  17:12:26  paul
# 1) Make some fixes to the machine-dependant stuff for SGI, as
#    suggested by irvin@nas.nasa.gov.
#
# 2) Fixed some Solaris II machine dependant stuff for getting the boot
#    time.
#
# 3) Add the -A option to allow the directory used for the cache stats
#    files to be set. (Eg. some machines, don't have a /var, and some
#    people clean out /var/tmp every night).
#
# 4) Added a variable to the makefile to allow "uname -m" to be used
#    to set the architecture, rather than "arch".
#
# 5) Fixed a bug in the subporcess routines which did not close one of
#    the pipe fds properly. In particular if "exec" forked a background
#    job, lfu would not continue until the job terminated.
#
# Revision 2.60  1993/02/11  10:25:52  paul
# 1) Added fatal error if the source & destination directory are the
#    same.
#
# Revision 2.59  1993/02/05  16:25:56  paul
# 1) Removed some temporary filenames from the makefile that were left
#    in from the Solaris experimentation.
#
# Revision 2.58  1993/02/05  16:21:15  paul
# 1) Ported to Solaris II. This version nows compiles under Solaris II
#    in the native Sys V mode without the compatibility libraries.
#    (The X monitor has not yet been tested because we don't have any
#    X libraries yet).
#
# 2) Imported the GNU version of alloca for systems that don't have one.
#    This is used in the Solaris port.
#
# 3) Moved the configuration of the preprocessor list out of the makefile
#    into misc.h and made it system-dependent.
#
# Revision 2.56  1993/01/13  16:13:01  paul
# This release incorporates changes by Margarita Suarez
# <marg@edu.columbia.cc.manila>
#
# 1) Added a "cacheminfree" parameter to allow a certain amount of disk
#    space to be reserved when caching. This release implements the
#    keyword, but ignores the value. We are still thinking about the
#    best way to implement this.
#
# 2) Allowed the cacheminsize parameter to be given in Mb or Kb as well
#    as blocks.
#
# 3) Fixed a bug in the cache code reported by <howie@edu.columbia.cc.watsun>
#    which caused the cache stats for one file to be lost when the
#    filesystem was full. (It also caused a small memory leak).
#
# Revision 2.55  1992/12/08  10:18:58  paul
# 1) Added Copyright notices
#
# Revision 2.54  1992/12/03  10:55:13  paul
# 1) Minor fixes for type warnings on some platforms.
#
# 2) Fixed bug in file copying routine which truncated files with
#    blocks of zeros at the end, when the "compress" option was used.
#    (Reported by Margarita Suarez <marg@edu.columbia.cc.manila>)
#
# 3) Change in some definitions in pass2.c to try and work around
#    what *appears* to be a compiler bug in NextStep 3.
#    (Reported by terryh@edu.STANFORD.SLAC.UNIXHUB)
#
# 4) Tidied up the type definitions of things like mode_t which weren't
#    really taking proper account of the platform differences. Also
#    changed the lseeks to use off_t.
#
# 5) Documented the "interupted system call" error that gets caused
#    occasionally by the monitor.
#
# 6) Added code to allow file names to appear more than once in the
#    cache file. In this case, the usage information from the two
#    instances is merged - this allows cache files from multiple
#    machines to be concatenated and used to determine the caching
#    for a single machine.
#
# Revision 2.53  1992/11/27  12:09:15  paul
# 1) This release just contains portability mods. Notably, it now
#    compiles OK on the NeXT. The machine-specific stuff has been tidied
#    up quite a bit and made more explicit in misc.h, so it should be
#    easier to port to other platforms. The SGI and NeXT compilers also
#    picked up a few type warnings that have been cleared up.
#
# Revision 2.52  1992/11/26  16:08:38  paul
# 1) Ported to SGI using patches suggested by Tim Irvin <irvin@gov.nasa.nas>
#
# 2) Also tidied up a few things that should make it cleaner to port to
#    other platforms
#
# 3) Added "parallel" target to makefile for parallel builds on multiple
#    platforms
#
# Revision 2.51  1992/11/16  16:13:38  paul
# This release incorporates changes requested by Phillipe Defert
# <defert@ch.cern.gnuisance>.
#
# 1) Added additional resource options to the X monitor allowing the
#    default state of the fast/slow and show all/changes buttons to
#    be set. Documented these in the man page.
#
# 2) Added some other resource options (undocumented) to change the
#    labels on these buttons for people who don't like the button
#    saying "slow" when you are in "fast" mode etc :-)
#
# 3) Pass2 now continues to try and set the mode and time on files even
#    when the ownership change fails. This prevents files being created
#    with the wrong mode and time when there is no permission to change
#    the ownership. I'm not entirely happy with this - I think the
#    "right" answer is to delete the destination file when anything goes
#    wrong, rather than leaving "half-correct" files on the destination.
#    It's conceivable that this could even be a security risk because it
#    could create setuid files with the wrong owner.
#
# 4) Changed the monitor interrupt handlers so that they re-register
#    the handlers every time they are called. This is necessary for
#    some non-Sun systems which have a different signal semantics.
#
# Revision 2.50  1992/11/13  15:36:11  paul
# This release incorporates bugs and other changes needed to get lfu to
# compile on the next, reported by terryh@edu.STANFORD.SLAC.UNIXHUB.
#
# 1) Changed cc to $(CC) everywhere in the makefile
#
# 2) Added conditional to allow AMD_DIR= to disable AMD stuff
#
# 3) Deleted old libamd.a before creating new one.
#    (This prevents modules from being appended to the end of an
#    existing archive!)
#
# 4) Added sys/stat.h to lfu.c. This is a guess at where mode_t lives
#    on the Next.
#
# Revision 2.49  1992/09/25  08:19:14  paul
# 1) Changed SIGTERM to SIGHUP in the monitor comments which document
#    the monitor protocol. (It was wrong).
#
# 2) X errors in the monitor are no longer fatal. This prevents a
#    long-running lfu from being killed by an attempt to monitor it
#    when (eg.) it has no permission to access the X DISPLAY.
#
# Revision 2.48  1992/09/15  14:54:00  paul
# 1) Changed the CPP for 386bsd for /usr/bin/cpp to /usr/libexec/cpp.
#
# 2) Changed the E_CPP eror message from the scanner to report just
#    the name of the preprocessor being used, rather than the complete
#    search list.
#
# Revision 2.47  1992/09/11  08:50:05  paul
# *** empty log message ***
#
# Revision 2.46  1992/09/10  15:47:03  paul
# 1) Ported to 386BSD, including .....
#
# 2) Fixed small makefile bugs which only showed up under 386BSD
#
# 3) Included conditionals in scanner to support FLEX
#
# 4) Included conditional code to support systems with no YP (or
#    a separate library of YP functions).
#
# 5) Redefined xdr_pointer in the amq library to stop it clashing
#    with something of the same name in the rpc library.
#
# 6) Added /usr/bin/cpp to the preprocessor list
#
# Revision 2.45  1992/05/11  15:47:01  paul
# 1) The recent mods to set the atime and mtime of the .BUSY files to the
#    current time caused a problem in some cases with symbolic links.
#    This has been fixed in this version ....
#
#    If a symlink was marked for "keep", then the attempt to set the
#    time using "utime" was  going "through" the link and setting the
#    time in the link target instead. SInce there is no "lutime" call,
#    we now copy the link and dlete the original to get the right time,
#    rather than just renaming the link.
#
# Revision 2.44  1992/04/20  15:41:12  paul
# 1)  Documented "age" debug option.
#
# Revision 2.43  1992/04/20  15:37:25  paul
# 1)  Added "age" debug option.
#
# 2)  When a file is renamed because of a "keep" action, the mtime and
#     atime of the busy file are set to the current time. This allows
#     the age of the keep file to be determined on following runs.
#
# Revision 2.42  1992/03/25  10:14:52  paul
# 1)  Incorporated Phillipe Defert's patch to allow specification of
#     numerical UIDS. <defert@ch.cern.cernvax>
#
# Revision 2.41  1992/03/06  09:13:45  paul
# (1)  Documented the fact the SIGUSR1 is -16 and not -30 under HP/UX.
#
# (2)  Added -lBSDx to HP compilation. This seems to be a local library
#      containing alloca. I don't know where alloca was coming from
#      before!
#
# Revision 2.40  1992/03/05  16:47:58  paul
# (1)  Added debug options "parse" and "input".
#
# (2)  Previously, cache statistics were printed if a "~cache"
#      instruction was exectued, as well, as "cache". This has been
#      changed so that cache stats are only printed if a real "cache"
#      instruction is executed.
#
# Revision 2.39  1992/03/03  14:45:20  paul
# (1)  Fixed bug in call of NewString with no terminating NULL.
#      This caused intermittent crashes.
#
# Revision 2.38  1992/03/03  09:02:22  paul
# (1)  Oops. Changes to cache recording broke a few things - We do
#      actually need to initialize the cache before we see any cache
#      instructions executed. Fixed it.
#
# Revision 2.37  1992/03/02  11:42:47  paul
# (1)  Changed makefile to prevent it trying to check out obsolete
#      source files (optim.*).
#
# (2)  Minor change to "eval.c" to prevent the Ultrix compiler
#      complaining about "&=".
#
# (3)  If "reboot" can't determine the boot time, then the error is now
#      non-fatal and an ancient bootime is assumed.
#
# (4)  Added support for warnings.
#
# (5)  Empty netgroups are now just warnings.
#
# (6)  Previously, cache statistics were printed if the program
#      contained any cache instructions. This has been changed so that
#      cache statistics are now only printed if a cache instruction
#      actually gets executed. This is useful because we often have a
#      generic program which contains things like ....
#
#               owner=@netgroup cache;
#
#      On some machines we might not want to cache and so the netgroup
#      would be empty and don't want any stats.
#
# (7)  Fixed bug which caused wrong line numbers to be reported for
#      errors when the program input was from stdin.
#
# Revision 2.36  1992/02/27  15:10:33  paul
# (1)  Backed out the additons to support "overlay".
#      Decided that it was too hard to implement easily, and the
#      required effect can be obtained by using the "exists[]" conditon
#      together with source.
#
# Revision 2.35  1992/02/25  13:05:15  paul
# (1)  Added the "default" keyword.
#      All actions within a default block are executed once at the
#      beginning of the run, rather than being executed for every file.
#      (Rather like BEGIN in awk).
#      This allows a choice of whether to execute something once only,
#      or whether to execute it for every file. It also makes the syntax
#      cleaner for global options (like cacheminsize, eg.).
#
# (2)  Removed the optimizer completely - this was only attempting to do
#      some things which can now be done explicitly with "default".
#
# (3)  Extended the syntax for "source" and "[]" to allow an arbitrary
#      prefix of the source filename to be replaced with a new prefix.
#      This allows other files in the same tree as the source directory
#      to be specified.
#
#      Eg. on certain slave servers, we could arrange to automatically
#      link /usr/local/bin/X11 to /usr/local/bin/X11R4 and, on other
#      servers, to /usr/local/bin/X11R5.
#
#      This also unifies the syntax for "source" and "[]" specifications
#      and provides something that we can use for the "overlay" action.
#
# (4)  Added the "overlay" keyword. (But it is curently still a NOP).
#      Freezing things at this level to provide a backup point again,
#      because it loks like the overlay stuff might be tricky.
#
# Revision 2.34  1992/02/21  12:10:35  paul
# 1)  Re-arranged the code in pass1.c and pass2.c in prepration for
#     adding support for "overlayed" directories. This shouldn't
#     produce any functional changes, but it is being frozen to provide
#     a backup point.
#
# Revision 2.33  1992/02/11  15:41:54  paul
# (1)  Cosmetic changes to makefile (log installation of manual page).
#
# (2)  Added "reboot" condition.
#
# (3)  Fixed bug which caused "size(F)..." to ignore the (F).
#
# (4)  Ditto bug with "type(F)....".
#
# (5)  Made everything pass lint again.
#
# (6)  Changed the DEBUG flag to LFUDEBUG because DEBUG was enabling
#      debugging in things like the regexp package that we don't want.
#
# (7)  Changed grammar so that filename arguments are contained in []
#      rather than (). This was necessary to remove ambiguities when a
#      single keyword had an optional argument.
#
# (8)  Corrected manual page description of directory arguments to
#      condition keywords.
#
# (9)  Fixed getawd to quietly return the un-transformed directory if
#      there are RPC errors talking to amd.
#
# (10) Re-instated "fill" action which seemed to have got lost
#      somewhere!
#
# (11) Fixed caching bug which caused the cache history of a file to be
#      lost when the source was updated.
#
# Revision 2.31  1992/01/31  15:42:05  paul
# (1)  Changed the interface to the cache update routines to pass all
#      status information on the file.
#
# (2)  Calling MakeRoom(MINBLOCKS) didn't always seem to be enough to
#      create a new symlink (maybe when extending a directory?). Changed
#      the space required for a symlink to MINBLOCKS+LINKBLOCKS. The extra
#      slack won't do any harm anyway - it should cut down on the number
#      of times that we actually hit the disk full limit.
#
# (3)  Added "exists" condition.
#
# (4)  Fixed bug in manual page (type= was under actions instead of
#      conditions). Also removed paragraph from bugs section explaining
#      the inability to test file status on arbitrary files.
#
# (5)  Added code to try and detect when a link has been accessed
#      without accessing the file that it points to. This is intended
#      to prevent flooding the cache when someone does "ls -l" and
#      updates the atimes on all the links!
#
# Revision 2.30  1992/01/29  17:06:58  paul
# (1)  Cosmetic changes to manual page (version number).
#
# (2)  Empty netgroups and bogus users in netgroups are no longer
#      considered as fatal errors.
#
# (3)  Fixed cosmetic bug in filesystem full error message.
#
# (4)  Added generalized support for debug options and removed -L.
#
# (5)  Documented xlfumon resource names.
#
# (6)  Minor changes to conditional code and manual page for AMD
#      option.
#
# (7)  Added FILES section to manual page.
#
# (8)  Sorted order of options in Usage();
#
# (9)  Fixed bug in caching which caused an empty cache history file to
#      have the wrong mtime. This meant that all links appeared to have
#      changed the first time that the cache history file was created.
#
# (10) Fixed bug in line/col numbers reported by scanner for errors
#      (again!). It is definitely right this time!
#
# Revision 2.29  1992/01/28  14:40:51  paul
# (1)  Changed icon title on monitor to include hostname.
#      Also changed resource names to class="Lfu" and instance="lfu".
#
# (2)  Changed default value of "cacheminvalue" to 15. This prevents
#      files which have been accessed only once from being encached.
#      In practice, this happens quite often - eg. if a run crashes
#      before writing the new cache file, then the atime on the links
#      will have been updated and everything gets encached next time!
#
# (3)  Documented the need for two '\' characters to escape things in
#      regular expressions!
#
# (4)  Changed "priority=" message in the log to "cache=" because the
#      message actually reports the "cache value" rather than the
#      assigned priority.
#
# Revision 2.28  1992/01/24  11:10:10  paul
# (1) Implemented directory arguments to conditions and "type=missing".
#     This allows the status of virtually any file to be tested.
#
# Revision 2.27  1992/01/21  11:19:35  paul
# (1)  Added code to read lists of usernames from a file as well as from
#      a netgroup, using the syntax name=@/.....
#
# (2)  Added code to ignore blank lines in filesets.
#
# Revision 2.25  1992/01/14  09:26:41  paul
# 1)  Cosmetic changes to manual page, including sorting actions and
#     conditions into alphabetical order.
#
# 2)  Removed code which prevented attempts to set the time on
#     destination directories. The time is now set to match the source,
#     but no log messages are generated for directory time changes
#     because this happens whenever a directory entry is changed.
#
# 3)  Documented the inability to set correct times on symbolic links.
#
# 4)  Implemented "newer" action.
#
# Revision 2.23  1992/01/08  09:05:47  paul
# 1)  This version contains a very alpha version of the experimental
#     caching code.
#
# 2)  Fixed bug in makefile for "lint" target..
#
# 3)  Included support for "options" in the program grammar.
#     These are statements which must appear at the "top level" - ie.
#     not following a conditional, or inside a block.
#
# 4)  Implemented "nomount" option.
#
# 5)  Fixed bug in the order of the tokens in "TokenClass".
#     This would only cause problems when scanner debugging was enabled.
#
# 6)  Changed the meaning of the file count in the monitor, so it
#     reflects the number of different files visted on the current pass.
#
# 7)  Fixed small bug in evaluator which returned random value from
#     "source" operator (this value was never actually used anyway).
#
# 8)  Slightly changed the semantics of the -m option:-
#
#       Directories corresponding to mount points are now updated,
#       although their contents are not. This is usually what is needed:
#       eg. copying a root filesystem we usually require the mount point
#       /usr to be created, but the contents (which are on another disk)
#       to be ignored.
#
#       The contents of mount points now have an implicit "ignore"
#       action rather than a "delete". This is necessary, eg. to copy
#       onto a destination filesystem (eg. a root) which has valid
#       filesystems (eg. /usr) mounted beneath it.
#
# 9)  Fixed small bug in syntax error reporting: if the error occured at
#     the end of the input (eg. a missing semicolon at the end of a -e
#     argument), then the location was wrongly reported (at the start of
#     the last token, rathen than at the end).
#
# 10) Fixed bug in scanner which gave a syntax error if there was both a
#     "-e" option and a program file.
#
# 11) Added suport for conditionals in the man page.
#     This allows the compile-time options for caching and amd support
#     to be automatically included or excluded.
#
# 12) Added option S.
#
# 13) Sorted the options in the manual page.
#
# 14) Fixed small bug in "auto" option - automounter reports EBADF
#     sometimes instead of ENOENT when a top level file doesn't exist.
#     This generated funny error messages.
#
# 15) Added makefile target to spell manual page.
#
# 16) Corrected man page entry for "access" action (it said "age"
#     instead).
#
# Revision 2.22  1991/11/22  10:31:31  paul
# (1) Defined the FTP export directory in the makefile.
#
# (2) Fixed bug that caused an error in the case where the destination
#     object was a non-empty directory & the corresponding source object
#     was not a directory.
#
# (3) Fixed a bug which was calling free with a bad pointer. This only
#     seemed to show up under hp/ux.
#
# (4) Changed makefile to compile hp/ux version with -lmalloc which
#     should be faster.
#
# Revision 2.21  1991/10/29  12:16:53  paul
# (1)  Fixed bug in statistics recording. Previously the statistics for
#      a destination file were sometimes collected before the ownership of the
#      file was set. This allocated some newly created files to "root".
#
# (2)  Restored the "-e" option which seemed to have got accidentally lost
#      between versions 18 and 19!
#
# (3)  Made a few changes to enable lfu to be exported more easily.
#      Including ...
#
# (3a) Added a "make export" target to generate a tar file with
#      everything necessary to export the current version. This includes
#      the bison and lex output for sites without bison. The tar file is
#      compressed and placed in the anon ftp directory.
#
# (3b) Added code to the makefile to automatically construct all the
#      AMD object files needed by getawd, directly from a source
#      distribution of AMD. Also included the code for getawd with the
#      lfu source tree, removing the dependancy on the local "libpawd"
#      library.
#
# (3c) Changed the makefile, so that it no longer assumes a predefined
#      ARCH environment variable. (It still assumes that there is an
#      'arch' command in the current PATH that will print the architecture)
#
# (4)  Added targets to the makefile allowing an automatic build/install
#      on all architectures. Do, eg. "make ACTION=install everywhere".
#
# Revision 2.20  91/09/23  11:49:19  ladm
# 
# (1)  Ooops. The cpp changes for the last version broke the -D and -I
#      options. Fixed it here.
# 
# 
# Revision 2.19  91/09/23  10:15:59  ladm
# 
# (1)  Altered makefile to install as "lfu" instead of "lfu.version".
#      Manual page also installed as lfu.1 rather then lfu.new.1
# 
# (2)  Added -P option and changed order of CPP search list so that the
#      system one comes before the GNU one.
# 
# Revision 2.18  91/09/19  17:07:05  ladm
# 
# (1)  Fixed a couple of bugs in the makefile for man page installation.
# 
# (2)  Tidied up man page.
# 
# (3)  Changed the sense of the C option so that the default is to check
#      link contents again. Also strengthened this to compare the contents
#      of *all* links, rather than just those created by a "link" or "shadow"
#      action. This is necessary to detect things which were previously
#      a "link" action and are changed to a straight copy.
# 
# (4)  When copying a file, we now record the name and stats of the
#      destination file, rather than the source. This is usually what is
#      wanted, eg. so that we get the real size of the destination
#      objects (which may be links), rather than the size of the source
#      objects.
# 
# (5)  lfumon now shows "Linked" rather than "Copied" for files which
#      are linked.
# 
# Revision 2.17  91/09/11  15:57:03  ladm
# 
# (1)  Fixed bug in parser which caused ~exec and ~auto to be interchanged.
# 
# (2)  Added icon bitmap to xlfumon.
# 
# (3)  Documented the problem with the st_blocks field of the stat
#      structure under HP/UX in the manual page.
# 
# 
# Revision 2.16  91/09/10  11:13:05  ladm
# 
# (1)  Fixed bug with option C (it was setting option "a" instead !).
# 
# (2)  Implemented option "c" and the monitor program.
# 
# (3)  Tidied up some things to get it through lint again.
# 
# (4)  Fixed a couple of bugs with the "auto" command which caused
#      the implicit "follow" action to be inherited by mistake.
# 
# (5)  Added code to ensure that directories which are specified as
#      "auto" really exist. This prevents the destination filesystem
#      being completely deleted if an automount of the source fails.
# 
# 
# 
#   
# 
# Revision 2.14  91/09/05  09:20:46  ladm
# 
# (1)  No longer reading and comparing the contents of links created by
#      "shadow" and "link" by default, since this artificially updates
#      the access time of the link. -C option added to restore old
#      behaviour if required.
# 
# (2)  Added the "stats" action and the -s option.
# 
# Revision 2.13  91/09/03  16:36:40  ladm
# 
# (1)  Implemented -H option and the "cdf" action for copying CDFs.
#      This is pretty horrible. Reliably copying CDFs is not really
#      possible - there are lots of special cases and things break down
#      in a few situations. These cases are rare in practice and just
#      generate the  message "Possible problem with CDF".
# 
#      Attempting to manipulate CDFs on a filesystem (Eg over NFS) that
#      does not support them produces lots of weird errors. I tried
#      to trap the common cases and print some helpful messages.
# 
# (2)  Fixed a bug in one error message which reported the source
#      filename instead of the destination filename.
# 
# (3)  Implemented the -L option.
# 
# (4)  Added manual page "preview" option to makefile.
# 
# (5)  Fixed bug which caused line numbers to be one out in error messages.
# 
# Revision 2.12  91/09/02  10:38:39  ladm
# 
# (1)  Fixed small bug in makefile for install target.
# 
# (2)  Changed the processing of directories so all the filenames are
#      read from the directory into a tree and then processed from the
#      tree. I did this because ....
# 
#      (a) It avoids problems with the contents of the directory changing
#          under our feet as we are processing it.
#    
#      (b) It will make it easier to specify the files to be processed in
#          some other way, rather than reading them from the directory.
#          We  want to do this eg. to cater for the case
#          where the directory is an automount point.
# 
#      (c) It lets us ask the question "is there an entry for X+ in the
#          directory. We might need to do this if we ever manage to get
#          it handling CDFs.
# 
#      (d) As a side benefit, we now get the entries processed in
#          alphabetical order.
# 
# (3)  Implemented "auto" action.
# 
# Revision 2.11  91/08/14  13:10:03  ladm
# 
# (1)  Corrections to manual page.
# 
# (2)  Implemented ACCESS and SIZE conditions.
# 
# (3)  Added "=" operator to AGE condition.
# 
# (4)  Fixed bug which would put garbage in the pathname of shadow
#      links.
# 
# (5)  Added /lib/cpp into the preprocessor PATH.
# 
# (6)  Changed makefile to match new filesystem layout (/obj).
# 
# (7)  Changed makefile to install lfu as lfu.VERSION
# 
# Revision 2.10  91/06/27  10:50:36  ladm
# 
# (1)  Replaced rexep code with the much cleaner PD implementation from
#      Henry Spencer of Toronto.
# 
# (2)  Allowed NULL domain name so that everything works OK when there
#      is no NIS running.
# 
# (3)  Ported to Sequent. Ugh. Lots of small things needed, including
#      private implementations of some "string" functions which 
#      all the sensible Unices already have.
# 
# (4)  Added code to search a list of possible preprocessors, with
#      /bin/cat as the final case, so that it works on almost anything,
#      although sometimes the preprocessor functions are different!
# 
# 
# Revision 2.9  91/06/26  11:32:32  ladm
# 
# (1)  Added support for C preprocessor, including parsing of
#      filename/line numbers generated by cpp.
# 
# (2)  Added -D and -I options for passing to the pre-processor.
# 
# (3)  Added quotes around the = and != when reported in syntax errors.
# 
# 
# Revision 2.8  91/06/19  10:12:21  ladm
# 
# (1)  Cosmetic changes to manual page.
# 
# (2)  Built and tested on HP snake under HP/UX 8.
# 
# (3)  Changed order of libraries under HP/UX. 
#      We include libPW to get alloca, but it seems that libPW also
#      redefines some system calls (eg. rename).
#      I have no idea why this happens, but they reference an external
#      symbol "Error" which is not defined anywhere. Previously, this
#      was picking up the address of the Error function in misc.c.
#      Ugh. Changed name of Error function to Err and included libc
#      before libPW. (Only spotted this because the snake loader
#      noticed).
# 
# (4)  Made some changes to the makefile and source code in an attempt
#      to get it to compile on the sequent. There is still more work
#      to do (Dynix is worse than HP/UX).
# 
# (5)  Fixed 2 nasty bugs in Pass2 where NewString was called without
#      the terminating NULL, leading to random crashes.
# 
# Revision 2.5  91/06/13  16:02:20  ladm
# 
# (1)  Created the README file.
# 
# (2)  Created a real manual page.
# 
# Revision 2.4  91/06/12  17:15:43  ladm
# 
# (1)  When a program is evaluated, it was previously evaluated on the
#      destination file in pass 1, and on the source file in pass 2.
#      Since actions like "chown" allow the source and destination files
#      to have a different status, this means that certain programs 
#      ( owner=foo ... ) would evaluate differently on the two passes,
#      producing very confusing results.
# 
#      This has now been changed, so that programs are always evaluated
#      on the source file, if it exists, otherwise on the destination
#      file. This guarantees that programs evaluate the same on both
#      passes.
# 
#      Certain conditions are now impossible to test, but these are
#      likely to be suspect anyway - testing the status of a destination
#      file when the corresponding source file exists is confusing and
#      probably unnecessary.
# 
# (2)  Added MODE condition.
# 
# (3)  Added AGE condition.
# 
# (4)  Ignored lines starting with # (for comments) in filesets.
# 
# (5)  Moved the handling of "@" from the parser back into the routines
#      that build the instructions. This avoids the lookahead that was
#      previously involved when parsing the "@" - this caused keywords to
#      be wrongly recognised in certain places - eg. name=else ... would
#      generate an error.
# 
# (6)  Added option "o".
# 
# (7)  Added option "r" and inhibited reporting of multiple permission
#      errors by default.
# 
# (8)  Converted EPERM error message from CHOWN into something a little
#      more explicit.
# 
# (9)  Added message to suggest NFS root mapping problems if we get
#      permission errors when we are running as root.
# 
# (10) Fixed bug in types of comparison functions used by the AVL
#      routines. These should take AVL_KEYS as arguments, but they were
#      still taking the individual componenent types.  Lint didn't spot
#      this because the functions are passed around as arguments.
#      Most compilers (HP, Ultrix, gcc) didn't mind, but the SunOS cc
#      did. I wonder what the Sun compiler is doing when passing the
#      union types, which breaks things? Sounds as if it might be
#      something inefficient?
# 
# 
# 
# 
# Revision 2.3  91/06/11  16:56:35  ladm
# 
# (1) Fixed a bug in the makefile for installing the manual page.
# 
# (2) Phew! fixed very obscure bug deep in AVL code: the set_bf macro
#     needed some extra brackets when it was called with a compound argument.
#     I left the debugging tree-dump function in the AVL module in case
#     it is needed in the future.
# 
# (3) Added debugging code to the parser to print out token names rather
#     than classes when debugging is enabled.
# 
# (4) Added code to prevent .BUSY files which are still busy being
#     renamed to .BUSY.BUSY.BUSY........
# 
# (5) Checked and documented the strange goings-on with ".nfsxxxxx"
#     files that HP/UX creates when deleting a .BUSY file.
# 
# Revision 2.2  91/06/11  12:07:49  ladm
# 
# (1) Made a few refinements to the makefile for automatic handling of 
#     the CHANGELOG.
# 
# (2) Added code to the parser to print verbose error messages.
# 
# (3) Added code to the scanner to log column numbers of errors.
# 
# 
# 
# Revision 2.1  91/06/10  16:23:36  ladm
# Initial version under RCS control.
# 
