


     [1mZOO(1)                      (July 7, 1991)                    ZOO(1)[0m



     [1mNAME[0m
          zoo - manipulate archives of files in compressed form

     [1mSYNOPSIS[0m
          [1mzoo[0m {[1macfDeghHlLPTuUvVx[0m}[[1maAcCdEfghImMnNoOpPqSu1:/.@n+-=[0m]
          archive [file] ...
          [1mzoo -command[0m archive [file] ...
          [1mzoo h[0m

     [1mDESCRIPTION[0m
          [4mZoo[0m 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.  [4mZoo[0m 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
          [4mfiz[0m([4m1[0m).

          This documentation is for version 2.1.  Changes from
          previous versions are described in the section labelled
          [1mCHANGES[0m.

          The command [4mzoo[0m [1mh[0m gives a summary of commands.  Extended
          multiscreen help can be obtained with [4mzoo[0m [1mH[0m.

          [4mZoo[0m will not add an archive to itself, nor add the archive's
          backup (with [1m.bak[0m extension to the filename) to the archive.

          [4mZoo[0m 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 [4mzoo[0m 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.  [4mZoo[0m 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 [1m.zo[0mo unless a different extension is supplied.

          [1mNovice commands[0m

          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 [1m.bak[0m.

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

          The Novice commands are as follows.

          [1m-add[0m 
                Adds the specified files to the archive.

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

          [1m-delete[0m
               Deletes the specified files from the archive.

          [1m-update[0m
               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.

          [1m-extract[0m
               Extracts the specified files from the archive.  If no
               file is specified all files are extracted.

          [1m-move[0m
               Equivalent to [1m-add[0m except that source files are deleted
               after addition.

          [1m-print[0m
               Equivalent to [1m-extract[0m except that extracted data are
               sent to standard output.

          [1m-list[0m
               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.

          [1m-test[0m
               Equivalent to [1m-extract[0m except that the extracted data
               are not saved but any errors encountered are reported.

          [1m-comment[0m
               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 [1m/end[0m (case-
               insensitive) on a separate line;  or type the end-of-
               file character (normally control D) to skip all
               remaining files.

          [1m-delete[0m
               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      add newer files                         auP:
          -comment      add comments to files                   c

          [1mExpert commands[0m

          The general format of expert commands is:

          [4mzoo[0m {[1macfDeghHlLPTuUvVx[0m}[[1maAcCdEfghImMnNoOpPqSu1:/.@n+-=[0m]
          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:

          [4mzoo[0m {[1mau[0m}[[1mcfhIMnPqu:+-[0m] archive [file] ...

          Command characters are:

          [1ma[0m    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.

          [1mu[0m    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.

          [1mM[0m    Move files to archive.  This makes [4mzoo[0m 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 [4mzoo[0m
               detected no errors.

          [1mn[0m    Add new files only.  A specified file is added only if
               it isn't already in the archive.

          [1mh[0m    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.

          [1mP[0m    Pack archive after files have been added.

          [1mu[0m    Applied to the [1ma[0m command, this modifier makes it behave
               identically to the [1mu[0m command.

               The combination of the [1mn[0m modifier with the [1mu[0m modifier
               or [1mu[0m command causes addition of a file to the archive
               either if the file is not already in the archive, [4mor[0m if
               the file is already in the archive but the archived
               copy is older than the copy being added.

          [1m:[0m    Do not store directory names.  In the absence of this
               modifier [4mzoo[0m stores the full pathname of each archived
               file.

          [1mI[0m    Read filenames to be archived from standard input. [4mZoo[0m
               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, [4mzoo[0m 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, [4mzoo[0m can be
               used as follows in a pipeline:

                    find . -print | [4mzoo[0m aI sources



               If the [1mI[0m modifier is specified, no filenames may be
               supplied on the command line itself.

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

          Files are extracted from an archive with the command:

          [4mzoo[0m {[1mex[0m}[[1mdNoOpqS./@[0m] archive [file] ...

          The [1me[0m and [1mx[0m 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:

          [1mN[0m    Do not save extracted data but report any errors
               encountered.

          [1mO[0m    Overwrite files.  Normally, if a file being extracted
               would overwrite an already-existing file of the same
               name, [4mzoo[0m 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 [1mO[0m modifier makes [4mzoo[0m assume
               that files may always be overwritten.  Neither
               answering the question affirmatively nor using [1mO[0m alone
               will cause read-only files to be overwritten.

               On **IX systems, however, doubling this modifier as [1mO[0m
               will force [4mzoo[0m to unconditionally overwrite any read-
               protected files with extracted files if it can do so.

               The [1mO,[0m [1mN,[0m and [1mp[0m modifiers are mutually exclusive.

          [1mS[0m    Supersede newer files on disk with older extracted
               files.  Unless this modifier is used, [4mzoo[0m will not
               overwrite a newer existing file with an older extracted
               file.

          [1mo[0m    This is equivalent to the [1mO[0m modifier if and only if it
               is given at least twice.  It is otherwise ignored.

          [1mp[0m    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.

          [1m/[0m    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 [1m//[0m, required directories
               need not exist and are created if necessary.

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

          [1mzoo gl[0m[[1mAq[0m]{[1m+-=[0m}[1mnumber archive files ..[0m
          [1mzoo gc[0m[[1mq[0m]{[1m+-=[0m}[1mnumber archive files ..[0m
          [1mzoo gA[0m[[1mq[0m][1m- archive[0m
          [1mzoo gA[0m[[1mq[0m][1m+ archive[0m

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

               [1mzoo gl=5 xyz :[0m


          sets the generation limit of each file in the archive
          [1mxyz.zoo[0m to a value of 5.  The command

               [1mzoo gl-3 xyz :[0m


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

          If the [1mA[0m 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 [1mgc[0m, 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 [1mgc[0m command.  The
          syntax of the command is analogous to the syntax of the [1mgl[0m
          command, except that the [1mA[0m modifier is not applicable to the
          [1mgc[0m command.

          The third form, [1mgA-[0m, 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, [1mgA+[0m.
          When generations are disabled in an archive, [4mzoo[0m 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 [1mgA-[0m and [1mgA+[0m commands may result in an archive
          whose behavior is not easily understandable.

          Archived files are listed with the command:

          [4mzoo[0m {[1mlLvV[0m}[[1maAcCdfgmqvV@/1+-[0m] archive[[1m.zoo[0m] [file] ...

          [1ml[0m    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.

               [4mZoo[0m 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 [1mzoo.c[0m
               will cause only the latest generation of [4mzoo[0m.[4mc[0m to be
               listed; an argument of the form [1mzoo.c:4[0m will cause
               generation 4 of [4mzoo[0m.[4mc[0m to be listed;  and an argument of
               the form [1mzoo.c:[0m or [1mzoo.c:*[0m will cause all generations
               of [4mzoo[0m.[4mc[0m to be listed.

          [1mL[0m    This is similar to the [1ml[0m 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 [1mL[0m command
               must be used.  On other systems (VAX/VMS, AmigaDOS,
               MSDOS) on which wildcard expansion is done internally
               by [4mzoo[0m, wildcards may be used in the archive name, and
               a multiple archive listing obtained, using the [1ml[0m
               command.

          [1mv[0m    This causes any comment attached to the archive to be
               listed in addition to the other information.

          [1mV[0m    This causes any comment attached to the archive and
               also any comment attached to each file to be listed.

               Both the [1mV[0m and [1mv[0m command characters can also be used as
               modifiers to the [1ml[0m and [1mL[0m commands.

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

          [1ma[0m    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 [1mL[0m 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.

          [1mA[0m    This causes any comment attached to the archive to be
               listed.

          [1mg[0m    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 [4mzoo[0m, 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 [1mg[0m command.

          [1mm[0m    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 [4mzoo[0m preserves only the lowest nine
               mode bits.  Their meanings are as described in the **IX
               documentation for the [4mchmod[0m([4m1[0m) command.

          [1mC[0m    This modifier causes the stored cyclic redundancy code
               (CRC) for each archived file to be shown as a four-
               digit hexadecimal number.

          [1m1[0m    This forces one filename to be listed per line. It is
               most useful in combination with the [1mf[0m modifier.

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

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

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

          [4mzoo[0m {[1mDU[0m}[[1mPq1[0m] archive file ...

          The [1mD[0m command deletes the specified files and the [1mU[0m command
          undeletes the specified files.  The [1m1[0m 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 [1m1[0m modifier may allow selective
          extraction of one of these.

          Comments may be added to an archive with the command:

          [4mzoo[0m [1mc[0m[[1mA[0m] archive

          Without the modifier [1mA[0m, this behaves identically to the
          [1m-comment[0m command.  With the modifier [1mA[0m, the command serves
          to add or update the comment attached to the archive as a
          whole.  This comment may be listed with the [1mlA[0m, [1mLA[0m, [1mv[0m, and [1mV[0m
          commands.  Applying the [1mcA[0m command to an archive that was
          created with an older version of [4mzoo[0m will result in an error
          message requesting that the user first pack the archive with
          the [1mP[0m command.  This reorganizes the archive and creates
          space for the archive comment.

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

          [4mzoo[0m [1mT[0m[[1mq[0m] archive

          [4mZoo[0m 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 [1mT[0m command.

          An archive may be packed with the command:

          [4mzoo[0m [1mP[0m[[1mEPq[0m] archive

          If the backup copy of the archive already exists, [4mzoo[0m will
          refuse to pack the archive unless the [1mP[0m modifier is also
          given.  The [1mE[0m modifier causes [4mzoo[0m 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 [4mzoo[0m so that newer features (e.g. archive-
          wide generation limit, archive comment) become fully
          available.

          [4mZoo[0m can act as a pure compression or uncompression filter,
          reading from standard input and writing to standard output.
          This is achieved with the command:

          [4mzoo[0m [1mf[0m{[1mcu[0m}[1m[[0mh

          where [1mc[0m specifies compression, [1mu[0m specifies uncompression,
          and [1mh[0m 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 [4mtar[0m or [4mcpio[0m.

           Modem transfers can be speeded up with these commands:

                    [4mzoo[0m [1mfc[0m < file | [4msz[0m ... [4mrz[0m | [4mzoo[0m [1mfu[0m > file



          [1mGeneral modifiers[0m

          The following modifiers are applicable to several commands:

          [1mc[0m    Applied to the [1ma[0m and [1mu[0m 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 [1m-comment[0m command.  Applied to the
               archive list command [1ml[0m, the [1mc[0m modifier causes the
               listing of any comments attached to archived files.

           [1m.[0m   In conjunction with [1m/[0m or [1m//[0m 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 [1mP[0m 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.

          [1md[0m    Most commands that act on an archive act only on files
               that are not deleted.  The [1md[0m modifier makes commands
               act on both normal and deleted files.  If doubled as
               [1mdd[0m, this modifier forces selection only of deleted
               files.

          [1mf[0m    Applied to the [1ma[0m and [1mu[0m commands, the [1mf[0m modifier causes
               fast archiving by adding files without compression.
               Applied to llll it causes a fast listing of files in a
               multicolumn format.

          [1mq[0m    Be quiet.  Normally [4mzoo[0m lists the name of each file and
               what action it is performing.  The [1mq[0m modifier
               suppresses this.  When files are being extracted to
               standard output, the [1mq[0m 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 [1mqq[0m, this modifier suppresses WARNING
               messages, and when tripled as [1mqqq[0m, ERROR messages are
               suppressed too. FATAL error messages are never
               suppressed.

          [1mRecovering data from damaged archives[0m

          The [1m@[0m modifier allows the user to specify the exact position
          in an archive where [4mzoo[0m 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 [1ml@m[0m or [1ml@m,n[0m
          (to list archive contents) or [1mx@m[0m or [1mx@m,n[0m (to extract files
          from an archive).  Listing or extraction begin at position [1mm[0m
          in the archive.  The value of [1mm[0m must be the position within
          the archive of an undamaged directory entry. This position
          is usually obtained from [4mfiz[0m([4m1[0m) 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 nnnn may be
          specified.  This value is also usually obtained from [4mfiz[0m([4m1[0m).
          It should be the position in the archive of the file data
          corresponding to the directory entry that has been specified
          with [1mm[0m.  Thus if the command [1mx@456,575[0m is given, it will
          cause the first 456 bytes of the archive to be skipped and
          extraction to begin at offset 456;  in addition, [4mzoo[0m 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 [4mfiz[0m when it acts on a damaged [4mzoo[0m archive:

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

          In such output, [1mDIR[0m indicates where [4mfiz[0m found a directory
          entry in the archive, and [1mDATA[0m indicates where [4mfiz[0m found
          file data in the archive.  Filenames located by [4mfiz[0m are
          enclosed in square brackets, and the notation "==>   95"
          indicates that the directory entry found by [4mfiz[0m at position
          2526 has a file data pointer to position 95. (This is
          clearly wrong, since file data always occur in an archive
          [4mafter[0m their directory entry.)  In actuality, [4mfiz[0m found file
          data at positions 2587, 3970, and 4769.  Since [4mfiz[0m 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 [4mzoo[0m might be
          [1mx@2526,2587[0m (extract beginning at position 2526, and get
          file data from position 2587), [1mx@3090,3970[0m (extract at 3090,
          get data from 3970) and [1mx@3909,4769[0m (extract at 3909, get
          data from 4769).  Once a correctly-matched directory
          entry/file data pair is found, [4mzoo[0m 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 [4msez[0m (the Self-
          Extracting [4mZoo[0m utility for MS-DOS), which are normally
          executed on an MS-DOS system for extraction, can be
          extracted on non-MSDOS systems using [4mzoo[0m'[4ms[0m damaged-archive
          recovery method using the [1m@[0m modifier.

          [1mWildcard handling[0m

          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 [4mzoo[0m as described
          below.

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

          The wildcard syntax interpreted by [4mzoo[0m is limited to the
          following characters.

          [1m*[0m    Matches any sequence of zero or more characters.

          [1m?[0m    Matches any single character.

               Arbitrary combinations of [1m*[0m and [1m?[0m are allowed.

          [1m/[0m    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.

          [1mc-c[0m  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.

          [1m: and ;[0m
               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 [4mzoo[0m'[4ms[0m wildcard mechanism.
               If no generation is specified following the [1m:[0m or [1m;[0m
               character, all generations of that file will match.  As
               a special case, a generation number of [1m0[0m matches only
               the latest generation of a file, while [1m^0[0m 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 [4mzoo[0m does not treat the dot as
          a special character, and it does not ignore characters
          following an asterisk.  Thus [1m*[0m matches all filenames; [1m*.*[0m
          matches filenames containing a dot; [1m*_*[0m matches filenames
          containing an underscore;  and [1m*z[0m matches all filenames that
          end with the character [1mz[0m, whether or not they contain a dot.

          [1mUsage hints[0m

          The Novice command set in [4mzoo[0m 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 [4mzoo[0m'[4ms[0m 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 [1ma[0m 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 [1mu[0m modifier, making the command [1mau[0m.  To
          cause only new files (i.e., files not already in the
          archive) to be added, the [1mn[0m modifier is used to create the
          command [1man0m.  To cause [4mboth[0m already-archived files to be
          updated and new files to be added, the [1mu[0m and [1mn[0m modifiers can
          be used together, giving the command [1maun[0m.  Since the order
          of modifiers is not significant, the command could also be
          [1manu[0m.

          Further, the cccc modifier can be used to cause [4mzoo[0m to prompt
          the user for a comment to attach to each file added. And
          the [1mf[0m modifier can cause fast addition (addition without
          compression).  It should be obvious then that the command
          [1mauncf[0m will cause [4mzoo[0m 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 [1mM[0m modifier to the command, so it
          becomes [1mauncfM[0m.  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 [1mauncfMP[0m by adding the [1mP[0m 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 [1ml[0m.  If the user wants a fast columnized
          listing, the ffff modifier can be added to give the [1mlf[0m 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 [1mq[0m, which when added to the command
          gives [1mlfq[0m.  If the user wishes to see the **IX mode (file
          protection) bits, and also information about multiple
          generations, the modifiers [1mm[0m (show mode bits) and [1mg[0m (show
          generation information) can be added, giving the command
          [1mlfqmg[0m.  If the user also wishes to see an attached archive
          comment, the modifier [1mA[0m (for archive) will serve.  Thus the
          command [1mlfqmgA[0m 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 [1mc[0m modifier to the command, making it
          [1mlfqmgAc[0m.  The above command will not show any deleted files,
          however;  to see them, use the [1md[0m modifier, making the
          command [1mlfqmgAcd[0m (or double it as in [1mlfqmgAcdd[0m if [4monly[0m 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 [1mC[0m will do this, as in the command [1mlfqmgAcdC[0m, 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 [1mlfqmgAcdC[0m could also be
          abbreviated to [1mVfqmgdC[0m because the command [1mV[0m is shorthand
          for [1mlcA[0m (archive listing with all comments shown).
          Similarly the command [1mv[0m is shorthand for [1mlA[0m (archive listing
          with archive comment shown). Both [1mV[0m and [1mv[0m can be used as
          modifiers to any of the other archive listing commands.

          [1mGenerations[0m

          By default, [4mzoo[0m 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
          [1mstdio.h[0m would normally refer to the latest generation of the
          file [4mstdio[0m.[4mh[0m stored in a [4mzoo[0m archive.  To get an archive
          listing showing all generations of [4mstdio[0m.[4mh[0m in the archive,
          the specification [1mstdio.h:*[0m could be used (enclosed in
          single quotes if necessary to protect the wildcard character
          [1m*[0m from the shell).  Also, [1mstdio.h:0[0m selects only the latest
          generation of [4mstdio[0m.[4mh[0m, while [1mstdio.h:^0[0m selects all
          generations except the latest one.  The [1m:[0m character here
          separates the filename from the generation number, and the
          character [1m*[0m is a wildcard that matches all possible
          generations. For convenience, the generation itself may be
          left out, so that the name [1mstdio.h:[0m (with the [1m:[0m but without
          a generation number or a wildcard) matches all generations
          exactly as [1mstdio.h:*[0m does.

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

          It is important to note that [4mzoo[0m'[4ms[0m idea of the latest
          generation of a file is not based upon searching the entire
          archive.  Instead, whenever [4mzoo[0m 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 [4mno[0m 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 [4mstdio[0m.[4mh[0m:[4m5[0m and a new copy is added,
          appearing in the archive listing as [4mstdio[0m.[4mh[0m:[4m6[0m, and then
          [4mstdio[0m.[4mh[0m:[4m6[0m is deleted, the remaining copy [4mstdio[0m.[4mh[0m:[4m5[0m will no
          longer be considered to be the latest generation, and the
          file [4mstdio[0m.[4mh[0m:[4m5[0m, 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 [4mzoo[0m.

     [1mFILES[0m
          xXXXXXX - temporary file used during packing
          archive_name.[1mbak[0m - backup of archive

     [1mSEE ALSO[0m
          compress(1), fiz(1)

     [1mBUGS[0m
          When files are being added to an archive on a non-MS-DOS
          system, it is possible for [4mzoo[0m 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 [1mgc-65000[0m, which subtracts
          65000 from the generation count of each specified file.
          This problem will be fixed in a future release.

          Although [4mzoo[0m on **IX systems preserves the lowest nine mode
          bits of regular files, it does not currently do the same for
          directories.

          Currently [4mzoo[0m'[4ms[0m handling of the characters [1m:[0m and [1m;[0m 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 [4mzoo[0m 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 [4mzoo[0m archive. (Previous
          versions of [4mzoo[0m 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 [4mzoo[0m on a VAX/VMS system includes any uppercase
          characters, it must be enclosed in double quotes.  Under
          VAX/VMS, [4mzoo[0m 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
          [4mbilf[0m.[4mc[0m that is supplied with [4mzoo[0m.

          It is not currently possible to create a [4mzoo[0m archive
          containing all [4mzoo[0m archives that do not contain themselves.

     [1mDIAGNOSTICS[0m
          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 [1m-freshen[0ming 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, [4mzoo[0m always exits with an error code of 1.)

     [1mCOMPATIBILITY[0m
          All versions of [4mzoo[0m on all systems are required to create
          archives that can be extracted and listed with all versions
          of [4mzoo[0m on all systems, regardless of filename and directory
          syntax or archive structure; furthermore, any version of
          [4mzoo[0m must be able to fully manipulate all archives created by
          all lower-numbered versions of [4mzoo[0m on all systems.  So far
          as I can tell, this upward compatibility (all manipulations)
          and downward compatiblity (ability to extract and list) is
          maintained by [4mzoo[0m 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. This is the only incompatibility that is
          permissible. You are forbidden, with the force of copyright
          law, to create from the [4mzoo[0m source code any derivative work
          that violates this compatibility goal, whether knowingly or
          through negligence.  If any violation of this compatibility
          goal is observed, this should be considered a serious
          problem and reported to me.

     [1mCHANGES[0m
          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 [1mOO[0m option allows forced overwriting of
               read-only files.

          -    (2.00) [4mZoo[0m will no longer extract a file if a newer
               copy already exists on disk;  the [1mS[0m 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) [4mZoo[0m 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 [1m@[0m was greatly
               enhanced.  Self-extracting archives created for MS-DOS
               systems can now be extracted by [4mzoo[0m on any system with
               help from [4mfiz[0m([4m1[0m).

          -    (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
               compatiblity 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.

     [1mFUTURE DIRECTIONS[0m
          A revised version of [4mzoo[0m 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 [4mzoo[0m.

     [1mACKNOWLEDGEMENTS[0m
          The [4mzoo[0m 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 [4mzoo[0m 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 [4mar[0m archiver and some
          excellent compression code, which I adapted for use in [4mzoo[0m.

          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 [4mzoo[0m to support multivolume archives.  (This support
          is not yet in this official release.)

          Mark Tomlinson <tomlinson@elec.canterbury.ac.nz>, who performed
          this port of v2.1 to AmigaDOS from the sources post to alt.sources
    
     [1mAUTHHOR[0m
          Rahul Dhesi
