home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-07-17 | 48.9 KB | 1,100 lines |
-
- ZOO(1) REFERENCE MANUAL ZOO(1)
-
- 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% depend-
- ing 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 por-
- tion and locating undamaged data with the help of fiz(1).
-
- This documentation is for version 2.1. Changes from previ-
- ous 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 con-
- sist 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 indivi-
- dually, 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 remain-
- ing 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 neces-
- sary 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 speci-
- fied, all files are extracted from the archive.
-
- The following modifiers are specific to the e and x com-
- mands:
-
- 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 answer-
- ing 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 gen-
- eration 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 gen-
- eration 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 com-
- mand.
-
- 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 inter-
- spersed 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 argu-
- ment, only the requested generation is listed. If a
- filename is specified ending with the generation char-
- acter (`:' 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 sup-
- plied 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 com-
- mand.
-
- 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 com-
- mands.
-
- 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 list-
- ing will show `-g', meaning that no generation informa-
- tion 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 descrip-
- tion 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 com-
- mand:
-
- 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 avail-
- able.
-
- 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 list-
- ing 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 com-
- bined 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 [copyrite] ==> 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 syn-
- chronize 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 nor-
- mally expands wildcards to a list of matching files. Wild-
- cards 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 charac-
- ter range. All filenames beginning with those charac-
- ters 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 char-
- acter is used, the filename specified matches only the
- latest generation of the file. If the generation char-
- acter is specified, the filename and the generation are
- matched independently by zoo's wildcard mechanism. If
- no generation is specified following the : or ; charac-
- ter, 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 gen-
- erations of a file except the latest one. If no
- filename is specified preceding the generation charac-
- ter, 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 fol-
- lowing 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 inter-
- face 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 abil-
- ity 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 speci-
- fied 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 gen-
- erations, the modifiers m (show mode bits) and g (show gen-
- eration 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 com-
- mand 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 abbrevi-
- ated 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 specify-
- ing 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 genera-
- tion 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 con-
- venience, 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 genera-
- tion 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 gen-
- eration 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, appear-
- ing 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 genera-
- tion 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 ver-
- sions 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 direc-
- tories 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, which-
- ever occurs first. Other VMS bugs, related to file struc-
- tures, 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 con-
- taining 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 mes-
- sage, 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 compatiblity (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. This is the only incompatibility that is
- permissible. You are forbidden, with the force of copyright
- law, to create from the zoo 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 prob-
- lem and reported to me.
-
- 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 over-
- ride this.
-
- - (2.00) File attributes are preserved for **IX systems.
-
- - (2.00) Multiple generations of the same file are sup-
- ported.
-
- - (2.00) Zoo will now act as a compression or decompres-
- sion 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 direc-
- tory 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 gen-
- eration of a file to sometimes unexpectedly show up in
- archive listings.
-
- - (2.01) A bug was fixed that had caused the MS-DOS ver-
- sion 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 path-
- names 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 down-
- ward 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 mul-
- tiscreen 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 excel-
- lent 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 uncompres-
- sion 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
-