rsalz@uunet.uu.net (Rich Salz) (02/03/89)
Submitted-by: Rahul Dhesi <bsu-cs!dhesi> Posting-number: Volume 17, Issue 73 Archive-name: zoo2/part10 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 10 (of 10)." # Wrapped by rsalz@papaya.bbn.com on Thu Feb 2 18:04:06 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'zoo.1' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'zoo.1'\" else echo shar: Extracting \"'zoo.1'\" \(45120 characters\) sed "s/^X//" >'zoo.1' <<'END_OF_FILE' X.\" @(#) zoo.1 2.44 88/08/25 16:05:30 */ X.\" X.\" For formatting with nroff: X.\" tbl zoo.1 | nroff -man | col X.\" It should be possible to use troff instead of nroff but I haven't X.\" confirmed this. R.D. X.\" X.TH ZOO 1 "Aug 25, 1988" X.AT 3 X.de sh X.br X.ne 5 X.PP X\fB\\$1\fR X.PP X.. X.SH NAME Xzoo \- manipulate archives of files in compressed form X.SH SYNOPSIS X.B zoo X.RB { acfDeghlLPTuUvVx }[ aAcCdEfgImMnNoOpPqSu1:/.@n+\-= ] Xarchive [file] ... X.sp 0 X.B zoo \-command Xarchive [file] ... X.sp 0 X.B zoo h X.SH DESCRIPTION X.I Zoo Xis used to create and maintain collections of files in compressed form. XIt uses a Lempel-Ziv compression algorithm that gives space savings Xin the range of 20% to 80% depending on the type of file data. X.I Zoo Xcan store and selectively extract Xmultiple generations of the same file. Data can be recovered Xfrom damaged archives by skipping the damaged portion Xand locating undamaged data with the help of X.I fiz(1). X.PP XThis documentation is for version 2.01. Changes from previous Xversions are described in the section labelled X.BR CHANGES . X.PP XThe command X.I zoo X.B h Xgives summary of commands. X.PP X.I Zoo Xwill not add an archive to itself, nor add the Xarchive's backup (with X.B .bak Xextension to the filename) to the archive. X.PP X.I Zoo Xhas two types of commands: Expert commands, which consist of one command Xletter followed by zero or more modifier characters, and Novice commands, Xwhich consist of a hyphen (`\-') followed by a command word that may Xbe abbreviated. Expert commands are case-sensitive but Novice commands Xare not. X.PP XWhen X.I zoo Xadds a file to an existing archive, the default action is to maintain Xone generation of each file in an archive and Xto mark any older generation as deleted. A limit on the number Xof generations to save can be specified by the user for Xan entire archive, or for each file individually, or both. X.I XZoo Xdeletes a stored copy of an added file if necessary to prevent Xthe number of stored generations from exceeding the user-specified limit. X.PP XDeleted files may be later undeleted. XArchives may be packed to recover space occupied by deleted files. X.PP XAll commands assume that the archive name ends with the characters X.B .zoo Xunless a different extension is supplied. X.PP X.B Novice commands X.PP XNovice commands may be abbreviated to a hyphen followed by at least Xone command character. Each Novice command works in two stages. XFirst, the command does its intended work. Then, if the result was Xthat one or more files were deleted in the specified archive, the Xarchive is packed. If packing occurs, the original unpacked archive Xis always left behind with an extension of X.BR .bak . X.PP XNo Novice command ever stores the directory prefix of a file. X.PP XThe Novice commands are as follows. X.PP X.TP 8 X.B \-add XAdds the specified files to the archive. X.PP X.TP X.B \-freshen XAdds a specified file to the archive if and only if an older file by Xthe same name already exists in the archive. X.PP X.TP X.B \-delete XDeletes the specified files from the archive. X.PP X.TP X.B \-update XAdds a specified file to the archive either: if an older file by Xthe same name already exists in the archive or: if a file by the Xsame name does not already exist in the archive. X.PP X.TP X.B \-extract XExtracts the specified files from the archive. If no file is specified Xall files are extracted. X.PP X.TP X.B \-move XEquivalent to X.B \-add Xexcept that source files are deleted after addition. X.PP X.TP X.B \-print XEquivalent to X.B \-extract Xexcept that extracted data are sent to standard output. X.PP X.TP X.B \-list XGives information about the specified archived files including any Xattached comments. If no files are Xspecified all files are listed. Deleted files are not listed. X.PP X.TP X.B \-test XEquivalent to X.B \-extract Xexcept that the extracted data are not saved but any errors encountered Xare reported. X.PP X.TP X.B \-comment XAllows the user to add or update comments attached to archived files. XWhen prompted, the user may: type a carriage return to skip the file, Xleaving any Xcurrent comment unchanged; or type a (possibly null) comment of up Xto 65,535 characters terminated Xby X.B /end X(case-insensitive) on Xa separate line; or type the end-of-file character (normally control D) Xto skip all remaining files. X.PP X.TP X.B \-delete XDeletes the specified files. X.PP X.ne 16 X.nf XThe correspondence between Novice and Expert commands is as follows. X.PP X.\" Table formatting for troff thanks to Bill Davidsen <uunet!crdos1!davidsen> X.sp X.TS H Xtab(@); Xl l l. XNovice@@Equivalent XCommand@Description@Expert Command X_ X\-add@add files to archive@aP: X\-extract@extract files from archive@x X\-move@move files to archive@aMP: X\-test@test archive integrity@xNd X\-print@extract files to standard output@xp X\-delete@delete files from archive@DP X\-list@list archive contents@VC X\-update@add new or newer files@aunP: X\-freshen@by add newer files@auP: X\-comment@add comments to files@c X.TE X.fi X.PD X.PP X.sh "Expert commands" XThe general format of expert commands is: X.PP X.I zoo X.RB { acDeghlLPTuUvVx }[ aAcCdEfImMnNoOpPqSu1:/.@n+\-= ] Xarchive [file] ... X.PP XThe characters enclosed within {} are commands. Choose any one of Xthese. The characters enclosed within [] just to the right of the {} Xare modifiers and zero or more of these may immediately follow the Xcommand character. All combinations of command and modifier characters Xmay not be valid. X.PP XFiles are added to an archive with the command: X.PP X.I zoo X.RB { au }[ cfIMnPqu:+\- ] Xarchive [file] ... X.PP XCommand characters are: X.PP X.TP X.B a XAdd each specified file to archive. Any already-archived copy of Xthe file is deleted if this is necessary to avoid exceeding the Xuser-specified limit on the number of generations of the Xfile to maintain in the archive. X.PP X.TP X.B u XDo an update of the archive. A specified file is added to the Xarchive only if a copy of it is already in the archive and the copy Xbeing added is newer than the copy already in the archive. X.PP XThe following modifiers are specific to these commands. X.PP X.TP X.B M XMove files to archive. This makes X.I zoo Xdelete (unlink) the original files after they have been added to the Xarchive. Files are deleted after addition of all files to the archive is Xcomplete and after any requested packing of the archive has been done, Xand only if X.I zoo Xdetected no errors. X.PP X.TP X.B n XAdd new files only. A specified file is added only if it isn't Xalready in the archive. X.PP X.TP X.B P XPack archive after files have been added. X.PP X.TP X.B u XApplied to the X.B a Xcommand, this modifier makes it behave identically to the X.B u Xcommand. X.sp 1 XThe combination of the X.B n Xmodifier with the X.B u Xmodifier or X.B u Xcommand causes addition of a file to the archive either Xif the file is not already in the archive, X.I or Xif the file is already in the archive but the archived Xcopy is older than the copy being added. X.PP X.TP X.B : XDo not store directory names. In the absence of this modifier X.I zoo Xstores the full pathname of each archived file. X.PP X.TP X.B I XRead filenames to be archived from standard input. X.I Zoo Xwill read Xits standard input and assume that each line of text contains a Xfilename. Under AmigaDOS and the **IX family, the entire line is used. XUnder MS-DOS and VAX/VMS, X.I zoo Xassumes that the filename is terminated by a blank, tab, Xor newline; thus it is permissible for the line of text to Xcontain more than one field separated by white space, and only the Xfirst field will be used. X.sp 1 XUnder the **IX family of operating systems, X.I zoo Xcan be used as follows in a pipeline: X.IP "" 10 Xfind . \-print | X.I zoo XaI sources X.IP "" 5 X.sp 1 XIf the X.B I Xmodifier is specified, no filenames may be supplied on the command Xline itself. X.PP X.TP X.BR + , \- XThese modifiers take effect only if the X.B a Xcommand results in the creation of a new archive. X.B + Xcauses any newly-created archive to have Xgenerations enabled. X.B \- Xis provided for symmetry and causes any newly-created Xarchive to have generations disabled; this is also the Xdefault if neither X.B + Xnor X.B \- Xis specified. X.PP XFiles are extracted from an archive with the command: X.sp 1 X.I zoo X.RB { ex }[ dNoOpqS./@ ] Xarchive [file] ... X.PP XThe X.B e Xand X.B x Xcommands are synonymous. If no file was specified, all files are Xextracted from the archive. X.PP XThe following modifiers are specific to the e and x commands: X.PP X.TP X.B N XDo not save extracted data but report any errors encountered. X.PP X.TP X.B O XOverwrite files. Normally, if a file being extracted would Xoverwrite an already-existing file of the same name, X.I zoo Xasks you if Xyou really want to overwrite it. You may answer the question with X`y', which means yes, overwrite; or `n', which means no, don't Xoverwrite; or `a', which means assume the answer is `y' for this Xand all subsequent files. The X.B O Xmodifier makes X.I zoo Xassume that files may always be overwritten. Neither Xanswering the question affirmatively nor using X.B O Xalone will cause read-only files to be overwritten. X.sp 1 XOn **IX systems, however, doubling this modifier as X.B OO Xwill force X.I zoo Xto unconditionally overwrite any read-protected files Xwith extracted files if it can do so. X.sp 1 XThe X.B O, N, Xand X.B p Xmodifiers are mutually exclusive. X.PP X.TP X.B S XSupersede newer files on disk with older extracted Xfiles. XUnless this modifier is used, X.I zoo Xwill not overwrite a newer existing file with an Xolder extracted file. X.PP X.TP X.B o XThis is equivalent to the X.B O Xmodifier if and only if it Xis given at least twice. It is otherwise ignored. X.PP X.TP X.B p XPipe extracted data to standard output. Error messages are piped to Xstandard output as well. However, if a bad CRC is detected, an error Xmessage is sent both to standard error and to standard output. X.PP X.TP X.B / XExtract to original pathname. Any needed directories must already Xexist. In the absence of this modifier all files are extracted into Xthe current directory. If this modifier is doubled as X.BR // , Xrequired directories need not exist and are created if necessary. X.PP XThe management of multiple generations of archived files Xis done with the commands: X.sp 1 X.B zoo X\fBgl\fR[\fR\fBAq\fR]{\fR\fB+\-=\fR}\fR\fBnumber X.B archive files .. X.sp 0 X.B zoo X\fBgc\fR[\fR\fBq\fR]{\fR\fB+\-=\fR}\fR\fBnumber X.B archive files .. X.sp 0 X.B zoo X.BR gA [ q ] "\- archive" X.sp 0 X.B zoo X.BR gA [ q ] "+ archive" X.sp 1 XThe first form, X.BR gl , Xadjusts the generation limit of selected files by the specified Xvalue. If the form X.B "=n" Xis used, where n is a decimal number, this sets the generation Xlimit to the Xspecified value. If X.B + Xor X.B \- Xare used in placed of X.B = Xthe effect is to increment or decrement the generation limit Xby the specified value. For example, the command X.IP "" 5 X.B "zoo gl=5 xyz :" X.IP "" 0 Xsets the generation limit of each file in the archive X.B xyz.zoo Xto a value of 5. The command X.IP "" 5 X.B "zoo gl\-3 xyz :" X.IP "" 0 Xdecrements the generation limit of each file in the archive Xto 3 less than it currently is. X.sp 1 XIf the X.B A Xmodifier is used, the archive-wide generation limit is Xadjusted instead. X.sp 1 XThe number of generations of a file maintained in an archive Xis limited by the file generation Xlimit, or the archive generation limit, whichever is lower. XAs a special case, a generation limit of 0 stands for Xno limit. Thus the default file generation limit of X0 and archive generation limit of 1 limits the number Xof generations of each file in a newly-created archive to one. X.sp 1 XThe generation limit specified should be in the range X0 through 15; any higher numbers are interpreted modulo X16. X.PP XThe second form of the command, using X.BR gc , Xadjusts the generation count of selected files. Each file Xhas a generation count of 1 when it is first added to Xan archive. Each time a file by the same name is added Xagain to an archive, it receives a generation count Xthat is one higher than the highest generation count Xof the archived copy of the file. The permissible Xrange of generation counts is 1 through 65535. XIf repeated manipulations Xof an archive result in files having very high generation Xcounts, they may be set back to lower numbers with the X.B gc Xcommand. The syntax of the command is analogous to Xthe syntax of the X.B gl Xcommand, except that the X.B A Xmodifier is not applicable to the X.B gc Xcommand. X.PP XThe third form, X.BR "gA\-" , Xdisables generations in an archive. Generations are Xoff when an archive is first created, but may be enabled Xwith the fourth form of the command, X.BR "gA+" . XWhen generations are disabled in an archive, X.I zoo Xwill not display generation numbers in archive listings Xor maintain multiple generations. Generations can Xbe re-enabled at any time, though manipulation Xof an archive with repeated interspersed X.B "gA\-" Xand X.B "gA+" Xcommands may result in an archive whose Xbehavior is not easily understandable. X.PP XArchived files are listed with the command: X.sp 1 X.I zoo X.RB { lLvV }[ aAcCdfgmqvV@/1+\- ] X.RB archive[ .zoo ] X[file] ... X.PP X.TP X.B l XInformation presented includes the date and time of each file, its Xoriginal and current (compressed) sizes, and the percentage Xsize decrease due to compression (labelled CF or compression factor). XIf a file was added to the archive in a different timezone, Xthe difference between timezones is shown in hours as a signed Xnumber. As an example, if the difference is listed as +3, this Xmeans that the file was added to the archive in a timezone Xthat is 3 hours west of the current timezone. The file time Xlisted is, however, always the original timestamp of the Xarchived file, as observed by the user who archived the file, Xexpressed as that user's local time. (Timezone information Xis stored and displayed only if the underlying operating Xsystem knows about timezones.) X.sp 1 XIf no filename is supplied all files are listed except deleted files. X.sp 1 X.I Zoo Xselects which generation(s) of a file to list according to Xthe following algorithm. X.sp 1 XIf no filename is supplied, only the latest generation of Xeach file is listed. If any filenames are specified, Xand a generation is specified for an argument, only Xthe requested generation is listed. If a filename Xis specified ending with the generation character X(`:' or `;'), all generations of that file Xare listed. Thus a filename argument of the form X.B zoo.c Xwill cause only the latest generation of X.I zoo.c Xto be listed; an argument of the form X.B "zoo.c:4" Xwill cause generation 4 of X.I zoo.c Xto be listed; and an argument of the form X.B "zoo.c:" Xor X.B "zoo.c:*" Xwill cause all generations of X.I zoo.c Xto be listed. X.PP X.TP X.B L XThis is similar to the X.B l Xcommand except that all supplied arguments must be archives and all Xnon-deleted generations of all files in each archive appear in Xthe listing. X.sp 1 XOn **IX systems, on which the shell expands arguments, if multiple Xarchives are to be listed, the X.B L Xcommand must be used. On other systems (VAX/VMS, AmigaDOS, XMSDOS) on which wildcard expansion is done internally by X.I zoo, Xwildcards may be used in the archive name, and a multiple Xarchive listing obtained, using the X.B l Xcommand. X.PP X.TP X.B v XThis causes any comment attached to the archive to Xbe listed in addition to the other information. X.PP X.TP X.B V XThis causes any comment attached to the archive and also any Xcomment attached to each file to be listed. X.sp 1 XBoth the X.B V Xand X.B v Xcommand characters can also be used as modifiers to Xthe X.B l Xand X.B L Xcommands. X.PP XIn addition to the general modifiers described later, the following Xmodifiers can be applied to the archive list commands. X.PP X.TP X.B a XThis gives a single-line format containing both each filename and the Xname of the archive, sorted by archive name. It is especially useful Xwith the X.B L Xcommand, since the result can be further sorted on any field to give a Xmaster listing of the entire contents of a set of archives. X.PP X.TP X.B A XThis causes any comment attached to the archive to be listed. X.PP X.TP X.B g XThis modifier causes file generation information to Xbe listed about the archive. For each file listed, the Xuser-specified generation limit, if any, is listed. For Xexample, `3g' for a file means that the user wants no more Xthan three generations of the file to be kept. In archives Xcreated by older versions of X.I zoo, Xthe listing will show `\-g', Xmeaning that no generation information is kept and multiple Xgenerations of the file are not being maintained. X.sp 1 XIn addition to the generation information for each file, Xthe archive-wide generation limit, if any, is shown Xat the end of the listing. If generations have been Xdisabled by the user, this is so indicated, for example: X.IP "" 10 XArchive generation limit is 3 (generations off). X.IP "" 5 XFor more information about generations see the Xdescription of the X.B g Xcommand. X.PP X.TP X.B m XThis modifier is currently applicable to **IX systems only. XIt causes the mode bits (file protection code) of each Xfile to be listed as a three-digit octal number. Currently X.I zoo Xpreserves only the lowest nine mode bits. Their meanings Xare as described in the **IX documentation for the X.I chmod(1) Xcommand. X.PP X.TP X.B C XThis modifier causes the stored cyclic redundancy code (CRC) Xfor each archived file to be shown as a four-digit hexadecimal Xnumber. X.PP X.TP X.B 1 XThis forces one filename to be listed per line. It is most useful Xin combination with the X.B f Xmodifier. X.TP X.B / XThis forces any directory name to be always listed, even in Xfast columnized listings that do not normally include any Xdirectory names. X.PP X.TP X.BR + , \- XThe X.B \- Xmodifier causes trailing generation numbers to be Xomitted from filenames. XThe X.B + Xmodifier causes the trailing generation numbers to be Xshown, which is also the default if neither X.B \- Xnor X.B + Xis specified. X.PP XFiles may be deleted and undeleted from an archive with the following Xcommands: X.sp 1 X.I zoo X.RB { DU }[ Pq1 ] Xarchive file ... X.PP XThe X.B D Xcommand deletes the specified files and the X.B U Xcommand undeletes the specified files. The X.B 1 Xmodifier (the digit one, not the letter ell) forces deletion or undeletion Xof at most one file. If multiple instances of the same file exist Xin an archive, use of the X.B 1 Xmodifier may allow selective extraction of one of these. X.PP XComments may be added to an archive with the command: X.sp 1 X.I zoo X.BR c [ A ] Xarchive X.PP XWithout the modifier X.BR A , Xthis behaves identically to the X.B \-comment Xcommand. With the modifier X.BR A , Xthe command serves to add or update the comment attached Xto the archive as a whole. This comment may be listed with Xthe X.B lA, LA, v, and V Xcommands. Applying the X.B cA Xcommand to an archive that was created with an older version Xof X.I zoo Xwill result in an error message requesting that the user Xfirst pack the archive with the X.B P Xcommand. This reorganizes the archive and creates space Xfor the archive comment. X.PP XThe timestamp of an archive may be adjusted with the command: X.sp 1 X.I zoo X.BR T [ q ] Xarchive X.PP X.I Zoo Xnormally attempts to maintain the timestamp of an archive to reflect Xthe age of the newest file stored in it. Should the timestamp ever be Xincorrect it can be fixed with the X.B T Xcommand. X.PP XAn archive may be packed with the command: X.sp 1 X.I zoo X.BR P [ EPq ] Xarchive X.PP XIf the backup copy of the archive already exists, X.I zoo Xwill refuse to Xpack the archive unless the X.B P Xmodifier is also given. The X.B E Xmodifier causes X.I zoo Xnot to save a backup copy of the original archive Xafter packing. A unique temporary file in the current directory Xis used to initially hold the packed archive. This file will be Xleft behind if packing is interrupted or if for some reason this Xfile cannot be renamed to the name of the original archive when Xpacking is complete. X.PP XPacking removes any garbage data appended to an archive because of XXmodem file transfer and also recovers any wasted space Xremaining in an archive that has been frequently updated Xor in which comments were replaced. Packing also updates Xthe format of any archive that was created by an older Xversion of X.I zoo Xso that newer features (e.g. archive-wide generation limit, Xarchive comment) become fully available. X.PP X.I Zoo Xcan act as a pure compression or uncompression filter, Xreading from standard input and writing to standard output. XThis is achieved with the command: X.sp 1 X.I zoo X.BR f { cu } X.PP Xwhere X.B c Xspecifies compression and X.B u Xspecifies uncompression. A CRC value is used to check the Xintegrity of the data. The compressed data stream has Xno internal archive structure and contains multiple Xfiles only if the input data stream was already structured, Xas might be obtained, for example, from X.I tar Xor X.I cpio. X.PP X Modem transfers can be speeded up with these commands: X.IP "" 10 X.I zoo X.B fc X< file | X.I sz ... X.I rz | X.I zoo X.B fu X> file X.IP "" 5 X.PP X.sh "General modifiers" X.PP XThe following modifiers are applicable to several commands: X.PP X.TP X.B c XApplied to the X.B a Xand X.B u Xcommands, this causes the user to be prompted Xfor a comment for each file added to the archive. If the file Xbeing added has replaced, or is a newer generation of, Xa file already in the archive, any comment Xattached to that file is shown to the user and becomes Xattached to the newly-added file unless the user changes it. XPossible user responses are as described for the X.B \-comment Xcommand. Applied to the archive list command X.BR l , Xthe X.B c Xmodifier causes the listing of any comments attached to archived files. X.PP X.TP X.BR \ . XIn conjunction with X.B / Xor X.B // Xthis modifier causes any extracted pathname beginning with `/' to be Xinterpreted relative to the current directory, resulting in Xthe possible creation of a subtree rooted at the current directory. XIn conjunction with the command X.B P Xthe X.B . Xmodifier causes the packed archive to be created in the current Xdirectory. This is intended to allow users with limited disk Xspace but multiple disk drives to pack large archives. X.PP X.TP X.B d XMost commands that act on an archive act only on files that are Xnot deleted. The X.B d Xmodifier makes commands act on both normal and deleted files. If Xdoubled as X.BR dd , Xthis modifier forces selection only of deleted files. X.PP X.TP X.B f XApplied to the X.B a Xand X.B u Xcommands, the X.B f Xmodifier causes fast archiving by adding files without compression. XApplied to X.B l Xit causes a fast listing of files in a multicolumn format. X.PP X.TP X.B q XBe quiet. Normally X.I zoo Xlists the name of each file and what action it is performing. The X.B q Xmodifier suppresses this. When files are being extracted to standard Xoutput, the X.B q Xmodifier suppresses the header preceding each file. When archive Xcontents are being listed, this modifier suppresses any header Xand trailer. When a fast columnized listing is being obtained, Xthis modifier causes all output to be combined into a single set Xof filenames for all archives being listed. X.sp 1 XWhen doubled as X.BR qq , Xthis modifier suppresses WARNING messages, and when tripled as X.BR qqq , XERROR messages are suppressed too. FATAL error messages Xare never suppressed. X.PP X.sh "Recovering data from damaged archives" XThe X.B @ Xmodifier allows the user to specify the exact position in Xan archive where X.I zoo Xshould extract a file from, allowing damaged portions Xof an archive to be skipped. XThis modifier must be immediately followed by a decimal Xinteger without intervening spaces, and possibly by Xa comma and another decimal integer, giving a command of Xthe form X.B l@m Xor X.B l@m,n X(to list archive contents) Xor X.B x@m Xor X.B x@m,n X(to extract files from an archive). Listing or extraction Xbegin at position X.B m Xin the archive. XThe value of X.B m Xmust be the position within the archive of an Xundamaged directory entry. This position is usually obtained from X.I fiz(1) Xversion 2.0 or later. X.sp 1 XIf damage to the archive has shortened or lengthened it, all Xpositions within the archive may be changed by some constant amount. XTo compensate for this, the value of X.B n Xmay be specified. This value is also usually obtained from X.I fiz(1). XIt should be the position in the archive of the file data Xcorresponding to the directory entry that has been specified Xwith X.BR m . XThus if the command X.B x@456,575 Xis given, it will cause the first 456 bytes of the archive to Xbe skipped and extraction to begin at offset 456; in addition, X.I zoo Xwill attempt to extract the file data from position 575 in the archive Xinstead of the value that is found in the directory entry Xread from the archive. XFor example, here is some of the output of X.I fiz Xwhen it acts on a damaged X.I zoo Xarchive: X.sp 1 X.nf X**************** X 2526: DIR [changes] ==> 95 X 2587: DATA X**************** X 3909: DIR [copyrite] ==> 1478 X 3970: DATA X 4769: DATA X**************** X.fi X.sp 1 XIn such output, X.B DIR Xindicates where X.I fiz Xfound a directory entry in the archive, and X.B DATA Xindicates where X.I fiz Xfound file data in the archive. Filenames located by X.I fiz Xare enclosed in square brackets, and the notation X"==> 95" indicates that the directory entry found by X.I fiz Xat position 2526 has a file data pointer to Xposition 95. (This is clearly wrong, Xsince file data always occur in an archive X.I after Xtheir directory entry.) In actuality, X.I fiz Xfound file data at positions 2587, 3970, and X4769. Since X.I fiz Xfound only two directory entries, and each directory entry Xcorresponds to one Xfile, one of the file data positions is an artifact. X.PP X.sp 1 XIn this case, commands to try giving to X.I zoo Xmight be X.B x@2526,2587 X(extract beginning at position 2526, and get file data Xfrom position 2587), X.B x@3090,3970 X(extract at 3090, get data from 3970) Xand X.B x@3909,4769 X(extract at 3909, get data from 4769). Once a correctly-matched Xdirectory entry/file data pair is found, X.I zoo Xwill in most cases synchronize with and correctly extract all files Xsubsequently found in the archive. Trial and error should allow Xall undamaged files to be extracted. XAlso note that self-extracting archives created using X.I sez X(the Self-Extracting X.I Zoo Xutility for MS-DOS), which are normally executed on an MS-DOS Xsystem for extraction, can Xbe extracted on non-MSDOS systems using X.I "zoo's" Xdamaged-archive recovery method using the X.B @ Xmodifier. X.PP X.sh "Wildcard handling" XUnder the **IX family of operating systems, Xthe shell normally expands wildcards to a list of matching files. Wildcards Xthat are meant to match files within an archive must therefore Xbe escaped or quoted. When selecting files to be added to an archive, Xwildcard conventions are as defined for the shell. When selecting Xfiles from within an archive, wildcard handling is done by X.I zoo Xas described below. X.PP XUnder MS-DOS and AmigaDOS, quoting of wildcards is not needed. XAll wildcard expansion of filenames is done by X.I zoo, Xand wildcards inside directory names are expanded only Xwhen listing or extracting files but not when adding them. X.PP XThe wildcard syntax interpreted by X.I zoo Xis limited to the following characters. X.PP X.TP X.B * XMatches any sequence of zero or more characters. X.PP X.TP X.B \? XMatches any single character. X.sp 1 XArbitrary combinations of X.B * Xand X.B ? Xare allowed. X.PP X.TP X.B / XIf a supplied pattern contains a slash anywhere in it, then the Xslash separating any directory prefix from the filename must be Xmatched explicitly. If a supplied pattern contains Xno slashes, the match is selective only on the filename. X.PP X.TP X.B c\-c XTwo characters separated by a hyphen specify a character range. All Xfilenames beginning with those characters will match. The character Xrange is meaningful only by itself or preceded by a directory name. XIt is not specially interpreted if it is part of a filename. X.PP X.TP X.B ": and ;" XThese characters are used to separate a filename from a generation Xnumber and are used when selecting specific generations Xof archived files. If no generation character is used, the Xfilename specified matches only the latest generation of the Xfile. If the generation character is specified, Xthe filename and the generation are matched independently by X.I "zoo's" Xwildcard mechanism. If no generation is Xspecified following the X.B ":" Xor X.B ";" Xcharacter, all generations of that file will match. As Xa special case, a generation number of X.B 0 Xmatches only the latest generation of a file, while X.B ^0 Xmatches all generations of a file except the Xlatest one. If no Xfilename is specified preceding the generation character, Xall filenames will match. As a corollary, the generation Xcharacter by itself matches all generations of all files. X.PP XMS-DOS users should note that X.I zoo Xdoes not treat the dot as Xa special character, and it does not ignore characters following Xan asterisk. Thus X.B * Xmatches all filenames; X.B *.* Xmatches Xfilenames containing a dot; X.B *_* Xmatches filenames Xcontaining an underscore; and X.B *z Xmatches all filenames Xthat end with the character X.BR z , Xwhether or not they contain Xa dot. X.PP X.sh "Usage hints" XThe Novice command set in X.I zoo Xis meant to provide an interface with functionality and Xformat that will be familiar to users of other similar Xarchive utilities. In keeping with this objective, Xthe Novice commands do not maintain or use any subdirectory Xinformation or allow the use of X.I "zoo's" Xability to maintain multiple generations of files. XFor this reason, users should switch to exclusively Xusing the Expert commands as soon as possible. X.PP XAlthough the Expert command set is quite large, it should Xbe noted that in almost every case, all legal modifiers Xfor a command are fully orthogonal. This means that the Xuser can select any combination of modifiers, and when they Xact together, they will have the intuitively obvious effect. XThus the user need only memorize what each modifier does, Xand then can combine them as needed without much further thought. X.PP XFor example, consider the X.B a Xcommand which is used to add files to an archive. By itself, Xit simply adds the specified files. To cause only already-archived Xfiles to be updated if their disk copies have been modified, Xit is only necessary to add the X.B u Xmodifier, making the command X.BR au . XTo cause only new files (i.e., files not already in Xthe archive) to be added, the X.B n Xmodifier is used to create the command X.BR an . XTo cause X.I both Xalready-archived files to be updated and new files Xto be added, the X.B u Xand X.B n Xmodifiers can be used together, giving the command X.BR aun . XSince the order of modifiers is not significant, the Xcommand could also be X.BR anu . X.PP XFurther, the X.B c Xmodifier can be used to cause X.I zoo Xto prompt the user for a comment to attach to Xeach file added. And the X.B f Xmodifier can cause fast addition (addition without Xcompression). It should be obvious then that the Xcommand X.B auncf Xwill cause X.I zoo Xto update already-archived files, add new files, Xprompt the user for comments, and do the addition Xof files without any compression. Furthermore, Xif the user wishes to move files to the archive, Xi.e., delete the disk copy of each file after it Xis added to the archive, it is only necessary to add Xthe X.B M Xmodifier to the command, so it becomes X.BR auncfM . XAnd if the user also wishes to cause the archive Xto be packed as part of the command, thus recovering Xspace from any files that are replaced, the command Xcan be modified to X.B auncfMP Xby adding the X.B P Xmodifier that causes packing. X.PP XSimilarly, the archive listing commands can be built up Xby combining modifiers. The basic command to list the Xcontents of an archive is X.BR l . XIf the user wants a fast columnized listing, the X.B f Xmodifier can be added to give the X.B lf Xcommand. Since this listing will have a header giving Xthe archive name and a trailer summarizing interesting Xinformation about the archive, such as the number Xof deleted files, the user may wish to "quieten" the Xlisting by suppressing these; the relevant modifier Xis X.BR q , Xwhich when added to the command gives X.BR lfq . XIf the user wishes to see the **IX mode (file protection) Xbits, and also information about multiple generations, Xthe modifiers X.B m X(show mode bits) and X.B g X(show generation information) can be added, giving the Xcommand X.BR lfqmg . XIf the user also wishes to see an attached archive Xcomment, the modifier X.B A X(for archive) will serve. Thus the command X.B lfqmgA Xwill give a fast columnized listing of the archive, Xsuppressing any header and trailer, showing mode bits Xand generation information, and showing any comment Xattached to the archive as a whole. If in addition Xindividual comments attached to files are also needed, Xsimply append the X.B c Xmodifier to the command, making it X.BR lfqmgAc . XThe above command will not show any deleted files, Xhowever; to see them, use the X.B d Xmodifier, making the command X.B lfqmgAcd X(or double it as in X.B lfqmgAcdd Xif X.I only Xthe deleted files are to be listed). And if the user Xalso wishes to see the CRC value for each file being listed, Xthe modifier X.B C Xwill do this, as in the command X.BR lfqmgAcdC , Xwhich gives a fast columnized listing of all files, including Xdeleted files, showing any archive comment and file comments, Xand file protection codes and generation information, as Xwell as the CRC value of each file. X.PP XNote that the above command X.B lfqmgAcdC Xcould also be abbreviated to X.B VfqmgdC Xbecause the command X.B V Xis shorthand for X.B lcA X(archive listing with all comments shown). XSimilarly the command X.B v Xis shorthand for X.BR lA X(archive listing with archive comment shown). Both X.B V Xand X.B v Xcan be used as modifiers to any of the other archive Xlisting commands. X.PP X.sh "Generations" XBy default, X.I zoo Xassumes that only the latest generation of a specified file Xis needed. If generations other than the latest one Xneed to be selected, this may be done by specifying them Xin the filename. For example, the name X.B stdio.h Xwould normally refer to the latest generation of Xthe file X.I stdio.h Xstored in a X.I zoo Xarchive. To get an archive listing showing all Xgenerations of X.I stdio.h Xin the archive, the specification X.B stdio.h:* Xcould be used (enclosed in single quotes if necessary Xto protect the wildcard character X.B * Xfrom the shell). Also, X.B stdio.h:0 Xselects only the latest generation of X.I stdio.h, Xwhile X.B stdio.h:^0 Xselects all generations except the latest one. The X.B : Xcharacter here separates the filename from the generation Xnumber, and the character X.B * Xis a wildcard that matches all possible generations. XFor convenience, the generation itself may be left Xout, so that the name X.B stdio.h: X(with the X.B : Xbut without a generation number or a wildcard) matches Xall generations exactly as X.B stdio.h:* Xdoes. X.PP XIf a generation is specified but no filename is present, Xas in X.BR :5 , X.BR :* , Xor just X.BR : , Xall filenames of the specified generation will be selected. XThus X.B :5 Xselects generation 5 of each file, and X.B :* Xand X.B : Xselect all generations of all files. X.PP XIt is important to note that X.I "zoo's" Xidea of the latest generation of a file is not based Xupon searching the entire archive. Instead, whenever X.I zoo Xadds a file to an archive, it is marked Xas being the latest generation. Thus, if Xthe latest generation of a file is deleted, then X.I no Xgeneration of that file is considered the latest any Xmore. This can be surprising to the user. For Xexample, if an archive already contains the file X.I stdio.h:5 Xand a new copy is added, appearing in the archive Xlisting as X.I stdio.h:6, Xand then X.I stdio.h:6 Xis deleted, the remaining copy X.I stdio.h:5 Xwill no longer be considered to be the latest generation, Xand the file X.I stdio.h:5, Xeven if undeleted, will no longer appear in an archive listing Xunless generation 5 (or every generation) is specifically requested. XThis behavior will likely be improved in future releases of X.I zoo. X.SH FILES XxXXXXXX \- temporary file used during packing X.sp 0 X.RB archive_name. bak X\- backup of archive X.SH "SEE ALSO" Xcompress(1), fiz(1) X.SH BUGS XWhen files are being added to an archive on a non-MS-DOS system, it Xis possible for X.I zoo Xto fail to detect a full disk and hence create an invalid archive. XThis bug will be fixed in a future release. X.PP XFiles with generation counts that wrap around from 65535 to 1 Xare not currently handled correctly. If a file's generation Xcount reaches a value close to 65535, it should be manually Xset back down to a low number. This may be easily done Xwith a command such as X.BR gc\-65000 , Xwhich subtracts 65000 from the generation count of each Xspecified file. This problem will be fixed in a Xfuture release. X.PP XAlthough X.I zoo Xon **IX systems preserves the lowest nine mode bits of Xregular files, it does not currently do the same for directories. X.PP XCurrently X.I "zoo's" Xhandling of the characters X.B : Xand X.B ; Xin filenames is not robust, because it interprets these Xto separate a filename from a generation number. A Xquoting mechanism will eventually be implemented. X.PP XStandard input cannot be archived nor can a created archive be sent Xto standard output. Spurious error messages may appear if the Xfilename of an archive is too long. X.PP XSince X.I zoo Xnever archives any file with the same name as the archive or its Xbackup (regardless of any path prefixes), care should be taken Xto make sure that a file to be archived does not coincidentally have Xthe same name as the archive it is being added to. XIt usually suffices Xto make sure that no file being archived is itself a X.I zoo Xarchive. (Previous versions of X.I zoo Xsometimes tried to add an Xarchive to itself. This bug now seems to be fixed.) X.PP XOnly regular files are archived; devices and empty directories are not. XSupport for archiving empty directories and for preserving directory Xattributes is planned for the near future. X.PP XEarly versions of MS-DOS have a bug that prevents "." from referring Xto the root directory; this leads to anomalous results if the Xextraction of paths beginning with a dot is attempted. X.PP XVAX/VMS destroys case information unless arguments are enclosed Xin double quotes. For this reason if a command given to X.I zoo Xon a VAX/VMS system includes any uppercase characters, it must be Xenclosed in double quotes. Under VAX/VMS, X.I zoo Xdoes not currently restore file timestamps; this will be fixed Xas soon as I figure out RMS extended attribute blocks, or DEC supplies Xa utime() function, whichever occurs first. Other VMS bugs, related to Xfile structures, can often be overcome by using the program X.I bilf.c Xthat is supplied with X.I zoo. X.PP XIt is not currently possible to create a X.I zoo Xarchive containing all X.I zoo Xarchives that do not contain themselves. X.SH DIAGNOSTICS XError messages are intended to be self-explanatory and are divided into Xthree categories. WARNINGS are intended to inform the user of an Xunusual situation, such as a CRC error during extraction, or X.BR \-freshen ing Xof an archive containing a file newer than one specified on Xthe command line. ERRORS are fatal to one file, but execution Xcontinues with the next file if any. FATAL errors cause execution to Xbe aborted. The occurrence of any of these causes an exit status of X1. Normal termination without any errors gives an exit status of 0. X(Under VAX/VMS, however, to avoid an annoying message, X.I zoo Xalways exits with an error code of 1.) X.SH COMPATIBILITY XAll versions of X.I zoo Xon all systems are required to create archives that can Xbe extracted and listed with all versions of X.I zoo Xon all systems, regardless of filename and Xdirectory syntax or archive structure; furthermore, Xany version of X.I zoo Xmust be able to fully manipulate all archives Xcreated by all lower-numbered versions of X.I zoo Xon all systems. So far as I can tell, this Xupward compatiblity (all manipulations) and downward Xcompatiblity (ability to extract and list) Xis maintained by X.I zoo Xversion 2.0. XYou are forbidden, with the force of Xcopyright law, to create from the X.I zoo Xsource code any derivative work Xthat violates this compatibility goal, Xwhether knowingly or through negligence. XIf any violation of this Xcompatibility goal is observed\(emi.e., Xif you are able to use an implementation of X.I zoo Xto create an archive Xthat some implementation of X.I zoo Xon any system cannot extract\(emthis should be Xconsidered a serious problem and reported to me. X.SH CHANGES XHere is a list of changes occurring from version 1.50 to Xversion 2.01. In parentheses is given the version in which each Xchange occurred. X.TP X\- X(1.71) New modifiers to the list commands permit Xoptional suppression of header and trailer information, Xinclusion of directory names in columnized listings, and Xfast one-column listings. X.TP X\- X(1.71) Timezones are handled. X.TP X\- X(1.71) A bug was fixed that had made it impossible to Xindividually update comments for a file whose name did Xnot correspond to MS-DOS format. X.TP X\- X(1.71) A change was made that now permits use of the Xshared library on the **IX PC. X.TP X\- X(1.71) VAX/VMS is now supported reasonably well. X.TP X\- X(2.00) A comment may now be attached to the archive itself. X.TP X\- X(2.00) The \fBOO\fR option allows Xforced overwriting of read-only files. X.TP X\- X(2.00) \fIZoo\fR will no longer extract a file if a Xnewer copy already exists on disk; the X.B S Xoption will override this. X.TP X\- X(2.00) File attributes are preserved for **IX systems. X.TP X\- X(2.00) Multiple generations of the same file are supported. X.TP X\- X(2.00) \fIZoo\fR will now act as a compression or Xdecompression filter on a stream of data and will Xuse a CRC value to check the integrity of a Xdata stream that is uncompressed. X.TP X\- X(2.00) A bug was fixed that caused removal of a directory link Xif files were moved to an archive by the superuser Xon a **IX system. X.TP X\- X(2.00) The data recovery modifier X.B @ Xwas greatly enhanced. Self-extracting archives created for MS-DOS Xsystems can now be extracted by X.I zoo Xon any system with help from X.I fiz(1). X.TP X\- X(2.01) XA bug was fixed that had caused the first generation of a file Xto sometimes unexpectedly show up in archive listings. X.TP X\- X(2.01) A bug was fixed that had caused the MS-DOS version Xto silently skip files that could not be extracted because Xof insufficient disk space. X.TP X\- X(2.01) A bug was fixed that had sometimes made it impossible to Xselectively extract a file by specifying its name, even Xthough all files could be extracted from the archive Xby not specifying any filenames. This occurred when Xa file had been archived on a longer-filename system X(e.g. AmigaDOS) and extraction was attempted on a Xshorter-filename system (e.g. MS-DOS). X.TP X\- X(2.01) A change was made that will make zoo preserve the mode X(file protection) of a zoo archive when it is packed. XThis is effective only if zoo is compiled to preserve Xand restore file attributes. Currently this is so Xonly for **IX systems. X.TP X\- X(2.01) XA bug was fixed that had caused an update of an archive to Xnot always add all newer files. X.TP X\- X(2.01) Blanks around equal signs in commands given to "make" Xwere removed from the mk* scripts for better compatiblity Xwith more **IX implementations including Sun's. X.SH "FUTURE DIRECTIONS" XA revised version of X.I zoo Xis in the works that will be able to write newly-created archives Xto standard output, and will also automatically perform end-of-line Xconversion for text files moved between dissimilar systems. XIt will be upward and downward compatible with existing versions of X.I zoo. X.SH ACKNOWLEDGEMENTS XThe X.I zoo Xarchiver was initially developed using Microsoft C 3.0 Xon a PC clone manufactured Xby Toshiba of Japan and almost sold by Xerox. Availability Xof the following systems was helpful in achieving portability: XPaul Homchick's Compaq running Microport System V/AT; The XEskimo BBS somewhere in Oregon running Xenix/68000; Greg Laskin's Xsystem 'gryphon' which is an Intel 310 running Xenix/286; Ball XState University's AT&T 3B2/300, UNIX PC, and VAX-11/785 (4.3BSD) Xsystems. In addition J. Brian Waters provided feedback to Xhelp me make the code compilable on his Amiga using XManx/Aztec C. More recently, actual development, as Xopposed to portability testing, has been done exclusively Xon my own AT from PC's Limited running Microport System V/AT. XThe executable version 2.0 for MS-DOS is currently Xcompiled with Borland's Turbo C 1.0. X.PP XSpecial thanks are due to: X.PP XJ. Brian Waters <uunet!bsu-cs!jbwaters>, who has worked Xdiligently to port X.I zoo Xto AmigaDOS, created Amiga-specific code, Xand continues keeping it updated. X.PP XPaul Homchick <rutgers!cgh!paul>, who provided numerous detailed Xreports about some nasty bugs. X.PP XBill Davidsen <steinmetz!crdos1!davidsen>, who fixed X.I "zoo's" Xhandling of daylight savings time, provided changes to make this Xmanual format correctly with X.I troff, Xand provided many useful bug reports and suggestions. X.PP XMark Alexander <amdahl!drivax!alexande>, who provided me with some bug Xfixes, and also some portability modifications and Xspeed optimizations Xthat are due to be incorporated into the next release. X.SH AUTHOR XRahul Dhesi END_OF_FILE if test 45120 -ne `wc -c <'zoo.1'`; then echo shar: \"'zoo.1'\" unpacked with wrong size! fi # end of 'zoo.1' fi echo shar: End of archive 10 \(of 10\). cp /dev/null ark10isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 10 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.