home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sources / misc / 3843 < prev    next >
Encoding:
Text File  |  1992-08-22  |  60.5 KB  |  1,330 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: zip-bugs@cs.ucla.edu (Info-ZIP group)
  4. Subject:  v31i093:  zip19 - Info-ZIP portable Zip, version 1.9, Part01/11
  5. Message-ID: <csm-v31i093=zip19.014410@sparky.IMD.Sterling.COM>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: f76cd19976a6931c986e76a891405198
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Sterling Software
  10. Date: Sun, 23 Aug 1992 06:44:52 GMT
  11. Approved: kent@sparky.imd.sterling.com
  12. Lines: 1316
  13.  
  14. Submitted-by: zip-bugs@cs.ucla.edu (Info-ZIP group)
  15. Posting-number: Volume 31, Issue 93
  16. Archive-name: zip19/part01
  17. Supersedes: zip: Volume 23, Issue 88-96
  18. Environment: UNIX, VMS, OS/2, MS-DOS, MACINTOSH, WIN-NT, LINUX, MINIX, XOS, !AMIGA, ATARI, symlink, SGI, DEC, Cray, Convex, Amdahl, Sun, PC
  19.  
  20.  ______________________________________________________________________
  21.  
  22.   Zip 1.9 is a compression and file packaging utility.  It is analogous
  23.   NOTE:  Info-ZIP's mailing addresses and ftp site will be changing
  24.   within the next month.  The current e-mail addresses should hold for
  25.   a while via mail-forwarding, but watch for the new addresses in our
  26.   next release.
  27.  ______________________________________________________________________
  28.  
  29.   Zip 1.9 is a compression and file packaging utility.  It is analogous
  30.   to a combination of tar and compress and is compatible with PKZIP 1.93a
  31.   (Phil Katz ZIP) for MSDOS systems.  There is a companion to Zip called
  32.   UnZip (of course) which is being posted concurrently, as are the encryp-
  33.   tion/decryption routines for Zip and UnZip, and a Microsoft Windows add-
  34.   on to UnZip called WizUnZip.
  35.  
  36.   This version of Zip has been ported to a wide array of Unix and other
  37.   mainframes, minis, and micros including VMS, OS/2, Minix, MSDOS, Windows-
  38.   NT, Atari, and Macintosh (the latter two have not been tested recently).
  39.   Although highly compatible with PKware's PKZIP and PKUNZIP utilities of
  40.   MSDOS fame, our primary objective has been one of portability and other-
  41.   than-MSDOS functionality.  Features not found in the PKWare version in-
  42.   clude creation of zip files in a pipe or on a device; VMS and OS/2 ex-
  43.   tended file attributes; conversion from Unix to MSDOS text file format;
  44.   the ZipSplit and ZipNote utilities; and, of course, the ability to run
  45.   on most of your favorite operating systems.  Plus it's free. :-)
  46.  
  47. ------------
  48. #! /bin/sh
  49. # This is a shell archive.  Remove anything before this line, then feed it
  50. # into a shell via "sh file" or similar.  To overwrite existing files,
  51. # type "sh file -c".
  52. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  53. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  54. # Contents:  atari history mac msdos nt os2 tailor.h vms
  55. # Wrapped by kent@sparky on Sun Aug 23 01:00:42 1992
  56. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  57. echo If this archive is complete, you will see the following message:
  58. echo '          "shar: End of archive 1 (of 11)."'
  59. if test ! -d 'atari' ; then
  60.     echo shar: Creating directory \"'atari'\"
  61.     mkdir 'atari'
  62. fi
  63. if test -f 'history' -a "${1}" != "-c" ; then 
  64.   echo shar: Will not clobber existing file \"'history'\"
  65. else
  66.   echo shar: Extracting \"'history'\" \(49244 characters\)
  67.   sed "s/^X//" >'history' <<'END_OF_FILE'
  68. XNote, this history contains mail addresses and ftp locations that no longer
  69. Xexist, such as addresses at wsmr-simtel20 and directory names containing
  70. Xw8sdz, among others.  For problems, the correct email address is
  71. Xzip-bugs@cs.ucla.edu.
  72. X
  73. X------------------------ Nov  7  1990   version 0.0 ------------------------
  74. X------------------------ Nov  8  1990   version 0.1 ------------------------
  75. X------------------------ Nov 12  1990   version 0.2 ------------------------
  76. X------------------------ Nov 14  1990   version 0.3 ------------------------
  77. XThank you for your comments.  Here is Zip 0.3 with almost all of that fixed.
  78. XThe changes include:
  79. X
  80. X1. Put \n\ for newlines in long strings (everyone had this problem).
  81. X2. Wrote my own bsearch (called search---different args).
  82. X3. Wrote my own timelocal (called invlocal), used whether STDC or not.
  83. X   (Note to Greg: look at the code---I found a simple way to do it.)
  84. X4. -m now deletes empty directories also.
  85. X5. Changed crc.c to util.c and put search() in util.c.
  86. X6. Changed "void *" to "voidp *" and made voidp void for STDC, else char.
  87. X7. Removed -a option.
  88. X8. Some minor changes to zip.doc.
  89. X
  90. XI did not do anything about Cliff Manis's problem with DIR not being
  91. Xdefined.  DIR should have been defined in sys/dir.h.  If it wasn't, then
  92. Xthere's something wrong with dir.h, or it is missing, or the opendir, etc.
  93. Xfunctions are missing.  I don't really want to think about what to do for
  94. Xthe latter possibility.
  95. X
  96. XNUnzip 3.99 does not appear to be Unix-ready.  It fails for file names longer
  97. Xthan 12 characters (Segmentation fault), cannot find explicit names that
  98. Xdo not contain a dot, and does not notice the Unix identifier (which should
  99. Xswitch off name to lower-case mapping).
  100. X
  101. X------------------------ Nov 20  1990   version 0.4 ------------------------
  102. XYo Zippers,
  103. X
  104. XHere is a first attempt at a Zip intended to work on System V.  Try using
  105. X"make sysv" for such systems.  I also included replacements for memset()
  106. Xand memcmp() by Bill Davidsen and James Dugal for systems without those.
  107. XUse "make old" to include those routines.  Sun's use getdents() like Sys V,
  108. Xeven though it's BSD, so use "make sun".  For others, try just "make".
  109. X
  110. XWhen using "make" a second time with a different request, it's best to erase
  111. Xall the .o files to force recompiling everything.
  112. X
  113. XWhat follows are the changes I made and some things to try if you get it
  114. Xcompiled.  Have fun.
  115. X
  116. XMark
  117. X
  118. X
  119. XChanges from Zip 0.3 to Zip 0.4:
  120. X
  121. X1.  Changed third arg of search() to size_t to make lint happier.
  122. X2.  Replaced zip.doc with a man page, zip.1 (raw) and zip.man (formatted).
  123. X3.  rename() replaced with link() and unlink().
  124. X4.  Fixed vem in central header and added REVISION and REVDATE #define's
  125. X    to zip.h.  (Didn't read Phil's appnote.txt carefully enough there.)
  126. X5.  Removed prototypes except for development host (NeXT).  (They're only
  127. X    there for my benefit anyway---they should not affect the resulting
  128. X    code.  Consider them some meager documentation.)
  129. X6.  Changed rindex() to strrchr().
  130. X7.  Improved behavior on a write failure when -b is used.
  131. X8.  Added Bill Davidsen's and James Dugal's memset(), memcpy(), and
  132. X    memcmp() routines under the trusty ZMEM #define.
  133. X9.  Check that zip file is writeable before doing any real work.
  134. X10. Added #ifdef REGEX to use regcmp(), regex() instead of re_comp(),
  135. X    re_exec().  (We'll see if this works.)
  136. X11. Replaced opendir(), readdir(), closedir() with my own opend(), readd(),
  137. X    and closed() routines that use getdirentries() on BSD and getdents() on
  138. X    System V (I hope) and Sun's.  An #ifdef DIRENT selects getdents().
  139. X12. zip.h no longer #includes string.h, instead defining the string
  140. X    functions used explicitly.
  141. X
  142. X
  143. XIf you get Zip 0.4 to compile, here are some things to test:
  144. X
  145. X1.  Try zipping up some stuff, of course.  Use all the options that are
  146. X    implemented.  Especially try -rp and -rpm on a directory tree (use
  147. X    *test* files and directories, of course).
  148. X2.  Naturally check with unzip -t, but also check with "zip xxx" where
  149. X    xxx.zip is the zip file.  This should say "nothing to do", but if it
  150. X    says "error in zip file structure", there's a problem.
  151. X3.  After zipping, check that there are no $Z* files leftover.
  152. X4.  Try using -b, specifying a path on another device.  Check for $Z*'s.
  153. X5.  Try -d and a regular expression (like \*.o) on a zip file.
  154. X6.  And I'm interested in timing---try it on a 500K or so text file.
  155. X
  156. X------------------------ Nov 27  1990   version 0.5 ------------------------
  157. XHail fellow zippers,
  158. X
  159. XHere's Zip 0.5.  The biggie is it now includes implosion, courtesy of Rich
  160. XWales.  Even as we speak, he is working on new algorithms for implode that
  161. Xpromise to be significantly faster.  He might even get a paper out of it ...
  162. X
  163. XYou can use the -s option (shrink only) when testing to save a little time,
  164. Xbut also try it normally to test implosion (if you test with text files
  165. Xof reasonable length, implosion will be chosen for most of them).  Also, for
  166. Xspeed testing of implosion, use -i to not waste time trying to shrink.
  167. X
  168. XIncluding implosion about doubles the size of zipnn.tar.Z, so I would like
  169. Xsome input on distributing subsequent versions.  Would y'all like to keep
  170. Xon getting the uuencoded version via mail, or would you prefer a notice
  171. Xabout availability via anonymous ftp on simtel20.army.mil in <w8sdz.zip>?
  172. X(I have been sending the previous versions to Keith to put there, and will
  173. Xcontinue to do so.  I do not know what the lag time is for him to move it
  174. Xthere.)
  175. X
  176. XThe other important change is that this is another attempt at getting the
  177. Xdirectory access routines working on all systems.  Read the installation
  178. Xpart of the manual page (zip.man).  And if you feel like, read the whole
  179. Xthing.  I'm also taking suggestions for and bugs in the documentation.
  180. X
  181. XThe differences from Zip 0.4 include:
  182. X
  183. X1. Changed all occurences of "size_t" to "extent" and typedef'ed extent
  184. X   to size_t (after an #include <stddef.h>) for ANSI C, or unsigned int
  185. X   otherwise.  If anyone finds that they have a non ANSI C, that size_t
  186. X   is defined, and that it is not the size of the compiler's int, then
  187. X   please let me know.
  188. X2. Changed help() to put the help text in a static array of strings and
  189. X   then printf() for each line.  Some compilers barfed on the long
  190. X   string.  Suggested by davidsen@crdos1.crd.ge.com.
  191. X3. Added Rich Wales' implode routines, made their inclusion the default
  192. X   (changed #ifdef IMPLODE to #ifndef NOIMPLODE).
  193. X4. Put "extern int errno;" in unixfile.c (redundant extern's should be ok).
  194. X5. Minor changes to the man page (zip.1 and zip.man).
  195. X6. Added warnings for names given on the command line that are not matched.
  196. X   Lack pointed out by grimesg@sj.ATE.SLB.COM (George).
  197. X7. Changed back to opendir(), etc. on BSD systems.
  198. X8. Added NDIR #define for HPUX to #include <ndir.h> instead of <sys/dir.h>.
  199. X9. Redid Makefile, adding next (use shared library), sysvpw (System V's
  200. X   that require linking the libPW library for regex routines), and hpux
  201. X   (see #8 above).
  202. X
  203. XAs usual, report problems to info-zip@wsmr-simtel20.army.mil.  If you wish,
  204. Xyou can, in addition, send the same report to me (madler@piglet.caltech.edu)
  205. Xor Rich (wales@cs.ucla.edu) if the problem is with implosion (i* files) for
  206. Xquicker reponse.
  207. X
  208. Xyour humble servant,
  209. XMark Adler
  210. X------------------------ Dec  7  1990   version 0.6 ------------------------
  211. XGreetings and Felicitations Honorable Zip Compatriots,
  212. X
  213. XI have uploaded Zip 0.6, which incorporates most of your helpful comments,
  214. Xto Simtel20.Army.Mil, and it should evenually end up in <W8SDZ.ZIP> as
  215. XZIP06.TAR-Z.  The most significant change is the addition of encryption
  216. Xboth as the -e option in Zip, and a new program, ZipCloak, that encrypts
  217. Xand decrypts zip entries.  This surely adds some new portability problems,
  218. Xdue to the getp() routine which reads a password from the terminal with no
  219. Xechoing.  We'll see how well this flies ...
  220. X
  221. XIf someone wants to PKZIP up the tar.Z file, please do so.  I didn't zip
  222. Xit up myself because a) I'm lazy, and b) PKZIP can compress it better
  223. Xanyhow, and I don't have a PC.
  224. X
  225. XAlso, there is an EXPORT symbol used to remove encryption, so I can make
  226. Xan export version that does not have -e or ZipCloak.  This version will
  227. Xsimply be missing a few source files and have a different Makefile.
  228. X
  229. XI also added a few systems to the Makefile, and made some other changes to
  230. Xit based on all your detailed comments.  If it still works after all that,
  231. XI'll be amazed.
  232. X
  233. XThose and other changes from 0.5 to 0.6 are detailed at the end of this note.
  234. X
  235. XI have not addressed the portability problem with the implode routines,
  236. Xsince that is Rich's domain.  I have no idea what is causing it.  (For those
  237. Xwho don't know, one system produced remarkable 90% compression rates with
  238. Ximplode, but alas, it is a bug.)
  239. X
  240. XOne fellow complained that zipping up the README file results in a zip file
  241. Xthat is larger than the original, even though Zip claims it compressed it.
  242. XWell, it did compress it, but the ZIP file format has an overhead of
  243. X76+2*N bytes per file+22 bytes, where N is the length of the file name.
  244. XAnd that's without comments or "extra" information.  So, a zip file with a
  245. Xsingle file whose name has six characters has an overhead of 110 bytes.
  246. XREADME gets shrunk by 16% from 274 bytes to 230 bytes, resulting in a total
  247. Xzip file size of 340 bytes---larger than the original file (274 bytes).
  248. XThe moral is don't expect zip to compress a single small file.  The other
  249. Xmoral is use unzip -v to see the compression.
  250. X
  251. XSomeone else asked about multi-disk zip files.  I'm not sure I believe in
  252. Xthose, since PKZIP and PKUNZIP do not appear to suppport them (though it is
  253. Xpart of the ZIP file definition in APPNOTE.TXT).  What I was planning on
  254. Xdoing for that case was to write a ZipSplit program that would take a large
  255. Xzip file and try to optimally split it into the fewest number of zip files
  256. Xthat are all less than the specified size.  Each would be a complete, stand
  257. Xalone zip file---not part of a single, multi-disk zip file.  There would
  258. Xalso be a ZipMerge program.
  259. X
  260. XThis is the version of Zip that will live in infamy (note the revision date).
  261. XOf course, some current Presidents of the United States think that should be
  262. XSeptember 7th, but I won't name any names.
  263. X
  264. XI am going on vacation for about two weeks, so I expect to find many new
  265. Xproblems reported upon my return.
  266. X
  267. XAnd lastly, for my Holiday Greetings: Party On Dudes.
  268. X
  269. XMark Adler
  270. Xmadler@piglet.caltech.edu
  271. X
  272. X
  273. XHere are the changes from Zip 0.5 to Zip 0.6:
  274. X
  275. X1.  Minor documentation changes (zip.1 and zip.man).
  276. X2.  Fixed an embarrasing lack of recursion in opend/readd/closed functions
  277. X    that only existed in 0.5.
  278. X3.  Moved $(LDFLAGS) to end of the linking command line in Makefile.
  279. X4.  Added make dnix for DNIX 5.2, 5.3 not using optimization (no -O).
  280. X5.  Wrote ZipCloak for encryption and decryption.
  281. X6.  Rich changed the output routines of implode to use zfwrite and zputc to
  282. X    provide hooks for encryption (defined in crypt.h).  Also removed
  283. X    function prototypes unless PROTO defined.
  284. X7.  Added encryption (-e) to Zip.
  285. X8.  Added make pyramid (use rindex() instead of strrchr()).
  286. X9.  Changed make to $(MAKE) and cc to $(CC) in Makefile.
  287. X10. Took out strip in Makefile.
  288. X11. Changed year from 1991 to 1990.  (How'd *that* get in there?  Of course,
  289. X    it's not as bad as when I wrote a check the other day and dated it 1977.
  290. X    I think my brain cell isn't working as well as it used to.)
  291. X12. Added make cray (use scc instead of cc).
  292. X13. Added make amdahl (use system() instead of rmdir()).
  293. X14. Added entry of one-line comments for added files (-c).
  294. X15. Put comment delimiters around name following #endif's in Rich's code.
  295. X
  296. X------------------------ Feb 13  1991   version 0.7 ------------------------
  297. XFellow stuck zippers,
  298. X
  299. XWell folks, it's been a while since 0.6. so there have been a lot of
  300. Xchanges on the way to 0.7.  The exhaustive listing is below, but here are
  301. Xsome highlights ...
  302. X
  303. XImplode now (appears) to be PKUNZIP compatible.  There were many odd
  304. Xlittle requirements implosed by the coding of PKUNZIP that were obtained
  305. Xfrom Phil Katz and associates.  Now that Rich has that working, he will
  306. Xlikely be working on much faster string matching routines to speed up
  307. Ximplode.
  308. X
  309. XUser interrupts (control-C or kill) are now caught and the temporary files
  310. Xare deleted, making for a clean getaway.
  311. X
  312. XSelf-extracting zip files for MSDOS can now be processed, with the
  313. Xextensions zip, ZIP, exe, or EXE.  This allows you to make self-extracting
  314. Xzip files for MSDOS by taking an existing one (like PKZ110.EXE) and
  315. Xdeleting all the entries to get a prototype self-extracting zip file that
  316. Xcan be copied and added to.  Of course, you should only do this if you are
  317. Xa registered user of PKZIP.  Note that if the file does not end in .zip,
  318. Xyou have to give the full name.
  319. X
  320. XI have relaxed some of the restrictions on zip files to allow processing
  321. Xones with "authenticity verification" (applied by the PUTAV program that
  322. Xcomes with PKZIP).  Of course, the authenticity no longer checks out if
  323. Xyou muck with the file, but at least you can muck with it now.
  324. X
  325. XThe Makefile has been considerably simplified, thanks to suggestions from
  326. XJean-Loup Gailly.  Also, I wrote my own sh expression matcher, eliminating
  327. Xthe regular expression hassles, and the REGEX symbol and -lPW options in
  328. Xthe Makefile.
  329. X
  330. XMany, many cosmetic changes, the most dangerous of which was turning on
  331. Xprototypes again in the hopes we can get them to work.  If they cause you
  332. Xproblems, record the problems (for me), and then add a -DNOPROTO to the
  333. Xappropriate line in the Makefile and try again.
  334. X
  335. XThis version now compiles under Microsoft C 5.1 and Turbo C++ 1.0, with
  336. Xmuch thanks to Jean-Loup Gailly.  I say "compiles" and not "works" because
  337. XI have not thoroughly tested it.  It does work, but there may be errors in
  338. Xthe port as well as errors in the design.  By the latter I mean that there
  339. Xmay be some disagreement over what you expect it to do and what it does,
  340. Xespecially with regards to upper and lower case names and wildcard
  341. Xpatterns.  Also, the implode routines do not yet work under MSDOS, so the
  342. Xcompilations are done using NOIMPLODE.  There are two dumb batch files to
  343. Xdo the compile: doturboc.bat and domsc.bat.  If someone would like to
  344. Xwrite make files for the make utilities that come with those languages,
  345. Xplease be my guest.  I'm just too lazy.  However, I would probably resist
  346. Xincluding make files that require a make utility that does not come with
  347. Xthose languages, be it commercial, shareware, or free.
  348. X
  349. XThere are two new programs: ZipSplit and Ship.  ZipSplit tries to split a
  350. Xbig zip file into the smallest number of zip files less than a specified
  351. Xsize.  This is to aid in using zip to backup to floppies.  It has the
  352. Xlimitation that it cannot break up an entry in a zip file, since it makes
  353. Xcomplete, standalone zip files.  This means if any entry is larger than
  354. Xthe specified size (plus some overhead), zipsplit will give up and not do
  355. Xthe split.  It does *not* implement the multi-disk zip file format implied
  356. Xin APPNOTE.TXT.  ZipSplit will optionally write an index file and deduct
  357. Xthe size of that file from the first zip file so both will fit on the
  358. Xfirst disk.
  359. X
  360. XShip is a fixed-up version of a program I have been using myself for some
  361. Xtime in place of uuencode/uudecode.  It's purpose is to facilitate sending
  362. Xzip files through the mail.  It uses a more efficient coding scheme than
  363. Xuuencode (four bytes per five characters instead of three bytes per four
  364. Xcharacters) and includes a crc at the end of each file to check the
  365. Xveracity what was received.  It can split its output to a specified size
  366. Xand recombine it automatically at the other end, verifying the sequence.
  367. XIt can also mail the parts to a specified address, with subject lines
  368. Xidentifying the parts, instead of making a bunch of files that you're just
  369. Xgoing to mail and delete anyway.  Example:
  370. X
  371. X     % ship -500 -m saddam@pickle.iq README zip07.zip
  372. X     README shipped
  373. X     zip07.zip shipped
  374. X     files part0001..part0004 mailed
  375. X
  376. Xwill mail README and zip07.zip together in four chunks of 500 or fewer
  377. Xlines each.  At the other end, Saddam can save the parts into the files
  378. Xnamed in the subject lines (part0001..part0004), and then do:
  379. X
  380. X     % ship -u part*
  381. X     README received
  382. X     zip07.zip received
  383. X
  384. XFor now, zip.1 (and zip.doc) are incomplete as far as MSDOS goes.  I'll
  385. Xput off doing that until the MSDOS version has stabilized.  Likewise, I
  386. Xhave put off writing zipcloak.1, zipsplit.1, and ship.1 for the same
  387. Xreason.
  388. X
  389. XThere are, of course, all the little changes that fix bugs (what are
  390. Xthose?), make the Makefile work on more systems, documentation, and,
  391. Xfor the alert reader, an undocumented option ...
  392. X
  393. XAs usual, send reports to info-zip@wsmr-simtel20.army.mil, so everyone
  394. Xcan get a chuckle out of whatever new bugs I've introduced.
  395. X
  396. XMark Adler
  397. Xmadler@pooh.caltech.edu
  398. X
  399. X
  400. XChanges from release 0.6 to release 0.7:
  401. X
  402. X1.  Changed Makefile to use mv instead of -o on compiles.
  403. X2.  Added MAKE = make to Makefile.
  404. X3.  Catch user interrupt or termination and delete temporary files.
  405. X4.  Allow general purpose flags in local and central headers to differ in
  406. X    the "reserved" bits.  Keep both for copying zip entries verbatim.
  407. X5.  Removed prototype for closedir--return value not used and inconsistent
  408. X    across systems.
  409. X6.  Wrote ZipSplit to break a large zip file into the smallest number of
  410. X    zip files less than a specified size.  Run zipsplit with no arguments
  411. X    to see the command help.
  412. X7.  Put error messages in globals.c to be common across zip, zipcloak, and
  413. X    zipsplit.  Use #define's in zip.h for error numbers.
  414. X8.  Changed getp() to open a new file for the terminal device, and added
  415. X    the echon() function to turn echoing back on when interrupted at
  416. X    password prompt.
  417. X9.  Added warn()'s to distinguish various zip file structure errors.
  418. X10. Allow "extra" fields in local and central headers to differ.
  419. X11. Fixed percent compression calculation to work for very large files.
  420. X12. Included the program (makecrc.c) that generates the CRC table.
  421. X    makecrc.c is not compiled or run by the Makefile, but is present for
  422. X    completeness.
  423. X13. Added an undocumented (except for here) option, -v, to zip that checks
  424. X    for "oddities" in the zip file structure and points them out if found
  425. X    (but continues processing).
  426. X14. Put prototypes in crypt.h inside #ifdef NeXT to avoid redefinition
  427. X    problems with other compilers.
  428. X15. Added "make zilog" for Zilog S8000 running Zeus 3.21.
  429. X16. Minor changes to the manual page (zip.1 and zip.doc).
  430. X17. Fixed bug in replace() (manifested by -b option).
  431. X18. readzipfile() now also checks the central directory start and size in
  432. X    the end of central directory header.
  433. X19. Allow modification of self-extracting zip files (exe instead of zip).
  434. X20. Allow .ZIP as valid suffix as well as .zip (also .EXE and .exe).
  435. X21. Cleaned up malloc usage, free'd everything malloc'ed.
  436. X22. fclose'd all fopen'ed files explicitly.
  437. X23. Corrected assignment of one ftell() result from an int to a long.
  438. X24. Considerably simplified Makefile, based on Jean-Loup Gailly's
  439. X    suggestions.
  440. X25. Renamed unixfile.c to fileio.c in anticipation of non-unix support.
  441. X26. Removed const's (pesky little buggers caused too many problems).
  442. X27. Wrote my own shell expression compare routine, took REGEX and -lPW's
  443. X    out of Makefile, which removed the sysvpw make option.
  444. X28. Added tempname() prototype to crypt.h for the implode routines to use.
  445. X29. Trying string.h for prototypes of string functions if __STDC__
  446. X    defined, which is what unzip.h does.
  447. X30. Turned prototypes on if __STDC__ defined (we'll try this one more
  448. X    time).  They can be turned off using NOPROTO.
  449. X31. Improved source documentation.
  450. X32. Changed prototype of open in fileio.c to OF((char *, int, ...)).
  451. X33. Removed "local" from prototypes of main() (after all, it's *not*
  452. X    local).
  453. X34. Wrote Ship program to supplant uuencode--slightly more efficient, has
  454. X    error checking, file splitting, automatic mailing, other features.
  455. X    Ship currently uses the command:
  456. X        /usr/ucb/mail -s subject < tempfile
  457. X    to send mail.  Please let me know what works for your system.  Note
  458. X    that I want to be able to specify a subject line.
  459. X35. Ported to MSDOS Microsoft C 5.1, based on Jean-Loup Gailly's work.
  460. X36. Fixed add/update bug when -p not used.
  461. X37. Handle lower case conversion and devices (e.g. C:) for MSDOS.
  462. X38. Indented the #ifdef/#ifndef constructs that do not contain function
  463. X    definitions, to improve the readability somewhat.
  464. X39. Cleaned up error handling.  Now use perror() for i/o errors.  Put the
  465. X    errors and messages in ziperr.h.
  466. X40. Ported to MSDOS Turbo C++ 1.0.
  467. X41. Implemented wild card expansion on the command line for MSDOS and
  468. X    handle MSDOS matching (*.* == all, not *).
  469. X42. Changed version required to unzip to 11 (1.10) since the implode
  470. X    routines can procude an overlapping match one away from the end of the
  471. X    window (PKUNZIP 1.00 requires two away from the end).
  472. X43. Changed old next make option to next10 (for version 1.0) and added a
  473. X    new next make option for 2.0 (just called next) that uses the -object
  474. X    linking option for smaller executables.
  475. X44. Added -z option to take a multi-line zip file comment from stdin.
  476. X45. Changed temporary names from $ZXXXXXX to _ZXXXXXX, where XXXXXX is
  477. X    filled in by mktemp().  This avoids problems with "rm $Z*" in sh.
  478. X46. Got new implode routines from Rich that are (hopefully) PKUNZIP
  479. X    compatible.
  480. X47. When -b is not specified, put the temporary files in the same
  481. X    directory (i.e. the same device) that the zip file is (or will be) in.
  482. X48. Added doturboc.bat and domsc.bat files to compile for Turbo C++ 1.0
  483. X    and Microsoft C 5.1.  I am interested in successes and failures with
  484. X    other versions of those compilers.  In this version, the implode
  485. X    routines do not work under MSDOS.
  486. X------------------------ May  6  1991   version 0.8 ------------------------
  487. XBuenos Dias Amigos,
  488. X
  489. XHeer ees dee Cinco de Mayo reeleese of seep, aka Zip 0.8.  The changes
  490. Xfrom 0.7 are in the (long) list below, but here are some highlights:
  491. Xfaster implode, faster shrink, first attempt at a VMS version (thanks
  492. Xto Cave Newt), and a new program, ZipNote, to aid in editing zip file
  493. Xcomments.  To compile under VMS, do an "@makevms.com".  To compile using
  494. XMircosoft C do a "make makefile.msc".  To compile using Borland (Turbo)
  495. XC, do a "make -fmakefile.bor".  Please try to break any or all of these
  496. Xprograms in every conceivable way--we're getting close a public release.
  497. XThank yew fer your support.
  498. X
  499. XMark Adler
  500. Xmadler@pooh.caltech.edu
  501. X
  502. XChanges from 0.7 to 0.8:
  503. X
  504. X1.  Added the -n option to prevent compressing already compressed files.
  505. X    Documented -n in zip.1.
  506. X2.  Check the length of the compressed data in zipup() in case implode or
  507. X    shrink has a bug.
  508. X3.  Fixed -v option to not complain about needing PKUNZIP 1.1.
  509. X4.  Added report of store/shrink/implode sizes when -v (verbose) used.
  510. X5.  Put in Rich's patch to fix 100% implosion bug.
  511. X6.  Fixed -i bug.
  512. X7.  Made changes to im_ctree.c and implode.c to (hopefully) make it work
  513. X    under MSDOS.  (Jean-Loup said declare topmaxvals and botmaxvals as
  514. X    U_INT in im_ctree.c, and use MSDOS, not __MSDOS__ in implode.c.)
  515. X8   Added implode routine compilation to domsc.bat and doturboc.bat.
  516. X9.  Replaced FILENAME_MAX with FNMAX, which is now always 1024.  (It seems
  517. X    FILENAME_MAX is incorrectly set to 14 on some System V Unixii.)
  518. X10. Changed BEST to -1 so it is different from STORE (=0).  Redid some of
  519. X    the method logic in zipup().
  520. X11. Changed wb+ to w+b in implode.c.
  521. X12. Removed "nothing to do" error for -u and -f.
  522. X13. Zip source distributions will now have tabs removed, except for
  523. X    Makefile and Makefile.exp (no feelthy tabs rule).
  524. X14. Changed zip error on open failure to a warning.  This accounts for
  525. X    files that do not have read permission or are locked, and files
  526. X    deleted during the zip.  For entries being updated, the old entry is
  527. X    copied over instead.  This change had the side effect of removing the
  528. X    zipskip() routine.
  529. X15. Removed OBJC dependencies in Makefile.exp (didn't belong).
  530. X16. Removed strip from Makefile, instead using the -s link option.
  531. X17. Fixed -um and -fm to delete files whose entry's times were checked in
  532. X    the archive.
  533. X18. Put portability stuff common to zip.h and crypt.h into tailor.h.
  534. X19. Added mark tracing to -v (for debugging).
  535. X20. Changed name and zname logic--an external name is always converted
  536. X    into an internal zname, and vice-versa.  zname is now always
  537. X    malloc'ed.
  538. X21. Fixed -z to use CRLF between lines (for PKZIP) and have no newline
  539. X    after the last (or only) line.
  540. X22. Added clean to Makefile (deletes *.o, zip, zipcloak, zipsplit, ship).
  541. X23. Replaced LDFLAGS with LFLAGS1 and LFLAGS2 in Makefile (splits link
  542. X    options before and after object files as in unzip).
  543. X24. Added scodos to Makefile (from Bill Davidsen).
  544. X25. Included stdio.h in tailor.h--removed stdio.h from zip.h and
  545. X    implode.h.
  546. X26. Do not include stddef.h if M_XENIX defined.
  547. X27. Cast the arguments of all free() calls to (voidp *).
  548. X28. Added casts to char * for memset() and qsort() args in zipsplit.c.
  549. X29. Changed implode.h to define malloc and str* properly.
  550. X30. Fixed invlocal() to handle integer overflow correctly, as well as
  551. X    reliably across compilers.
  552. X31. Got new implode.h from Rich with fix #29 above.  Removed stdio.h
  553. X    include.
  554. X32. Commented out the abort() calls in im_ctree.c.
  555. X33. -ee requests a verification of the encryption password.
  556. X34. malloc and free tempath.
  557. X35. Documented -, SCO, and scodos in zip.1, and - in help().
  558. X36. Added revision.h for Zip revision number and date.
  559. X37. -u and -f with no arguments now (both) freshen the entire archive.
  560. X38. Use /Oait instead of /Ox for MSC to avoid loop optimization (buggy on
  561. X    5.1, and sometimes even crashes compiler!).
  562. X39. Added ! (reverse) range matching to shmatch(), and early abort on '*'
  563. X    failures (speeds up pathological patterns).  Cleaned up '\' (escape)
  564. X    handling.
  565. X40. Changed '!' in ship to '{' (some EBCDIC translations do not include
  566. X    !).  However, unship (ship -u) still understands '!'.  Also added the
  567. X    -v option of ship to print out the version and revision date.  Also
  568. X    now refuse to overwrite an existing file when unshipping (ship -u),
  569. X    but there is a -o option to overwrite anyway.
  570. X41. Added a "fast" mode to ship using hard-arithmetic coding that is
  571. X    nearly as efficient as base 85 coding, but much faster on 16-bit
  572. X    machines (base 85 coding uses 32 bit multiplication and division).
  573. X42. Put tailor.h back in ship.c, so that ship.c can stand on its own.
  574. X43. Made -p the default, and added a new option, -j to do the opposite
  575. X    (junk directory names).  -p is still there but does nothing, so as to
  576. X    avoid annoying PKZIP users.  Changed documentation and help()
  577. X    accordingly.
  578. X44. If -j is used, and two files are to be added with the same name, then
  579. X    zip exits with an error.
  580. X45. Wrote ZipNote for editing zipfile comments.  Just do zipnote for
  581. X    usage.
  582. X46. Replaced Rich's im_lmat.c with a new one from Jean-Loup.  Improves the
  583. X    speed of implode by a factor of two, and even more for very large
  584. X    files.
  585. X47. Reduced the execution time of shrink by 33% simply by moving the code
  586. X    around (eliminated some unnecessary calls, moved some tests).
  587. X    Shrink's execution time is now about 50% more than compress (it used
  588. X    to take over twice as long).  Hash tables for shrink are still
  589. X    intended for a future release.
  590. X48. VMS mods from Greg: replace() unlinks only after copy, changed
  591. X    delete() to destroy(), added code for deletedir(), use creation time
  592. X    instead of modification time, warn if stamp() attempted, changed
  593. X    includes, make link rename and unlink delete, added findfirst,
  594. X    findnext stuff, added wild() for VMS, modified newname(), procname().
  595. X49. Implemented internal<-->external name conversions for MSDOS and VMS.
  596. X50. For VMS matching, changed ? to %, removed bracketed ranges.
  597. X51. Added makevms.com, stolen from Unzip (vms_make.com).
  598. X52. Implemented -k (force the zip file to look like it was made by PKZIP).
  599. X53. Removed implode for VMS (it crashes--haven't tracked down where).
  600. X54. Got Jean-Loup's makefile.dos working for MSC 5.1 (makefile.msc) and
  601. X    Turbo C++ 1.0 (makefile.bor).
  602. X------------------------ Jul 11  1991   version 0.9 ------------------------
  603. XHey gang,
  604. X
  605. XHere is our very-nearly-ready-to-release version of Zip.  There will be no
  606. Xfeatures added or changed from 0.9 to 1.0--only bugs fixed.  I hope that
  607. Xwe can get 1.0 out pretty quickly then.  This is really your last chance to
  608. Xfind bugs before it goes out, so please, please test all the programs as
  609. Xmuch as you can.  Try all the features, if possible, and perhaps try to
  610. Xthink of ways to break the programs.  Also, and this is very important, read
  611. Xthe documentation in zip.doc and "debug" that too.  I already know that it
  612. Xis not complete in 0.9, but please send any comments about errors, omissions,
  613. Xformat, or whatever to Info-ZIP, even if they seem obvious.
  614. X
  615. XThe highlights of the changes from 0.8 to 0.9 are: faster, slicker implode;
  616. Xoperation in small model on MSDOS for speed; a new temporary file interface
  617. Xfor faster operation on small files; some shrink improvements; and some new
  618. Xoptions (-y, -g, -q).  Also, ship has been enhanced in several ways, not the
  619. Xleast of which is a help option (-h).
  620. X
  621. XHave fun.
  622. X
  623. XMark Adler
  624. Xmadler@tybalt.caltech.edu
  625. X
  626. X
  627. XChanges from 0.8 to 0.9:
  628. X
  629. X1.  Removed the "not implemented yet" note in help() for -k (it *is*
  630. X    implemented now).  Removed from bug list in zip.1 too.
  631. X2.  Fixed Turbo C implode bug.
  632. X3.  Added /link /e in makefile.msc for ship.c.
  633. X4.  Made handler() in zipnote.c the same as handler() in zipsplit.c.
  634. X5.  Added -y option in Unix to store symbolic links as such.  (We need
  635. X    Unzip to be aware of symbolic links and use symlink() to recreate them.)
  636. X6.  Ignore control characters in unship input.
  637. X7.  Use prototypes and ANSI libraries if MSDOS.  (Used to check for Turbo C,
  638. X    but Microsoft C 6.0 also does not define __STDC__ unless strict ANSI
  639. X    is requested.)
  640. X8.  Added mod to ct_fsort() from Rich that should remove any qsort()
  641. X    dependencies in implode output.
  642. X9.  Removed some 32/16-bit prejudices in util.c and crypt.c that affect
  643. X    64-bit integer (short, int, and long) machines (Cray).
  644. X10. Added System V MAILX option to ship.c to use the mailx command.  This
  645. X    is automatically activated by DIRENT if ship is compiled by the zip
  646. X    makefile.
  647. X11. Added patches from Greg Roelofs for echo control on Cray and Amdahl.
  648. X    The patch uses termio.h and ioctl(), and is assumed for all System V,
  649. X    not just those (we'll see how this flies).
  650. X12. Changed -Ox to -Oacegit -FPi87 in makefile.msc.  Added /nologo to link.
  651. X13. Applied J-L's 082 mods (Sinatra style): select 4K window for < 5.5K,
  652. X    8K window for >= 5.5K files (just like PK does); various im_ctree.c
  653. X    mods verbatim (except for the treename warning, which I did differently);
  654. X    various im_lmat.c mods verbatim (except macros are done the ugly portable
  655. X    way); farmalloc'ed in shrink.c; changed makefile.msc and makefile.bor to
  656. X    use small model; added J-L to zip.1 acknowledgements (oops).
  657. X14. Moved struct zlist's and struct flist's to far storage (needed by above
  658. X    mods).  Unfortunately, I can't move the names and other things pointed to
  659. X    by those structures into the far space, since they are arguments to
  660. X    library functions like strcmp() and fwrite().
  661. X15. Changed zipup() to both shrink and implode only on files smaller than
  662. X    BSZ.  Also in that case, free up shrink data structures before allocating
  663. X    the implode data structures.  Changed from fopen() to open() except for
  664. X    VMS.
  665. X16. Fixed bug in dosmatch() to free malloc'ed space.
  666. X17. MINIX mods (do not need minix make option): call tempname() with a unique
  667. X    character (MINIX mktemp() flawed); defined S_IWRITE as S_IWUSR if S_IWUSR
  668. X    defined; removed explicit signal dereference.
  669. X18. Fixed bug in unship when used as a filter with no args.
  670. X19. Changed getnam() to not use static storage.
  671. X20. Copy permissions from old to new zip file (zip, zipcloak, zipnote).
  672. X21. Added patches for AT&T 3B1, added 3b1 target to makefile, added to zip.1.
  673. X22. Made FNMAX 256 for MSDOS (is 1024 otherwise).
  674. X23. Used the "pyr" predefined symbol for Pyramid systems in tailor.h.
  675. X24. Added Greg's VMS mods to ship.c.  Added help to ship.c (-h or -?).
  676. X    Changed meaning of -nnn arg from lines to K.
  677. X25. Moved ZMEM routines to fileio.c to properly include them in zipnote and
  678. X    zipsplit.
  679. X26. Added -s option to ship to specify a subject line prefix.
  680. X27. Fixed -z in zip to not trash leading blank lines in the comment.
  681. X28. Made ship recognize "unship" in argv[0] a little more flexibly.
  682. X29. Made sure temporary zip files are closed before being deleted by an
  683. X    error or interrupt.
  684. X30. Added a new temporary file interface and new source files tempf.c and
  685. X    tempf.h.  This avoids making temporary files for small (<16k) output.
  686. X    Both shrink and implode use this.
  687. X31. Added OS/2 patches, files.  However, left zip case-sensitive for OS/2
  688. X    names, as in Unix.
  689. X32. Removed amdahl target in makefile, using UTS symbol instead.
  690. X33. Changed -y to depend on definition of S_IFLNK.
  691. X34. Avoid leading periods on lines in ship output by inserting a space.
  692. X35. Ship is now extensible: added a warning for "unsupported keyword".
  693. X    Such keywords can appear before the "ship" line, for example.
  694. X36. Added -g option to allow "growing" the zip file.  If just adding new
  695. X    entries to a zip file, -g will write over the old zip file without
  696. X    creating a temporary.  The danger is that if there is an error, the
  697. X    old zip file will be lost.  If not just adding, then -g is ignored.
  698. X37. Added aux (A/UX) target to makefile.
  699. X38. In shrink.c, removed unnecessary FreeList and ClearList arrays, and
  700. X    the recursive Prune() routine.  This also resulted in a speedup in
  701. X    shrink of about 15%.  It is now only about 30% slower than Unix compress.
  702. X39. Added -q option for quiet operation.
  703. X------------------------ Sep 21  1991   version 1.0 ------------------------
  704. XHello world!
  705. X
  706. XThis is the first public release version of Zip and its cohort utilities.
  707. XWe hope you enjoy using it much much more than we enjoyed writing it and
  708. Xtrying to get it to work on every fritzing raffing bliffing nobbin Unix
  709. Xsystem in the galaxy.
  710. X
  711. XPlease feel free to send any problems, complaints, suggestions, kudos,
  712. Xridicule, or whatever to zip-bugs@cs.ucla.edu.  If there were a way to
  713. Xsend cookies over the net, we'd accept those too.
  714. X
  715. XThank yew fer yur support.
  716. X
  717. XMark Adler
  718. Xmadler@tybalt.caltech.edu
  719. X
  720. X
  721. XChanges from 0.9 to 1.0:
  722. X
  723. X1.  Removed some pesky carriage returns masquerading as spaces in fileio.c
  724. X    and zipup.c.
  725. X2.  Removed #include memory.h in tempf.c (string.h good enough).
  726. X3.  Compile ship in doturboc.bat.
  727. X4.  Miscellaneous zip.1 (zip.doc) changes.
  728. X5.  Fixed mistake in stamp() in fileio.c (didn't double seconds).
  729. X6.  Applied Jean-Loup's mods for Cray's (do not assume 16-bit shorts).
  730. X7.  Removed pyramid make option, since #ifdef pyr seems to work.
  731. X8.  Added some casts to tempf.c to clean up some warnings.
  732. X9.  Added comment to makefile.exp saying what it is.
  733. X10. Removed length checks in zipup.c to fix problem with using Vax variable
  734. X    record length formats.
  735. X11. Fixed VMS replace-across-devices problem.
  736. X12. Changed order of include's in implode.h to make tailor.h show up first.
  737. X13. Added Convex mods and make target.
  738. X14. Fixed path delimiter under VMS for unship.
  739. X15. Added ship to makevms.com.
  740. X16. Put in new copyright messages.
  741. X17. Added aix make target.
  742. X18. Fixed zipsplit.idx to start counting at one like the file names.
  743. X19. Changed -a (append VMS version number) to -w to leave -a open for a
  744. X    possible future option.
  745. X20. Back to separate makefiles for Microsoft and Borland (.msc and .bor).
  746. X21. Workaround in fileio.c for Borland stat() bug: stat() succeeds for wild
  747. X    card names that match existing files.
  748. X22. Added "(did you remember to use binary mode when you transferred it?)"
  749. X    to the "probably not a zip file" warning.
  750. X23. Changed utilities to append .zip only when the zip file name does not
  751. X    contain a dot.
  752. X24. At least mentioned the other utilities in zip.doc (zipcloak, ship, etc.),
  753. X    and documented upper case matching of names when using -d under MSDOS.
  754. X25. Fixed bug in MSDOS version: zip foo c:autoexec.bat wouldn't work.
  755. X26. Added hidden/system attribute bug to BUGS in zip.1
  756. X27. Fixed recognition of unship in ship when unship is in a path.
  757. X28. Added non-stream-LF VMS bug to zip.1 bug list.
  758. X29. Fixed bug in #23 above when path has dots.  Documented #23 in zip.1.
  759. X30. Show disclaimer only for -l, add -h and -l to zip utilities.
  760. X31. Applied Minix patches.
  761. X------------------------ ??? ??  1992   version 1.1 ------------------------
  762. X??? To be done. Should be the last version supporting shrink and implode.
  763. X
  764. X------------------------ Feb 17  1992   version 1.5 ------------------------
  765. X1.  pkzip 2.0 format (deflation) now supported
  766. X    Shrink and Implode left in zip 1.1 only for backward compatibility
  767. X
  768. X------------------------ Mar 25  1992   version 1.6 ------------------------
  769. X1.  zip can now be used as a filter in a pipe
  770. X2.  Optimized assembler code for MSDOS and OS/2
  771. X3.  encryption is now supported
  772. X4.  Better VMS support for various file formats other than Stream-LF
  773. X5.  Better OS/2 support
  774. X------------------------ Apr 24  1992   version 1.7a ------------------------
  775. X1.  On VMS, create new zip files in fixed length 512 format
  776. X2.  Call VMSmunch only if the zip file existed previously
  777. X3.  Avoid mktemp() and use simpler name for temporary file.
  778. X4.  Rename dir_os2.[ch] -> os2zip.[ch]
  779. X5.  On MSDOS, use fdopen() after setmode() in zip.c
  780. X    Added setmode() for stdin in zipup.c
  781. X6.  Do not split #if on two lines (some compilers don't like this)
  782. X7.  __MSDOS__ instead of __BORLANDC__ in crypt.c
  783. X8.  Added (char*) cast in deflate.c to avoid warning
  784. X9.  OS/2 support for storing file attributes in an extra field.
  785. X
  786. X------------------------ June 6  1992   version 1.8a ------------------------
  787. X1.  Fixed bug in tempname() for VMS
  788. X2.  Fixed type problems in zipup.c for gcc under VMS
  789. X3.  Added VMSmunch in vms subdirectory and updated makefile (descrip.mms)
  790. X4.  The extra field for OS/2 is now compressed (Kai Uwe Rommel)
  791. X5.  Added various fixes for djgcc (Onno van der Linden)
  792. X6.  Fixed long standing bug in wild() for MSDOS (Jon Saxton)
  793. X7.  Added support for ZIPOPT environment variable (Bill Davidsen
  794. X    and Antoine Verheijen).
  795. X8.  Fixed zipsplit bug for VMS (Greg Roelofs)
  796. X9.  Added fix for DEC OSF/1 (Kjetil W. J{\o}rgensen)
  797. X10. Added fix for ultrix on DECstation (Jonathan Kamens)
  798. X10. Added sysnopis for zipsplit, etc... in zip.1 (Jonathan Kamens)
  799. X11. Fixed MAILX problem for SysV in ship.c (Greg Roelofs)
  800. X12. Added Linux support (Humberto Ortiz-Zuazaga)
  801. X13. In makefile.os2, support for $(FP), masm 5.x, match.s (Greg & Kai)
  802. X14. Added -w-cln in makefile.bor to avoid warning (David Kirschbaum)
  803. X15. VMS echo suppression code incorporated (Greg Roelofs)
  804. X16. Added fix to match.asm if WSIZE != 32768
  805. X17. Create .exe files directly for target scodos (Bill Davidsen)
  806. X18. Fixed the -0 bug (compressed size was doubled)
  807. X19. Changed -- (read names from stdin) to -@ to reserve -- for undoing
  808. X    the effects of ZIPOPT
  809. X20. Create zip entries for directories with the -r option, so that
  810. X    directory attributes can be saved. (Kai Uwe Rommel)
  811. X
  812. X------------------------ June 17  1992   version 1.8b ------------------------
  813. X1.  Changed -s (Software license) to -L (license) to avoid clash
  814. X    with the old shrink option.
  815. X2.  read_buf declared as extern only in zip.h
  816. X3.  avoid warnings in zip.c for Turbo C: while ((ch = *s) != '\0'
  817. X4.  suppressed unused variables mem_inbuf and mem_outbuf in bits.c
  818. X5.  Speed up the search for start of zip structures (pksfx files)
  819. X6.  Allow updates of an empty pksfx file (original file was destroyed)
  820. X7.  Keep correct offsets for pksfx files
  821. X8.  On MSDOS, in2ex() was updating the input argument. Also, do not
  822. X    force upper case: keep the name as it was in the old zip file.
  823. X    This is important for -f. Similarly, force lower case in ex2in()
  824. X    on MSDOS, except when dosify (-k) is imposed. I kept however the
  825. X    old code under the flag FORCE_UPPER in case I goofed.
  826. X9.  When growing a zip file with -g and interrupting it, the whole file was
  827. X    lost. We now attempt to restore the previous state of the file.
  828. X10. "zip -fo jjj", where jjj is a non-existent zipfile, used to dump core.
  829. X    We now emit a warning.
  830. X11. More generally, we emit a warning for all options assuming the presence
  831. X    of a zip file (-d,-f,-u,-g) if the zip file did not exist or was empty.
  832. X    Idem for "zip -o jjj" on non-existent or empty zip file.
  833. X12. Copy also the extended local entry in zipcopy().
  834. X13. Updated zip.1 and vms/vms_zip.rnh to describe the new features.
  835. X14. Fixed bug in zipsplit (wrong offsets for all files but first)
  836. X15. Added match.s, optimized 386 version of longest_match() for Unix and
  837. X    32 bit OS/2 (with gas).
  838. X16. Added os2/match32.asm, optimized 386 version of longest_match() for
  839. X    32 bit OS/2 (for assemblers using Intel syntax). NOT TESTED YET.
  840. X17. Added "assume DS: DGROUP" in match.asm to allow SS_NEQ_DS even with MSC.
  841. X18. Added include <malloc.h> in tailor.h for Unix. This is required on
  842. X    16-bit Unix.
  843. X19. Use init_upper() in os2zip.[ch]
  844. X20. Switched back to old tempname(): the new one could overwrite an existing
  845. X    file, it ignored tempath, and it caused problems on VMS for files with a
  846. X    '.' in the name. Kept however the old code if NO_MKTEMP is defined.
  847. X21. Use 0x1 instead of (unsigned)1 in definition of HSIZE (one compiler
  848. X    does not like the cast in an array definition).
  849. X22. Include VMSmunch.h in zip.c
  850. X23. On VMS, zip -o screwed up all offsets in pksfx files
  851. X
  852. X------------------------ June 18  1992   version 1.8c ------------------------
  853. X1.  Added missing comma in revision.h
  854. X2.  invlocal doesn't work on Cray, use mktime instead (Greg Roelofs)
  855. X3.  On VMS, use ctx=stm only to read zipfiles, not input files.
  856. X4.  Undo change 21 above, which breaks even more compilers
  857. X5.  Include dos.h in util.c and fix trivial compilation errors
  858. X6.  Undo change 1 of 1.8b: -L already used for OS/2 (Steve Salisbury)
  859. X7.  Do not create a zip entry for directory "." (Greg Roelofs)
  860. X8.  Avoid core dump when -@ is given before the zip file (and do
  861. X    the right thing).
  862. X
  863. X------------------------ June 19  1992   version 1.8d ------------------------
  864. X1.  Force calloc to take unsigned values. (Problem with one 16 bit
  865. X    compiler on AT&T 6300).
  866. X2.  Fixed fileio.c for Convex (Bill Davidsen)
  867. X3.  util_ was missing for zipnote and zipsplit in make_vaxc.com (Glenn Andrews)
  868. X4.  Added warning in zip.1 and below (do not update encrypted files
  869. X    with pkzip 1.10).
  870. X5.  Fixed fix 12 of 1.8b. I drink too much. (Confused bit 1 with bit 8).
  871. X6.  Updated install.doc
  872. X7.  Fixed result type of os2 version of init_upper().
  873. X8.  Added makefile entry for AT&T 6300 (Peter Mauzey)
  874. X9.  Fixed typo in descrip.mms
  875. X10. Removed zipfile.c warning: shift count exceeds width of value shifted
  876. X11. Fix enormous bug in init_upper for VMS (upper stayed as zero)
  877. X
  878. X------------------------ June 23  1992   version 1.8e ------------------------
  879. X1.  Don't include malloc.h by default (does not exist on VMS)
  880. X2.  Define calloc for 16 bit systems (required for AT&T 6300)
  881. X3.  Simpler make_vaxc.com (Greg Roelofs)
  882. X4.  New vms/descrip.mms and fixes in zipfile.c (Igor)
  883. X5.  seekable() must be true for in-memory compression.
  884. X6.  Undefine S_IFLNK if NO_SYMLINK (problems with VMS and SCO)
  885. X7.  Include descrip.h only once in fileio.c (Mike Freeman)
  886. X8.  New os2/match32.asm (untested) and makefile.os2.
  887. X9.  Added dosflag in zlist and flist entries, to force MSDOS file
  888. X    attributes. It is set if dosify is set, or (under OS/2) for a file
  889. X    on a FAT file system which does not have a long name (Kai-Uwe).
  890. X10. Added GetFileTime on OS/2 to avoid core dump on bad dates (Kai-Uwe)
  891. X11. New vms.c supporting deflation of extra headers
  892. X
  893. X------------------------ June 24  1992   version 1.8f ------------------------
  894. X1.  Incorporated (finally!) Mac support. *Untested*. (James E. O'Dell)
  895. X2.  Another long awaited change: Atari ST. Also *untested*.
  896. X    (martin@atlantic.cs.unb.ca)
  897. X3.  New makefile.os2, as usual. (Kai-Uwe)
  898. X4.  Support for Watcom C in os2zip.c. *Not yet working*. (Kai-Uwe).
  899. X5.  I forgot to output the length for stored blocks...
  900. X
  901. X------------------------ June 29  1992   version 1.8g ------------------------
  902. X1.  New os2zip.c and makefile.os2 as usual.
  903. X2.  In the VMS makefiles, define the symbols systematically so that
  904. X    people won't forget to update them. (Fed up with the reports that
  905. X    zip does not accept parameters).
  906. X3.  Use -L for software License and -E for Extended attributes
  907. X4.  Added -F 1000 in makefile entry for scodos (Bill Davidsen)
  908. X5.  Replaced strcmp with namecmp in zip.c for check of zipfile name.
  909. X6.  New os2/match32.asm (still not working)
  910. X7.  Do not close stdin (check for null ifile in zipup.c).
  911. X8.  signal handlers for zip and zipcloak fixed to restore echo for VMS
  912. X9.  slightly cleaner VMS echo calls in fileio.c
  913. X10. stricmp missing from VMS zipsplit, zipnote:  since UTIL was unused for
  914. X    util.c, I used it to specify stricmp only; then I had to change some of
  915. X    the makefiles which previously used util_.* to use util.*, and I added
  916. X    util_.obj to OBJS and OBJN in all of the VMS makefiles. (Greg)
  917. X11. ifdef'd out the debugging commentary in vms.c (Greg)
  918. X12. new VMS makefile for use with (free) MAKE/VMS (Greg)
  919. X13. Eliminate some compiler warnings from BCC, MSC, gcc (Onno van der Linden)
  920. X14. Do not use MSDOS version of init_upper for djgpp (Onno van der Linden)
  921. X15. In msdos/makefile.gcc, added util_.o to OBJN and OBJS, and used asm version
  922. X    match.o (Onno van der Linden)
  923. X16. Added install target in makefile (Alvin Koh)
  924. X17. Default makefile entry is named 'all'.
  925. X18. fixes to vms.c for gcc (Igor)
  926. X19. Define S_IWRITE as S_IWUSR for Minix only (problem on X/OS) (Fulvio Marino)
  927. X20. Added xos makefile entry  (Fulvio Marino)
  928. X21. In VMS, files without an extension are now stored without the dot (Greg
  929. X    and Igor).
  930. X22. Save/restore ebx in match.s and match32.asm
  931. X23. Fixed MAX_DIST in match.s (the asm code produced different results
  932. X    than the C code)
  933. X24. Fixed the -b option: allow ENOTSAM instead of EXDEV (used by Turbo C).
  934. X25. Do not complain about zip files created on MSDOS with versions of zip
  935. X    above 1.0.
  936. X
  937. X------------------------ Aug 14  1992   version 1.9a ------------------------
  938. X1.  Changed -S to -L in help screen
  939. X2.  Do not declare chmod for aegis (George Grimes)
  940. X3.  Cleaner vms/make_gcc.com (Mike Freeman)
  941. X4.  Disabled built-in functions for Linux (Arnt Gulbrandsen)
  942. X5.  Added a description of the deflation algorithm in algorith.doc.
  943. X6.  Removed ship, now distributed separately.
  944. X7.  Added the CRC for in-memory compression. The extra-field format is now
  945. X    the official PKWare format (Kai-Uwe)
  946. X8.  On OS/2, force lower case names for FAT files if -k is not given. (Kai-Uwe)
  947. X9.  Allow coutry dependent mapping for upper to lower case. (Kai-Uwe)
  948. X10. Use namecmp instead of stricmp which was confusing. (Onno van der Linden)
  949. X11. Avoid some warnings in deflate.c (Onno van der Linden)
  950. X12. Avoid one warning in crypt.c, and distribute it separately.
  951. X13. Call init_upper() for all utilities and add util_.o in makefiles (Kai-Uwe)
  952. X
  953. X------------------------ Aug 18  1992   version 1.9b ------------------------
  954. X1.  Fixes for Windows NT (Dave Feinleib)
  955. X2.  Avoid two warnings for Ultrix (makefile and fileio.c)
  956. X3.  Finally removed the declaration of chmod(), which causes endless
  957. X    new patches for each new target.
  958. X4.  Allow -L for license in the utilities (zipsplit, zipnote, zipcloak).
  959. X5.  Mention funzip in zip.1.
  960. X6.  Untabify all sources files (for more reliable context diffs)
  961. X7.  Fix bug in trees.c dealing with bit length overflow.
  962. X8.  Fix bug in zipup.c when reading from stdin: if (ifile) does not
  963. X    produce the expected result.
  964. X9.  Avoid duplication of bug list in zip.1 and history.
  965. X10. Removed ship from zip.1.
  966. X
  967. X------------------------ Aug 20  1992   version 1.9 ------------------------
  968. X1.  Renamed the atari files to avoid name conflicts (for unzip -j).
  969. X2.  Don't tell 'use zip -L' in zipnote and zipsplit.
  970. X3.  Add a rule for util_.ojb in the msdos and atari makefiles
  971. X4.  Fixed compilation option for util_.obj in makefile.msc (msc 5.1 bug)
  972. X5.  Added the 'Where' file.
  973. X6.  More information about zip in Readme.
  974. X7.  Fixed install.doc.
  975. X8.  Fixed vms/vms_zip.rnh
  976. X9.  Fixed init_upper() in util.c and os2zip.c (Kai-Uwe)
  977. X
  978. X
  979. XThings to check or to be done (see also BUGS section in zip.1):
  980. X
  981. X- zip should not create 'stored' files with extended local headers
  982. X
  983. X- There is not (yet) a way to undo the effect of ZIPOPT
  984. X
  985. X- Under MSDOS, zip will find hidden and system files, but not set the
  986. X  attributes appropriately in the zip file so that unzip can restore them.
  987. X
  988. X- it is possible in weird cases to add a zipfile to itself
  989. X
  990. X- On OS/2, zip refuses to match some names, such as those beginning with an
  991. X  exclamation mark. Same for names starting with #, possibly more.
  992. END_OF_FILE
  993.   if test 49244 -ne `wc -c <'history'`; then
  994.     echo shar: \"'history'\" unpacked with wrong size!
  995.   fi
  996.   # end of 'history'
  997. fi
  998. if test ! -d 'mac' ; then
  999.     echo shar: Creating directory \"'mac'\"
  1000.     mkdir 'mac'
  1001. fi
  1002. if test ! -d 'msdos' ; then
  1003.     echo shar: Creating directory \"'msdos'\"
  1004.     mkdir 'msdos'
  1005. fi
  1006. if test ! -d 'nt' ; then
  1007.     echo shar: Creating directory \"'nt'\"
  1008.     mkdir 'nt'
  1009. fi
  1010. if test ! -d 'os2' ; then
  1011.     echo shar: Creating directory \"'os2'\"
  1012.     mkdir 'os2'
  1013. fi
  1014. if test -f 'tailor.h' -a "${1}" != "-c" ; then 
  1015.   echo shar: Will not clobber existing file \"'tailor.h'\"
  1016. else
  1017.   echo shar: Extracting \"'tailor.h'\" \(6875 characters\)
  1018.   sed "s/^X//" >'tailor.h' <<'END_OF_FILE'
  1019. X/* tailor.h -- Not copyrighted 1992 Mark Adler */
  1020. X
  1021. X/* const's are inconsistently used across ANSI libraries--kill for all
  1022. X   header files. */
  1023. X#ifndef __GO32__
  1024. X#  define const
  1025. X#endif
  1026. X
  1027. X
  1028. X/* Define MSDOS for Turbo C as well as Microsoft C */
  1029. X#ifdef __POWERC                 /* For Power C too */
  1030. X#  define __TURBOC__
  1031. X#endif /* __POWERC */
  1032. X#if (defined(__TURBOC__) && !defined(MSDOS))
  1033. X#  define MSDOS
  1034. X#endif
  1035. X
  1036. X#ifdef ATARI_ST
  1037. X#  undef MSDOS   /* avoid the MS-DOS specific includes */
  1038. X#endif
  1039. X
  1040. X/* Use prototypes and ANSI libraries if _STDC__, or Microsoft or Borland C,
  1041. X * or Silicon Graphics, or IBM C Set/2, or GNU gcc under emx.
  1042. X */
  1043. X#if (defined(__STDC__) || defined(MSDOS) || defined(sgi))
  1044. X#  ifndef PROTO
  1045. X#    define PROTO
  1046. X#  endif /* !PROTO */
  1047. X#  define MODERN
  1048. X#endif /* MSDOS */
  1049. X
  1050. X#if (defined(__IBMC__) || defined(__EMX__) || defined(ATARI_ST))
  1051. X#  ifndef PROTO
  1052. X#    define PROTO
  1053. X#  endif /* !PROTO */
  1054. X#  define MODERN
  1055. X#endif
  1056. X
  1057. X
  1058. X#ifdef __IBMC__
  1059. X#  define S_IFMT 0xF000
  1060. X#endif /* __IBMC__ */
  1061. X
  1062. X#ifdef __EMX__
  1063. X#  define __32BIT__
  1064. X#endif /* __EMX__ */
  1065. X
  1066. X#ifdef __WATCOMC__
  1067. X#  define __32BIT__
  1068. X#endif
  1069. X
  1070. X#if (defined(__OS2__) && !defined(OS2))
  1071. X#  define OS2
  1072. X#endif
  1073. X
  1074. X
  1075. X/* Turn off prototypes if requested */
  1076. X#if (defined(NOPROTO) && defined(PROTO))
  1077. X#  undef PROTO
  1078. X#endif
  1079. X
  1080. X
  1081. X/* Used to remove arguments in function prototypes for non-ANSI C */
  1082. X#ifdef PROTO
  1083. X#  define OF(a) a
  1084. X#else /* !PROTO */
  1085. X#  define OF(a) ()
  1086. X#endif /* ?PROTO */
  1087. X
  1088. X
  1089. X/* Memory allocation. */
  1090. X#ifdef MACOS
  1091. X#  define DYN_ALLOC
  1092. X#endif
  1093. X#if (defined(MSDOS) && !defined(__GO32__) && !defined(WIN32))
  1094. X#  ifdef __TURBOC__
  1095. X#    include <alloc.h>
  1096. X#    define DYN_ALLOC
  1097. X     /* Turbo C 2.0 does not accept far static allocations in small model */
  1098. X     void far * fcalloc OF((unsigned items, unsigned size));
  1099. X#  else /* !__TURBOC__ */
  1100. X#    include <malloc.h>
  1101. X#    define farmalloc _fmalloc
  1102. X#    define farfree   _ffree
  1103. X#    define fcalloc(nitems,itemsize) halloc((long)(nitems),(itemsize))
  1104. X#  endif /* ?__TURBOC__ */
  1105. X#else /* !MSDOS */
  1106. X#  if defined(WIN32)
  1107. X#    include <malloc.h>
  1108. X#  endif
  1109. X#  ifdef far
  1110. X#    undef huge
  1111. X#    undef far
  1112. X#    undef near
  1113. X#  endif
  1114. X#  define huge
  1115. X#  define far
  1116. X#  define near
  1117. X#  define farmalloc malloc
  1118. X#  define farfree   free
  1119. X#  define fcalloc(items,size) calloc((unsigned)(items), (unsigned)(size))
  1120. X#  ifndef PROTO
  1121. X     extern char *calloc(); /* essential for 16 bit systems (AT&T 6300) */
  1122. X#  endif
  1123. X#endif /* ?MSDOS */
  1124. X
  1125. X
  1126. X#if (defined(OS2) && !defined(MSDOS))
  1127. X/* MSDOS is defined anyway with MS C 16-bit. So the block above works.
  1128. X * For the 32-bit compilers, MSDOS must not be defined in the block above. */
  1129. X#  define MSDOS
  1130. X/* inherit MS-DOS file system etc. stuff */
  1131. X#endif
  1132. X    
  1133. X
  1134. X/* Define MSVMS if either MSDOS or VMS defined */
  1135. X#if defined(MSDOS) || defined(VMS)
  1136. X#  define MSVMS
  1137. X#endif
  1138. X
  1139. X/* case mapping functions. case_map is used to ignore case in comparisons,
  1140. X * to_up is used to force upper case even on Unix (for dosify option).
  1141. X */
  1142. X#if defined(OS2) || defined(MSDOS) || defined(VMS)
  1143. X#  define case_map(c) upper[c]
  1144. X#  define to_up(c)    upper[c]
  1145. X#else
  1146. X#  define case_map(c) (c)
  1147. X#  define to_up(c)    ((c) >= 'a' && (c) <= 'z' ? (c)-'a'+'A' : (c))
  1148. X#endif
  1149. X
  1150. X/* Define void, voidp, and extent (size_t) */
  1151. X#include <stdio.h>
  1152. X#ifdef MODERN
  1153. X#  if (!defined(M_XENIX) && !(defined(__GNUC__) && defined(sun)))
  1154. X#    include <stddef.h>
  1155. X#  endif /* !M_XENIX */
  1156. X#  include <stdlib.h>
  1157. X   typedef size_t extent;
  1158. X   typedef void voidp;
  1159. X#else /* !MODERN */
  1160. X   typedef unsigned int extent;
  1161. X#  define void int
  1162. X   typedef char voidp;
  1163. X#endif /* ?MODERN */
  1164. X
  1165. X/* Get types and stat */
  1166. X#ifdef VMS
  1167. X#  include <types.h>
  1168. X#  include <stat.h>
  1169. X#else /* !VMS */
  1170. X#  ifdef MACOS
  1171. X#    include <types.h>
  1172. X#    include <stddef.h>
  1173. X#    include <Files.h>
  1174. X#    include <StandardFile.h>
  1175. X#    include <Think.h>
  1176. X#    include <LoMem.h>
  1177. X#    include <Pascal.h>
  1178. X#    include "macstat.h"
  1179. X#  else
  1180. X#    ifdef ATARI_ST
  1181. X#      include <ext.h>
  1182. X#      include <tos.h>
  1183. X#    else
  1184. X#      include <sys/types.h>
  1185. X#      include <sys/stat.h>
  1186. X#    endif
  1187. X#  endif
  1188. X#endif /* ?VMS */
  1189. X
  1190. X/* Some systems define S_IFLNK but do not support symbolic links */
  1191. X#if defined (S_IFLNK) && (defined(NO_SYMLINK) || defined(MACOS))
  1192. X#  undef S_IFLNK
  1193. X#endif
  1194. X
  1195. X/* Cheap fix for unlink on VMS */
  1196. X#ifdef VMS
  1197. X#  define unlink delete
  1198. X#endif /* VMS */
  1199. X
  1200. X
  1201. X/* For Pyramid */
  1202. X#ifdef pyr
  1203. X#  define strrchr rindex
  1204. X#  define ZMEM
  1205. X#endif /* pyr */
  1206. X
  1207. X
  1208. X/* File operations--use "b" for binary if allowed or fixed length 512 on VMS */
  1209. X#ifdef VMS
  1210. X#  define FOPR  "r","ctx=stm"
  1211. X#  define FOPM  "r+","ctx=stm","rfm=fix","mrs=512"
  1212. X#  define FOPW  "w","ctx=stm","rfm=fix","mrs=512"
  1213. X#else /* !VMS */
  1214. X#  ifdef MODERN
  1215. X#    define FOPR "rb"
  1216. X#    define FOPM "r+b"
  1217. X#    define FOPW "wb"
  1218. X#  else /* !MODERN */
  1219. X#    define FOPR "r"
  1220. X#    define FOPM "r+"
  1221. X#    define FOPW "w"
  1222. X#  endif /* ?MODERN */
  1223. X#endif /* VMS */
  1224. X
  1225. X/* Open the old zip file in exclusive mode if possible (to avoid adding
  1226. X * zip file to itself).
  1227. X */
  1228. X#ifdef OS2
  1229. X#  define FOPR_EX FOPM
  1230. X#else
  1231. X#  define FOPR_EX FOPR
  1232. X#endif
  1233. X
  1234. X/* Define this symbol if your target allows access to unaligned data.
  1235. X * This is not mandatory, just a speed optimization. The compressed
  1236. X * output is strictly identical.
  1237. X */
  1238. X#if defined(MSDOS) || defined(i386) || defined(mc68020) || defined(vax)
  1239. X#   define UNALIGNED_OK
  1240. X#endif
  1241. X
  1242. X
  1243. X/* Under MSDOS we may run out of memory when processing a large number
  1244. X * of files. Compile with MEDIUM_MEM to reduce the memory requirements or
  1245. X * with SMALL_MEM to use as little memory as possible.
  1246. X */
  1247. X#ifdef SMALL_MEM
  1248. X#   define CBSZ 2048 /* buffer size for copying files */
  1249. X#   define ZBSZ 2048 /* buffer size for temporary zip file */
  1250. X#else
  1251. X# ifdef MEDIUM_MEM
  1252. X#   define CBSZ 8192
  1253. X#   define ZBSZ 8192
  1254. X# else
  1255. X#  if defined(OS2) && !defined(M_I86SM)
  1256. X#   define CBSZ 0xE000
  1257. X#   define ZBSZ 0x7F00
  1258. X    /* The C library of some compilers does not allow a buffer size > 32K */
  1259. X#  else
  1260. X#   define CBSZ 16384
  1261. X#   define ZBSZ 16384
  1262. X#  endif
  1263. X# endif
  1264. X#endif
  1265. X
  1266. X#ifdef ATARI_ST
  1267. X#  define MSDOS
  1268. X#  define MSVMS
  1269. X#  ifndef O_BINARY
  1270. X#    define O_BINARY 0
  1271. X#  endif
  1272. X#  ifndef S_IFMT
  1273. X#    define S_IFMT        (S_IFCHR|S_IFREG|S_IFDIR)
  1274. X#  endif
  1275. X
  1276. X/* a whole bunch of functions needs Tos '\\' filnames
  1277. X * instead of '/',  the translation functions are in fileio.c:
  1278. X */
  1279. X#  define unlink    st_unlink
  1280. X#  define chmod     st_chmod
  1281. X#  define mktemp    st_mktemp
  1282. X#  define fopen     st_fopen
  1283. X#  define open      st_open
  1284. X#  define SSTAT     st_stat
  1285. X#  define findfirst st_findfirst
  1286. X#  define link      st_rename
  1287. X#  define rmdir     st_rmdir
  1288. X
  1289. X  int st_unlink    OF((char *));
  1290. X  int st_chmod     OF((char *, int));
  1291. X  char *st_mktemp  OF((char *));
  1292. X  FILE *st_fopen   OF((char *, char *));
  1293. X  int st_open      OF((char *, int));
  1294. X  int st_stat      OF((char *, struct stat *));
  1295. X  int st_findfirst OF((char *, struct ffblk *, int));
  1296. X  int st_rename    OF((char *, char *));
  1297. X  int st_rmdir     OF((char *));
  1298. X#else
  1299. X#  define SSTAT      stat
  1300. X#endif
  1301. X   
  1302. X/* end of tailor.h */
  1303. END_OF_FILE
  1304.   if test 6875 -ne `wc -c <'tailor.h'`; then
  1305.     echo shar: \"'tailor.h'\" unpacked with wrong size!
  1306.   fi
  1307.   # end of 'tailor.h'
  1308. fi
  1309. if test ! -d 'vms' ; then
  1310.     echo shar: Creating directory \"'vms'\"
  1311.     mkdir 'vms'
  1312. fi
  1313. echo shar: End of archive 1 \(of 11\).
  1314. cp /dev/null ark1isdone
  1315. MISSING=""
  1316. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  1317.     if test ! -f ark${I}isdone ; then
  1318.     MISSING="${MISSING} ${I}"
  1319.     fi
  1320. done
  1321. if test "${MISSING}" = "" ; then
  1322.     echo You have unpacked all 11 archives.
  1323.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1324. else
  1325.     echo You still must unpack the following archives:
  1326.     echo "        " ${MISSING}
  1327. fi
  1328. exit 0
  1329. exit 0 # Just in case...
  1330.