home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3616 < prev    next >
Text File  |  1991-07-10  |  48KB  |  1,702 lines

  1. Newsgroups: alt.sources
  2. Subject: zoo 2.1 source part 10/15
  3. Message-ID: <12777@bsu-cs.bsu.edu>
  4. From: dhesi@bsu-cs.bsu.edu (Rahul Dhesi)
  5. Date: 10 Jul 91 10:49:54 GMT
  6.  
  7. Checksum: 3027509618 (verify with "brik -cv")
  8. Submitted-by: dhesi@bsu-cs.bsu.edu
  9. Archive-name: zoo210/part10
  10.  
  11. ---- Cut Here and feed the following to sh ----
  12. #!/bin/sh
  13. # This is part 10 of zoo210
  14. # ============= zoo.1 ==============
  15. if test -f 'zoo.1' -a X"$1" != X"-c"; then
  16.     echo 'x - skipping zoo.1 (File already exists)'
  17. else
  18. echo 'x - extracting zoo.1 (Text)'
  19. sed 's/^X//' << 'SHAR_EOF' > 'zoo.1' &&
  20. .\" derived from: @(#) zoo.1 2.44 88/08/25 16:05:30 */
  21. .\" $Source: /usr/home/dhesi/zoo/RCS/zoo.1,v $
  22. .\" $Id: zoo.1,v 1.4 91/07/09 02:25:41 dhesi Exp $
  23. .\"
  24. .\" For formatting with nroff:
  25. .\"   tbl zoo.1 | nroff -man | col
  26. .\" It should be possible to use troff instead of nroff but I haven't
  27. .\" confirmed this.  R.D.
  28. .\"
  29. .na
  30. .TH ZOO 1 "July 7, 1991"
  31. .AT 3
  32. .de sh
  33. .br
  34. .ne 5
  35. .PP
  36. \fB\\$1\fR
  37. .PP
  38. ..
  39. .SH NAME
  40. zoo \- manipulate archives of files in compressed form
  41. .SH SYNOPSIS
  42. .B zoo 
  43. .RB { acfDeghHlLPTuUvVx }[ aAcCdEfghImMnNoOpPqSu1:/.@n+\-= ]
  44. archive [file] ...
  45. .sp 0
  46. .B zoo \-command 
  47. archive [file] ...
  48. .sp 0
  49. .B zoo h
  50. .SH DESCRIPTION
  51. .I Zoo
  52. is used to create and maintain collections of files in compressed form.
  53. It uses a Lempel-Ziv compression algorithm that gives space savings
  54. in the range of 20% to 80% depending on the type of file data.
  55. .I Zoo
  56. can store and selectively extract
  57. multiple generations of the same file.  Data can be recovered
  58. from damaged archives by skipping the damaged portion
  59. and locating undamaged data with the help of
  60. .I fiz(1).
  61. .PP
  62. This documentation is for version 2.1.  Changes from previous
  63. versions are described in the section labelled
  64. .BR CHANGES .
  65. .PP
  66. The command
  67. .I zoo 
  68. .B h
  69. gives a summary of commands.  Extended multiscreen help can be obtained
  70. with
  71. .I zoo
  72. .BR H .
  73. .PP
  74. .I Zoo 
  75. will not add an archive to itself, nor add the
  76. archive's backup (with 
  77. .B .bak 
  78. extension to the filename) to the archive.
  79. .PP
  80. .I Zoo 
  81. has two types of commands:  Expert commands, which consist of one command 
  82. letter followed by zero or more modifier characters, and Novice commands, 
  83. which consist of a hyphen (`\-') followed by a command word that may
  84. be abbreviated.  Expert commands are case-sensitive but Novice commands
  85. are not.
  86. .PP
  87. When 
  88. .I zoo
  89. adds a file to an existing archive, the default action is to maintain 
  90. one generation of each file in an archive and 
  91. to mark any older generation as deleted.  A limit on the number
  92. of generations to save can be specified by the user for
  93. an entire archive, or for each file individually, or both.
  94. .I
  95. Zoo
  96. deletes a stored copy of an added file if necessary to prevent 
  97. the number of stored generations from exceeding the user-specified limit.
  98. .PP
  99. Deleted files may be later undeleted.
  100. Archives may be packed to recover space occupied by deleted files.
  101. .PP
  102. All commands assume that the archive name ends with the characters
  103. .B .zoo
  104. unless a different extension is supplied.  
  105. .PP
  106. .B Novice commands
  107. .PP
  108. Novice commands may be abbreviated to a hyphen followed by at least
  109. one command character.  Each Novice command works in two stages. 
  110. First, the command does its intended work.  Then, if the result was
  111. that one or more files were deleted in the specified archive, the
  112. archive is packed.  If packing occurs, the original unpacked archive
  113. is always left behind with an extension of
  114. .BR .bak .
  115. .PP
  116. No Novice command ever stores the directory prefix of a file.
  117. .PP
  118. The Novice commands are as follows.
  119. .PP
  120. .TP 8
  121. .B \-add
  122. Adds the specified files to the archive.
  123. .PP
  124. .TP
  125. .B \-freshen
  126. Adds a specified file to the archive if and only if an older file by
  127. the same name already exists in the archive.
  128. .PP
  129. .TP
  130. .B \-delete
  131. Deletes the specified files from the archive.
  132. .PP
  133. .TP
  134. .B \-update
  135. Adds a specified file to the archive either:  if an older file by
  136. the same name already exists in the archive or:  if a file by the
  137. same name does not already exist in the archive.
  138. .PP
  139. .TP
  140. .B \-extract
  141. Extracts the specified files from the archive.  If no file is specified
  142. all files are extracted.
  143. .PP
  144. .TP
  145. .B \-move
  146. Equivalent to 
  147. .B \-add
  148. except that source files are deleted after addition.
  149. .PP
  150. .TP
  151. .B \-print
  152. Equivalent to 
  153. .B \-extract
  154. except that extracted data are sent to standard output.
  155. .PP
  156. .TP
  157. .B \-list
  158. Gives information about the specified archived files including any
  159. attached comments.  If no files are
  160. specified all files are listed.  Deleted files are not listed.
  161. .PP
  162. .TP
  163. .B \-test
  164. Equivalent to
  165. .B \-extract
  166. except that the extracted data are not saved but any errors encountered
  167. are reported.
  168. .PP
  169. .TP
  170. .B \-comment
  171. Allows the user to add or update comments attached to archived files.
  172. When prompted, the user may:  type a carriage return to skip the file,
  173. leaving any
  174. current comment unchanged;  or type a (possibly null) comment of up
  175. to 32,767 characters terminated 
  176. by
  177. .B /end
  178. (case-insensitive) on
  179. a separate line;  or type the end-of-file character (normally control D)
  180. to skip all remaining files. 
  181. .PP
  182. .TP
  183. .B \-delete
  184. Deletes the specified files.
  185. .PP
  186. .ne 16
  187. .nf
  188. The correspondence between Novice and Expert commands is as follows.
  189. .PP
  190. .\" Table formatting for troff thanks to Bill Davidsen <uunet!crdos1!davidsen>
  191. .sp
  192. .TS H
  193. tab(@);
  194. l l l.
  195. Novice@@Equivalent
  196. Command@Description@Expert Command
  197. _
  198. \-add@add files to archive@aP:
  199. \-extract@extract files from archive@x
  200. \-move@move files to archive@aMP:
  201. \-test@test archive integrity@xNd
  202. \-print@extract files to standard output@xp
  203. \-delete@delete files from archive@DP
  204. \-list@list archive contents@VC
  205. \-update@add new or newer files@aunP:
  206. \-freshen@by add newer files@auP:
  207. \-comment@add comments to files@c
  208. .TE
  209. .fi
  210. .PD
  211. .PP
  212. .sh "Expert commands"
  213. The general format of expert commands is:
  214. .PP
  215. .I zoo
  216. .RB { acfDeghHlLPTuUvVx }[ aAcCdEfghImMnNoOpPqSu1:/.@n+\-= ]
  217. archive [file] ...
  218. .PP
  219. The characters enclosed within {} are commands.  Choose any one of
  220. these.  The characters enclosed within [] just to the right of the {}
  221. are modifiers and zero or more of these may immediately follow the
  222. command character.  All combinations of command and modifier characters
  223. may not be valid.
  224. .PP
  225. Files are added to an archive with the command:
  226. .PP
  227. .I zoo 
  228. .RB { au }[ cfhIMnPqu:+\- ]
  229. archive [file] ...
  230. .PP
  231. Command characters are:
  232. .PP
  233. .TP
  234. .B a
  235. Add each specified file to archive.  Any already-archived copy of 
  236. the file is deleted if this is necessary to avoid exceeding the
  237. user-specified limit on the number of generations of the
  238. file to maintain in the archive.
  239. .PP
  240. .TP 
  241. .B u
  242. Do an update of the archive.  A specified file is added to the
  243. archive only if a copy of it is already in the archive and the copy
  244. being added is newer than the copy already in the archive.  
  245. .PP
  246. The following modifiers are specific to these commands.
  247. .PP
  248. .TP 
  249. .B M
  250. Move files to archive.  This makes 
  251. .I zoo 
  252. delete (unlink) the original files after they have been added to the
  253. archive.  Files are deleted after addition of all files to the archive is
  254. complete and after any requested packing of the archive has been done,
  255. and only if 
  256. .I zoo 
  257. detected no errors.
  258. .PP
  259. .TP 
  260. .B n
  261. Add new files only.  A specified file is added only if it isn't
  262. already in the archive.
  263. .PP
  264. .TP
  265. .B h
  266. Use the high performance compression algorithm. This option may be used
  267. with either the add (a) or filter (f) commands to gain extra compression
  268. at the expense of using somewhat more processor time. Extracting files
  269. compressed with the method is usually slightly faster than those saved
  270. with the default method.
  271. .PP
  272. .TP 
  273. .B P
  274. Pack archive after files have been added.  
  275. .PP
  276. .TP
  277. .B u
  278. Applied to the
  279. .B a
  280. command, this modifier makes it behave identically to the
  281. .B u
  282. command.
  283. .sp 1
  284. The combination of the 
  285. .B n
  286. modifier with the
  287. .B u
  288. modifier or 
  289. .B u
  290. command causes addition of a file to the archive either 
  291. if the file is not already in the archive, 
  292. .I or 
  293. if the file is already in the archive but the archived
  294. copy is older than the copy being added.
  295. .PP
  296. .TP
  297. .B :
  298. Do not store directory names.  In the absence of this modifier
  299. .I zoo
  300. stores the full pathname of each archived file.
  301. .PP
  302. .TP
  303. .B I
  304. Read filenames to be archived from standard input.  
  305. .I Zoo 
  306. will read
  307. its standard input and assume that each line of text contains a
  308. filename.  Under AmigaDOS and the **IX family, the entire line is used.
  309. Under MS-DOS and VAX/VMS,
  310. .I zoo
  311. assumes that the filename is terminated by a blank, tab,
  312. or newline; thus it is permissible for the line of text to
  313. contain more than one field separated by white space, and only the
  314. first field will be used.
  315. .sp 1
  316. Under the **IX family of operating systems, 
  317. .I zoo
  318. can be used as follows in a pipeline:
  319. .IP "" 10
  320. find . \-print | 
  321. .I zoo
  322. aI sources
  323. .IP "" 5
  324. .sp 1
  325. If the
  326. .B I
  327. modifier is specified, no filenames may be supplied on the command
  328. line itself.
  329. .PP
  330. .TP
  331. .BR + , \-
  332. These modifiers take effect only if the
  333. .B a
  334. command results in the creation of a new archive.
  335. .B +
  336. causes any newly-created archive to have
  337. generations enabled.
  338. .B \-
  339. is provided for symmetry and causes any newly-created
  340. archive to have generations disabled;  this is also the
  341. default if neither
  342. .B +
  343. nor
  344. .B \-
  345. is specified.
  346. .PP
  347. Files are extracted from an archive with the command:
  348. .sp 1
  349. .I zoo 
  350. .RB { ex }[ dNoOpqS./@ ]
  351. archive [file] ...
  352. .PP
  353. The 
  354. .B e 
  355. and 
  356. .B x 
  357. commands are synonymous.  If no file was specified, all files are
  358. extracted from the archive.
  359. .PP
  360. The following modifiers are specific to the e and x commands:
  361. .PP
  362. .TP 
  363. .B N
  364. Do not save extracted data but report any errors encountered.  
  365. .PP
  366. .TP
  367. .B O
  368. Overwrite files.  Normally, if a file being extracted would 
  369. overwrite an already-existing file of the same name, 
  370. .I zoo 
  371. asks you if
  372. you really want to overwrite it.  You may answer the question with
  373. `y', which means yes, overwrite; or `n', which means no, don't
  374. overwrite; or `a', which means assume the answer is `y' for this
  375. and all subsequent files.  The 
  376. .B O 
  377. modifier makes 
  378. .I zoo
  379. assume that files may always be overwritten.  Neither
  380. answering the question affirmatively nor using
  381. .B O
  382. alone will cause read-only files to be overwritten.
  383. .sp 1
  384. On **IX systems, however, doubling this modifier as
  385. .B OO
  386. will force
  387. .I zoo
  388. to unconditionally overwrite any read-protected files 
  389. with extracted files if it can do so.  
  390. .sp 1
  391. The 
  392. .B O, N, 
  393. and 
  394. .B p 
  395. modifiers are mutually exclusive.
  396. .PP
  397. .TP
  398. .B S
  399. Supersede newer files on disk with older extracted
  400. files.
  401. Unless this modifier is used,
  402. .I zoo
  403. will not overwrite a newer existing file with an
  404. older extracted file.
  405. .PP
  406. .TP
  407. .B o    
  408. This is equivalent to the 
  409. .B O 
  410. modifier if and only if it
  411. is given at least twice.  It is otherwise ignored.
  412. .PP
  413. .TP
  414. .B p    
  415. Pipe extracted data to standard output.  Error messages are piped to 
  416. standard output as well.  However, if a bad CRC is detected, an error
  417. message is sent both to standard error and to standard output.
  418. .PP
  419. .TP
  420. .B /
  421. Extract to original pathname.  Any needed directories must already
  422. exist.  In the absence of this modifier all files are extracted into
  423. the current directory.  If this modifier is doubled as
  424. .BR // ,
  425. required directories need not exist and are created if necessary.
  426. .PP
  427. The management of multiple generations of archived files
  428. is done with the commands:
  429. .sp 1
  430. .B zoo 
  431. \fBgl\fR[\fR\fBAq\fR]{\fR\fB+\-=\fR}\fR\fBnumber
  432. .B archive files ..
  433. .sp 0
  434. .B zoo 
  435. \fBgc\fR[\fR\fBq\fR]{\fR\fB+\-=\fR}\fR\fBnumber
  436. .B archive files ..
  437. .sp 0
  438. .B zoo 
  439. .BR gA [ q ] "\- archive"
  440. .sp 0
  441. .B zoo 
  442. .BR gA [ q ] "+ archive"
  443. .sp 1
  444. The first form,
  445. .BR gl ,
  446. adjusts the generation limit of selected files by the specified
  447. value.  If the form
  448. .B "=n"
  449. is used, where n is a decimal number, this sets the generation
  450. limit to the
  451. specified value.  If
  452. .B +
  453. or
  454. .B \-
  455. are used in placed of 
  456. .B =
  457. the effect is to increment or decrement the generation limit
  458. by the specified value.  For example, the command
  459. .IP "" 5
  460. .B "zoo gl=5 xyz :"
  461. .IP "" 0
  462. sets the generation limit of each file in the archive
  463. .B xyz.zoo
  464. to a value of 5.  The command
  465. .IP "" 5
  466. .B "zoo gl\-3 xyz :"
  467. .IP "" 0
  468. decrements the generation limit of each file in the archive
  469. to 3 less than it currently is.
  470. .sp 1
  471. If the
  472. .B A
  473. modifier is used, the archive-wide generation limit is
  474. adjusted instead.
  475. .sp 1
  476. The number of generations of a file maintained in an archive
  477. is limited by the file generation
  478. limit, or the archive generation limit, whichever is lower.
  479. As a special case, a generation limit of 0 stands for
  480. no limit.  Thus the default file generation limit of
  481. 0 and archive generation limit of 3 limits the number
  482. of generations of each file in a newly-created archive to three.
  483. .sp 1
  484. The generation limit specified should be in the range
  485. 0 through 15;  any higher numbers are interpreted modulo
  486. 16.
  487. .PP
  488. The second form of the command, using
  489. .BR gc ,
  490. adjusts the generation count of selected files.  Each file
  491. has a generation count of 1 when it is first added to
  492. an archive.  Each time a file by the same name is added
  493. again to an archive, it receives a generation count
  494. that is one higher than the highest generation count
  495. of the archived copy of the file.  The permissible 
  496. range of generation counts is 1 through 65535.
  497. If repeated manipulations
  498. of an archive result in files having very high generation
  499. counts, they may be set back to lower numbers with the
  500. .B gc
  501. command.  The syntax of the command is analogous to
  502. the syntax of the 
  503. .B gl
  504. command, except that the 
  505. .B A
  506. modifier is not applicable to the
  507. .B gc
  508. command.
  509. .PP
  510. The third form,
  511. .BR "gA\-" ,
  512. disables generations in an archive.  Generations are
  513. off when an archive is first created, but may be enabled
  514. with the fourth form of the command,
  515. .BR "gA+" .
  516. When generations are disabled in an archive,
  517. .I zoo
  518. will not display generation numbers in archive listings
  519. or maintain multiple generations.  Generations can
  520. be re-enabled at any time, though manipulation
  521. of an archive with repeated interspersed 
  522. .B "gA\-"
  523. and 
  524. .B "gA+"
  525. commands may result in an archive whose
  526. behavior is not easily understandable.
  527. .PP
  528. Archived files are listed with the command:
  529. .sp 1
  530. .I zoo
  531. .RB { lLvV }[ aAcCdfgmqvV@/1+\- ] 
  532. .RB archive[ .zoo ]
  533. [file] ...
  534. .PP
  535. .TP
  536. .B l
  537. Information presented includes the date and time of each file, its
  538. original and current (compressed) sizes, and the percentage
  539. size decrease due to compression (labelled CF or compression factor).
  540. If a file was added to the archive in a different timezone,
  541. the difference between timezones is shown in hours as a signed
  542. number.  As an example, if the difference is listed as +3, this
  543. means that the file was added to the archive in a timezone
  544. that is 3 hours west of the current timezone.  The file time
  545. listed is, however, always the original timestamp of the
  546. archived file, as observed by the user who archived the file,
  547. expressed as that user's local time.  (Timezone information
  548. is stored and displayed only if the underlying operating
  549. system knows about timezones.)
  550. .sp 1
  551. If no filename is supplied all files are listed except deleted files.
  552. .sp 1
  553. .I Zoo
  554. selects which generation(s) of a file to list according to
  555. the following algorithm.
  556. .sp 1
  557. If no filename is supplied, only the latest generation of
  558. each file is listed.  If any filenames are specified,
  559. and a generation is specified for an argument, only
  560. the requested generation is listed.  If a filename
  561. is specified ending with the generation character
  562. (`:' or `;'), all generations of that file
  563. are listed.  Thus a filename argument of the form
  564. .B zoo.c
  565. will cause only the latest generation of
  566. .I zoo.c
  567. to be listed;  an argument of the form
  568. .B "zoo.c:4"
  569. will cause generation 4 of
  570. .I zoo.c 
  571. to be listed;  and an argument of the form
  572. .B "zoo.c:"
  573. or
  574. .B "zoo.c:*"
  575. will cause all generations of
  576. .I zoo.c
  577. to be listed.
  578. .PP
  579. .TP
  580. .B L
  581. This is similar to the
  582. .B l
  583. command except that all supplied arguments must be archives and all
  584. non-deleted generations of all files in each archive appear in
  585. the listing.
  586. .sp 1
  587. On **IX systems, on which the shell expands arguments, if multiple
  588. archives are to be listed, the
  589. .B L
  590. command must be used.  On other systems (VAX/VMS, AmigaDOS,
  591. MSDOS) on which wildcard expansion is done internally by
  592. .I zoo,
  593. wildcards may be used in the archive name, and a multiple
  594. archive listing obtained, using the
  595. .B l
  596. command.
  597. .PP
  598. .TP
  599. .B v
  600. This causes any comment attached to the archive to
  601. be listed in addition to the other information.
  602. .PP
  603. .TP
  604. .B V
  605. This causes any comment attached to the archive and also any
  606. comment attached to each file to be listed.
  607. .sp 1
  608. Both the
  609. .B V
  610. and
  611. .B v
  612. command characters can also be used as modifiers to
  613. the
  614. .B l
  615. and
  616. .B L
  617. commands.
  618. .PP
  619. In addition to the general modifiers described later, the following 
  620. modifiers can be applied to the archive list commands.
  621. .PP
  622. .TP
  623. .B a
  624. This gives a single-line format containing both each filename and the
  625. name of the archive, sorted by archive name.  It is especially useful
  626. with the
  627. .B L
  628. command, since the result can be further sorted on any field to give a
  629. master listing of the entire contents of a set of archives.
  630. .PP
  631. .TP
  632. .B A
  633. This causes any comment attached to the archive to be listed.
  634. .PP
  635. .TP
  636. .B g
  637. This modifier causes file generation information to
  638. be listed about the archive.  For each file listed, the
  639. user-specified generation limit, if any, is listed.  For
  640. example, `3g' for a file means that the user wants no more
  641. than three generations of the file to be kept.  In archives
  642. created by older versions of
  643. .I zoo,
  644. the listing will show `\-g',
  645. meaning that no generation information is kept and multiple
  646. generations of the file are not being maintained.
  647. .sp 1
  648. In addition to the generation information for each file,
  649. the archive-wide generation limit, if any, is shown
  650. at the end of the listing.  If generations have been
  651. disabled by the user, this is so indicated, for example:
  652. .IP "" 10
  653. Archive generation limit is 3 (generations off).
  654. .IP "" 5
  655. For more information about generations see the
  656. description of the
  657. .B g
  658. command.
  659. .PP
  660. .TP
  661. .B m
  662. This modifier is currently applicable to **IX systems only.
  663. It causes the mode bits (file protection code) of each
  664. file to be listed as a three-digit octal number.  Currently 
  665. .I zoo
  666. preserves only the lowest nine mode bits.  Their meanings
  667. are as described in the **IX documentation for the
  668. .I chmod(1)
  669. command.
  670. .PP
  671. .TP
  672. .B C
  673. This modifier causes the stored cyclic redundancy code (CRC) 
  674. for each archived file to be shown as a four-digit hexadecimal 
  675. number.
  676. .PP
  677. .TP
  678. .B 1
  679. This forces one filename to be listed per line.  It is most useful
  680. in combination with the
  681. .B f
  682. modifier.
  683. .TP
  684. .B /
  685. This forces any directory name to be always listed, even in
  686. fast columnized listings that do not normally include any
  687. directory names.
  688. .PP
  689. .TP
  690. .BR + , \-
  691. The
  692. .B \-
  693. modifier causes trailing generation numbers to be
  694. omitted from filenames.
  695. The
  696. .B +
  697. modifier causes the trailing generation numbers to be
  698. shown, which is also the default if neither
  699. .B \-
  700. nor 
  701. .B +
  702. is specified.
  703. .PP
  704. Files may be deleted and undeleted from an archive with the following
  705. commands:
  706. .sp 1
  707. .I zoo
  708. .RB { DU }[ Pq1 ]
  709. archive file ...
  710. .PP
  711. The 
  712. .B D
  713. command deletes the specified files and the 
  714. .B U
  715. command undeletes the specified files.  The
  716. .B 1
  717. modifier (the digit one, not the letter ell) forces deletion or undeletion
  718. of at most one file.  If multiple instances of the same file exist
  719. in an archive, use of the
  720. .B 1
  721. modifier may allow selective extraction of one of these.
  722. .PP
  723. Comments may be added to an archive with the command:
  724. .sp 1
  725. .I zoo
  726. .BR c [ A ]
  727. archive
  728. .PP
  729. Without the modifier
  730. .BR A ,
  731. this behaves identically to the
  732. .B \-comment
  733. command.  With the modifier
  734. .BR A ,
  735. the command serves to add or update the comment attached
  736. to the archive as a whole.  This comment may be listed with
  737. the
  738. .B lA, LA, v, and V
  739. commands.  Applying the
  740. .B cA
  741. command to an archive that was created with an older version
  742. of
  743. .I zoo
  744. will result in an error message requesting that the user
  745. first pack the archive with the
  746. .B P
  747. command.  This reorganizes the archive and creates space
  748. for the archive comment.
  749. .PP
  750. The timestamp of an archive may be adjusted with the command:
  751. .sp 1
  752. .I zoo
  753. .BR T [ q ]
  754. archive
  755. .PP
  756. .I Zoo 
  757. normally attempts to maintain the timestamp of an archive to reflect
  758. the age of the newest file stored in it.  Should the timestamp ever be
  759. incorrect it can be fixed with the
  760. .B T
  761. command.
  762. .PP
  763. An archive may be packed with the command:
  764. .sp 1
  765. .I zoo
  766. .BR P [ EPq ]
  767. archive
  768. .PP
  769. If the backup copy of the archive already exists, 
  770. .I zoo
  771. will refuse to
  772. pack the archive unless the
  773. .B P
  774. modifier is also given.  The
  775. .B E
  776. modifier causes 
  777. .I zoo
  778. not to save a backup copy of the original archive
  779. after packing.  A unique temporary file in the current directory
  780. is used to initially hold the packed archive.  This file will be
  781. left behind if packing is interrupted or if for some reason this
  782. file cannot be renamed to the name of the original archive when
  783. packing is complete.
  784. .PP
  785. Packing removes any garbage data appended to an archive because of
  786. XXmodem file transfer and also recovers any wasted space
  787. remaining in an archive that has been frequently updated
  788. or in which comments were replaced.  Packing also updates
  789. the format of any archive that was created by an older 
  790. version of
  791. .I zoo
  792. so that newer features (e.g. archive-wide generation limit,
  793. archive comment) become fully available.
  794. .PP
  795. .I Zoo
  796. can act as a pure compression or uncompression filter,
  797. reading from standard input and writing to standard output.
  798. This is achieved with the command:
  799. .sp 1
  800. .I zoo
  801. .BR f { cu } [ h ]
  802. .PP
  803. where
  804. .B c
  805. specifies compression,
  806. .B u
  807. specifies uncompression, and
  808. .B h
  809. used in addition requests the high-performance compression be used.
  810. A CRC value is used to check the
  811. integrity of the data.  The compressed data stream has
  812. no internal archive structure and contains multiple
  813. files only if the input data stream was already structured,
  814. as might be obtained, for example, from
  815. .I tar
  816. or
  817. .I cpio.
  818. .PP
  819. X Modem transfers can be speeded up with these commands:
  820. .IP "" 10
  821. .I zoo
  822. .B fc
  823. < file |
  824. .I sz ...
  825. .I rz |
  826. .I zoo
  827. .B fu
  828. > file
  829. .IP "" 5
  830. .PP
  831. .sh "General modifiers"
  832. .PP
  833. The following modifiers are applicable to several commands:
  834. .PP
  835. .TP 
  836. .B c
  837. Applied to the
  838. .B a
  839. and
  840. .B u
  841. commands, this causes the user to be prompted 
  842. for a comment for each file added to the archive.  If the file
  843. being added has replaced, or is a newer generation of,
  844. a file already in the archive, any comment
  845. attached to that file is shown to the user and becomes
  846. attached to the newly-added file unless the user changes it.
  847. Possible user responses are as described for the
  848. .B \-comment
  849. command.  Applied to the archive list command
  850. .BR l ,
  851. the 
  852. .B c
  853. modifier causes the listing of any comments attached to archived files.
  854. .PP
  855. .TP
  856. .BR \ .
  857. In conjunction with
  858. .B /
  859. or
  860. .B //
  861. this modifier causes any extracted pathname beginning with `/' to be
  862. interpreted relative to the current directory, resulting in 
  863. the possible creation of a subtree rooted at the current directory.
  864. In conjunction with the command
  865. .B P
  866. the
  867. .B .
  868. modifier causes the packed archive to be created in the current
  869. directory.  This is intended to allow users with limited disk
  870. space but multiple disk drives to pack large archives.
  871. .PP
  872. .TP 
  873. .B d
  874. Most commands that act on an archive act only on files that are
  875. not deleted.  The
  876. .B d
  877. modifier makes commands act on both normal and deleted files.  If
  878. doubled as
  879. .BR dd ,
  880. this modifier forces selection only of deleted files. 
  881. .PP
  882. .TP
  883. .B f
  884. Applied to the
  885. .B a
  886. and
  887. .B u
  888. commands, the
  889. .B f
  890. modifier causes fast archiving by adding files without compression.
  891. Applied to
  892. .B l
  893. it causes a fast listing of files in a multicolumn format.
  894. .PP
  895. .TP 
  896. .B q
  897. Be quiet.  Normally 
  898. .I zoo
  899. lists the name of each file and what action it is performing.  The
  900. .B q
  901. modifier suppresses this.  When files are being extracted to standard
  902. output, the
  903. .B q
  904. modifier suppresses the header preceding each file.  When archive
  905. contents are being listed, this modifier suppresses any header
  906. and trailer.  When a fast columnized listing is being obtained,
  907. this modifier causes all output to be combined into a single set
  908. of filenames for all archives being listed.
  909. .sp 1
  910. When doubled as
  911. .BR qq ,
  912. this modifier suppresses WARNING messages, and when tripled as
  913. .BR qqq ,
  914. ERROR messages are suppressed too.  FATAL error messages
  915. are never suppressed.
  916. .PP
  917. .sh "Recovering data from damaged archives"
  918. The
  919. .B @
  920. modifier allows the user to specify the exact position in
  921. an archive where
  922. .I zoo
  923. should extract a file from, allowing damaged portions
  924. of an archive to be skipped.
  925. This modifier must be immediately followed by a decimal
  926. integer without intervening spaces, and possibly by
  927. a comma and another decimal integer, giving a command of
  928. the form
  929. .B l@m
  930. or
  931. .B l@m,n
  932. (to list archive contents)
  933. or
  934. .B x@m
  935. or
  936. .B x@m,n
  937. (to extract files from an archive).  Listing or extraction
  938. begin at position 
  939. .B m
  940. in the archive.
  941. The value of
  942. .B m
  943. must be the position within the archive of an
  944. undamaged directory entry.  This position is usually obtained from
  945. .I fiz(1)
  946. version 2.0 or later.
  947. .sp 1
  948. If damage to the archive has shortened or lengthened it, all
  949. positions within the archive may be changed by some constant amount.
  950. To compensate for this, the value of
  951. .B n
  952. may be specified.  This value is also usually obtained from
  953. .I fiz(1).
  954. It should be the position in the archive of the file data
  955. corresponding to the directory entry that has been specified
  956. with 
  957. .BR m .
  958. Thus if the command
  959. .B x@456,575
  960. is given, it will cause the first 456 bytes of the archive to
  961. be skipped and extraction to begin at offset 456;  in addition,
  962. .I zoo
  963. will attempt to extract the file data from position 575 in the archive
  964. instead of the value that is found in the directory entry
  965. read from the archive.
  966. For example, here is some of the output of 
  967. .I fiz
  968. when it acts on a damaged 
  969. .I zoo
  970. archive:
  971. .sp 1
  972. .nf
  973. ****************
  974. X    2526: DIR  [changes] ==>   95
  975. X    2587: DATA
  976. ****************
  977. X    3909: DIR  [copyrite] ==> 1478
  978. X    3970: DATA
  979. X    4769: DATA
  980. ****************
  981. .fi
  982. .sp 1
  983. In such output, 
  984. .B DIR
  985. indicates where 
  986. .I fiz
  987. found a directory entry in the archive, and
  988. .B DATA
  989. indicates where 
  990. .I fiz
  991. found file data in the archive.  Filenames located by
  992. .I fiz
  993. are enclosed in square brackets, and the notation
  994. "==>   95" indicates that the directory entry found by
  995. .I fiz
  996. at position 2526 has a file data pointer to
  997. position 95.  (This is clearly wrong,
  998. since file data always occur in an archive 
  999. .I after
  1000. their directory entry.)  In actuality,
  1001. .I fiz
  1002. found file data at positions 2587, 3970, and
  1003. 4769.  Since 
  1004. .I fiz
  1005. found only two directory entries, and each directory entry
  1006. corresponds to one
  1007. file, one of the file data positions is an artifact.
  1008. .PP
  1009. .sp 1
  1010. In this case, commands to try giving to 
  1011. .I zoo
  1012. might be
  1013. .B x@2526,2587
  1014. (extract beginning at position 2526, and get file data
  1015. from position 2587),
  1016. .B x@3090,3970
  1017. (extract at 3090, get data from 3970)
  1018. and
  1019. .B x@3909,4769
  1020. (extract at 3909, get data from 4769).  Once a correctly-matched
  1021. directory entry/file data pair is found,
  1022. .I zoo
  1023. will in most cases synchronize with and correctly extract all files
  1024. subsequently found in the archive.  Trial and error should allow
  1025. all undamaged files to be extracted.
  1026. Also note that self-extracting archives created using
  1027. .I sez
  1028. (the Self-Extracting
  1029. .I Zoo
  1030. utility for MS-DOS), which are normally executed on an MS-DOS
  1031. system for extraction, can
  1032. be extracted on non-MSDOS systems using 
  1033. .I "zoo's"
  1034. damaged-archive recovery method using the
  1035. .B @
  1036. modifier.
  1037. .PP
  1038. .sh "Wildcard handling"
  1039. Under the **IX family of operating systems, 
  1040. the shell normally expands wildcards to a list of matching files.  Wildcards 
  1041. that are meant to match files within an archive must therefore
  1042. be escaped or quoted.  When selecting files to be added to an archive,
  1043. wildcard conventions are as defined for the shell.  When selecting
  1044. files from within an archive, wildcard handling is done by
  1045. .I zoo
  1046. as described below.
  1047. .PP
  1048. Under MS-DOS and AmigaDOS, quoting of wildcards is not needed.
  1049. All wildcard expansion of filenames is done by
  1050. .I zoo,
  1051. and wildcards inside directory names are expanded only
  1052. when listing or extracting files but not when adding them.
  1053. .PP
  1054. The wildcard syntax interpreted by 
  1055. .I zoo
  1056. is limited to the following characters.
  1057. .PP
  1058. .TP
  1059. .B *
  1060. Matches any sequence of zero or more characters.
  1061. .PP
  1062. .TP
  1063. .B \?
  1064. Matches any single character.
  1065. .sp 1
  1066. Arbitrary combinations of 
  1067. .B *
  1068. and 
  1069. .B ?
  1070. are allowed.
  1071. .PP
  1072. .TP
  1073. .B /
  1074. If a supplied pattern contains a slash anywhere in it, then the
  1075. slash separating any directory prefix from the filename must be
  1076. matched explicitly.  If a supplied pattern contains
  1077. no slashes, the match is selective only on the filename.
  1078. .PP
  1079. .TP
  1080. .B c\-c
  1081. Two characters separated by a hyphen specify a character range.  All
  1082. filenames beginning with those characters will match.  The character
  1083. range is meaningful only by itself or preceded by a directory name.
  1084. It is not specially interpreted if it is part of a filename.
  1085. .PP
  1086. .TP
  1087. .B ": and ;"
  1088. These characters are used to separate a filename from a generation
  1089. number and are used when selecting specific generations
  1090. of archived files.  If no generation character is used, the
  1091. filename specified matches only the latest generation of the
  1092. file.  If the generation character is specified,
  1093. the filename and the generation are matched independently by
  1094. .I "zoo's"
  1095. wildcard mechanism.  If no generation is
  1096. specified following the
  1097. .B ":"
  1098. or
  1099. .B ";"
  1100. character, all generations of that file will match.  As
  1101. a special case, a generation number of
  1102. .B 0
  1103. matches only the latest generation of a file, while
  1104. .B ^0
  1105. matches all generations of a file except the
  1106. latest one.  If no
  1107. filename is specified preceding the generation character,
  1108. all filenames will match.  As a corollary, the generation
  1109. character by itself matches all generations of all files.
  1110. .PP
  1111. MS-DOS users should note that 
  1112. .I zoo 
  1113. does not treat the dot as
  1114. a special character, and it does not ignore characters following
  1115. an asterisk.  Thus 
  1116. .B * 
  1117. matches all filenames;
  1118. .B *.* 
  1119. matches
  1120. filenames containing a dot;
  1121. .B *_* 
  1122. matches filenames
  1123. containing an underscore;  and 
  1124. .B *z 
  1125. matches all filenames
  1126. that end with the character 
  1127. .BR z ,
  1128. whether or not they contain
  1129. a dot.
  1130. .PP
  1131. .sh "Usage hints"
  1132. The Novice command set in
  1133. .I zoo
  1134. is meant to provide an interface with functionality and
  1135. format that will be familiar to users of other similar
  1136. archive utilities.  In keeping with this objective,
  1137. the Novice commands do not maintain or use any subdirectory
  1138. information or allow the use of
  1139. .I "zoo's"
  1140. ability to maintain multiple generations of files.
  1141. For this reason, users should switch to exclusively
  1142. using the Expert commands as soon as possible.
  1143. .PP
  1144. Although the Expert command set is quite large, it should
  1145. be noted that in almost every case, all legal modifiers
  1146. for a command are fully orthogonal.  This means that the
  1147. user can select any combination of modifiers, and when they
  1148. act together, they will have the intuitively obvious effect.
  1149. Thus the user need only memorize what each modifier does,
  1150. and then can combine them as needed without much further thought.
  1151. .PP
  1152. For example, consider the 
  1153. .B a
  1154. command which is used to add files to an archive.  By itself,
  1155. it simply adds the specified files.  To cause only already-archived
  1156. files to be updated if their disk copies have been modified,
  1157. it is only necessary to add the
  1158. .B u
  1159. modifier, making the command
  1160. .BR au .
  1161. To cause only new files (i.e., files not already in
  1162. the archive) to be added, the
  1163. .B n
  1164. modifier is used to create the command
  1165. .BR an .
  1166. To cause 
  1167. .I both
  1168. already-archived files to be updated and new files
  1169. to be added, the
  1170. .B u
  1171. and
  1172. .B n
  1173. modifiers can be used together, giving the command
  1174. .BR aun .
  1175. Since the order of modifiers is not significant, the
  1176. command could also be
  1177. .BR anu .
  1178. .PP
  1179. Further, the
  1180. .B c
  1181. modifier can be used to cause
  1182. .I zoo
  1183. to prompt the user for a comment to attach to
  1184. each file added.  And the
  1185. .B f
  1186. modifier can cause fast addition (addition without
  1187. compression).  It should be obvious then that the
  1188. command
  1189. .B auncf
  1190. will cause
  1191. .I zoo
  1192. to update already-archived files, add new files,
  1193. prompt the user for comments, and do the addition
  1194. of files without any compression.  Furthermore,
  1195. if the user wishes to move files to the archive,
  1196. i.e., delete the disk copy of each file after it
  1197. is added to the archive, it is only necessary to add
  1198. the
  1199. .B M
  1200. modifier to the command, so it becomes
  1201. .BR auncfM .
  1202. And if the user also wishes to cause the archive
  1203. to be packed as part of the command, thus recovering
  1204. space from any files that are replaced, the command
  1205. can be modified to
  1206. .B auncfMP
  1207. by adding the
  1208. .B P
  1209. modifier that causes packing.
  1210. .PP
  1211. Similarly, the archive listing commands can be built up
  1212. by combining modifiers.  The basic command to list the
  1213. contents of an archive is
  1214. .BR l .
  1215. If the user wants a fast columnized listing, the
  1216. .B f 
  1217. modifier can be added to give the
  1218. .B lf
  1219. command.  Since this listing will have a header giving
  1220. the archive name and a trailer summarizing interesting
  1221. information about the archive, such as the number
  1222. of deleted files, the user may wish to "quieten" the
  1223. listing by suppressing these;  the relevant modifier
  1224. is
  1225. .BR q ,
  1226. which when added to the command gives
  1227. .BR lfq .
  1228. If the user wishes to see the **IX mode (file protection)
  1229. bits, and also information about multiple generations,
  1230. the modifiers
  1231. .B m
  1232. (show mode bits) and
  1233. .B g
  1234. (show generation information) can be added, giving the
  1235. command
  1236. .BR lfqmg .
  1237. If the user also wishes to see an attached archive
  1238. comment, the modifier
  1239. .B A
  1240. (for archive) will serve.  Thus the command
  1241. .B lfqmgA
  1242. will give a fast columnized listing of the archive,
  1243. suppressing any header and trailer, showing mode bits
  1244. and generation information, and showing any comment
  1245. attached to the archive as a whole.  If in addition
  1246. individual comments attached to files are also needed,
  1247. simply append the
  1248. .B c
  1249. modifier to the command, making it
  1250. .BR lfqmgAc .
  1251. The above command will not show any deleted files, 
  1252. however;  to see them, use the
  1253. .B d
  1254. modifier, making the command
  1255. .B lfqmgAcd
  1256. (or double it as in
  1257. .B lfqmgAcdd
  1258. if 
  1259. .I only 
  1260. the deleted files are to be listed).  And if the user
  1261. also wishes to see the CRC value for each file being listed,
  1262. the modifier
  1263. .B C
  1264. will do this, as in the command
  1265. .BR lfqmgAcdC ,
  1266. which gives a fast columnized listing of all files, including
  1267. deleted files, showing any archive comment and file comments,
  1268. and file protection codes and generation information, as
  1269. well as the CRC value of each file.
  1270. .PP
  1271. Note that the above command
  1272. .B lfqmgAcdC
  1273. could also be abbreviated to
  1274. .B VfqmgdC
  1275. because the command
  1276. .B V
  1277. is shorthand for
  1278. .B lcA 
  1279. (archive listing with all comments shown).
  1280. Similarly the command
  1281. .B v
  1282. is shorthand for
  1283. .BR lA
  1284. (archive listing with archive comment shown).  Both
  1285. .B V
  1286. and 
  1287. .B v
  1288. can be used as modifiers to any of the other archive
  1289. listing commands.
  1290. .PP
  1291. .sh "Generations"
  1292. By default,
  1293. .I zoo
  1294. assumes that only the latest generation of a specified file
  1295. is needed.  If generations other than the latest one
  1296. need to be selected, this may be done by specifying them
  1297. in the filename.  For example, the name
  1298. .B stdio.h
  1299. would normally refer to the latest generation of
  1300. the file
  1301. .I stdio.h
  1302. stored in a 
  1303. .I zoo
  1304. archive.  To get an archive listing showing all
  1305. generations of
  1306. .I stdio.h 
  1307. in the archive, the specification
  1308. .B stdio.h:*
  1309. could be used (enclosed in single quotes if necessary
  1310. to protect the wildcard character
  1311. .B *
  1312. from the shell).  Also,
  1313. .B stdio.h:0
  1314. selects only the latest generation of
  1315. .I stdio.h,
  1316. while
  1317. .B stdio.h:^0
  1318. selects all generations except the latest one.  The 
  1319. .B :
  1320. character here separates the filename from the generation
  1321. number, and the character
  1322. .B *
  1323. is a wildcard that matches all possible generations.
  1324. For convenience, the generation itself may be left
  1325. out, so that the name
  1326. .B stdio.h:
  1327. (with the
  1328. .B :
  1329. but without a generation number or a wildcard) matches
  1330. all generations exactly as
  1331. .B stdio.h:*
  1332. does.
  1333. .PP
  1334. If a generation is specified but no filename is present,
  1335. as in
  1336. .BR :5 ,
  1337. .BR :* ,
  1338. or just
  1339. .BR : ,
  1340. all filenames of the specified generation will be selected.
  1341. Thus
  1342. .B :5
  1343. selects generation 5 of each file, and
  1344. .B :*
  1345. and
  1346. .B :
  1347. select all generations of all files.
  1348. .PP
  1349. It is important to note that
  1350. .I "zoo's"
  1351. idea of the latest generation of a file is not based
  1352. upon searching the entire archive.  Instead, whenever
  1353. .I zoo
  1354. adds a file to an archive, it is marked
  1355. as being the latest generation.  Thus, if
  1356. the latest generation of a file is deleted, then
  1357. .I no
  1358. generation of that file is considered the latest any
  1359. more.  This can be surprising to the user.  For
  1360. example, if an archive already contains the file
  1361. .I stdio.h:5
  1362. and a new copy is added, appearing in the archive
  1363. listing as
  1364. .I stdio.h:6,
  1365. and then
  1366. .I stdio.h:6
  1367. is deleted, the remaining copy
  1368. .I stdio.h:5
  1369. will no longer be considered to be the latest generation,
  1370. and the file
  1371. .I stdio.h:5,
  1372. even if undeleted, will no longer appear in an archive listing
  1373. unless generation 5 (or every generation) is specifically requested.
  1374. This behavior will likely be improved in future releases of
  1375. .I zoo.
  1376. .SH FILES
  1377. xXXXXXX \- temporary file used during packing
  1378. .sp 0
  1379. .RB archive_name. bak
  1380. \- backup of archive
  1381. .SH "SEE ALSO"
  1382. compress(1), fiz(1)
  1383. .SH BUGS
  1384. When files are being added to an archive on a non-MS-DOS system, it
  1385. is possible for
  1386. .I zoo
  1387. to fail to detect a full disk and hence create an invalid archive.
  1388. This bug will be fixed in a future release.
  1389. .PP
  1390. Files with generation counts that wrap around from 65535 to 1
  1391. are not currently handled correctly.  If a file's generation
  1392. count reaches a value close to 65535, it should be manually
  1393. set back down to a low number.  This may be easily done
  1394. with a command such as
  1395. .BR gc\-65000 ,
  1396. which subtracts 65000 from the generation count of each
  1397. specified file.  This problem will be fixed in a
  1398. future release.
  1399. .PP
  1400. Although
  1401. .I zoo
  1402. on **IX systems preserves the lowest nine mode bits of
  1403. regular files, it does not currently do the same for directories.
  1404. .PP
  1405. Currently
  1406. .I "zoo's"
  1407. handling of the characters
  1408. .B :
  1409. and 
  1410. .B ;
  1411. in filenames is not robust, because it interprets these
  1412. to separate a filename from a generation number.  A
  1413. quoting mechanism will eventually be implemented.
  1414. .PP
  1415. Standard input cannot be archived nor can a created archive be sent
  1416. to standard output.  Spurious error messages may appear if the 
  1417. filename of an archive is too long.
  1418. .PP
  1419. Since
  1420. .I zoo
  1421. never archives any file with the same name as the archive or its
  1422. backup (regardless of any path prefixes), care should be taken 
  1423. to make sure that a file to be archived does not coincidentally have 
  1424. the same name as the archive it is being added to.
  1425. It usually suffices 
  1426. to make sure that no file being archived is itself a 
  1427. .I zoo
  1428. archive.  (Previous versions of
  1429. .I zoo
  1430. sometimes tried to add an
  1431. archive to itself. This bug now seems to be fixed.)
  1432. .PP
  1433. Only regular files are archived; devices and empty directories are not.
  1434. Support for archiving empty directories and for preserving directory
  1435. attributes is planned for the near future.
  1436. .PP
  1437. Early versions of MS-DOS have a bug that prevents "." from referring
  1438. to the root directory;  this leads to anomalous results if the
  1439. extraction of paths beginning with a dot is attempted.
  1440. .PP
  1441. VAX/VMS destroys case information unless arguments are enclosed
  1442. in double quotes.  For this reason if a command given to
  1443. .I zoo
  1444. on a VAX/VMS system includes any uppercase characters, it must be 
  1445. enclosed in double quotes.  Under VAX/VMS,
  1446. .I zoo
  1447. does not currently restore file timestamps;  this will be fixed
  1448. as soon as I figure out RMS extended attribute blocks, or DEC supplies
  1449. a utime() function, whichever occurs first.  Other VMS bugs, related to
  1450. file structures, can often be overcome by using the program 
  1451. .I bilf.c
  1452. that is supplied with
  1453. .I zoo.
  1454. .PP
  1455. It is not currently possible to create a
  1456. .I zoo
  1457. archive containing all
  1458. .I zoo
  1459. archives that do not contain themselves.
  1460. .SH DIAGNOSTICS
  1461. Error messages are intended to be self-explanatory and are divided into
  1462. three categories.  WARNINGS are intended to inform the user of an
  1463. unusual situation, such as a CRC error during extraction, or
  1464. .BR \-freshen ing
  1465. of an archive containing a file newer than one specified on
  1466. the command line.  ERRORS are fatal to one file, but execution
  1467. continues with the next file if any.  FATAL errors cause execution to
  1468. be aborted.  The occurrence of any of these causes an exit status of
  1469. 1.  Normal termination without any errors gives an exit status of 0.
  1470. (Under VAX/VMS, however, to avoid an annoying message,
  1471. .I zoo
  1472. always exits with an error code of 1.)
  1473. .SH COMPATIBILITY
  1474. All versions of
  1475. .I zoo
  1476. on all systems are required to create archives that can
  1477. be extracted and listed with all versions of 
  1478. .I zoo
  1479. on all systems, regardless of filename and
  1480. directory syntax or archive structure;  furthermore,
  1481. any version of 
  1482. .I zoo
  1483. must be able to fully manipulate all archives
  1484. created by all lower-numbered versions of
  1485. .I zoo
  1486. on all systems.  So far as I can tell, this
  1487. upward compatibility (all manipulations) and downward
  1488. compatiblity (ability to extract and list)
  1489. is maintained by
  1490. .I zoo
  1491. versions up to 2.01.  Version 2.1 adds the incompatibility
  1492. that if high-performance compression is used, earlier
  1493. versions cannot extract files compressed with version 2.1.
  1494. This is the only incompatibility that is permissible.
  1495. You are forbidden, with the force of
  1496. copyright law, to create from the
  1497. .I zoo
  1498. source code any derivative work
  1499. that violates this compatibility goal,
  1500. whether knowingly or through negligence.
  1501. If any violation of this
  1502. compatibility goal is observed,
  1503. this should be
  1504. considered a serious problem and reported to me.
  1505. .SH CHANGES
  1506. Here is a list of changes occurring from version 1.50 to
  1507. version 2.01.  In parentheses is given the version in which each
  1508. change occurred.
  1509. .TP
  1510. \-
  1511. (1.71) New modifiers to the list commands permit
  1512. optional suppression of header and trailer information, 
  1513. inclusion of directory names in columnized listings, and 
  1514. fast one-column listings.
  1515. .TP
  1516. \-
  1517. (1.71) Timezones are handled.
  1518. .TP
  1519. \-
  1520. (1.71) A bug was fixed that had made it impossible to
  1521. individually update comments for a file whose name did
  1522. not correspond to MS-DOS format.
  1523. .TP
  1524. \-
  1525. (1.71) A change was made that now permits use of the
  1526. shared library on the **IX PC.
  1527. .TP
  1528. \-
  1529. (1.71) VAX/VMS is now supported reasonably well.
  1530. .TP
  1531. \-
  1532. (2.00) A comment may now be attached to the archive itself.
  1533. .TP
  1534. \-
  1535. (2.00) The \fBOO\fR option allows
  1536. forced overwriting of read-only files.
  1537. .TP
  1538. \-
  1539. (2.00) \fIZoo\fR will no longer extract a file if a 
  1540. newer copy already exists on disk;  the
  1541. .B S
  1542. option will override this.
  1543. .TP
  1544. \-
  1545. (2.00) File attributes are preserved for **IX systems.
  1546. .TP
  1547. \-
  1548. (2.00) Multiple generations of the same file are supported.
  1549. .TP
  1550. \-
  1551. (2.00) \fIZoo\fR will now act as a compression or
  1552. decompression filter on a stream of data and will
  1553. use a CRC value to check the integrity of a
  1554. data stream that is uncompressed.
  1555. .TP
  1556. \-
  1557. (2.00) A bug was fixed that caused removal of a directory link
  1558. if files were moved to an archive by the superuser
  1559. on a **IX system.
  1560. .TP
  1561. \-
  1562. (2.00) The data recovery modifier
  1563. .B @
  1564. was greatly enhanced.  Self-extracting archives created for MS-DOS
  1565. systems can now be extracted by 
  1566. .I zoo
  1567. on any system with help from 
  1568. .I fiz(1).
  1569. .TP
  1570. \-
  1571. (2.01)
  1572. A bug was fixed that had caused the first generation of a file
  1573. to sometimes unexpectedly show up in archive listings.
  1574. .TP
  1575. \-
  1576. (2.01) A bug was fixed that had caused the MS-DOS version
  1577. to silently skip files that could not be extracted because
  1578. of insufficient disk space.
  1579. .TP
  1580. \-
  1581. (2.01) A bug was fixed that had sometimes made it impossible to
  1582. selectively extract a file by specifying its name, even 
  1583. though all files could be extracted from the archive
  1584. by not specifying any filenames.  This occurred when
  1585. a file had been archived on a longer-filename system
  1586. (e.g. AmigaDOS) and extraction was attempted on a
  1587. shorter-filename system (e.g. MS-DOS).
  1588. .TP
  1589. \-
  1590. (2.01) A change was made that will make zoo preserve the mode
  1591. (file protection) of a zoo archive when it is packed.
  1592. This is effective only if zoo is compiled to preserve
  1593. and restore file attributes.  Currently this is so
  1594. only for **IX systems.
  1595. .TP
  1596. \-
  1597. (2.01) 
  1598. A bug was fixed that had caused an update of an archive to
  1599. not always add all newer files.
  1600. .TP
  1601. \-
  1602. (2.01) Blanks around equal signs in commands given to "make"
  1603. were removed from the mk* scripts for better compatiblity
  1604. with more **IX implementations including Sun's.
  1605. .TP
  1606. \-
  1607. (2.1) Compression is now greatly improved if the "h" option is used.
  1608. .TP
  1609. \-
  1610. (2.1) The default behavior is to preserve full pathnames during extraction. 
  1611. .TP
  1612. \-
  1613. (2.1) On some systems, extraction of files using the older (default)
  1614. compression method is greatly speeded up.
  1615. .TP
  1616. \-
  1617. (2.1) Extended multiscreen help is available.
  1618. .TP
  1619. \-
  1620. (2.1) Memory allocation is improved, so that the MS-DOS version will
  1621. not prematurely abort when updating a large archive.
  1622. .TP
  1623. \-
  1624. (2.1) The VAX/VMS version preserves file timestamps during extraction.
  1625. .TP
  1626. \-
  1627. (2.1) The default archive-wide generation limit, when generations
  1628. are enabled, is 3.
  1629. .SH "FUTURE DIRECTIONS"
  1630. A revised version of 
  1631. .I zoo
  1632. is in the works that will be able to write newly-created archives
  1633. to standard output and will support multivolume archives.
  1634. It will be upward and downward compatible with this version of 
  1635. .I zoo.
  1636. .SH ACKNOWLEDGEMENTS
  1637. The 
  1638. .I zoo
  1639. archiver was initially developed using Microsoft C 3.0
  1640. on a PC clone manufactured
  1641. by Toshiba of Japan and almost sold by Xerox.  Availability
  1642. of the following systems was helpful in achieving portability:
  1643. Paul Homchick's Compaq running Microport System V/AT;  The 
  1644. Eskimo BBS somewhere in Oregon running Xenix/68000; Greg Laskin's
  1645. system 'gryphon' which is an Intel 310 running Xenix/286;  Ball 
  1646. State University's AT&T 3B2/300, UNIX PC, and VAX-11/785 (4.3BSD
  1647. and VAX/VMS) systems.  In addition J. Brian Waters provided
  1648. feedback to help me make the code compilable on his Amiga using
  1649. Manx/Aztec C.  The executable version 2.0 for MS-DOS is currently
  1650. compiled with Borland's Turbo C++ 1.0.
  1651. .PP
  1652. Thanks are due to the following people and many others too numerous
  1653. to mention.
  1654. .PP
  1655. J. Brian Waters <jbwaters@bsu-cs.bsu.edu>, who has worked
  1656. diligently to port
  1657. .I zoo
  1658. to AmigaDOS, created Amiga-specific code,
  1659. and continues keeping it updated.
  1660. .PP
  1661. Paul Homchick <rutgers!cgh!paul>, who provided numerous detailed
  1662. reports about some nasty bugs.
  1663. .PP
  1664. Bill Davidsen <davidsen@crdos1.crd.ge.com>, who provided numerous
  1665. improvements to this manual, contributed multiscreen help, and provided
  1666. many useful bug reports, bug fixes, code improvements, and suggestions.
  1667. .PP
  1668. Mark Alexander <amdahl!drivax!alexande>, who provided me with some bug
  1669. fixes.
  1670. .PP
  1671. Haruhiko Okumura, who wrote the
  1672. .I ar
  1673. archiver and some
  1674. excellent compression code, which I adapted for use in
  1675. .I zoo.
  1676. .PP
  1677. Randal L. Barnes <rlb@skyler.mavd.honeywell.com>, who (with Randy
  1678. Magnuson) wrote
  1679. the code to support the preservation of file timestamps under
  1680. VAX/VMS.
  1681. .PP
  1682. Raymond D. Gardner, who contributed replacement uncompression code
  1683. that on some systems is twice as fast as the original.
  1684. .PP
  1685. Greg Yachuk and Andre Van Dalen, who independently modified MS-DOS
  1686. .I
  1687. zoo 
  1688. to support multivolume archives.  (This support is not yet in
  1689. this official release.)
  1690. .SH AUTHOR
  1691. Rahul Dhesi
  1692. SHAR_EOF
  1693. chmod 0644 zoo.1 ||
  1694. echo 'restore of zoo.1 failed'
  1695. Wc_c="`wc -c < 'zoo.1'`"
  1696. test 46685 -eq "$Wc_c" ||
  1697.     echo 'zoo.1: original size 46685, current size' "$Wc_c"
  1698. fi
  1699. true || echo 'restore of zoo.c failed'
  1700. echo End of part 10, continue with part 11
  1701. exit 0
  1702.