Provided by: zoo_2.10-27_amd64 bug

NAME

       zoo - manipulate archives of files in compressed form

SYNOPSIS

       zoo {acfDeghHlLPTuUvVx}[aAcCdEfghImMnNoOpPqSu1:/.@n+-=] archive [file] ...
       zoo -command archive [file] ...
       zoo h

DESCRIPTION

       Zoo  is  used  to  create  and  maintain  collections  of files in compressed form.  It uses a Lempel-Ziv
       compression algorithm that gives space savings in the range of 20% to 80% depending on the type  of  file
       data.   Zoo  can  store  and  selectively  extract  multiple  generations  of the same file.  Data can be
       recovered from damaged archives by skipping the damaged portion and locating undamaged data with the help
       of fiz(1).

       This documentation is for version 2.1.  Changes from previous  versions  are  described  in  the  section
       labelled CHANGES.

       The command zoo h gives a summary of commands.  Extended multiscreen help can be obtained with zoo H.

       Zoo will not add an archive to itself, nor add the archive's backup (with .bak extension to the filename)
       to the archive.

       Zoo  has two types of commands:  Expert commands, which consist of one command letter followed by zero or
       more modifier characters, and Novice commands, which consist of a hyphen (`-') followed by a command word
       that may be abbreviated.  Expert commands are case-sensitive but Novice commands are not.

       When zoo adds a file to an existing archive, the default action is to maintain  one  generation  of  each
       file  in an archive and to mark any older generation as deleted.  A limit on the number of generations to
       save can be specified by the user for an entire archive, or for each file  individually,  or  both.   Zoo
       deletes  a  stored  copy  of  an added file if necessary to prevent the number of stored generations from
       exceeding the user-specified limit.

       Deleted files may be later undeleted.  Archives may be packed to recover space occupied by deleted files.

       All commands assume that the archive name ends with the characters .zoo unless a different  extension  is
       supplied.

       Novice commands

       Novice  commands  may be abbreviated to a hyphen followed by at least one command character.  Each Novice
       command works in two stages.  First, the command does its intended work.  Then, if the  result  was  that
       one  or  more files were deleted in the specified archive, the archive is packed.  If packing occurs, the
       original unpacked archive is always left behind with an extension of .bak.

       No Novice command ever stores the directory prefix of a file.

       The Novice commands are as follows.

       -add    Adds the specified files to the archive.

       -freshen
              Adds a specified file to the archive if and only if an older file by the same name already  exists
              in the archive.

       -delete
              Deletes the specified files from the archive.

       -update
              Adds  a specified file to the archive either:  if an older file by the same name already exists in
              the archive or:  if a file by the same name does not already exist in the archive.

       -extract
              Extracts the specified files from the archive.  If no file is specified all files are extracted.

       -move  Equivalent to -add except that source files are deleted after addition.

       -print Equivalent to -extract except that extracted data are sent to standard output.

       -list  Gives information about the specified archived files including any attached comments.  If no files
              are specified all files are listed.  Deleted files are not listed.

       -test  Equivalent to -extract except that the extracted data are not saved but any errors encountered are
              reported.

       -comment
              Allows the user to add or update comments attached to archived files.   When  prompted,  the  user
              may:   type  a carriage return to skip the file, leaving any current comment unchanged;  or type a
              (possibly null) comment of up to 32,767 characters terminated  by  /end  (case-insensitive)  on  a
              separate  line;   or  type  the  end-of-file  character (normally control D) to skip all remaining
              files.

       -delete
              Deletes the specified files.

       The correspondence between Novice and Expert commands is as follows.

       Novice                                        Equivalent
       Command    Description                        Expert Command
       ─────────────────────────────────────────────────────────────
       -add       add files to archive               aP:
       -extract   extract files from archive         x
       -move      move files to archive              aMP:
       -test      test archive integrity             xNd
       -print     extract files to standard output   xp
       -delete    delete files from archive          DP
       -list      list archive contents              VC
       -update    add new or newer files             aunP:
       -freshen   by add newer files                 auP:
       -comment   add comments to files              c

       Expert commands

       The general format of expert commands is:

       zoo {acfDeghHlLPTuUvVx}[aAcCdEfghImMnNoOpPqSu1:/.@n+-=] archive [file] ...

       The characters enclosed within {} are commands.  Choose any one of these.  The characters enclosed within
       [] just to the right of the {} are modifiers and zero or more of these may immediately follow the command
       character.  All combinations of command and modifier characters may not be valid.

       Files are added to an archive with the command:

       zoo {au}[cfhIMnPqu:+-] archive [file] ...

       Command characters are:

       a      Add each specified file to archive.  Any already-archived copy of the file is deleted if  this  is
              necessary  to avoid exceeding the user-specified limit on the number of generations of the file to
              maintain in the archive.

       u      Do an update of the archive.  A specified file is added to the archive only if a  copy  of  it  is
              already in the archive and the copy being added is newer than the copy already in the archive.

       The following modifiers are specific to these commands.

       M      Move  files  to  archive.   This makes zoo delete (unlink) the original files after they have been
              added to the archive.  Files are deleted after addition of all files to the  archive  is  complete
              and after any requested packing of the archive has been done, and only if zoo detected no errors.

       n      Add new files only.  A specified file is added only if it isn't already in the archive.

       h      Use the high performance compression algorithm. This option may be used with either the add (a) or
              filter  (f)  commands  to  gain  extra compression at the expense of using somewhat more processor
              time. Extracting files compressed with the method is usually slightly faster than those saved with
              the default method.

       P      Pack archive after files have been added.

       u      Applied to the a command, this modifier makes it behave identically to the u command.

              The combination of the n modifier with the u modifier or u command causes addition of  a  file  to
              the  archive  either  if  the file is not already in the archive, or if the file is already in the
              archive but the archived copy is older than the copy being added.

       :      Do not store directory names.  In the absence of this modifier zoo stores  the  full  pathname  of
              each archived file.

       I      Read  filenames  to  be archived from standard input.  Zoo will read its standard input and assume
              that each line of text contains a filename.  Under AmigaDOS and the **IX family, the  entire  line
              is  used.   Under MS-DOS and VAX/VMS, zoo assumes that the filename is terminated by a blank, tab,
              or newline; thus it is permissible for the line of text to contain more than one  field  separated
              by white space, and only the first field will be used.

              Under the **IX family of operating systems, zoo can be used as follows in a pipeline:

                 find . -print | zoo aI sources

            If the I modifier is specified, no filenames may be supplied on the command line itself.

       +,-    These  modifiers  take  effect  only if the a command results in the creation of a new archive.  +
              causes any newly-created archive to have generations enabled.  -  is  provided  for  symmetry  and
              causes  any  newly-created  archive  to  have  generations  disabled;  this is also the default if
              neither + nor - is specified.

       Files are extracted from an archive with the command:

       zoo {ex}[dNoOpqS./@] archive [file] ...

       The e and x commands are synonymous.  If no file was specified, all files are extracted from the archive.

       The following modifiers are specific to the e and x commands:

       N      Do not save extracted data but report any errors encountered.

       O      Overwrite files.  Normally, if a file being extracted would overwrite an already-existing file  of
              the  same name, zoo asks you if you really want to overwrite it.  You may answer the question with
              `y', which means yes, overwrite; or `n', which means no, don't  overwrite;  or  `a',  which  means
              assume  the answer is `y' for this and all subsequent files.  The O modifier makes zoo assume that
              files may always be overwritten.  Neither answering the question affirmatively nor using  O  alone
              will cause read-only files to be overwritten.

              On **IX systems, however, doubling this modifier as OO will force zoo to unconditionally overwrite
              any read-protected files with extracted files if it can do so.

              The O, N, and p modifiers are mutually exclusive.

       S      Supersede  newer files on disk with older extracted files.  Unless this modifier is used, zoo will
              not overwrite a newer existing file with an older extracted file.

       o      This is equivalent to the O modifier if and only if it is given at least twice.  It  is  otherwise
              ignored.

       p      Pipe  extracted  data  to  standard  output.  Error messages are piped to standard output as well.
              However, if a bad CRC is detected, an error message is sent both to standard error and to standard
              output.

       /      Extract to original pathname.  Any needed directories must already exist.  In the absence of  this
              modifier  all  files are extracted into the current directory.  If this modifier is doubled as //,
              required directories need not exist and are created if necessary.

       The management of multiple generations of archived files is done with the commands:

       zoo gl[Aq]{+-=}number archive files ..
       zoo gc[q]{+-=}number archive files ..
       zoo gA[q]- archive
       zoo gA[q]+ archive

       The first form, gl, adjusts the generation limit of selected files by the specified value.  If  the  form
       =n  is used, where n is a decimal number, this sets the generation limit to the specified value.  If + or
       - are used in placed of = the effect is to increment or decrement the generation limit by  the  specified
       value.  For example, the command

            zoo gl=5 xyz :

       sets the generation limit of each file in the archive xyz.zoo to a value of 5.  The command

            zoo gl-3 xyz :

       decrements the generation limit of each file in the archive to 3 less than it currently is.

       If the A modifier is used, the archive-wide generation limit is adjusted instead.

       The  number of generations of a file maintained in an archive is limited by the file generation limit, or
       the archive generation limit, whichever is lower.  As a special case, a generation limit of 0 stands  for
       no  limit.   Thus  the  default  file  generation limit of 0 and archive generation limit of 3 limits the
       number of generations of each file in a newly-created archive to three.

       The generation limit specified should be in the range 0 through 15;  any higher numbers  are  interpreted
       modulo 16.

       The  second form of the command, using gc, adjusts the generation count of selected files.  Each file has
       a generation count of 1 when it is first added to an archive.  Each time a file by the same name is added
       again to an archive, it receives a generation count that is one higher than the highest generation  count
       of  the  archived  copy  of the file.  The permissible range of generation counts is 1 through 65535.  If
       repeated manipulations of an archive result in files having very high generation counts, they may be  set
       back  to  lower numbers with the gc command.  The syntax of the command is analogous to the syntax of the
       gl command, except that the A modifier is not applicable to the gc command.

       The third form, gA-, disables generations in an archive.  Generations are off when an  archive  is  first
       created,  but  may be enabled with the fourth form of the command, gA+.  When generations are disabled in
       an archive, zoo will not display generation numbers in archive listings or maintain multiple generations.
       Generations can be re-enabled at any time, though manipulation of an archive with  repeated  interspersed
       gA- and gA+ commands may result in an archive whose behavior is not easily understandable.

       Archived files are listed with the command:

       zoo {lLvV}[aAcCdfgmqvV@/1+-] archive[.zoo] [file] ...

       l      Information  presented  includes  the  date  and  time  of  each  file,  its  original and current
              (compressed) sizes,  and  the  percentage  size  decrease  due  to  compression  (labelled  CF  or
              compression  factor).   If a file was added to the archive in a different timezone, the difference
              between timezones is shown in hours as a signed number.  As  an  example,  if  the  difference  is
              listed as +3, this means that the file was added to the archive in a timezone that is 3 hours west
              of  the  current timezone.  The file time listed is, however, always the original timestamp of the
              archived file, as observed by the user who archived the file, expressed as that user's local time.
              (Timezone information is stored and displayed only if the underlying operating system knows  about
              timezones.)

              If no filename is supplied all files are listed except deleted files.

              Zoo selects which generation(s) of a file to list according to the following algorithm.

              If  no  filename is supplied, only the latest generation of each file is listed.  If any filenames
              are specified, and a generation is specified for an argument, only  the  requested  generation  is
              listed.   If  a  filename  is  specified  ending  with  the generation character (`:' or `;'), all
              generations of that file are listed.  Thus a filename argument of the form zoo.c will  cause  only
              the  latest  generation  of  zoo.c  to  be  listed;   an  argument  of the form zoo.c:4 will cause
              generation 4 of zoo.c to be listed;  and an argument of the form zoo.c: or zoo.c:* will cause  all
              generations of zoo.c to be listed.

       L      This  is similar to the l command except that all supplied arguments must be archives and all non-
              deleted generations of all files in each archive appear in the listing.

              On **IX systems, on which the shell expands arguments, if multiple archives are to be listed,  the
              L  command  must be used.  On other systems (VAX/VMS, AmigaDOS, MSDOS) on which wildcard expansion
              is done internally by zoo, wildcards may be used in the  archive  name,  and  a  multiple  archive
              listing obtained, using the l command.

       v      This causes any comment attached to the archive to be listed in addition to the other information.

       V      This  causes  any comment attached to the archive and also any comment attached to each file to be
              listed.

              Both the V and v command characters can also be used as modifiers to the l and L commands.

       In addition to the general modifiers described later, the following  modifiers  can  be  applied  to  the
       archive list commands.

       a      This  gives a single-line format containing both each filename and the name of the archive, sorted
              by archive name.  It is especially useful with the L command, since  the  result  can  be  further
              sorted on any field to give a master listing of the entire contents of a set of archives.

       A      This causes any comment attached to the archive to be listed.

       g      This  modifier  causes  file generation information to be listed about the archive.  For each file
              listed, the user-specified generation limit, if any, is listed.  For  example,  `3g'  for  a  file
              means  that  the  user  wants  no more than three generations of the file to be kept.  In archives
              created by older versions of  zoo,  the  listing  will  show  `-g',  meaning  that  no  generation
              information is kept and multiple generations of the file are not being maintained.

              In  addition  to  the  generation information for each file, the archive-wide generation limit, if
              any, is shown at the end of the listing.  If generations have been disabled by the user,  this  is
              so indicated, for example:

                 Archive generation limit is 3 (generations off).

            For more information about generations see the description of the g command.

       m      This  modifier  is  currently  applicable  to  **IX  systems  only.  It causes the mode bits (file
              protection code) of each file to be listed as a three-digit octal number.  Currently zoo preserves
              only the lowest nine mode bits.  Their meanings are as described in the **IX documentation for the
              chmod(1) command.

       C      This modifier causes the stored cyclic redundancy code (CRC) for each archived file to be shown as
              a four-digit hexadecimal number.

       1      This forces one filename to be listed per line.  It is most  useful  in  combination  with  the  f
              modifier.

       /      This  forces  any directory name to be always listed, even in fast columnized listings that do not
              normally include any directory names.

       +,-    The - modifier causes trailing generation numbers to be omitted from filenames.   The  +  modifier
              causes  the  trailing generation numbers to be shown, which is also the default if neither - nor +
              is specified.

       Files may be deleted and undeleted from an archive with the following commands:

       zoo {DU}[Pq1] archive file ...

       The D command deletes the specified files and the  U  command  undeletes  the  specified  files.   The  1
       modifier  (the  digit  one,  not  the  letter ell) forces deletion or undeletion of at most one file.  If
       multiple instances of the same file exist in an archive, use  of  the  1  modifier  may  allow  selective
       extraction of one of these.

       Comments may be added to an archive with the command:

       zoo c[A] archive

       Without  the  modifier  A,  this  behaves  identically to the -comment command.  With the modifier A, the
       command serves to add or update the comment attached to the archive as a  whole.   This  comment  may  be
       listed  with  the lA, LA, v, and V commands.  Applying the cA command to an archive that was created with
       an older version of zoo will result in an error message requesting that the user first pack  the  archive
       with the P command.  This reorganizes the archive and creates space for the archive comment.

       The timestamp of an archive may be adjusted with the command:

       zoo T[q] archive

       Zoo  normally  attempts  to  maintain  the  timestamp of an archive to reflect the age of the newest file
       stored in it.  Should the timestamp ever be incorrect it can be fixed with the T command.

       An archive may be packed with the command:

       zoo P[EPq] archive

       If the backup copy of the archive already exists, zoo will refuse  to  pack  the  archive  unless  the  P
       modifier  is  also  given.   The  E modifier causes zoo not to save a backup copy of the original archive
       after packing.  A unique temporary file in the current directory is used to  initially  hold  the  packed
       archive.   This file will be left behind if packing is interrupted or if for some reason this file cannot
       be renamed to the name of the original archive when packing is complete.

       Packing removes any garbage data appended to an archive because of Xmodem file transfer and also recovers
       any wasted space remaining in an archive that has been frequently  updated  or  in  which  comments  were
       replaced.   Packing also updates the format of any archive that was created by an older version of zoo so
       that newer features (e.g. archive-wide generation limit, archive comment) become fully available.

       Zoo can act as a pure compression or uncompression filter, reading from standard  input  and  writing  to
       standard output.  This is achieved with the command:

       zoo f{cu}[h]

       where  c  specifies  compression,  u  specifies  uncompression, and h used in addition requests the high-
       performance compression be used.  A CRC value is used to check the integrity of the data.  The compressed
       data stream has no internal archive structure and contains multiple files only if the input  data  stream
       was already structured, as might be obtained, for example, from tar or cpio.

        Modem transfers can be speeded up with these commands:

                 zoo fc < file | sz ...  rz | zoo fu > file

       General modifiers

       The following modifiers are applicable to several commands:

       c      Applied  to  the a and u commands, this causes the user to be prompted for a comment for each file
              added to the archive.  If the file being added has replaced, or is a newer generation of,  a  file
              already  in  the  archive,  any  comment  attached  to  that file is shown to the user and becomes
              attached to the newly-added file unless the user changes  it.   Possible  user  responses  are  as
              described  for the -comment command.  Applied to the archive list command l, the c modifier causes
              the listing of any comments attached to archived files.

        .     In conjunction with / or // this modifier causes any extracted pathname beginning with `/'  to  be
              interpreted  relative  to  the  current directory, resulting in the possible creation of a subtree
              rooted at the current directory.  In conjunction with the command P the  .   modifier  causes  the
              packed  archive  to  be  created  in  the current directory.  This is intended to allow users with
              limited disk space but multiple disk drives to pack large archives.

       d      Most commands that act on an archive act only on files that are not deleted.  The d modifier makes
              commands act on both normal and deleted files.  If doubled as dd, this modifier  forces  selection
              only of deleted files.

       f      Applied  to  the  a  and  u commands, the f modifier causes fast archiving by adding files without
              compression.  Applied to l it causes a fast listing of files in a multicolumn format.

       q      Be quiet.  Normally zoo lists the name of each file and what  action  it  is  performing.   The  q
              modifier  suppresses  this.   When  files  are  being extracted to standard output, the q modifier
              suppresses the header preceding each file.  When archive contents are being listed, this  modifier
              suppresses  any  header  and  trailer.   When  a  fast  columnized listing is being obtained, this
              modifier causes all output to be combined into a single set of filenames for  all  archives  being
              listed.

              When  doubled  as  qq,  this  modifier suppresses WARNING messages, and when tripled as qqq, ERROR
              messages are suppressed too.  FATAL error messages are never suppressed.

       Recovering data from damaged archives

       The @ modifier allows the user to specify the exact position in an archive where  zoo  should  extract  a
       file  from,  allowing  damaged  portions  of an archive to be skipped.  This modifier must be immediately
       followed by a decimal integer without intervening spaces, and possibly by a  comma  and  another  decimal
       integer, giving a command of the form l@m or l@m,n (to list archive contents) or x@m or x@m,n (to extract
       files  from  an archive).  Listing or extraction begin at position m in the archive.  The value of m must
       be the position within the archive of an undamaged directory entry.  This position  is  usually  obtained
       from fiz(1) version 2.0 or later.

       If  damage to the archive has shortened or lengthened it, all positions within the archive may be changed
       by some constant amount.  To compensate for this, the value of n may be specified.  This  value  is  also
       usually obtained from fiz(1).  It should be the position in the archive of the file data corresponding to
       the  directory  entry  that  has  been specified with m.  Thus if the command x@456,575 is given, it will
       cause the first 456 bytes of the archive to be skipped  and  extraction  to  begin  at  offset  456;   in
       addition, zoo will attempt to extract the file data from position 575 in the archive instead of the value
       that  is  found in the directory entry read from the archive.  For example, here is some of the output of
       fiz when it acts on a damaged zoo archive:

       ****************
           2526: DIR  [changes] ==>   95
           2587: DATA
       ****************
           3909: DIR  [copyright] ==> 1478
           3970: DATA
           4769: DATA
       ****************

       In such output, DIR indicates where fiz found a directory entry in the archive, and DATA indicates  where
       fiz  found  file  data in the archive.  Filenames located by fiz are enclosed in square brackets, and the
       notation "==>   95" indicates that the directory entry found by fiz at position  2526  has  a  file  data
       pointer  to  position 95.  (This is clearly wrong, since file data always occur in an archive after their
       directory entry.)  In actuality, fiz found file data at positions 2587, 3970, and 4769.  Since fiz  found
       only  two  directory  entries,  and  each  directory  entry corresponds to one file, one of the file data
       positions is an artifact.

       In this case, commands to try giving to zoo might be x@2526,2587 (extract beginning at position 2526, and
       get file data from position 2587), x@3090,3970 (extract at 3090, get  data  from  3970)  and  x@3909,4769
       (extract at 3909, get data from 4769).  Once a correctly-matched directory entry/file data pair is found,
       zoo  will  in  most  cases  synchronize  with  and  correctly extract all files subsequently found in the
       archive.  Trial and error should allow all undamaged  files  to  be  extracted.   Also  note  that  self-
       extracting  archives  created  using sez (the Self-Extracting Zoo utility for MS-DOS), which are normally
       executed on an MS-DOS system for extraction, can be extracted on non-MSDOS systems using  zoo's  damaged-
       archive recovery method using the @ modifier.

       Wildcard handling

       Under  the  **IX  family of operating systems, the shell normally expands wildcards to a list of matching
       files.  Wildcards that are meant to match files within an archive must therefore be  escaped  or  quoted.
       When  selecting files to be added to an archive, wildcard conventions are as defined for the shell.  When
       selecting files from within an archive, wildcard handling is done by zoo as described below.

       Under MS-DOS and AmigaDOS, quoting of wildcards is not needed.  All wildcard expansion  of  filenames  is
       done  by zoo, and wildcards inside directory names are expanded only when listing or extracting files but
       not when adding them.

       The wildcard syntax interpreted by zoo is limited to the following characters.

       *      Matches any sequence of zero or more characters.

       ?      Matches any single character.

              Arbitrary combinations of * and ?  are allowed.

       /      If a supplied pattern contains a slash anywhere in it, then the  slash  separating  any  directory
              prefix  from  the filename must be matched explicitly.  If a supplied pattern contains no slashes,
              the match is selective only on the filename.

       c-c    Two characters separated by a hyphen specify a character  range.   All  filenames  beginning  with
              those  characters  will  match.  The character range is meaningful only by itself or preceded by a
              directory name.  It is not specially interpreted if it is part of a filename.

       : and ;
              These characters are used to separate a filename from  a  generation  number  and  are  used  when
              selecting  specific  generations  of  archived  files.   If  no  generation character is used, the
              filename specified matches only the latest generation of the file.  If the generation character is
              specified, the filename and the generation are matched independently by zoo's wildcard  mechanism.
              If  no  generation  is specified following the : or ; character, all generations of that file will
              match.  As a special case, a generation number of 0 matches only the latest generation of a  file,
              while  ^0  matches  all  generations of a file except the latest one.  If no filename is specified
              preceding the generation character, all filenames will match.   As  a  corollary,  the  generation
              character by itself matches all generations of all files.

       MS-DOS  users  should note that zoo does not treat the dot as a special character, and it does not ignore
       characters following an asterisk.  Thus * matches all filenames; *.*  matches filenames containing a dot;
       *_* matches filenames containing an underscore;  and *z matches all filenames that end with the character
       z, whether or not they contain a dot.

       Usage hints

       The Novice command set in zoo is meant to provide an interface with functionality and format that will be
       familiar to users of other similar archive  utilities.   In  keeping  with  this  objective,  the  Novice
       commands  do  not  maintain  or  use  any  subdirectory  information or allow the use of zoo's ability to
       maintain multiple generations of files.  For this reason, users should switch to  exclusively  using  the
       Expert commands as soon as possible.

       Although  the  Expert command set is quite large, it should be noted that in almost every case, all legal
       modifiers for a command are fully orthogonal.  This means that the user can  select  any  combination  of
       modifiers, and when they act together, they will have the intuitively obvious effect.  Thus the user need
       only memorize what each modifier does, and then can combine them as needed without much further thought.

       For  example, consider the a command which is used to add files to an archive.  By itself, it simply adds
       the specified files.  To cause only already-archived files to be updated if their disk copies  have  been
       modified,  it  is  only  necessary to add the u modifier, making the command au.  To cause only new files
       (i.e., files not already in the archive) to be added, the n modifier is used to create  the  command  an.
       To  cause  both already-archived files to be updated and new files to be added, the u and n modifiers can
       be used together, giving the command aun.  Since the order of modifiers is not significant,  the  command
       could also be anu.

       Further,  the c modifier can be used to cause zoo to prompt the user for a comment to attach to each file
       added.  And the f modifier can cause fast addition (addition without compression).  It should be  obvious
       then  that  the  command auncf will cause zoo to update already-archived files, add new files, prompt the
       user for comments, and do the addition of files without any compression.  Furthermore, if the user wishes
       to move files to the archive, i.e., delete the disk copy of each file after it is added to  the  archive,
       it  is  only  necessary to add the M modifier to the command, so it becomes auncfM.  And if the user also
       wishes to cause the archive to be packed as part of the command, thus recovering  space  from  any  files
       that are replaced, the command can be modified to auncfMP by adding the P modifier that causes packing.

       Similarly,  the  archive  listing  commands can be built up by combining modifiers.  The basic command to
       list the contents of an archive is l.  If the user wants a fast columnized listing, the f modifier can be
       added to give the lf command.  Since this listing will have a  header  giving  the  archive  name  and  a
       trailer  summarizing  interesting information about the archive, such as the number of deleted files, the
       user may wish to "quieten" the listing by suppressing these;  the relevant  modifier  is  q,  which  when
       added to the command gives lfq.  If the user wishes to see the **IX mode (file protection) bits, and also
       information  about  multiple  generations,  the  modifiers  m  (show  mode  bits)  and g (show generation
       information) can be added, giving the command lfqmg.  If the user also wishes to see an attached  archive
       comment,  the  modifier  A (for archive) will serve.  Thus the command lfqmgA will give a fast columnized
       listing of the archive, suppressing any header and trailer, showing mode bits and generation information,
       and showing any comment attached to the archive as a whole.  If in addition individual comments  attached
       to  files  are  also  needed,  simply append the c modifier to the command, making it lfqmgAc.  The above
       command will not show any deleted files, however;  to see them, use the d modifier,  making  the  command
       lfqmgAcd (or double it as in lfqmgAcdd if only the deleted files are to be listed).  And if the user also
       wishes  to  see  the CRC value for each file being listed, the modifier C will do this, as in the command
       lfqmgAcdC, which gives a fast columnized listing of all  files,  including  deleted  files,  showing  any
       archive  comment  and file comments, and file protection codes and generation information, as well as the
       CRC value of each file.

       Note that the above command lfqmgAcdC could also be abbreviated to  VfqmgdC  because  the  command  V  is
       shorthand for lcA (archive listing with all comments shown).  Similarly the command v is shorthand for lA
       (archive  listing with archive comment shown).  Both V and v can be used as modifiers to any of the other
       archive listing commands.

       Generations

       By default, zoo assumes that only the latest generation of a specified file is  needed.   If  generations
       other  than the latest one need to be selected, this may be done by specifying them in the filename.  For
       example, the name stdio.h would normally refer to the latest generation of the file stdio.h stored  in  a
       zoo  archive.   To  get  an  archive  listing  showing  all  generations  of  stdio.h in the archive, the
       specification stdio.h:* could be used (enclosed in single quotes if necessary  to  protect  the  wildcard
       character  *  from  the  shell).   Also,  stdio.h:0  selects only the latest generation of stdio.h, while
       stdio.h:^0 selects all generations except the latest one.  The : character here  separates  the  filename
       from the generation number, and the character * is a wildcard that matches all possible generations.  For
       convenience,  the  generation itself may be left out, so that the name stdio.h: (with the : but without a
       generation number or a wildcard) matches all generations exactly as stdio.h:* does.

       If a generation is specified but no filename is present, as in :5, :*, or just :, all  filenames  of  the
       specified  generation  will  be selected.  Thus :5 selects generation 5 of each file, and :* and : select
       all generations of all files.

       It is important to note that zoo's idea of the latest generation of a file is not  based  upon  searching
       the  entire  archive.   Instead, whenever zoo adds a file to an archive, it is marked as being the latest
       generation.  Thus, if the latest generation of a file is deleted, then no  generation  of  that  file  is
       considered  the latest any more.  This can be surprising to the user.  For example, if an archive already
       contains the file stdio.h:5 and a new copy is added, appearing in the archive listing as  stdio.h:6,  and
       then  stdio.h:6  is  deleted,  the remaining copy stdio.h:5 will no longer be considered to be the latest
       generation, and the file stdio.h:5, even if undeleted, will no longer appear in an archive listing unless
       generation 5 (or every generation) is specifically requested.  This behavior will likely be  improved  in
       future releases of zoo.

FILES

       xXXXXXX - temporary file used during packing
       archive_name.bak - backup of archive

SEE ALSO

       compress(1), fiz(1)

BUGS

       When files are being added to an archive on a non-MS-DOS system, it is possible for zoo to fail to detect
       a full disk and hence create an invalid archive.  This bug will be fixed in a future release.

       Files  with generation counts that wrap around from 65535 to 1 are not currently handled correctly.  If a
       file's generation count reaches a value close to 65535, it should be manually set  back  down  to  a  low
       number.   This  may  be  easily  done  with  a  command  such as gc-65000, which subtracts 65000 from the
       generation count of each specified file.  This problem will be fixed in a future release.

       Although zoo on **IX systems preserves the lowest nine mode bits of regular files, it does not  currently
       do the same for directories.

       Currently  zoo's  handling  of  the  characters : and ; in filenames is not robust, because it interprets
       these to separate a  filename  from  a  generation  number.   A  quoting  mechanism  will  eventually  be
       implemented.

       Standard  input  cannot be archived nor can a created archive be sent to standard output.  Spurious error
       messages may appear if the filename of an archive is too long.

       Since zoo never archives any file with the same name as the archive or its backup (regardless of any path
       prefixes), care should be taken to make sure that a file to be archived does not coincidentally have  the
       same  name  as  the  archive  it  is being added to.  It usually suffices to make sure that no file being
       archived is itself a zoo archive.  (Previous versions of zoo sometimes tried to add an archive to itself.
       This bug now seems to be fixed.)

       Only regular files are archived; devices and empty directories are  not.   Support  for  archiving  empty
       directories and for preserving directory attributes is planned for the near future.

       Early  versions  of MS-DOS have a bug that prevents "." from referring to the root directory;  this leads
       to anomalous results if the extraction of paths beginning with a dot is attempted.

       VAX/VMS destroys case information unless arguments are enclosed in double quotes.  For this reason  if  a
       command given to zoo on a VAX/VMS system includes any uppercase characters, it must be enclosed in double
       quotes.   Under VAX/VMS, zoo does not currently restore file timestamps;  this will be fixed as soon as I
       figure out RMS extended attribute blocks, or DEC supplies a utime()  function,  whichever  occurs  first.
       Other  VMS  bugs,  related  to file structures, can often be overcome by using the program bilf.c that is
       supplied with zoo.

       It is not currently possible to create a zoo archive containing all zoo  archives  that  do  not  contain
       themselves.

DIAGNOSTICS

       Error  messages  are intended to be self-explanatory and are divided into three categories.  WARNINGS are
       intended to inform the user of  an  unusual  situation,  such  as  a  CRC  error  during  extraction,  or
       -freshening  of  an  archive  containing a file newer than one specified on the command line.  ERRORS are
       fatal to one file, but execution continues with the next file if any.  FATAL errors cause execution to be
       aborted.  The occurrence of any of these causes an exit status of  1.   Normal  termination  without  any
       errors  gives  an  exit  status  of 0.  (Under VAX/VMS, however, to avoid an annoying message, zoo always
       exits with an error code of 1.)

COMPATIBILITY

       All versions of zoo on all systems are required to create archives that can be extracted and listed  with
       all  versions  of  zoo  on all systems, regardless of filename and directory syntax or archive structure;
       furthermore, any version of zoo must be able to fully manipulate  all  archives  created  by  all  lower-
       numbered  versions  of  zoo  on  all  systems.   So  far  as  I  can tell, this upward compatibility (all
       manipulations) and downward compatibility (ability to extract and list) is maintained by zoo versions  up
       to  2.01.   Version  2.1  adds  the incompatibility that if high-performance compression is used, earlier
       versions cannot extract files compressed with version 2.1.

CHANGES

       Here is a list of changes occurring from version 1.50 to version  2.01.   In  parentheses  is  given  the
       version in which each change occurred.

       -      (1.71)  New  modifiers  to  the  list  commands  permit optional suppression of header and trailer
              information, inclusion of directory names in columnized listings, and fast one-column listings.

       -      (1.71) Timezones are handled.

       -      (1.71) A bug was fixed that had made it impossible to individually  update  comments  for  a  file
              whose name did not correspond to MS-DOS format.

       -      (1.71) A change was made that now permits use of the shared library on the **IX PC.

       -      (1.71) VAX/VMS is now supported reasonably well.

       -      (2.00) A comment may now be attached to the archive itself.

       -      (2.00) The OO option allows forced overwriting of read-only files.

       -      (2.00)  Zoo  will  no  longer extract a file if a newer copy already exists on disk;  the S option
              will override this.

       -      (2.00) File attributes are preserved for **IX systems.

       -      (2.00) Multiple generations of the same file are supported.

       -      (2.00) Zoo will now act as a compression or decompression filter on a stream of data and will  use
              a CRC value to check the integrity of a data stream that is uncompressed.

       -      (2.00)  A  bug was fixed that caused removal of a directory link if files were moved to an archive
              by the superuser on a **IX system.

       -      (2.00) The data recovery modifier @ was greatly enhanced.  Self-extracting  archives  created  for
              MS-DOS systems can now be extracted by zoo on any system with help from fiz(1).

       -      (2.01)  A  bug  was fixed that had caused the first generation of a file to sometimes unexpectedly
              show up in archive listings.

       -      (2.01) A bug was fixed that had caused the MS-DOS version to silently skip files that could not be
              extracted because of insufficient disk space.

       -      (2.01) A bug was fixed that had sometimes made it impossible to  selectively  extract  a  file  by
              specifying  its  name, even though all files could be extracted from the archive by not specifying
              any filenames.  This occurred when a file had been archived  on  a  longer-filename  system  (e.g.
              AmigaDOS) and extraction was attempted on a shorter-filename system (e.g. MS-DOS).

       -      (2.01)  A  change was made that will make zoo preserve the mode (file protection) of a zoo archive
              when it is packed.  This is effective only if  zoo  is  compiled  to  preserve  and  restore  file
              attributes.  Currently this is so only for **IX systems.

       -      (2.01) A bug was fixed that had caused an update of an archive to not always add all newer files.

       -      (2.01) Blanks around equal signs in commands given to "make" were removed from the mk* scripts for
              better compatibility with more **IX implementations including Sun's.

       -      (2.1) Compression is now greatly improved if the "h" option is used.

       -      (2.1) The default behavior is to preserve full pathnames during extraction.

       -      (2.1) On some systems, extraction of files using the older (default) compression method is greatly
              speeded up.

       -      (2.1) Extended multiscreen help is available.

       -      (2.1)  Memory  allocation  is improved, so that the MS-DOS version will not prematurely abort when
              updating a large archive.

       -      (2.1) The VAX/VMS version preserves file timestamps during extraction.

       -      (2.1) The default archive-wide generation limit, when generations are enabled, is 3.

FUTURE DIRECTIONS

       A revised version of zoo is in the works that will be able to write newly-created  archives  to  standard
       output  and  will  support  multivolume  archives.   It  will be upward and downward compatible with this
       version of zoo.

ACKNOWLEDGEMENTS

       The zoo archiver was initially developed using Microsoft C 3.0 on a PC clone manufactured by  Toshiba  of
       Japan  and  almost  sold  by  Xerox.   Availability  of  the  following  systems was helpful in achieving
       portability: Paul Homchick's Compaq running Microport System V/AT;  The Eskimo BBS  somewhere  in  Oregon
       running  Xenix/68000; Greg Laskin's system 'gryphon' which is an Intel 310 running Xenix/286;  Ball State
       University's AT&T 3B2/300, UNIX PC, and VAX-11/785 (4.3BSD and VAX/VMS) systems.  In  addition  J.  Brian
       Waters  provided  feedback  to  help  me  make  the code compilable on his Amiga using Manx/Aztec C.  The
       executable version 2.0 for MS-DOS is currently compiled with Borland's Turbo C++ 1.0.

       Thanks are due to the following people and many others too numerous to mention.

       J. Brian Waters <jbwaters@bsu-cs.bsu.edu>, who has worked diligently to port  zoo  to  AmigaDOS,  created
       Amiga-specific code, and continues keeping it updated.

       Paul Homchick <rutgers!cgh!paul>, who provided numerous detailed reports about some nasty bugs.

       Bill   Davidsen   <davidsen@crdos1.crd.ge.com>,  who  provided  numerous  improvements  to  this  manual,
       contributed multiscreen help, and provided many useful bug reports, bug  fixes,  code  improvements,  and
       suggestions.

       Mark Alexander <amdahl!drivax!alexande>, who provided me with some bug fixes.

       Haruhiko  Okumura, who wrote the ar archiver and some excellent compression code, which I adapted for use
       in zoo.

       Randal L. Barnes <rlb@skyler.mavd.honeywell.com>, who (with Randy Magnuson) wrote the code to support the
       preservation of file timestamps under VAX/VMS.

       Raymond D. Gardner, who contributed replacement uncompression code that on some systems is twice as  fast
       as the original.

       Greg  Yachuk  and Andre Van Dalen, who independently modified MS-DOS zoo to support multivolume archives.
       (This support is not yet in this official release.)

AUTHOR

       Rahul Dhesi

7th Edition                                       July 7, 1991                                            ZOO(1)