Annotation of coherent/b/bin/zip/history, revision 1.1

1.1     ! root        1: Note, this history contains mail addresses and ftp locations that no longer
        !             2: exist, such as addresses at wsmr-simtel20 and directory names containing
        !             3: w8sdz, among others.  For problems, the correct email address is
        !             4: [email protected].
        !             5: 
        !             6: ------------------------ Nov  7  1990   version 0.0 ------------------------
        !             7: ------------------------ Nov  8  1990   version 0.1 ------------------------
        !             8: ------------------------ Nov 12  1990   version 0.2 ------------------------
        !             9: ------------------------ Nov 14  1990   version 0.3 ------------------------
        !            10: Thank you for your comments.  Here is Zip 0.3 with almost all of that fixed.
        !            11: The changes include:
        !            12: 
        !            13: 1. Put \n\ for newlines in long strings (everyone had this problem).
        !            14: 2. Wrote my own bsearch (called search---different args).
        !            15: 3. Wrote my own timelocal (called invlocal), used whether STDC or not.
        !            16:    (Note to Greg: look at the code---I found a simple way to do it.)
        !            17: 4. -m now deletes empty directories also.
        !            18: 5. Changed crc.c to util.c and put search() in util.c.
        !            19: 6. Changed "void *" to "voidp *" and made voidp void for STDC, else char.
        !            20: 7. Removed -a option.
        !            21: 8. Some minor changes to zip.doc.
        !            22: 
        !            23: I did not do anything about Cliff Manis's problem with DIR not being
        !            24: defined.  DIR should have been defined in sys/dir.h.  If it wasn't, then
        !            25: there's something wrong with dir.h, or it is missing, or the opendir, etc.
        !            26: functions are missing.  I don't really want to think about what to do for
        !            27: the latter possibility.
        !            28: 
        !            29: NUnzip 3.99 does not appear to be Unix-ready.  It fails for file names longer
        !            30: than 12 characters (Segmentation fault), cannot find explicit names that
        !            31: do not contain a dot, and does not notice the Unix identifier (which should
        !            32: switch off name to lower-case mapping).
        !            33: 
        !            34: ------------------------ Nov 20  1990   version 0.4 ------------------------
        !            35: Yo Zippers,
        !            36: 
        !            37: Here is a first attempt at a Zip intended to work on System V.  Try using
        !            38: "make sysv" for such systems.  I also included replacements for memset()
        !            39: and memcmp() by Bill Davidsen and James Dugal for systems without those.
        !            40: Use "make old" to include those routines.  Sun's use getdents() like Sys V,
        !            41: even though it's BSD, so use "make sun".  For others, try just "make".
        !            42: 
        !            43: When using "make" a second time with a different request, it's best to erase
        !            44: all the .o files to force recompiling everything.
        !            45: 
        !            46: What follows are the changes I made and some things to try if you get it
        !            47: compiled.  Have fun.
        !            48: 
        !            49: Mark
        !            50: 
        !            51: 
        !            52: Changes from Zip 0.3 to Zip 0.4:
        !            53: 
        !            54: 1.  Changed third arg of search() to size_t to make lint happier.
        !            55: 2.  Replaced zip.doc with a man page, zip.1 (raw) and zip.man (formatted).
        !            56: 3.  rename() replaced with link() and unlink().
        !            57: 4.  Fixed vem in central header and added REVISION and REVDATE #define's
        !            58:     to zip.h.  (Didn't read Phil's appnote.txt carefully enough there.)
        !            59: 5.  Removed prototypes except for development host (NeXT).  (They're only
        !            60:     there for my benefit anyway---they should not affect the resulting
        !            61:     code.  Consider them some meager documentation.)
        !            62: 6.  Changed rindex() to strrchr().
        !            63: 7.  Improved behavior on a write failure when -b is used.
        !            64: 8.  Added Bill Davidsen's and James Dugal's memset(), memcpy(), and
        !            65:     memcmp() routines under the trusty ZMEM #define.
        !            66: 9.  Check that zip file is writeable before doing any real work.
        !            67: 10. Added #ifdef REGEX to use regcmp(), regex() instead of re_comp(),
        !            68:     re_exec().  (We'll see if this works.)
        !            69: 11. Replaced opendir(), readdir(), closedir() with my own opend(), readd(),
        !            70:     and closed() routines that use getdirentries() on BSD and getdents() on
        !            71:     System V (I hope) and Sun's.  An #ifdef DIRENT selects getdents().
        !            72: 12. zip.h no longer #includes string.h, instead defining the string
        !            73:     functions used explicitly.
        !            74: 
        !            75: 
        !            76: If you get Zip 0.4 to compile, here are some things to test:
        !            77: 
        !            78: 1.  Try zipping up some stuff, of course.  Use all the options that are
        !            79:     implemented.  Especially try -rp and -rpm on a directory tree (use
        !            80:     *test* files and directories, of course).
        !            81: 2.  Naturally check with unzip -t, but also check with "zip xxx" where
        !            82:     xxx.zip is the zip file.  This should say "nothing to do", but if it
        !            83:     says "error in zip file structure", there's a problem.
        !            84: 3.  After zipping, check that there are no $Z* files leftover.
        !            85: 4.  Try using -b, specifying a path on another device.  Check for $Z*'s.
        !            86: 5.  Try -d and a regular expression (like \*.o) on a zip file.
        !            87: 6.  And I'm interested in timing---try it on a 500K or so text file.
        !            88: 
        !            89: ------------------------ Nov 27  1990   version 0.5 ------------------------
        !            90: Hail fellow zippers,
        !            91: 
        !            92: Here's Zip 0.5.  The biggie is it now includes implosion, courtesy of Rich
        !            93: Wales.  Even as we speak, he is working on new algorithms for implode that
        !            94: promise to be significantly faster.  He might even get a paper out of it ...
        !            95: 
        !            96: You can use the -s option (shrink only) when testing to save a little time,
        !            97: but also try it normally to test implosion (if you test with text files
        !            98: of reasonable length, implosion will be chosen for most of them).  Also, for
        !            99: speed testing of implosion, use -i to not waste time trying to shrink.
        !           100: 
        !           101: Including implosion about doubles the size of zipnn.tar.Z, so I would like
        !           102: some input on distributing subsequent versions.  Would y'all like to keep
        !           103: on getting the uuencoded version via mail, or would you prefer a notice
        !           104: about availability via anonymous ftp on simtel20.army.mil in <w8sdz.zip>?
        !           105: (I have been sending the previous versions to Keith to put there, and will
        !           106: continue to do so.  I do not know what the lag time is for him to move it
        !           107: there.)
        !           108: 
        !           109: The other important change is that this is another attempt at getting the
        !           110: directory access routines working on all systems.  Read the installation
        !           111: part of the manual page (zip.man).  And if you feel like, read the whole
        !           112: thing.  I'm also taking suggestions for and bugs in the documentation.
        !           113: 
        !           114: The differences from Zip 0.4 include:
        !           115: 
        !           116: 1. Changed all occurences of "size_t" to "extent" and typedef'ed extent
        !           117:    to size_t (after an #include <stddef.h>) for ANSI C, or unsigned int
        !           118:    otherwise.  If anyone finds that they have a non ANSI C, that size_t
        !           119:    is defined, and that it is not the size of the compiler's int, then
        !           120:    please let me know.
        !           121: 2. Changed help() to put the help text in a static array of strings and
        !           122:    then printf() for each line.  Some compilers barfed on the long
        !           123:    string.  Suggested by [email protected].
        !           124: 3. Added Rich Wales' implode routines, made their inclusion the default
        !           125:    (changed #ifdef IMPLODE to #ifndef NOIMPLODE).
        !           126: 4. Put "extern int errno;" in unixfile.c (redundant extern's should be ok).
        !           127: 5. Minor changes to the man page (zip.1 and zip.man).
        !           128: 6. Added warnings for names given on the command line that are not matched.
        !           129:    Lack pointed out by [email protected] (George).
        !           130: 7. Changed back to opendir(), etc. on BSD systems.
        !           131: 8. Added NDIR #define for HPUX to #include <ndir.h> instead of <sys/dir.h>.
        !           132: 9. Redid Makefile, adding next (use shared library), sysvpw (System V's
        !           133:    that require linking the libPW library for regex routines), and hpux
        !           134:    (see #8 above).
        !           135: 
        !           136: As usual, report problems to [email protected].  If you wish,
        !           137: you can, in addition, send the same report to me ([email protected])
        !           138: or Rich ([email protected]) if the problem is with implosion (i* files) for
        !           139: quicker reponse.
        !           140: 
        !           141: your humble servant,
        !           142: Mark Adler
        !           143: ------------------------ Dec  7  1990   version 0.6 ------------------------
        !           144: Greetings and Felicitations Honorable Zip Compatriots,
        !           145: 
        !           146: I have uploaded Zip 0.6, which incorporates most of your helpful comments,
        !           147: to Simtel20.Army.Mil, and it should evenually end up in <W8SDZ.ZIP> as
        !           148: ZIP06.TAR-Z.  The most significant change is the addition of encryption
        !           149: both as the -e option in Zip, and a new program, ZipCloak, that encrypts
        !           150: and decrypts zip entries.  This surely adds some new portability problems,
        !           151: due to the getp() routine which reads a password from the terminal with no
        !           152: echoing.  We'll see how well this flies ...
        !           153: 
        !           154: If someone wants to PKZIP up the tar.Z file, please do so.  I didn't zip
        !           155: it up myself because a) I'm lazy, and b) PKZIP can compress it better
        !           156: anyhow, and I don't have a PC.
        !           157: 
        !           158: Also, there is an EXPORT symbol used to remove encryption, so I can make
        !           159: an export version that does not have -e or ZipCloak.  This version will
        !           160: simply be missing a few source files and have a different Makefile.
        !           161: 
        !           162: I also added a few systems to the Makefile, and made some other changes to
        !           163: it based on all your detailed comments.  If it still works after all that,
        !           164: I'll be amazed.
        !           165: 
        !           166: Those and other changes from 0.5 to 0.6 are detailed at the end of this note.
        !           167: 
        !           168: I have not addressed the portability problem with the implode routines,
        !           169: since that is Rich's domain.  I have no idea what is causing it.  (For those
        !           170: who don't know, one system produced remarkable 90% compression rates with
        !           171: implode, but alas, it is a bug.)
        !           172: 
        !           173: One fellow complained that zipping up the README file results in a zip file
        !           174: that is larger than the original, even though Zip claims it compressed it.
        !           175: Well, it did compress it, but the ZIP file format has an overhead of
        !           176: 76+2*N bytes per file+22 bytes, where N is the length of the file name.
        !           177: And that's without comments or "extra" information.  So, a zip file with a
        !           178: single file whose name has six characters has an overhead of 110 bytes.
        !           179: README gets shrunk by 16% from 274 bytes to 230 bytes, resulting in a total
        !           180: zip file size of 340 bytes---larger than the original file (274 bytes).
        !           181: The moral is don't expect zip to compress a single small file.  The other
        !           182: moral is use unzip -v to see the compression.
        !           183: 
        !           184: Someone else asked about multi-disk zip files.  I'm not sure I believe in
        !           185: those, since PKZIP and PKUNZIP do not appear to suppport them (though it is
        !           186: part of the ZIP file definition in APPNOTE.TXT).  What I was planning on
        !           187: doing for that case was to write a ZipSplit program that would take a large
        !           188: zip file and try to optimally split it into the fewest number of zip files
        !           189: that are all less than the specified size.  Each would be a complete, stand
        !           190: alone zip file---not part of a single, multi-disk zip file.  There would
        !           191: also be a ZipMerge program.
        !           192: 
        !           193: This is the version of Zip that will live in infamy (note the revision date).
        !           194: Of course, some current Presidents of the United States think that should be
        !           195: September 7th, but I won't name any names.
        !           196: 
        !           197: I am going on vacation for about two weeks, so I expect to find many new
        !           198: problems reported upon my return.
        !           199: 
        !           200: And lastly, for my Holiday Greetings: Party On Dudes.
        !           201: 
        !           202: Mark Adler
        !           203: [email protected]
        !           204: 
        !           205: 
        !           206: Here are the changes from Zip 0.5 to Zip 0.6:
        !           207: 
        !           208: 1.  Minor documentation changes (zip.1 and zip.man).
        !           209: 2.  Fixed an embarrasing lack of recursion in opend/readd/closed functions
        !           210:     that only existed in 0.5.
        !           211: 3.  Moved $(LDFLAGS) to end of the linking command line in Makefile.
        !           212: 4.  Added make dnix for DNIX 5.2, 5.3 not using optimization (no -O).
        !           213: 5.  Wrote ZipCloak for encryption and decryption.
        !           214: 6.  Rich changed the output routines of implode to use zfwrite and zputc to
        !           215:     provide hooks for encryption (defined in crypt.h).  Also removed
        !           216:     function prototypes unless PROTO defined.
        !           217: 7.  Added encryption (-e) to Zip.
        !           218: 8.  Added make pyramid (use rindex() instead of strrchr()).
        !           219: 9.  Changed make to $(MAKE) and cc to $(CC) in Makefile.
        !           220: 10. Took out strip in Makefile.
        !           221: 11. Changed year from 1991 to 1990.  (How'd *that* get in there?  Of course,
        !           222:     it's not as bad as when I wrote a check the other day and dated it 1977.
        !           223:     I think my brain cell isn't working as well as it used to.)
        !           224: 12. Added make cray (use scc instead of cc).
        !           225: 13. Added make amdahl (use system() instead of rmdir()).
        !           226: 14. Added entry of one-line comments for added files (-c).
        !           227: 15. Put comment delimiters around name following #endif's in Rich's code.
        !           228: 
        !           229: ------------------------ Feb 13  1991   version 0.7 ------------------------
        !           230: Fellow stuck zippers,
        !           231: 
        !           232: Well folks, it's been a while since 0.6. so there have been a lot of
        !           233: changes on the way to 0.7.  The exhaustive listing is below, but here are
        !           234: some highlights ...
        !           235: 
        !           236: Implode now (appears) to be PKUNZIP compatible.  There were many odd
        !           237: little requirements implosed by the coding of PKUNZIP that were obtained
        !           238: from Phil Katz and associates.  Now that Rich has that working, he will
        !           239: likely be working on much faster string matching routines to speed up
        !           240: implode.
        !           241: 
        !           242: User interrupts (control-C or kill) are now caught and the temporary files
        !           243: are deleted, making for a clean getaway.
        !           244: 
        !           245: Self-extracting zip files for MSDOS can now be processed, with the
        !           246: extensions zip, ZIP, exe, or EXE.  This allows you to make self-extracting
        !           247: zip files for MSDOS by taking an existing one (like PKZ110.EXE) and
        !           248: deleting all the entries to get a prototype self-extracting zip file that
        !           249: can be copied and added to.  Of course, you should only do this if you are
        !           250: a registered user of PKZIP.  Note that if the file does not end in .zip,
        !           251: you have to give the full name.
        !           252: 
        !           253: I have relaxed some of the restrictions on zip files to allow processing
        !           254: ones with "authenticity verification" (applied by the PUTAV program that
        !           255: comes with PKZIP).  Of course, the authenticity no longer checks out if
        !           256: you muck with the file, but at least you can muck with it now.
        !           257: 
        !           258: The Makefile has been considerably simplified, thanks to suggestions from
        !           259: Jean-Loup Gailly.  Also, I wrote my own sh expression matcher, eliminating
        !           260: the regular expression hassles, and the REGEX symbol and -lPW options in
        !           261: the Makefile.
        !           262: 
        !           263: Many, many cosmetic changes, the most dangerous of which was turning on
        !           264: prototypes again in the hopes we can get them to work.  If they cause you
        !           265: problems, record the problems (for me), and then add a -DNOPROTO to the
        !           266: appropriate line in the Makefile and try again.
        !           267: 
        !           268: This version now compiles under Microsoft C 5.1 and Turbo C++ 1.0, with
        !           269: much thanks to Jean-Loup Gailly.  I say "compiles" and not "works" because
        !           270: I have not thoroughly tested it.  It does work, but there may be errors in
        !           271: the port as well as errors in the design.  By the latter I mean that there
        !           272: may be some disagreement over what you expect it to do and what it does,
        !           273: especially with regards to upper and lower case names and wildcard
        !           274: patterns.  Also, the implode routines do not yet work under MSDOS, so the
        !           275: compilations are done using NOIMPLODE.  There are two dumb batch files to
        !           276: do the compile: doturboc.bat and domsc.bat.  If someone would like to
        !           277: write make files for the make utilities that come with those languages,
        !           278: please be my guest.  I'm just too lazy.  However, I would probably resist
        !           279: including make files that require a make utility that does not come with
        !           280: those languages, be it commercial, shareware, or free.
        !           281: 
        !           282: There are two new programs: ZipSplit and Ship.  ZipSplit tries to split a
        !           283: big zip file into the smallest number of zip files less than a specified
        !           284: size.  This is to aid in using zip to backup to floppies.  It has the
        !           285: limitation that it cannot break up an entry in a zip file, since it makes
        !           286: complete, standalone zip files.  This means if any entry is larger than
        !           287: the specified size (plus some overhead), zipsplit will give up and not do
        !           288: the split.  It does *not* implement the multi-disk zip file format implied
        !           289: in APPNOTE.TXT.  ZipSplit will optionally write an index file and deduct
        !           290: the size of that file from the first zip file so both will fit on the
        !           291: first disk.
        !           292: 
        !           293: Ship is a fixed-up version of a program I have been using myself for some
        !           294: time in place of uuencode/uudecode.  It's purpose is to facilitate sending
        !           295: zip files through the mail.  It uses a more efficient coding scheme than
        !           296: uuencode (four bytes per five characters instead of three bytes per four
        !           297: characters) and includes a crc at the end of each file to check the
        !           298: veracity what was received.  It can split its output to a specified size
        !           299: and recombine it automatically at the other end, verifying the sequence.
        !           300: It can also mail the parts to a specified address, with subject lines
        !           301: identifying the parts, instead of making a bunch of files that you're just
        !           302: going to mail and delete anyway.  Example:
        !           303: 
        !           304:      % ship -500 -m [email protected] README zip07.zip
        !           305:      README shipped
        !           306:      zip07.zip shipped
        !           307:      files part0001..part0004 mailed
        !           308: 
        !           309: will mail README and zip07.zip together in four chunks of 500 or fewer
        !           310: lines each.  At the other end, Saddam can save the parts into the files
        !           311: named in the subject lines (part0001..part0004), and then do:
        !           312: 
        !           313:      % ship -u part*
        !           314:      README received
        !           315:      zip07.zip received
        !           316: 
        !           317: For now, zip.1 (and zip.doc) are incomplete as far as MSDOS goes.  I'll
        !           318: put off doing that until the MSDOS version has stabilized.  Likewise, I
        !           319: have put off writing zipcloak.1, zipsplit.1, and ship.1 for the same
        !           320: reason.
        !           321: 
        !           322: There are, of course, all the little changes that fix bugs (what are
        !           323: those?), make the Makefile work on more systems, documentation, and,
        !           324: for the alert reader, an undocumented option ...
        !           325: 
        !           326: As usual, send reports to [email protected], so everyone
        !           327: can get a chuckle out of whatever new bugs I've introduced.
        !           328: 
        !           329: Mark Adler
        !           330: [email protected]
        !           331: 
        !           332: 
        !           333: Changes from release 0.6 to release 0.7:
        !           334: 
        !           335: 1.  Changed Makefile to use mv instead of -o on compiles.
        !           336: 2.  Added MAKE = make to Makefile.
        !           337: 3.  Catch user interrupt or termination and delete temporary files.
        !           338: 4.  Allow general purpose flags in local and central headers to differ in
        !           339:     the "reserved" bits.  Keep both for copying zip entries verbatim.
        !           340: 5.  Removed prototype for closedir--return value not used and inconsistent
        !           341:     across systems.
        !           342: 6.  Wrote ZipSplit to break a large zip file into the smallest number of
        !           343:     zip files less than a specified size.  Run zipsplit with no arguments
        !           344:     to see the command help.
        !           345: 7.  Put error messages in globals.c to be common across zip, zipcloak, and
        !           346:     zipsplit.  Use #define's in zip.h for error numbers.
        !           347: 8.  Changed getp() to open a new file for the terminal device, and added
        !           348:     the echon() function to turn echoing back on when interrupted at
        !           349:     password prompt.
        !           350: 9.  Added warn()'s to distinguish various zip file structure errors.
        !           351: 10. Allow "extra" fields in local and central headers to differ.
        !           352: 11. Fixed percent compression calculation to work for very large files.
        !           353: 12. Included the program (makecrc.c) that generates the CRC table.
        !           354:     makecrc.c is not compiled or run by the Makefile, but is present for
        !           355:     completeness.
        !           356: 13. Added an undocumented (except for here) option, -v, to zip that checks
        !           357:     for "oddities" in the zip file structure and points them out if found
        !           358:     (but continues processing).
        !           359: 14. Put prototypes in crypt.h inside #ifdef NeXT to avoid redefinition
        !           360:     problems with other compilers.
        !           361: 15. Added "make zilog" for Zilog S8000 running Zeus 3.21.
        !           362: 16. Minor changes to the manual page (zip.1 and zip.doc).
        !           363: 17. Fixed bug in replace() (manifested by -b option).
        !           364: 18. readzipfile() now also checks the central directory start and size in
        !           365:     the end of central directory header.
        !           366: 19. Allow modification of self-extracting zip files (exe instead of zip).
        !           367: 20. Allow .ZIP as valid suffix as well as .zip (also .EXE and .exe).
        !           368: 21. Cleaned up malloc usage, free'd everything malloc'ed.
        !           369: 22. fclose'd all fopen'ed files explicitly.
        !           370: 23. Corrected assignment of one ftell() result from an int to a long.
        !           371: 24. Considerably simplified Makefile, based on Jean-Loup Gailly's
        !           372:     suggestions.
        !           373: 25. Renamed unixfile.c to fileio.c in anticipation of non-unix support.
        !           374: 26. Removed const's (pesky little buggers caused too many problems).
        !           375: 27. Wrote my own shell expression compare routine, took REGEX and -lPW's
        !           376:     out of Makefile, which removed the sysvpw make option.
        !           377: 28. Added tempname() prototype to crypt.h for the implode routines to use.
        !           378: 29. Trying string.h for prototypes of string functions if __STDC__
        !           379:     defined, which is what unzip.h does.
        !           380: 30. Turned prototypes on if __STDC__ defined (we'll try this one more
        !           381:     time).  They can be turned off using NOPROTO.
        !           382: 31. Improved source documentation.
        !           383: 32. Changed prototype of open in fileio.c to OF((char *, int, ...)).
        !           384: 33. Removed "local" from prototypes of main() (after all, it's *not*
        !           385:     local).
        !           386: 34. Wrote Ship program to supplant uuencode--slightly more efficient, has
        !           387:     error checking, file splitting, automatic mailing, other features.
        !           388:     Ship currently uses the command:
        !           389:         /usr/ucb/mail -s subject < tempfile
        !           390:     to send mail.  Please let me know what works for your system.  Note
        !           391:     that I want to be able to specify a subject line.
        !           392: 35. Ported to MSDOS Microsoft C 5.1, based on Jean-Loup Gailly's work.
        !           393: 36. Fixed add/update bug when -p not used.
        !           394: 37. Handle lower case conversion and devices (e.g. C:) for MSDOS.
        !           395: 38. Indented the #ifdef/#ifndef constructs that do not contain function
        !           396:     definitions, to improve the readability somewhat.
        !           397: 39. Cleaned up error handling.  Now use perror() for i/o errors.  Put the
        !           398:     errors and messages in ziperr.h.
        !           399: 40. Ported to MSDOS Turbo C++ 1.0.
        !           400: 41. Implemented wild card expansion on the command line for MSDOS and
        !           401:     handle MSDOS matching (*.* == all, not *).
        !           402: 42. Changed version required to unzip to 11 (1.10) since the implode
        !           403:     routines can procude an overlapping match one away from the end of the
        !           404:     window (PKUNZIP 1.00 requires two away from the end).
        !           405: 43. Changed old next make option to next10 (for version 1.0) and added a
        !           406:     new next make option for 2.0 (just called next) that uses the -object
        !           407:     linking option for smaller executables.
        !           408: 44. Added -z option to take a multi-line zip file comment from stdin.
        !           409: 45. Changed temporary names from $ZXXXXXX to _ZXXXXXX, where XXXXXX is
        !           410:     filled in by mktemp().  This avoids problems with "rm $Z*" in sh.
        !           411: 46. Got new implode routines from Rich that are (hopefully) PKUNZIP
        !           412:     compatible.
        !           413: 47. When -b is not specified, put the temporary files in the same
        !           414:     directory (i.e. the same device) that the zip file is (or will be) in.
        !           415: 48. Added doturboc.bat and domsc.bat files to compile for Turbo C++ 1.0
        !           416:     and Microsoft C 5.1.  I am interested in successes and failures with
        !           417:     other versions of those compilers.  In this version, the implode
        !           418:     routines do not work under MSDOS.
        !           419: ------------------------ May  6  1991   version 0.8 ------------------------
        !           420: Buenos Dias Amigos,
        !           421: 
        !           422: Heer ees dee Cinco de Mayo reeleese of seep, aka Zip 0.8.  The changes
        !           423: from 0.7 are in the (long) list below, but here are some highlights:
        !           424: faster implode, faster shrink, first attempt at a VMS version (thanks
        !           425: to Cave Newt), and a new program, ZipNote, to aid in editing zip file
        !           426: comments.  To compile under VMS, do an "@makevms.com".  To compile using
        !           427: Mircosoft C do a "make makefile.msc".  To compile using Borland (Turbo)
        !           428: C, do a "make -fmakefile.bor".  Please try to break any or all of these
        !           429: programs in every conceivable way--we're getting close a public release.
        !           430: Thank yew fer your support.
        !           431: 
        !           432: Mark Adler
        !           433: [email protected]
        !           434: 
        !           435: Changes from 0.7 to 0.8:
        !           436: 
        !           437: 1.  Added the -n option to prevent compressing already compressed files.
        !           438:     Documented -n in zip.1.
        !           439: 2.  Check the length of the compressed data in zipup() in case implode or
        !           440:     shrink has a bug.
        !           441: 3.  Fixed -v option to not complain about needing PKUNZIP 1.1.
        !           442: 4.  Added report of store/shrink/implode sizes when -v (verbose) used.
        !           443: 5.  Put in Rich's patch to fix 100% implosion bug.
        !           444: 6.  Fixed -i bug.
        !           445: 7.  Made changes to im_ctree.c and implode.c to (hopefully) make it work
        !           446:     under MSDOS.  (Jean-Loup said declare topmaxvals and botmaxvals as
        !           447:     U_INT in im_ctree.c, and use MSDOS, not __MSDOS__ in implode.c.)
        !           448: 8   Added implode routine compilation to domsc.bat and doturboc.bat.
        !           449: 9.  Replaced FILENAME_MAX with FNMAX, which is now always 1024.  (It seems
        !           450:     FILENAME_MAX is incorrectly set to 14 on some System V Unixii.)
        !           451: 10. Changed BEST to -1 so it is different from STORE (=0).  Redid some of
        !           452:     the method logic in zipup().
        !           453: 11. Changed wb+ to w+b in implode.c.
        !           454: 12. Removed "nothing to do" error for -u and -f.
        !           455: 13. Zip source distributions will now have tabs removed, except for
        !           456:     Makefile and Makefile.exp (no feelthy tabs rule).
        !           457: 14. Changed zip error on open failure to a warning.  This accounts for
        !           458:     files that do not have read permission or are locked, and files
        !           459:     deleted during the zip.  For entries being updated, the old entry is
        !           460:     copied over instead.  This change had the side effect of removing the
        !           461:     zipskip() routine.
        !           462: 15. Removed OBJC dependencies in Makefile.exp (didn't belong).
        !           463: 16. Removed strip from Makefile, instead using the -s link option.
        !           464: 17. Fixed -um and -fm to delete files whose entry's times were checked in
        !           465:     the archive.
        !           466: 18. Put portability stuff common to zip.h and crypt.h into tailor.h.
        !           467: 19. Added mark tracing to -v (for debugging).
        !           468: 20. Changed name and zname logic--an external name is always converted
        !           469:     into an internal zname, and vice-versa.  zname is now always
        !           470:     malloc'ed.
        !           471: 21. Fixed -z to use CRLF between lines (for PKZIP) and have no newline
        !           472:     after the last (or only) line.
        !           473: 22. Added clean to Makefile (deletes *.o, zip, zipcloak, zipsplit, ship).
        !           474: 23. Replaced LDFLAGS with LFLAGS1 and LFLAGS2 in Makefile (splits link
        !           475:     options before and after object files as in unzip).
        !           476: 24. Added scodos to Makefile (from Bill Davidsen).
        !           477: 25. Included stdio.h in tailor.h--removed stdio.h from zip.h and
        !           478:     implode.h.
        !           479: 26. Do not include stddef.h if M_XENIX defined.
        !           480: 27. Cast the arguments of all free() calls to (voidp *).
        !           481: 28. Added casts to char * for memset() and qsort() args in zipsplit.c.
        !           482: 29. Changed implode.h to define malloc and str* properly.
        !           483: 30. Fixed invlocal() to handle integer overflow correctly, as well as
        !           484:     reliably across compilers.
        !           485: 31. Got new implode.h from Rich with fix #29 above.  Removed stdio.h
        !           486:     include.
        !           487: 32. Commented out the abort() calls in im_ctree.c.
        !           488: 33. -ee requests a verification of the encryption password.
        !           489: 34. malloc and free tempath.
        !           490: 35. Documented -, SCO, and scodos in zip.1, and - in help().
        !           491: 36. Added revision.h for Zip revision number and date.
        !           492: 37. -u and -f with no arguments now (both) freshen the entire archive.
        !           493: 38. Use /Oait instead of /Ox for MSC to avoid loop optimization (buggy on
        !           494:     5.1, and sometimes even crashes compiler!).
        !           495: 39. Added ! (reverse) range matching to shmatch(), and early abort on '*'
        !           496:     failures (speeds up pathological patterns).  Cleaned up '\' (escape)
        !           497:     handling.
        !           498: 40. Changed '!' in ship to '{' (some EBCDIC translations do not include
        !           499:     !).  However, unship (ship -u) still understands '!'.  Also added the
        !           500:     -v option of ship to print out the version and revision date.  Also
        !           501:     now refuse to overwrite an existing file when unshipping (ship -u),
        !           502:     but there is a -o option to overwrite anyway.
        !           503: 41. Added a "fast" mode to ship using hard-arithmetic coding that is
        !           504:     nearly as efficient as base 85 coding, but much faster on 16-bit
        !           505:     machines (base 85 coding uses 32 bit multiplication and division).
        !           506: 42. Put tailor.h back in ship.c, so that ship.c can stand on its own.
        !           507: 43. Made -p the default, and added a new option, -j to do the opposite
        !           508:     (junk directory names).  -p is still there but does nothing, so as to
        !           509:     avoid annoying PKZIP users.  Changed documentation and help()
        !           510:     accordingly.
        !           511: 44. If -j is used, and two files are to be added with the same name, then
        !           512:     zip exits with an error.
        !           513: 45. Wrote ZipNote for editing zipfile comments.  Just do zipnote for
        !           514:     usage.
        !           515: 46. Replaced Rich's im_lmat.c with a new one from Jean-Loup.  Improves the
        !           516:     speed of implode by a factor of two, and even more for very large
        !           517:     files.
        !           518: 47. Reduced the execution time of shrink by 33% simply by moving the code
        !           519:     around (eliminated some unnecessary calls, moved some tests).
        !           520:     Shrink's execution time is now about 50% more than compress (it used
        !           521:     to take over twice as long).  Hash tables for shrink are still
        !           522:     intended for a future release.
        !           523: 48. VMS mods from Greg: replace() unlinks only after copy, changed
        !           524:     delete() to destroy(), added code for deletedir(), use creation time
        !           525:     instead of modification time, warn if stamp() attempted, changed
        !           526:     includes, make link rename and unlink delete, added findfirst,
        !           527:     findnext stuff, added wild() for VMS, modified newname(), procname().
        !           528: 49. Implemented internal<-->external name conversions for MSDOS and VMS.
        !           529: 50. For VMS matching, changed ? to %, removed bracketed ranges.
        !           530: 51. Added makevms.com, stolen from Unzip (vms_make.com).
        !           531: 52. Implemented -k (force the zip file to look like it was made by PKZIP).
        !           532: 53. Removed implode for VMS (it crashes--haven't tracked down where).
        !           533: 54. Got Jean-Loup's makefile.dos working for MSC 5.1 (makefile.msc) and
        !           534:     Turbo C++ 1.0 (makefile.bor).
        !           535: ------------------------ Jul 11  1991   version 0.9 ------------------------
        !           536: Hey gang,
        !           537: 
        !           538: Here is our very-nearly-ready-to-release version of Zip.  There will be no
        !           539: features added or changed from 0.9 to 1.0--only bugs fixed.  I hope that
        !           540: we can get 1.0 out pretty quickly then.  This is really your last chance to
        !           541: find bugs before it goes out, so please, please test all the programs as
        !           542: much as you can.  Try all the features, if possible, and perhaps try to
        !           543: think of ways to break the programs.  Also, and this is very important, read
        !           544: the documentation in zip.doc and "debug" that too.  I already know that it
        !           545: is not complete in 0.9, but please send any comments about errors, omissions,
        !           546: format, or whatever to Info-ZIP, even if they seem obvious.
        !           547: 
        !           548: The highlights of the changes from 0.8 to 0.9 are: faster, slicker implode;
        !           549: operation in small model on MSDOS for speed; a new temporary file interface
        !           550: for faster operation on small files; some shrink improvements; and some new
        !           551: options (-y, -g, -q).  Also, ship has been enhanced in several ways, not the
        !           552: least of which is a help option (-h).
        !           553: 
        !           554: Have fun.
        !           555: 
        !           556: Mark Adler
        !           557: [email protected]
        !           558: 
        !           559: 
        !           560: Changes from 0.8 to 0.9:
        !           561: 
        !           562: 1.  Removed the "not implemented yet" note in help() for -k (it *is*
        !           563:     implemented now).  Removed from bug list in zip.1 too.
        !           564: 2.  Fixed Turbo C implode bug.
        !           565: 3.  Added /link /e in makefile.msc for ship.c.
        !           566: 4.  Made handler() in zipnote.c the same as handler() in zipsplit.c.
        !           567: 5.  Added -y option in Unix to store symbolic links as such.  (We need
        !           568:     Unzip to be aware of symbolic links and use symlink() to recreate them.)
        !           569: 6.  Ignore control characters in unship input.
        !           570: 7.  Use prototypes and ANSI libraries if MSDOS.  (Used to check for Turbo C,
        !           571:     but Microsoft C 6.0 also does not define __STDC__ unless strict ANSI
        !           572:     is requested.)
        !           573: 8.  Added mod to ct_fsort() from Rich that should remove any qsort()
        !           574:     dependencies in implode output.
        !           575: 9.  Removed some 32/16-bit prejudices in util.c and crypt.c that affect
        !           576:     64-bit integer (short, int, and long) machines (Cray).
        !           577: 10. Added System V MAILX option to ship.c to use the mailx command.  This
        !           578:     is automatically activated by DIRENT if ship is compiled by the zip
        !           579:     makefile.
        !           580: 11. Added patches from Greg Roelofs for echo control on Cray and Amdahl.
        !           581:     The patch uses termio.h and ioctl(), and is assumed for all System V,
        !           582:     not just those (we'll see how this flies).
        !           583: 12. Changed -Ox to -Oacegit -FPi87 in makefile.msc.  Added /nologo to link.
        !           584: 13. Applied J-L's 082 mods (Sinatra style): select 4K window for < 5.5K,
        !           585:     8K window for >= 5.5K files (just like PK does); various im_ctree.c
        !           586:     mods verbatim (except for the treename warning, which I did differently);
        !           587:     various im_lmat.c mods verbatim (except macros are done the ugly portable
        !           588:     way); farmalloc'ed in shrink.c; changed makefile.msc and makefile.bor to
        !           589:     use small model; added J-L to zip.1 acknowledgements (oops).
        !           590: 14. Moved struct zlist's and struct flist's to far storage (needed by above
        !           591:     mods).  Unfortunately, I can't move the names and other things pointed to
        !           592:     by those structures into the far space, since they are arguments to
        !           593:     library functions like strcmp() and fwrite().
        !           594: 15. Changed zipup() to both shrink and implode only on files smaller than
        !           595:     BSZ.  Also in that case, free up shrink data structures before allocating
        !           596:     the implode data structures.  Changed from fopen() to open() except for
        !           597:     VMS.
        !           598: 16. Fixed bug in dosmatch() to free malloc'ed space.
        !           599: 17. MINIX mods (do not need minix make option): call tempname() with a unique
        !           600:     character (MINIX mktemp() flawed); defined S_IWRITE as S_IWUSR if S_IWUSR
        !           601:     defined; removed explicit signal dereference.
        !           602: 18. Fixed bug in unship when used as a filter with no args.
        !           603: 19. Changed getnam() to not use static storage.
        !           604: 20. Copy permissions from old to new zip file (zip, zipcloak, zipnote).
        !           605: 21. Added patches for AT&T 3B1, added 3b1 target to makefile, added to zip.1.
        !           606: 22. Made FNMAX 256 for MSDOS (is 1024 otherwise).
        !           607: 23. Used the "pyr" predefined symbol for Pyramid systems in tailor.h.
        !           608: 24. Added Greg's VMS mods to ship.c.  Added help to ship.c (-h or -?).
        !           609:     Changed meaning of -nnn arg from lines to K.
        !           610: 25. Moved ZMEM routines to fileio.c to properly include them in zipnote and
        !           611:     zipsplit.
        !           612: 26. Added -s option to ship to specify a subject line prefix.
        !           613: 27. Fixed -z in zip to not trash leading blank lines in the comment.
        !           614: 28. Made ship recognize "unship" in argv[0] a little more flexibly.
        !           615: 29. Made sure temporary zip files are closed before being deleted by an
        !           616:     error or interrupt.
        !           617: 30. Added a new temporary file interface and new source files tempf.c and
        !           618:     tempf.h.  This avoids making temporary files for small (<16k) output.
        !           619:     Both shrink and implode use this.
        !           620: 31. Added OS/2 patches, files.  However, left zip case-sensitive for OS/2
        !           621:     names, as in Unix.
        !           622: 32. Removed amdahl target in makefile, using UTS symbol instead.
        !           623: 33. Changed -y to depend on definition of S_IFLNK.
        !           624: 34. Avoid leading periods on lines in ship output by inserting a space.
        !           625: 35. Ship is now extensible: added a warning for "unsupported keyword".
        !           626:     Such keywords can appear before the "ship" line, for example.
        !           627: 36. Added -g option to allow "growing" the zip file.  If just adding new
        !           628:     entries to a zip file, -g will write over the old zip file without
        !           629:     creating a temporary.  The danger is that if there is an error, the
        !           630:     old zip file will be lost.  If not just adding, then -g is ignored.
        !           631: 37. Added aux (A/UX) target to makefile.
        !           632: 38. In shrink.c, removed unnecessary FreeList and ClearList arrays, and
        !           633:     the recursive Prune() routine.  This also resulted in a speedup in
        !           634:     shrink of about 15%.  It is now only about 30% slower than Unix compress.
        !           635: 39. Added -q option for quiet operation.
        !           636: ------------------------ Sep 21  1991   version 1.0 ------------------------
        !           637: Hello world!
        !           638: 
        !           639: This is the first public release version of Zip and its cohort utilities.
        !           640: We hope you enjoy using it much much more than we enjoyed writing it and
        !           641: trying to get it to work on every fritzing raffing bliffing nobbin Unix
        !           642: system in the galaxy.
        !           643: 
        !           644: Please feel free to send any problems, complaints, suggestions, kudos,
        !           645: ridicule, or whatever to [email protected].  If there were a way to
        !           646: send cookies over the net, we'd accept those too.
        !           647: 
        !           648: Thank yew fer yur support.
        !           649: 
        !           650: Mark Adler
        !           651: [email protected]
        !           652: 
        !           653: 
        !           654: Changes from 0.9 to 1.0:
        !           655: 
        !           656: 1.  Removed some pesky carriage returns masquerading as spaces in fileio.c
        !           657:     and zipup.c.
        !           658: 2.  Removed #include memory.h in tempf.c (string.h good enough).
        !           659: 3.  Compile ship in doturboc.bat.
        !           660: 4.  Miscellaneous zip.1 (zip.doc) changes.
        !           661: 5.  Fixed mistake in stamp() in fileio.c (didn't double seconds).
        !           662: 6.  Applied Jean-Loup's mods for Cray's (do not assume 16-bit shorts).
        !           663: 7.  Removed pyramid make option, since #ifdef pyr seems to work.
        !           664: 8.  Added some casts to tempf.c to clean up some warnings.
        !           665: 9.  Added comment to makefile.exp saying what it is.
        !           666: 10. Removed length checks in zipup.c to fix problem with using Vax variable
        !           667:     record length formats.
        !           668: 11. Fixed VMS replace-across-devices problem.
        !           669: 12. Changed order of include's in implode.h to make tailor.h show up first.
        !           670: 13. Added Convex mods and make target.
        !           671: 14. Fixed path delimiter under VMS for unship.
        !           672: 15. Added ship to makevms.com.
        !           673: 16. Put in new copyright messages.
        !           674: 17. Added aix make target.
        !           675: 18. Fixed zipsplit.idx to start counting at one like the file names.
        !           676: 19. Changed -a (append VMS version number) to -w to leave -a open for a
        !           677:     possible future option.
        !           678: 20. Back to separate makefiles for Microsoft and Borland (.msc and .bor).
        !           679: 21. Workaround in fileio.c for Borland stat() bug: stat() succeeds for wild
        !           680:     card names that match existing files.
        !           681: 22. Added "(did you remember to use binary mode when you transferred it?)"
        !           682:     to the "probably not a zip file" warning.
        !           683: 23. Changed utilities to append .zip only when the zip file name does not
        !           684:     contain a dot.
        !           685: 24. At least mentioned the other utilities in zip.doc (zipcloak, ship, etc.),
        !           686:     and documented upper case matching of names when using -d under MSDOS.
        !           687: 25. Fixed bug in MSDOS version: zip foo c:autoexec.bat wouldn't work.
        !           688: 26. Added hidden/system attribute bug to BUGS in zip.1
        !           689: 27. Fixed recognition of unship in ship when unship is in a path.
        !           690: 28. Added non-stream-LF VMS bug to zip.1 bug list.
        !           691: 29. Fixed bug in #23 above when path has dots.  Documented #23 in zip.1.
        !           692: 30. Show disclaimer only for -l, add -h and -l to zip utilities.
        !           693: 31. Applied Minix patches.
        !           694: ------------------------ ??? ??  1992   version 1.1 ------------------------
        !           695: ??? To be done. Should be the last version supporting shrink and implode.
        !           696: 
        !           697: ------------------------ Feb 17  1992   version 1.5 ------------------------
        !           698: 1.  pkzip 2.0 format (deflation) now supported
        !           699:     Shrink and Implode left in zip 1.1 only for backward compatibility
        !           700: 
        !           701: ------------------------ Mar 25  1992   version 1.6 ------------------------
        !           702: 1.  zip can now be used as a filter in a pipe
        !           703: 2.  Optimized assembler code for MSDOS and OS/2
        !           704: 3.  encryption is now supported
        !           705: 4.  Better VMS support for various file formats other than Stream-LF
        !           706: 5.  Better OS/2 support
        !           707: ------------------------ Apr 24  1992   version 1.7a ------------------------
        !           708: 1.  On VMS, create new zip files in fixed length 512 format
        !           709: 2.  Call VMSmunch only if the zip file existed previously
        !           710: 3.  Avoid mktemp() and use simpler name for temporary file.
        !           711: 4.  Rename dir_os2.[ch] -> os2zip.[ch]
        !           712: 5.  On MSDOS, use fdopen() after setmode() in zip.c
        !           713:     Added setmode() for stdin in zipup.c
        !           714: 6.  Do not split #if on two lines (some compilers don't like this)
        !           715: 7.  __MSDOS__ instead of __BORLANDC__ in crypt.c
        !           716: 8.  Added (char*) cast in deflate.c to avoid warning
        !           717: 9.  OS/2 support for storing file attributes in an extra field.
        !           718: 
        !           719: ------------------------ June 6  1992   version 1.8a ------------------------
        !           720: 1.  Fixed bug in tempname() for VMS
        !           721: 2.  Fixed type problems in zipup.c for gcc under VMS
        !           722: 3.  Added VMSmunch in vms subdirectory and updated makefile (descrip.mms)
        !           723: 4.  The extra field for OS/2 is now compressed (Kai Uwe Rommel)
        !           724: 5.  Added various fixes for djgcc (Onno van der Linden)
        !           725: 6.  Fixed long standing bug in wild() for MSDOS (Jon Saxton)
        !           726: 7.  Added support for ZIPOPT environment variable (Bill Davidsen
        !           727:     and Antoine Verheijen).
        !           728: 8.  Fixed zipsplit bug for VMS (Greg Roelofs)
        !           729: 9.  Added fix for DEC OSF/1 (Kjetil W. J{\o}rgensen)
        !           730: 10. Added fix for ultrix on DECstation (Jonathan Kamens)
        !           731: 10. Added sysnopis for zipsplit, etc... in zip.1 (Jonathan Kamens)
        !           732: 11. Fixed MAILX problem for SysV in ship.c (Greg Roelofs)
        !           733: 12. Added Linux support (Humberto Ortiz-Zuazaga)
        !           734: 13. In makefile.os2, support for $(FP), masm 5.x, match.s (Greg & Kai)
        !           735: 14. Added -w-cln in makefile.bor to avoid warning (David Kirschbaum)
        !           736: 15. VMS echo suppression code incorporated (Greg Roelofs)
        !           737: 16. Added fix to match.asm if WSIZE != 32768
        !           738: 17. Create .exe files directly for target scodos (Bill Davidsen)
        !           739: 18. Fixed the -0 bug (compressed size was doubled)
        !           740: 19. Changed -- (read names from stdin) to -@ to reserve -- for undoing
        !           741:     the effects of ZIPOPT
        !           742: 20. Create zip entries for directories with the -r option, so that
        !           743:     directory attributes can be saved. (Kai Uwe Rommel)
        !           744: 
        !           745: ------------------------ June 17  1992   version 1.8b ------------------------
        !           746: 1.  Changed -s (Software license) to -L (license) to avoid clash
        !           747:     with the old shrink option.
        !           748: 2.  read_buf declared as extern only in zip.h
        !           749: 3.  avoid warnings in zip.c for Turbo C: while ((ch = *s) != '\0'
        !           750: 4.  suppressed unused variables mem_inbuf and mem_outbuf in bits.c
        !           751: 5.  Speed up the search for start of zip structures (pksfx files)
        !           752: 6.  Allow updates of an empty pksfx file (original file was destroyed)
        !           753: 7.  Keep correct offsets for pksfx files
        !           754: 8.  On MSDOS, in2ex() was updating the input argument. Also, do not
        !           755:     force upper case: keep the name as it was in the old zip file.
        !           756:     This is important for -f. Similarly, force lower case in ex2in()
        !           757:     on MSDOS, except when dosify (-k) is imposed. I kept however the
        !           758:     old code under the flag FORCE_UPPER in case I goofed.
        !           759: 9.  When growing a zip file with -g and interrupting it, the whole file was
        !           760:     lost. We now attempt to restore the previous state of the file.
        !           761: 10. "zip -fo jjj", where jjj is a non-existent zipfile, used to dump core.
        !           762:     We now emit a warning.
        !           763: 11. More generally, we emit a warning for all options assuming the presence
        !           764:     of a zip file (-d,-f,-u,-g) if the zip file did not exist or was empty.
        !           765:     Idem for "zip -o jjj" on non-existent or empty zip file.
        !           766: 12. Copy also the extended local entry in zipcopy().
        !           767: 13. Updated zip.1 and vms/vms_zip.rnh to describe the new features.
        !           768: 14. Fixed bug in zipsplit (wrong offsets for all files but first)
        !           769: 15. Added match.s, optimized 386 version of longest_match() for Unix and
        !           770:     32 bit OS/2 (with gas).
        !           771: 16. Added os2/match32.asm, optimized 386 version of longest_match() for
        !           772:     32 bit OS/2 (for assemblers using Intel syntax). NOT TESTED YET.
        !           773: 17. Added "assume DS: DGROUP" in match.asm to allow SS_NEQ_DS even with MSC.
        !           774: 18. Added include <malloc.h> in tailor.h for Unix. This is required on
        !           775:     16-bit Unix.
        !           776: 19. Use init_upper() in os2zip.[ch]
        !           777: 20. Switched back to old tempname(): the new one could overwrite an existing
        !           778:     file, it ignored tempath, and it caused problems on VMS for files with a
        !           779:     '.' in the name. Kept however the old code if NO_MKTEMP is defined.
        !           780: 21. Use 0x1 instead of (unsigned)1 in definition of HSIZE (one compiler
        !           781:     does not like the cast in an array definition).
        !           782: 22. Include VMSmunch.h in zip.c
        !           783: 23. On VMS, zip -o screwed up all offsets in pksfx files
        !           784: 
        !           785: ------------------------ June 18  1992   version 1.8c ------------------------
        !           786: 1.  Added missing comma in revision.h
        !           787: 2.  invlocal doesn't work on Cray, use mktime instead (Greg Roelofs)
        !           788: 3.  On VMS, use ctx=stm only to read zipfiles, not input files.
        !           789: 4.  Undo change 21 above, which breaks even more compilers
        !           790: 5.  Include dos.h in util.c and fix trivial compilation errors
        !           791: 6.  Undo change 1 of 1.8b: -L already used for OS/2 (Steve Salisbury)
        !           792: 7.  Do not create a zip entry for directory "." (Greg Roelofs)
        !           793: 8.  Avoid core dump when -@ is given before the zip file (and do
        !           794:     the right thing).
        !           795: 
        !           796: ------------------------ June 19  1992   version 1.8d ------------------------
        !           797: 1.  Force calloc to take unsigned values. (Problem with one 16 bit
        !           798:     compiler on AT&T 6300).
        !           799: 2.  Fixed fileio.c for Convex (Bill Davidsen)
        !           800: 3.  util_ was missing for zipnote and zipsplit in make_vaxc.com (Glenn Andrews)
        !           801: 4.  Added warning in zip.1 and below (do not update encrypted files
        !           802:     with pkzip 1.10).
        !           803: 5.  Fixed fix 12 of 1.8b. I drink too much. (Confused bit 1 with bit 8).
        !           804: 6.  Updated install.doc
        !           805: 7.  Fixed result type of os2 version of init_upper().
        !           806: 8.  Added makefile entry for AT&T 6300 (Peter Mauzey)
        !           807: 9.  Fixed typo in descrip.mms
        !           808: 10. Removed zipfile.c warning: shift count exceeds width of value shifted
        !           809: 11. Fix enormous bug in init_upper for VMS (upper stayed as zero)
        !           810: 
        !           811: ------------------------ June 23  1992   version 1.8e ------------------------
        !           812: 1.  Don't include malloc.h by default (does not exist on VMS)
        !           813: 2.  Define calloc for 16 bit systems (required for AT&T 6300)
        !           814: 3.  Simpler make_vaxc.com (Greg Roelofs)
        !           815: 4.  New vms/descrip.mms and fixes in zipfile.c (Igor)
        !           816: 5.  seekable() must be true for in-memory compression.
        !           817: 6.  Undefine S_IFLNK if NO_SYMLINK (problems with VMS and SCO)
        !           818: 7.  Include descrip.h only once in fileio.c (Mike Freeman)
        !           819: 8.  New os2/match32.asm (untested) and makefile.os2.
        !           820: 9.  Added dosflag in zlist and flist entries, to force MSDOS file
        !           821:     attributes. It is set if dosify is set, or (under OS/2) for a file
        !           822:     on a FAT file system which does not have a long name (Kai-Uwe).
        !           823: 10. Added GetFileTime on OS/2 to avoid core dump on bad dates (Kai-Uwe)
        !           824: 11. New vms.c supporting deflation of extra headers
        !           825: 
        !           826: ------------------------ June 24  1992   version 1.8f ------------------------
        !           827: 1.  Incorporated (finally!) Mac support. *Untested*. (James E. O'Dell)
        !           828: 2.  Another long awaited change: Atari ST. Also *untested*.
        !           829:     ([email protected])
        !           830: 3.  New makefile.os2, as usual. (Kai-Uwe)
        !           831: 4.  Support for Watcom C in os2zip.c. *Not yet working*. (Kai-Uwe).
        !           832: 5.  I forgot to output the length for stored blocks...
        !           833: 
        !           834: ------------------------ June 29  1992   version 1.8g ------------------------
        !           835: 1.  New os2zip.c and makefile.os2 as usual.
        !           836: 2.  In the VMS makefiles, define the symbols systematically so that
        !           837:     people won't forget to update them. (Fed up with the reports that
        !           838:     zip does not accept parameters).
        !           839: 3.  Use -L for software License and -E for Extended attributes
        !           840: 4.  Added -F 1000 in makefile entry for scodos (Bill Davidsen)
        !           841: 5.  Replaced strcmp with namecmp in zip.c for check of zipfile name.
        !           842: 6.  New os2/match32.asm (still not working)
        !           843: 7.  Do not close stdin (check for null ifile in zipup.c).
        !           844: 8.  signal handlers for zip and zipcloak fixed to restore echo for VMS
        !           845: 9.  slightly cleaner VMS echo calls in fileio.c
        !           846: 10. stricmp missing from VMS zipsplit, zipnote:  since UTIL was unused for
        !           847:     util.c, I used it to specify stricmp only; then I had to change some of
        !           848:     the makefiles which previously used util_.* to use util.*, and I added
        !           849:     util_.obj to OBJS and OBJN in all of the VMS makefiles. (Greg)
        !           850: 11. ifdef'd out the debugging commentary in vms.c (Greg)
        !           851: 12. new VMS makefile for use with (free) MAKE/VMS (Greg)
        !           852: 13. Eliminate some compiler warnings from BCC, MSC, gcc (Onno van der Linden)
        !           853: 14. Do not use MSDOS version of init_upper for djgpp (Onno van der Linden)
        !           854: 15. In msdos/makefile.gcc, added util_.o to OBJN and OBJS, and used asm version
        !           855:     match.o (Onno van der Linden)
        !           856: 16. Added install target in makefile (Alvin Koh)
        !           857: 17. Default makefile entry is named 'all'.
        !           858: 18. fixes to vms.c for gcc (Igor)
        !           859: 19. Define S_IWRITE as S_IWUSR for Minix only (problem on X/OS) (Fulvio Marino)
        !           860: 20. Added xos makefile entry  (Fulvio Marino)
        !           861: 21. In VMS, files without an extension are now stored without the dot (Greg
        !           862:     and Igor).
        !           863: 22. Save/restore ebx in match.s and match32.asm
        !           864: 23. Fixed MAX_DIST in match.s (the asm code produced different results
        !           865:     than the C code)
        !           866: 24. Fixed the -b option: allow ENOTSAM instead of EXDEV (used by Turbo C).
        !           867: 25. Do not complain about zip files created on MSDOS with versions of zip
        !           868:     above 1.0.
        !           869: 
        !           870: ------------------------ Aug 14  1992   version 1.9a ------------------------
        !           871: 1.  Changed -S to -L in help screen
        !           872: 2.  Do not declare chmod for aegis (George Grimes)
        !           873: 3.  Cleaner vms/make_gcc.com (Mike Freeman)
        !           874: 4.  Disabled built-in functions for Linux (Arnt Gulbrandsen)
        !           875: 5.  Added a description of the deflation algorithm in algorith.doc.
        !           876: 6.  Removed ship, now distributed separately.
        !           877: 7.  Added the CRC for in-memory compression. The extra-field format is now
        !           878:     the official PKWare format (Kai-Uwe)
        !           879: 8.  On OS/2, force lower case names for FAT files if -k is not given. (Kai-Uwe)
        !           880: 9.  Allow coutry dependent mapping for upper to lower case. (Kai-Uwe)
        !           881: 10. Use namecmp instead of stricmp which was confusing. (Onno van der Linden)
        !           882: 11. Avoid some warnings in deflate.c (Onno van der Linden)
        !           883: 12. Avoid one warning in crypt.c, and distribute it separately.
        !           884: 13. Call init_upper() for all utilities and add util_.o in makefiles (Kai-Uwe)
        !           885: 
        !           886: ------------------------ Aug 18  1992   version 1.9b ------------------------
        !           887: 1.  Fixes for Windows NT (Dave Feinleib)
        !           888: 2.  Avoid two warnings for Ultrix (makefile and fileio.c)
        !           889: 3.  Finally removed the declaration of chmod(), which causes endless
        !           890:     new patches for each new target.
        !           891: 4.  Allow -L for license in the utilities (zipsplit, zipnote, zipcloak).
        !           892: 5.  Mention funzip in zip.1.
        !           893: 6.  Untabify all sources files (for more reliable context diffs)
        !           894: 7.  Fix bug in trees.c dealing with bit length overflow.
        !           895: 8.  Fix bug in zipup.c when reading from stdin: if (ifile) does not
        !           896:     produce the expected result.
        !           897: 9.  Avoid duplication of bug list in zip.1 and history.
        !           898: 10. Removed ship from zip.1.
        !           899: 
        !           900: ------------------------ Aug 20  1992   version 1.9 ------------------------
        !           901: 1.  Renamed the atari files to avoid name conflicts (for unzip -j).
        !           902: 2.  Don't tell 'use zip -L' in zipnote and zipsplit.
        !           903: 3.  Add a rule for util_.ojb in the msdos and atari makefiles
        !           904: 4.  Fixed compilation option for util_.obj in makefile.msc (msc 5.1 bug)
        !           905: 5.  Added the 'Where' file.
        !           906: 6.  More information about zip in Readme.
        !           907: 7.  Fixed install.doc.
        !           908: 8.  Fixed vms/vms_zip.rnh
        !           909: 9.  Fixed init_upper() in util.c and os2zip.c (Kai-Uwe)
        !           910: 
        !           911: ------------------------ Aug 26  1992   version 1.9p1 ------------------------
        !           912: This is official patch 1 for zip 1.9, not a beta version.
        !           913: 
        !           914: 1.  Simplified makefile entry for convex (Rafal Maszkowski)
        !           915: 2.  Do not use 'const' even for djgcc (Onno van der Linden)
        !           916: 3.  Use gcc in linux makefile entry (Arnt Gulbrandsen)
        !           917: 4.  Fix serious bug in -l option (file truncated).
        !           918: 5.  Fix stack problem for OS/2 IBM-C (Kai-Uwe)
        !           919: 6.  Fix serious bug in zipup.c sometimes causing file truncation to zero bytes
        !           920:     or internal error (Timo Salmi and Robert Tobler)
        !           921: 7.  Do not unlink() directories when running as root (Charles Hannum)
        !           922: 8.  Fix msdos/makefile.bor and msdos/makefile.gcc (Onno van der Linden)
        !           923: 
        !           924: 
        !           925: Things to check or to be done (see also BUGS section in zip.1):
        !           926: 
        !           927: - zip should not create 'stored' files with extended local headers
        !           928: 
        !           929: - There is not (yet) a way to undo the effect of ZIPOPT
        !           930: 
        !           931: - Under MSDOS, zip will find hidden and system files, but not set the
        !           932:   attributes appropriately in the zip file so that unzip can restore them.
        !           933: 
        !           934: - it is possible in weird cases to add a zipfile to itself
        !           935: 
        !           936: - On OS/2, zip refuses to match some names, such as those beginning with an
        !           937:   exclamation mark. Same for names starting with #, possibly more.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.