This is CHANGES for Zip, a detailed record of changes made to Zip each
internal and public beta and release since Zip 3.0.  For changes and
bug fixes before Zip 3.0, see CHANGES30.  For a detailed list of just
the added features and bug fixes, see WHATSNEW.


------------------------- July 5th 2008 version 3.0 -------------------------
 1. Add -sd to extended help.  zip.c (Will, Ed)
 2. Fix memory bug when rebuilding Zip64 central directory extra field which
    can crash MinGW and other ports when processing large files.  zipfile.c
    (Will)
 3. Fix -v bug preventing display of version information when options in
    environment variables.  zip.c (Ed)
 4. Update WhatsNew.  WHATSNEW (Ed)
 5. Update announcement.  zip30.ann (Ed)
---------------------- August 16th 2008 version 3.1a01 ----------------------
 1. Add support for -UN=N (no Unicode) and -UN=U (store Unicode as native
    UTF-8) options to dll interface as fUTF8_No and fUTF8_Native in ZPOPT.
    api.c, api.h (Ed)
 2. Add support for Mac OS X file resource data to Unix port used for Mac OS
    X with changes in #if defined(UNIX) && defined(__APPLE__) blocks.
    Change parameter in newname() from isdir to flags.  Define isdir as
    (flags & FLAGS_DIR).  Define archive name and file system name pointers
    for AppleDouble.  Change ex2in() to use name_archv.  Add data_fork_only
    global.  Add check of f->flags and store f->flags in z->flags for UNIX
    APPLE.  Add FLAGS_DIR and FLAGS_APLDBL constants for AppleDouble.
    fileio.c, globals.c, zip.c, zip.h (SMS)
 3. Remove \t escapes for tabs from messages.  fileio.c, zip.c, zipcloak.c,
    zipfile.c, zipnote.c, zipsplit.c, zipup.c (SMS)
 4. Define ZIP_DLL_VERSION as VERSION.  revision.h (Christian)
 5. Add -FF bug to ToDo list.  TODO (Ed)
 6. Only include bzlib.h header file for VMS.  Provide prototype
    bz_internal_error() to avoid potential compiler warnings.  Change
    parameter for bz_internal_error() from errcode to bzerrcode to
    avoid conflict.  zbz2err.c (Christian)
 7. Add -df to help for UNIX APPLE.  Update -df option description.
    zip.c (SMS)
 8. Uncomment WINDLL retcode.  Use setjmp() only for WINDLL.
    zip.c (Christian)
 9. Fix bug where using native UTF-8 setting created a wrong central
    directory size in the End Of Central Directory record because
    tempzn was not updated when the standard name is replaced by
    the UTF-8 name.  zipfile.c (Ed)
10. Remove extra errbuf[] buffer to save 5000 bytes and help low
    memory ports.  zipsplit.c (Christian)
11. Include unix/macosx.h for UNIX APPLE.  Add buffer for
    AppleDouble header.  Define TRANSLATE_EOL that is defined as
    translate_eol_lcl for UNIX APPLE and translate_eol otherwise.
    Add AppleDouble header size to Appledouble resource fork file
    size.  Data for header and resource stored in "._" file.
    Always set AppleDouble files as binary.  Never translate
    AppleDouble files.  Use getattrlist() to get resource data.
    For file_read() supply fake file buffer data for AppleDouble
    to real buffer.  zipup.c (SMS)
12. Change filesize64 from _int64 to uzoff_t for WINDLL.  Set zipfile
    to y for ZLIB.  Delete unused unsigned u.  Add cast to zstrm.next_in
    and EOF.  zipup.c (Christian)
13. Update Acorn port.  Change 31 and 32 to MAXFILENAMELEN.  Update and
    fix gmakefile.  Update compilation instructions for gcc.  Remove
    instructions and add note referring to acorn/ReadMe to
    readme.gmakefile.  Remove MAXEXT.  Use MAXFILENAMELEN in setting
    dimension of canon and size.  In setfiletype() use MAXFILENAMELEN
    + 32 as dimension.  Initialize pref.  acorn/acornzip.c,
    acorn/gmakefile, acorn/readme, acorn/readme.gmakefile,
    acorn/riscos.c (Jeffrey Lee)
14. Define MAXFILENAMELEN as 1024.  Define DIR_BUFSIZE as MAXFILENAMELEN.
    Remove riscos_direntry structure.  acorn/riscos.h (Jeffrey Lee)
15. Update Obey file that sets up compilation.  acorn/runme1st (Jeffrey
    Lee)
16. Replace srcrename file with readable version.  acorn/srcrename
    (Jeffrey Lee)
17. Add support for no assembler and for tuning.  Add clean target.  Add
    zbz2err.o.  msdos/makebz2.dj2 (Christian)
18. Add support for no assembler and for tuning.  Add clean target.  Add
    zbz2err.o.  Update bzip2 support.  Use $<.  msdos/makefile.dj2
    (Christian)
19. Add support for no assembler and for tuning.  Add clean target.  Add
    zbz2err.o.  Update bzip2 support.  Use $<.  win32/makefile.dj
    (Christian)
20. Add support for no assembler and for tuning.  Add zbz2err.o.  Update
    bzip2 support.  Use $<.  Add targets for zipl.o, zipfilel.o,
    zipupl.o, fileiol.o, utill.o, globalsl.o, deflatel.o, treesl.o,
    crc32l.o, cryptl.o, ttyiol.o, zbz2errl.o, win32zpl.o, win32l.o,
    win32i64l.o, ntl.o, crci386l.o, matchl.o, api.o, windll.o,
    windllrc.o, example.o, and zip.exe.  Add compilation of example.c.
    Add compiling bzip2.  win32/makefile.gcc (Christian)
21. Add control of MATCH and CRC assembly.  Apply unfolding optimization
    as default.  win32/makefile.wat (Christian)
22. Add dependency on unix/macosx.h.  unix/makefile (SMS)
23. Include unix/macosx.h.  Add get_apl_dbl_info() for getting APPLE
    resource fork.  Process AppleDouble Finder info and resource fork.
    Use uname() for APPLE if available.  unix/unix.c (SMS)
24. Add note for ZLIB.  Add support for ZLIB for VMS.  Define IZ_ZLIB.
    Update say message.  Add code to find the ZLIB library.  Change cc
    from using /include to using /object.  Move logical name removal
    section.  vms/build_zip.com (SMS)
25. Instead of errcode use bzerrcode to avoid conflict.
    vms/bzlib.h (SMS)
26. Add note for ZLIB.  Add support for ZLIB.  vms/descrip.mms (SMS)
27. Update SEEK_BZ.  Update bzip2 and add zlib processing.
    vms/descrip_src.mms (SMS)
28. Better handle VMS dots.  vms/vmszip.c (SMS)
29. Update WINDLL C example.  Instead of including zipver.h include
    revision.h.  Change DLL name from ZIP32.DLL to ZIP32Z64.DLL.
    Remove ZIPSETOPTIONS as ZipSetOptions is no longer used.  Add
    usage message if less than 3 arguments.  Change COMPANY_NAME to
    IZ_COMPANY_NAME.  Remove check of ZipSetOptions.  Add memset for
    ZpOpt.  Set default compression level to 6.  Add ZpOpt as
    parameter to ZipArchive.  Drop BOOL cast from dwPlatformId.
    windll/example.c (Christian)
--------------------- September 7th 2008 version 3.1a02 ---------------------
 1. Debian patch 844_003 to fix spelling in manual.  man/zip.1, zip.txt
    (sanvila)
 2. Debian patch 5988_006 to change INSTALL_PROGRAM define to INSTALL for
    manuals.  unix/Makefile (sanvila)
 3. Unix Apple changes for Mac OS X to support Apple Double format including
    sequestered format.  Default is to save data fork and resources.  Add
    support for -df option to Unix Apple (as in Mac OS port) to only save
    data fork.  Allow -df to be negated.  Add new option -as to save in
    Apple sequestered format.  Add warning if use -df and -as together.  Add
    define for APL_DBL_PFX_SQR for sequester directory __MACOSX/.  fileio.c,
    globals.c, zip.c, zip.h, unix/macosx.h (SMS)
 4. Add note in manual that Mac OS X features are referred to as UNIX APPLE
    features.  Update -df and add -as.    man/zip.1 (EG)
--------------------- September 21st 2008 version 3.1a -----------------------
 1. Update README.  README (Ed)
 2. Update INSTALL.  INSTALL (Ed)
 3. Add Zip 3.1a announcement.  zip31a.ann (Ed)
 4. Update WHATSNEW.  WHATSNEW (Ed)
--------------------- February 5th 2009 version 3.1b01 -----------------------
 1. Move __EBCDIC define earlier to avoid problem in includes.  zip.h (Lutz)
 2. Move definition of isatty() to within ifndef MVS block as MVS seems to
    have a good isatty().  cmsmvs/cmsmvs.h (Lutz)
 3. Add error message when file open fails.  cmsmvs/mvs.c (Lutz)
 4. Fix bug in zipnote where undefined file x was being closed instead of
    in_file.  zipnote.c (Christian)
 5. Modify zip32z64 dll Options structure in backward-compatible way to permit
    additional encryption methods later.  Replace unused fSuffix in dll Options
    with fMisc, remove fUTF8_No and fUTF8_Native from the structure as they
    are not backward compatible, and add bits for suffices, no UTF8, and native
    UTF8 to fMisc.  Update fEncryption comment to note it means that encryption
    is compiled in.  api.c, api.h (Ed)
 6. Update to new 2009-Jan-02 license.  LICENSE, zip.h, revision.h (Ed)
 7. Add special character exceptions in is_text_buf() for binary for EBCDIC.
    util.c (Lutz)
 8. Add new -Y option for encryption method.  Not yet implemented.  zip.c (Ed)
 9. Update VBz64 example to use new fMisc.  windll/vbz64/vbzipbas.bas (Ed)
10. If USE_STATIC_LIB, avoid double defining of printf, fprintf, and perror.
    Change zfseeko and zftello to Win32 internal versions (though these are
    commented out currently because they are not compatible with older
    Win32 compilers).  Check if WinDLL functions lpZipUserFunctions->comment
    and lpZipUserFunctions->print are not NULL before using.  api.h, tailor.h,
    windll/windll.c (107E5eng)
11. New Unicode character set check that enables local character support first
    and then uses nl_langinfo() to see if already using UTF-8 as the character
    set.  Also added alternate fix for MAEMO OS.  zip.c (Danny Milosavljevic)
12. Numerous additional fixes for Acorn.  See
    http://www.riscos.info/cgi-bin/bugzilla3/show_bug.cgi?id=164.  Changes
    noted separately below. (John Tytgat)
13. Simplified rules (a bit modeled after the unix/Makefile).  Again use
    assembler files in acorn/match.s and acorn/sendbits.s like acorn/makefile
    and which results in a small speed improvement.  acorn/GMakefile (John
    Tytgat)
14. Select APCS-32 instead of APCS-R build.  Use C swiven version instead of
    assembler version.  Couple of cleanups.  acorn/makefile (John Tytgat)
15. Add GAS versions for GCCSDK 4 usage (ELF instead of AOF).  Simplified
    indirect variable loading.  Strict APCS-32 conformance instead of APCS-R.
    acorn/match.s, acorn/sendbits.s (John Tytgat)
16. Update ReadMe.  acorn/ReadMe (John Tytgat)
17. No longer use own typdef os_error but use kernel.h's _kernel_oserror.
    Cleanups.  Constify parameter pointers in swiven where it makes sense.
    Remove SWI_OS_FSControl_54() as it wasn't used.  Couple of register bits
    for _swiv() were wrong or could be better specified.  acorn/riscos.c,
    acorn/riscos.h, acorn/swiven.c, acorn/swiven.h (John Tytgat)
18. Comment out unused "argument files not enabled" message (which removes
    a compiler warning).  fileio.c (John Tytgat)
19. In ziptyp(), add q = q for RISCOS to avoid compiler warning on unused
    parameter.  zipfile.c (John Tytgat)
20. Delete assembler version of file.  This assembler version is obsolete
    and replaced by the C version acorn/swiven.c (without any noticable
    performance impact).  acorn/swiven.s (John Tytgat)
21. Delete binary file as this is superceeded by Jeffrey Lee's BASIC
    detokenized version acorn/srcrename.  acorn/srcrenameold (John Tytgat)
--------------------- February 19th 2009 version 3.1b02 -----------------------
 1. Change mbstowcs size parameter to use wide character count from
    previous call to fix bug that caused illegal memory access Win32 crashes
    when apparently illegal multi-byte strings were passed in.  fileio.c
    (kellner from forum)
 2. Update copyright date.  revision.h (Ed)
 3. Add items to TODO list.  TODO (Ed)
 4. Define ESCAPE_CHR for setting default escape character \ to ^ for
    VMS.  Use ESCAPE_CHR in isshexp() instead of \.  util.c (SMS)
 5. Add nl_langinfo() check that sets NO_NL_LANGINFO if it doesn't exist.
    In Unicode check, don't call nl_langinfo() if NO_NL_LANGINFO is set.
    unix/configure, zip.c (Ed)
 6. Change z->name to z->iname in check for directory, as z->name
    directories may not end in / on some OS.  Compare iname instead
    of zname in zqcmp() and zuqcmp().  zip.c, zipfile.c (SMS)
 7. Add cma$tis_vmserrno_get_addr define.  zip.h (SMS)
 8. Add comment to rqcmp() that this compare is used by trash().  Add
    note to zsearch() that 3 is unicode_mismatch which means ignore
    Unicode and that Unicode is not trusted yet for -FF.  zipfile.c (Ed)
 9. Add 4th parameter for IZ_ZLIB and 5th parameter for PROD (directory
    for production output).  Add check for valid C compiler.  Add
    support for zlib in IZ_ZLIB directory.  Add support for PROD
    directory.  unix/configure, unix/makefile (SMS)
10. Updates to VMS build procedure to add NOCOMPILE and NOEXE command
    line options and allow chosing of directory for output files.
    vms/build_zip.com (SMS)
11. For VMS add support for PROD=subdir and add CLEAN to CLEAN_ALL.
    vms/descript.mms  (SMS)
12. Add support for PROD and DEST_STD.  vms/descript_src.mms (SMS)
13. In vms_open(), reset ACL context before reading file ACL list.
    Change error handling to set appropriate errno and vaxc$errno
    values.  Change ACL reading from getting all and storing in
    buffer of 512 bytes that can be overrun in some cases to using
    allocated buffer and reading each ACL separately.  vms/vms_pc.c
    (SMS)
14. Update VMS command descriptions, including adding note about
    directories and adding note about ACL storage using -V and -VV
    or /VMS[=ALL].  Add note for /TRANSLATE_EOL.  vms/vms_zip.rnh,
    vms/zip_cli.help (SMS)
15. Add ", :, \, and | to char_prop table.  Update eat_carets() to
    better escape dots in names.  vms/vmszip.c (SMS)
16. Move main zip header include (api.h for api.c) in front of all
    system header includes, so that the system-specific config
    settings are applied before reading any system headers.
    api.h, windll/windll.c (Christian)
17. Synchronize scope specifier at def of ucs4_char_from_utf8()
    with scope specifier used in declaration to get rid of a compiler
    warning.  fileio.c (Christian)
18. Use Windows fseeki64() and ftelli64() beginning with Visual
    Studio 2005 (VC 8.0), the first version they are publicly defined.
    tailor.h (Christian)
19. Add some missing "const" modifiers to read-only string arguments
    of helper functions.  util.c, zip.h (Christian)
20. Add (char *) cast to isshexp() return.  Add (wchar_t *) cast
    to isshexpw() return.  Remove cast of isshexpw() parameter.
    Remove cast from isshexp() parameter.  util.c (Christian)
21. Add dll section accidentally left out in last beta.
    win32/makefile.gcc (Christian)
22. Adapt to Zip 3 (however, lcc-win32 does not (yet) work because
    of a K&R C misinterpretation).  win32/makefile.lcc (Christian)
23. Update comments.  win32/makefile.w10 (Christian)
24. Correct wrong positioned merges of previous updates.
    win32/makefile.wat (Christian)
25. Remove unsupported configuration option NOWIN98.  Add "out:"
    specification to dll link command.  Update clean target.
    win32/makefile.w32 (Christian)
26. Do not force NO_ASM for dll to allow build scripts to handle
    this setting.  win32/osdep.h (Christian)
27. Deactivate ftello/fseeko code when these functions are mapped
    to system-supplied calls.  Revise fseeko code to reset error
    flags correctly.  win32/win32i64.c (Christian)
28. Add comment regarding fseeki64() and ftelli64().
    win32/win32i64.c (Ed)
29. Add missing CP_UTF8 symbol definition for lcc-win32 compiler
    win32/win32zip.c (Christian)
30. Add compatibility defines for VC++ 8 and newer.  Add workaround
    for "printf" bug resulting in unresolved symbol at link time.
    Comment out fSuffix option struct member which is not yet
    implemented.  windll/example.c (Christian)
31. Add missing win32i64.c to list of source files.  Change settings
    to compile LIB library for multithreading projects (same
    configuration as the dll compilation).
    windll/visualc/lib/zip32z64.dsp (Christian)
32. Remove unused local variable zipfile.  zipup.c (Christian)
33. Create examples directory under windll to put all DLL and LIB
    examples.  Move example files to examples directory.  Create
    vb6 and vc8 directories under examples.  windll/examples,
    windll/examples/vc6, windll/examples/vc8, windll/examples/VB,
    windll/examples/VBz64 (Ed)
34. Create projects for vc6 DLL and LIB.  windll/examples/vc6/c_dll_ex,
    windll/examples/vc6/c_lib_ex,
    windll/examples/vc6/c_dll_ex/c_dll_ex.dsp,
    windll/examples/vc6/c_dll_ex/c_dll_ex.dsw,
    windll/examples/vc6/c_lib_ex/c_lib_ex.dsp,
    windll/examples/vc6/c_lib_ex/c_lib_ex.dsw (Ed)
35. Add vc8 LIB example.  windll/examples/vc8/c_lib_ex/,
    windll/examples/vc8/c_lib_ex/example.c,
    windll/examples/vc8/c_lib_ex/example.h,
    windll/examples/vc8/c_lib_ex/TestZip.sln,
    windll/examples/vc8/c_lib_ex/TestZip.vcproj (107E5eng from forum)
--------------------- February 27th 2009 version 3.1b03 -----------------------
 1. Add option -pp to specify a path prefix, but not implemented yet.  Add
    global variable path_prefix.  zip.c, globals.c, zip.h (Ed)
 2. Restore notice date.  revision.h (Christian)
 3. Add include <langinfo.h> for nl_langinfo().  tailor.h (SMS)
 4. Add check for UTF-8 locale when nl_langinfo() is not available to check
    for UTF-8 character set.  zip.c (Ed)
 5. Fix ODS5 Unicode comment.  vms/vmszip.c (SMS)
 6. Fix optional bzip2 support for dll build.  Add api.h to dll compile.
    win32/makefile.gcc (Christian)
 7. Fix example.exe build rules.  win32/makefile.gcc, win32/makefile.w32
    (Christian)
 8. Add missing "delete resource binaries" (*.res) command to clean
    target.  win32/makefile.wat, win32/makefile.w10 (Christian)
 9. Update description files.  zip.aps, ziprc (Ed)
10. Update windll/contents to document the current directory structure.
    windll/contents (Christian, Ed)
11. Change Visual C++ directory from visualc to vc6 to be consistent
    with adding vc8 projects.  windll/vc6 (Ed)
12. Remove duplicate structs.h from windll/examples subdirectory.
    windll/examples/struct.h (Christian)
13. Correct include directive for structs.h to point to the existing
    file.  windll/examples/example.h (Christian)
14. Correct target output directory and "structs.h" location in VC6
    example project files.  windll/examples/vc6/c_dll_ex/c_dll_ex.dsp,
    windll/examples/vc6/c_lib_ex/c_lib_ex.dsp (Christian)
15. Add lib_here.txt file to note where lib file goes.
    windll/examples/vc6/c_lib_ex/lib_here.txt (Ed)
16. Correct additional include dir specifications to relative path
    to remove references to specific directories.
    windll/examples/vc8/c_lib_ex/TestZip.vcproj (Christian)
17. Rename VC8 lib example TestZip project to c_lib_ex to match new
    structure of examples directory.  Instead of local example.h and
    example.c use common ones in windll/examples.  For now keep old
    ones as renamed files.
    windll/examples/vc8/c_lib_ex/c_lib_ex.sln,
    windll/examples/vc8/c_lib_ex/c_lib_ex.vcproj,
    windll/examples/vc8/c_lib_ex/example_old.h,
    windll/examples/vc8/c_lib_ex/example_old.c (Ed)
18. Add VC8 project for dll example.
    windll/examples/vc8/c_dll_ex/c_dll_ex.sln,
    windll/examples/vc8/c_dll_ex/c_dll_ex.vcproj (Christian)
19. Update VC8 readme.  win32/vc8/ReadmeVC.txt (Ed)
20. Add readme for WinDLL examples.  windll/examples/readmeex.txt (Ed)
21. Copy C-Sharp project from Zip 2.32.  Has not been updated for Zip 3.0
    yet.  windll/examples/csharp, windll/examples/csharp/readmecs.txt,
    windll/examples/csharp/zip, windll/examples/csharp/zip/,
    windll/examples/csharp/zip/app.ico, windll/examples/csharp/zip/zip.cs,
    windll/examples/csharp/zip/assemblyinfo.cs,
    windll/examples/csharp/zip/csharpinfozip_zipsample.csproj,
    windll/examples/csharp/zip/form1.cs,
    windll/examples/csharp/zip/form1.resx,
    windll/examples/csharp/zip/zipdllprintmessageeventargs.cs,
    windll/examples/csharp/zip/zipdllservicemessageeventargs.cs (Ed)
22. Add readme files for VC6 and VC8 projects.
    windll/examples/vc6/readmev6.txt, windll/examples/vc8/readmev8.txt,
    windll/vc6/readmev6.txt, windll/v8/readmev8.txt (Ed)
---------------------- March 17th 2009 version 3.1b04 ------------------------
 1. Add new -cd option as placeholder for a change directory command that
    changes the root directory for the zipping operation.  There could be
    complications, especially for split archives.  zip.c (Ed)
 2. Remove free() from option -pp command case.  zip.c (Ed)
 3. Implement -pp option.  In putlocal() and putcentral(), store path to
    write to header in new iname variable and length in nam.  If path_prefix
    not NULL, prepend to path.  zipfile.c (Ed)
 4. Add SYS$DISK: to link commands.  vms/build_zip.com,
    vms/descrip.mms (SMS)
 5. Update link commands to use /library.  vms/descrip.mms (SMS)
 6. Remove INCL_BIP2_M.  vms/descrip_src.mms (SMS)
 7. Remove references to [.VMS]00README.TXT and [.VMS]00BINARY.VMS.
    vms/install_vms.txt (SMS)
 8. Update note on determining symlink support to remove instructions
    for searching UnZip binary for symlink and instead note -v option
    for UnZip, as was already done for Zip.  vms/notes.txt (SMS)
 9. Remove stray ! from comment.  win32/makefile.gcc (Christian)
10. Remove old borland dll and lib from contents.  Note that
    16-bit Windows 3.x no longer supported.  windll/contents (Christian)
---------------------- March 28th 2009 version 3.1b05 ------------------------
 1. Make the args variable global so arguments can be freed by freeup() and
    when no longer needed, fixing memory leak.  globals.c, zip.h, zip.c
    (Polo from forum, Ed)
 2. Update comment in freeup().  Move freeing of allocated globals from
    finish() and ziperr() to freeup().  After tempzip is freed, set to
    NULL.  Initialize args to NULL.  zip.c (Ed)
 3. Free value after add_name() while processing command line to fix memory
    leak.  zip.c (Polo from forum)
 4. Move password key processing after log file opened so any errors get
    reported to log file if open.  zip.c (Ed)
 5. Add check for illegal characters in path prefix string.  Currently a path
    prefix must consist of alphanumeric characters (in the current character
    set, i.e. checked with isalnum()), with "!@#$%^&()-_=+/[]{}|" also
    allowed.  Also ".." is not allowed in the prefix string.  The filtering
    is to avoid security problems.  zip.c (Ed)
 6. Free args after last use.  zip.c (Polo from forum)
 7. Add option -MV to allow setting MVS file path translation and add new
    dots (no change) and slashes (convert all dots to slashes) modes.  Add
    new mvs_mode global.  globals.c, zip.h, zip.c, cmsmvs/cmsmvs.c  (wesclusa
    from forum, Ed)
 8. Pass Zip password (provided by -e or -P) to -T archive test option that
    calls unzip (or a user-provided command if -TT specified) so unzip can
    use same password to test archive.  Add {p} as placeholder for adding
    password to -TT string.  Update unzip_path note.  Update UnZip 6 note.
    zip.c (tkrueger from forum, Ed)
 9. Update description of patterns in extended help.  Update extended help
    for -T and -TT.  Add -pp (path prefix) and -MV (MVS path translation mode)
    to extended help.  zip.c (Ed)
10. Update note for multi-character option defines.  zip.c (Ed)
11. Add -aa (all-ascii) option for skipping binary check in is_text_buf(),
    forcing all files to be handled as ASCII text.  This is useful for EBCDIC
    translation (as for Z/OS), but made this global option in case there's
    some other use.  zip.c, zip.h, globals.c, util.c (Lutz from forum, Ed)
12. Add -HH option for extended help so help works even if there's case
    problems.  zip.c (Ed)
13. Update WhatsNew.  WHATSNEW  (Ed)
14. Update annoucement.  zip31b.ann  (Ed)
15. Drop new -cd option until details worked out.  zip.c (Ed)
----------------------- March 31st 2009 version 3.1b06 -------------------------
 1. Add missing local declaration for len in -T code.  zip.c (Ed)
 2. Update README.  README (Ed)
 3. Update tempzn byte count in putlocal() and putcentral() to fix path prefix
    bug.  zipfile.c (Ed)
 4. Add warning to -P option in extended help.  zip.c (Ed)
 5. Update INSTALL.  INSTALL (Ed)
 6. Update announcement.  zip31b.ann (Ed)
 7. Update TODO.  TODO (Ed)
------------------------ April 9th 2009 version 3.1b --------------------------
 1. Update manual to include new options -aa, -MV, and -pp.  Update
    descriptions of -T and -TT.  Update introduction section.  Updates for
    -w and -ww.  Additional minor updates.  man/zip.1, zip.txt (Ed, SMS)
 2. Update WhatsNew.  WHATSNEW (Ed)
 3. Update announcement.  zip31b.ann (Ed)
 4. Update TODO.  TODO (Ed)
------------------------ July 20th 2009 version 3.1c01 --------------------------
 1. Add -aa option to skip binary check.  Add global all_ascii. (Ed)
 2. Fixes to -aa and -MV options.  cmsmvs/cmsmvs.c, zip.c (Lutz)
 3. Use 64-bit zfseeko + zftello functions for large file support.
    cmsmvs/cmsmvs.c (RBW)
 4. Add missing } and fix mvs_mode 1 and 2.  cmsmvs/cmsmvs.c (Ed)
 5. Change file size parameter in filetime() from long to zoff_t
    to handle 64-bit values.  Add z/OS large file comment.  Add
    cast to -1 for file size.  Initial changes to support Zip
    64-bit calls, but some work still needs to be done.
    cmsmvs/cmsmvs.c (RBW)
 6. Prevent double define of EBCDIC.  cmsmvs/cmsmvs.h (RBW)
 7. Update MVS makefile to set compile options for large file support; change
    "$%" to "$@"; set maximum optimization option ("-O3").  Update compilation
    options to add large file support to z/OS.  Change infor.zip(zip) to
    infozip.load(zip).  cmsmvs/mvs.mki (RBW)
 8. Add comments.  cmsmvs/mvs.mki (Ed)
 9. Prevent display of garbage characters in filenames by skipping the attempt
    to render the low 32 unprintable characters as printable.  The technique
    does not work for EBCDIC.  Move display_string allocation to before use
    for EBCDIC.  fileio.c (RBW)
10. Set definitions needed for large file support under z/OS.  Add ifndef
    for _LARGE_FILES.  Enable 64-bit functions for z/OS.  tailor.h (RBW)
11. Create target for zos, which now works like the generic target; redirect
    the os390 target to the zos target.  unix/Makefile (RBW)
12. Detect z/OS or OS/390 system, and set appropriate flags; detect IBM C
    compiler and set maximum optimization level (this produced a 3-4x speedup
    in testing).  Add param.h to nonexistent include check.  Add SYSTEM check
    for OS/390.  unix/configure (RBW)
13. Guard against double define of _LARGE_FILES.  unix/osdep.h (RBW)
14. Fix compile error under z/OS.  zip.c (RBW)
15. Large file support fixes for z/OS.  zipfile.c (RBW)
16. Add README.zOS.  README.ZOS (RBW)
17. Add C++ EXPENTRY entries.  api.h.
18. Add free(z->oname) to newname() and newnamew() to fix memory leak.
    fileio.c
19. Add help for new -aa option for EBCDIC not CMS_MVS.  zip.c (RBW)
20. Add extended help for EBCDIC options -a and -aa.  zip.c (Ed)
21. Add temp debug output showing int sizes.  zip.c (RBW)
22. Add type cast to popen for ZOS.  zip.c (RBW)
23. Change add_filter() to always save the full path in ex2in() by
    setting pathput to 1 for just that call.  This should fix a
    problem where patterns are not matching stored paths when the
    -j option is used to strip the path.  zip.c (SMS)
24. Change -aa from global to only for EBCDIC as some problems on
    other ports and not needed except for EBCDIC.  (Lutz, Ed)
25. Finish implementing -aa option (after users reminded it wasn't).
    zip.c (Ed)
26. Change EBCDIC messages from using printf() to zipmessage() so
    message formats are standardized and logged (when logging
    enabled).  zip.c (Ed)
27. Add zoff_t cast to zfseeko() calls for z/OS (as it apparently
    needs them).  zipfile.c (RBW)
28. In readlocal(), initialize split_path to NULL and free it later
    if not NULL.  zipfile.c (Ed, Kamers)
29. Change warnings for "unable to seek in input file" errors to
    include a "(zf-0x) identifier so that the particular error can
    be determined.  zipfile.c (RBW)
30. In scanzipf_regnew(), add check for cd_total_entries rollover
    for archives from old zips that stored more entries than the old
    structure could hold without rollover.  This should fix problem
    where these archives were rejected as bad.  zipfile.c (Ed)
31. In zipcopy(), initialize split_path to NULL and free later if
    not NULL to fix memory leak.  zipfile.c (Ed, Kamers)
----------------------- August 15th 2009 version 3.1c02 -------------------------
 1. Update EXPENTRY entries for DLL to fix compiler problem in VC6.
    api.h (Ed)
 2. Add get_time_in_usec() to time zipping rate in microseconds.  Calls system
    function gettimeofday() to get usec time.  fileio.c, zip.h (Ed)
 3. Add globals display_time, display_est_to_go, display_rate, clocktime,
    start_zip_time, and current_time for new -dt, -de, and -dr options.  Create
    new define ENABLE_ENTRY_TIMING to enable usec timing if system supports it.
    zip.h, globals.c (Ed)
 4. Add -dt (--display_time), -de (--display_est_to_go), and -dr
    (--display_rate) options.  Add extended help for -dt, -de, and -dr.  Option
    -dt uses standard timing to second resolution, while -de and -dr use usec
    resolution to get better rate estimates.  zip.c (Ed)
 5. Update manual to include -dt, -de, and -dr options.  man/zip.1, zip.txt (Ed)
 6. In configure, if gettimeofday() and long long are supported, define
    ENABLE_ENTRY_TIMING to enable -de and -dr options.  unix/configure (Ed)
 7. Add sys/time.h include if ENABLE_ENTRY_TIMING is defined.  unix/unix.c (Ed)
 8. If LARGE_FILE_SUPPORT is enabled on Windows, define ENABLE_ENTRY_TIMING.
    Add replacement for missing gettimeofday() on Windows based on code from
    openasthra.com.  Define local version of get_time_in_usec() for Windows
    using local gettimeofday().  win32/osdep.h, win32/win32.c (Ed)
 9. Update formatting of VB example files.  Implement UTF8 options.  Comment
    out unimplemented fSuffix.  windll/examples/vbz64/vbzipbas.bas,
    windll/examples/vbz64/vbzip.vbw, windll/examples/vb/vbzip.vbw (Ed)
10. Add api.h and windll.h to dll project.  windll/vc6/dll/zip32z64.dsp (Ed)
----------------------- April 14th 2010 version 3.1c03 -------------------------
 1. Add Fedora stack markings patch (exec-shield.patch) to prevent stack from
    being executable, patch forwarded from Debian bug system.  See
    http://cvs.fedoraproject.org/viewvc//devel/zip/exec-shield.patch?view=markup.
    crc_i386.S, match.S (sanvila on forum, Kees Cook)
 2. Changed VMS wild() to avoid saving a user-specified version
    (";1") when the user-specified file is a directory.  vms/vmszip.c (SMS)
 3. Changed VMS deletedir() to use (complex) $QIOW code instead
    of (simple) system() with a "SET PROT" command, to eliminate annoying
    %SET-E-PRONOTCHG messages when SET PROT failed during "zip -m"
    directory deletions.  vms/vmszip.c (SMS)
 4. Add CRYPT defines around password code.  zip.c (SMS)
 5. Change instances of k used for comments to new comment_size with type
    extent.  zip.c (SMS, Ed)
 6. Remove extra comment introducer.  zipfile.c (SMS)
 7. Add wchar.h and wctype.h includes to wide character check code.
    unix/configure (SMS)
 8. Add checks for uname -m, uname -o, uname -p, uname -r, uname -s,
    and uname -v and pass back to main code for version information.
    unix/configure (SMS)
 9. Move __APPLE__ define.  Use UNAME defines.  unix.c (SMS)
10. Add include for incl_bzip2_m to link executable.  Include (GLOBALS).
    vms/build_zip.com, vms/descript.mms, vms/descript_src.mms (SMS)
11. Update handling of exit codes for VMS.  vms/notes.txt, vms/vms.c (SMS)
12. Define VAX Type-Cast to avoid compiler warnings.  vms/vmszip.c (SMS)
13. Comment out sys/time.h include because prevents compiling on Windows
    MSVS that does not have it.  fileio.c (Ed)
14. Update some copyrights to 2010.  revision.h (Ed)
----------------------- May 14th 2010 version 3.1c04 ---------------------------
 1. Format #if blocks to verify all blocks close in response to user question.
    zipfile.c (Ed)
 2. Update structure _ZpVer to include option structure ZPOPT size and a new
    string to provide a comma separated list of enabled features to the user,
    currently set to NULL.  Add comments.  Add DLL support for -Z compression
    method, by adding compression method name string to ZPOPT.  In ZPOPT change
    fMisc to fUnicode in ZPOPT structure, removing unused suffix flag.  Add 8
    long words of fluff at end of ZPOPT for future expansion.  All this makes
    this ZPOPT not backward compatible, but will allow backward compatible
    expansion in the future.  api.c, api.h (Ed)
 3. As Zip version is provided through Z_MAJORVER, Z_MINORVER, and Z_PATCHLEVEL,
    starting with Zip 3.1c, DW_MAJORVER, DW_MINORVER, and DW_PATCHLEVEL defines
    are frozen at 3, 1, and 0 (this version) unless the DLL interface changes
    in a way that is not backward compatible.  api.c, api.h, revision.h (Ed)
 3. If logfile is specified as "-", send log output to stdout.  Forces -q to
    avoid duplicate output to stdout.  Options -la (append to existing log)
    and -v (verbose) are not allowed, as output is determined by the logging
    code and the -li option.  Update -lf extended help.  zip.c (Ed)
 4. Update copyright date.  zip.h (Ed)
 5. If display_globaldots (-dg) is set, do not output a newline after each
    file in DisplayRunningStats().  This newline kept the dots from staying
    on the same line as intended.  zip.c (Ed)
 6. Clean up indentation of #if blocks.  zipfile.c
 7. Add Ignore_Export_Lib 0 for consistency.  win32/vc6bz2/zip.dsp (Ed)
 8. Add bzip2 enabled Windows DLL and LIB MSVS 6 projects.
    windll/vc6bz2/readmev6bz2.txt, windll/vc6bz2/dll/zip32z64.dsp,
    windll/vc6bz2/dll/zip32z64.dsw, windll/vc6bz2/lib/zip32z64.dsp,
    windll/vc6bz2/lib/zip32z64.dsw (Ed)
 9. Update install.txt to note added bzip2 DLL and LIB capability for
    Windows.  bzip2/install.txt (Ed)
----------------------- June 14th 2010 version 3.1c05 --------------------------
 1. Allow negating -j as replacement for -p.  Provide warning when -p used that
    it is deprecated.  Add note to extended help.  zip.c (SMS, Ed)
 2. Change | to & in UTF-8 option bit checks against fUnicode.  api.c (stu003
    from forum thread "Wrong interpreting the UTF-8 settings in api.c")
 3. Add ProgressReport callback to WinDLL, enabled by ENABLE_DLL_PROGRESS
    define.  Add szProgressSize to Options structure and use to set
    progress_chunk_size.  Add feature list string to pVersion callback.  Items
    in string are delimited by semicolons and have form ;xx; including first
    and last items.  Some items have lists of valid values, as with
    ";compmethods:store,deflate;" (compression method list when bzip2 not
    enabled).  Add globals bytes_read_this_entry, bytes_expected_this_entry,
    entry_name, progress_chunk_size, last_progress_chunk.  Progress report
    calculations in zipup(), file_read(), filecompress(), bzfilecompress().
    api.c, api.h, globals.c, zipup.c, win32/osdep.h (Ed) 
 4. Handle better bad compression level from DLL caller.  Add kluge around
    not being able to support compression level 0 directly from DLL call.
    Only allow fEncrypt flag to be 0 or 1.  Support separate ExcludeBeforeDate
    and IncludeBeforeDate.  Remove fTemp from Options structure and just check
    if szTempDir is NULL or empty instead.  Update comments.  api.c, api.h (Ed)
 5. Add comments.  crypt.c (Ed)
 6. Change vms_zip_command() to return unsigned int instead of ulg.  Related
    updates.  Add new file zip_cli.rnh.  vms/commandline.c, vms/zip_cli.cld,
    zip.h, vms/zip_cli.rnh (SMS)
 7. Update bzip2 install.txt to note WinDLL now supports.  bzip2/install.txt (Ed)
 8. Add note that readme file needs updating.  windll/windll.txt (Ed)
 9. Update WinDLL examples.  Resize VB example form.  Add ProgressReport
    callback to VB example and update to latest api structures.  Update VB
    form to display percent archive and entry completions in title bar.
    windll/examples/example.c, windll/examples/example.h,
    windll/examples/vb/readmevb.txt, windll/examples/vbz64/readvb64.txt,
    windll/examples/vbz64/vbzip.vbw, windll/examples/vbz64/vbzipbas.bas,
    windll/examples/vbz64/vbzipfrm.frm (Ed)
10. Copy old vbz64 to vbz54_30.  This will probably be deleted shortly.
    windll/examples/vbz64_30/readvbz64_30.txt,
    windll/examples/vbz64_30/vbzip.vpb, windll/examples/vbz64_30/vbzip.vbw,
    windll/examples/vbz64_30/vbzipbas.bas,
    windll/examples/vbz64_30/vbzipfrm.frm (Ed)
11. Add readcex.txt.  windll/examples/vc6/readcex.txt (Ed)
12. Update MSVS project.  windll/vcc6bz2/dll/zip32z64.dps (Ed)
----------------------- June 14th 2010 version 3.1c06 --------------------------
 1. Change incorrect bytes_read_so_far to bytes_so_far.  zipup.c (SMS, Ed)
 2. Delete zip_cli.rnh.  vms/zip_cli.rnh (SMS)
 3. Update Zip CLI help noting change from /JUNK to /NOFULL_PATH.  Add <NEXT>
    in many places.  vms/zip_cli.help (SMS)
----------------------- June 17th 2010 version 3.1c07 --------------------------
 1. Change incorrect bytes_read_so_far to bytes_so_far in filecompress() and
    bzfilecompress().  zipup.c (Ed)
 2. Change strftime() to sprintf() as older VMS does not support strftime().
    zip.c (SMS, Ed)
----------------------- June 21st 2010 version 3.1c08 --------------------------
 1. Add zero to day of display time -dt display.  zip.c (SMS, Ed)
 2. Add license version to license option output.  revision.h (Ed)
 3. Version ID file updated.  file_id.diz (Ed)
 4. Update Install information.  INSTALL (Ed)
 5. Update Readme.  README (Ed)
 6. Update TODO.  TODO (Ed)
 7. Update WhatsNew.  WHATSNEW (Ed)
 8. Add announcement file for Zip 3.1c.  zip31c.ann (Ed)
 9. Update WinDLL examples readme.  windll/examples/readmeex.txt (Ed)
10. Update C Sharp readme.  windll/examples/csharp/readmecs.txt (Ed)
11. Update C examples readme.  windll/examples/vc6/readcex.txt (Ed)
12. Update VC6 examples readme.  windll/examples/vc6/readmev6.txt (Ed)

----------------------- June 22nd 2010 version 3.1c ---------------------------
 1. Include <sys/time.h> for Tru64 to define timeval.  fileio.c (SMS)

-------------------- September 14th 2010 version 3.1d01 -----------------------
 1. Add -lu option to store UTF-8 paths in the log.  Add global log_utf8.
    globals.c, zip.c, zip.h (Ed)
 2. Update extended help, adding -lu and updating -T and -UN options.  zip.c
    (Ed)
 3. Rename variable utf8_force to utf8_native, as this flag forces storage of
    UTF-8 in the main path field as happens when UTF-8 is native character set.
    globals.c, zip.c, zip.h (Ed)
 4. Instead of setting the UTF8_BIT for all entries needing Unicode when
    utf8_native is set, only set for new entries and keep setting of old
    entries.  Zero z->flg in zip.c and set UTF8_BIT there, instead of zeroing
    in zipup.c.  zip.c, zipfile.c, zipup.c (Ed)
 5. Move definition of UTF8_BIT from zipfile.c to zip.h to make global.  zip.h,
    zipfile.c (Ed)

-------------------- September 15th 2010 version 3.1d02 -----------------------
 1. Add missing UNICODE_SUPPORT ifdefs.  zip.c (SMS, Ed (EG))

-------------------- February 19th 2011 version 3.1d03 ------------------------
 1. Add clearerr() to clear EOF and error flags after initial checks looking
    for zip file end structures.  zipfile.c (Dennis LaBelle)
 2. Change stored folders to require Version Needed To Extract 2.0 as the
    AppNote requires instead of 1.0.  zipup.c (from Theo in forum thread
    "Compatibility - Folders Version Needed to Extract", EG)
 3. Add linker check to Unix configure script.  unix/configure (SMS)
 4. Add preliminary AES encryption (WinZip version).  Only AE-1 currently
    implemented, though AE-2 is a very simple addition (mainly involves
    how CRC is handled) and is planned for next beta.  Note that the
    function entropy_fun in crypt.c is currently only implemented for WIN32.
    Versions may be needed for each OS.  IZ_PWLEN increased from 80 to 256,
    allowing longer passwords to support stronger AES encryption.  Add
    globals encryption_method, aes_vendor_version, aes_strength,
    comp_method, force_ansi_key, key_size, zctx (encryption context),
    zpwd, zpwd_len, zsalt, zpwd_verifier, aes_rnp (random number pool),
    and auth_code.  Add AES Strong Encryption export control notice.
    Add CRYPT_AES to -v output.  Change -v standard encryption listing
    from "encryption" to "zip standard encryption".  Implement option
    -Y to set encryption method.  Add AES 128 and AES 256 methods.
    Though Gladman will also do AES 192, did not implement that at
    this time.  Force minimum of 16 characters for password when using
    AES encryption.  Add ZE_CRYPT error code.  All AES encryption in
    CRYPT_AES ifdef blocks.  Add CRYPT_AES_EF_TAG.  Add
    add_crypt_aes_local_extra_field() and add_crypt_aes_cen_extra_field().
    Make write_string_to_mem() global.  Save z->how in how so can update
    with AES compression method 99 later.  Small change to Version Needed
    To Extract warning.  Add expected_size for check to cover different
    encryption methods.  For AES encryption don't use extended header.
    crypt.c, crypt.h, globals.c, revision.h, zip.c, zip.h, ziperr.h,
    zipfile.c, zipup.c, win32/win32.c (EG)
 5. Add option -lF as shorthand for "-lf archive.log" where archive is the
    output archive name.  Add global use_outpath_for_log.  globals.c,
    zip.c (EG)
 6. Add option -pn to allow use of non-ANSI characters in password.  Default
    changed to only allow ANSI characters.  globals.c
 7. Update ToDo.  TODO (EG)
 8. Change GB to GiB and MB to MiB in extended help.  Add -Y, -lF, and -pn
    options to extended help.  zip.c (EG)
 9. Update entry timing to fix bug where timing is messed up after awhile.
    Not tested yet.  Types updated from int to uzoff_t.  Add check to
    keep bytes_to_go no smaller than 1.  Account for files_to_go when
    estimating time to go as listing files on console takes time.  Change
    how tmpres is assigned in gettimeofday(), though this function is no
    longer used.  Add new get_time_in_usec().  zip.c, win32/win32.c
10. Add to zipoddities() ver 45 to version check that complains when version
    is not supported.  zipfile.c (EG)
11. Add tradeoff comment for files that don't compress.  zipfile.c (EG)
12. Fix Win32 bytes security message so goes to console and log as requested.
    win32/win32zip.c (EG)
13. Added install readme to aes directory.  aes/installaes.txt (EG)

---------------------- April 20th 2011 version 3.1d04 -------------------------
 1. SunOS 4.x (like Tru64) needed <sys/time.h>.  New C macro HAVE_SYS_TIME_H
    replaces old Tru64 condition.  fileio.c, unix/configure (SMS)
 2. For operations with both input and output archives, temporary archive
    files could be created on the file system with the input archive instead
    of on that of the output archive, wasting time when the temporary archive
    needed to be copied (not renamed) to its destination, or causing I/O
    errors if the input archive was on a read-only file system.  Now instead
    of zipfile (input archive path) use out_path (output archive path) as
    base of temp path when out_path is different than zipfile.  New -sd
    diagnostic messages reveal more info on temporary files.  fileio.c,
    globals.c, zip.c, zip.h (SMS)
 3. GCC 2.8.1 on SunOS 4.1.4 wanted a declaration of strerror() when using
    our replacement strerror() function.  Changed UINT_MAX, ULONG_INT, and
    USHRT_MAX checks to drop UL on constants.  tailor.h (SMS)
 4. Use "uname" output for more system names.  unix/unix.c  (SMS)
 5. Expanded the VMS-specific errbuf[] buffer to accommodate longer messages
    or file names.  vms/cmdline.c (SMS).
 6. Add a ZCONST to the VMS-specific ziperr() declaration, to agree with
    the prototype in "zip.h".  vms/cmdline.c (SMS).
 7. VMS-specific tempname() improperly reused temporary archive names for
    split archives.  "ZI<process_id>.<serial>" replaces "ZI<process_id>.",
    providing multiple unique names when needed.  vms/vms.c (SMS)
 8. Replace stricmp() with strcasecmp().  zip.c (SMS)
 9. Change from NAM_STRUCT to NAMX_STRUCT.  Use NAMX_DNA_FNA_SET(fab).
    vms/vms.c, vms/vms.h, vms/vms_im.c, vms/vms_pk.c, vms/vmsmunch.c,
    vms/vmszip.c (SMS)
10. Disable the old "make some kind of mktemppath()" code, allowing temp path
    code later in file to do its job.  zip.c (SMS)
11. Move definition of variable how outside of ZIP64_SUPPORT block as needed
    by AES encryption even if not using ZIP64_SUPPORT.  zipfile.c (EG)
12. Define STRCASECMP() that resolves to stricmp() on Windows and strcasecmp()
    for other ports.  tailor.h, zip.c (EG)

---------------------- April 27th 2011 version 3.1d05 -------------------------
 1. Fix bug where standard encrypted entries were being marked as AES when
    AES entries were added.  Add encrypt_method to zlist structure.  zip.c,
    zip.h, zipfile.c, zipup.c (EG)
 2. Fix endian problems in AES source.  Need to report back the fixes to
    Gladman.  aes/aesopt.h, aes/sha1.c (SMS)

------------------------ May 5th 2011 version 3.1d06 --------------------------
 1. Make entropy_fun() in crypt.c (perhaps an example for other ports to
    reference) only applicable for WIN32 as some of the calls may only exist
    in WIN32, though similar calls exist on some other ports.  crypt.c (EG)
 2. Add PROTO and NO_PROTO support to aes_crypthead(),
    add_crypt_aes_local_extra_field(), add_crypt_aes_cen_extra_field().
    Split long prototypes on multiple lines.  crypt.c, zipfile.c (SMS)
 3. Fix spelling.  INSTALL, tailor.h, zip.c, macos/history.txt,
    msdos/osdep.h, novell/osdep.h, os2/osdep.h, proginfo/extrafld.txt,
    vms/vms.h (SMS)
 4. Remove #ifdefs from o_xx option definitions as it makes the list easier
    to read and they really don't do much.  zip.c (EG)
 5. Add -sd message after AES pool is initialized.  Keep track of how long
    AES random number pool takes to initialize and output time in message.
    zip.c (EG)
 6. Move VMS sys$ defines from zip.h to vms/osdep.h.  zip.h, vms/osdep.h (SMS)
 7. Change comp_method to z->how in AES extra field calls to fix bug where
    the wrong method was sometimes being stored in the extra field when the
    method changed from entry to entry.  Remove now unused comp_method.
    zipfile.c, globals.c, zip.h (EG)
 8. Comment out fflush(y) in zipup() as not sure why there.  zipup.c (EG)
 9. Update manual for Zip to list archive operation modes alphabetically.
    Clarify modes of operation.  Add --version option description.
    man/zip.1 (jaalto (from SourceForge Patch ID 3295707, et al.), EG)
10. Modify configure script to accept "var=value" parameters where var are
    CC, CFLAGS, AES, and so on in valid_vars list.  This replaces the
    positional parameters.  Add AES encryption support.  unix/configure (SMS)
11. Minor message wording changes.  unix/configure (EG)
12. Add compilation support for AES.  Add support for new configure
    parameters.  Remove generic_gcc target as now "generic CC=gcc" covers
    that.  unix/Makefile (SMS)
13. Add initial Unix version of entropy_fun() for AES encryption that tries
    to use the /dev/random or /dev/urandom devices or, failing that, uses
    a simple time and PID seed.  The random devices have not been tested
    for enough randomness on enough systems yet and the PID fallback
    should probably include some thread ID.  unix/unix.c (SMS)
14. Add VMS AES compile support.  vms/build_zip.com (SMS)
15. Add VMS AES options.  vms/cmdline.c, vms/zip_cli.cld (SMS)
16. Minor dependency updates.  vms/collect_deps.com (SMS)
17. Update for AES.  vms/descrip.mms, vms/descrip_deps.mms,
    vms/descrip_mkdeps.mms, vms/descrip_src.mms (SMS)
18. Add file to handle endian for AES.  vms/endian.h (SMS)
19. Add file to fix missing string.h include in AES source.
    vms/memory.h (SMS)
20. Add VMS version of entropy_fun(), with device_opcnt_bits()
    and device_opcnt_32().  vms.c (SMS)
21. Remove STRCASECMP code.  vms/vmszip.c (SMS)
22. Add VMS help for AES encryption.  vms/zip_cli.help (SMS)

----------------------- May 14th 2011 version 3.1d07 --------------------------
 1. Update encryption comments.  crypt.c (EG)
 2. Change CRYPT_AES define to CRYPT_AES_WG (AES WinZip/Gladman
    encryption.  crypt.c, globals.c, revision.h, zip.c, zip.h, zipfile.c
    zipup.c, unix/unix.cvms/build_zip.com, vms/vms.c (SMS, EG)
 3. Update note.  vms/descrip.mms (SMS)
 4. Isolate entropy_fun() for Win32 to just Zip (for now).  crypt.c (SMS)
 5. Update testp() and testkey() to be compatible with UnZip version.
    Add AES decryption.  crypt.c (SMS)
 6. Add some hex translations for GLOBAL keys.  crypt.c (SMS)
 7. Update decrypt() for UnZip to include AES.  crypt.c (SMS)
 8. Change RAND_HEAD_LEN constant to head_len variable to handle AES
    variable length header.  crypt.c (SMS)
 9. Change zoff_t to long in Trace() calls and remove fzofft formatting.
    crypt.c (SMS)
10. Change constant 2 to PWD_VER_LENGTH.  crypt.c (SMS)
11. Include aes/fileenc.h when USE_AES_WG set (for UnZip).  Add buffer
    size checks (for UnZip).  crypt.h (SMS)
12. Add new -pa (--prefix-added) option that works like -pp but only
    adds the prefix to new or updated entries.  Add global
    path_prefix_mode.  Add -pa to extended help.  globals.c, zip.c,
    zipfile.c (LynX, EG)
13. Remove aes/prng.h include and include aes/aes.h and aes/aesopt.h instead.
    zip.c (SMS)
14. Change version information standard encryption listing from "zip standard
    encryption" to CRYPT    (traditional (weak) encryption).  Drop crypt version
    date.  zip.c (SMS, EG)
15. Add new option -DI (--incremental-list) for a list of incremental archives
    that the entries of are to be skipped when creating a differential archive.
    Not yet implemented.  zip.c (EG)
16. Add AES Encryption endian check.  zip.c (SMS)
17. Add AES 256 minimum password length check.  zip.c (EG)
18. Add incompatible options check for AES and -X-.  Update -X and -V check
    warning to -X- and -V.
19. Update force_ansi_key comment.  zip.h (EG)
20. Update VMS_MSG_IDENT to V3.1-000.  Change COMPERR error message from
    "Not supported" to "Error in compilation options".  ziperr.h (SMS)
21. Change CRYPT_AES_EF_TAG to CRYPT_AES_WG_EF_TAG.  Don't set encryption
    method from read entries, just rely on copying AES extra field and
    header settings.  zipfile. (EG)
22. Always set z->encrypt_method for new entries.  zipup.c (SMS)
23. Add TRC flags.  vms/descrip_src.mms (SMS)

----------------------- June 8th 2011 version 3.1d08 --------------------------
 1. Re-sync crypt.c with UnZip.  See the UnZip 6.10c02 changes for
    crypt.c, but includes adding ef_scan_for_aes() and ef_strip_aes(),
    change USE_AES_WG to CRYPT_AES_WG, and updates to zipbare().
    crypt.c, crypt.h (SMS)
 2. Change CRYPT_AES_WG_EF_TAG to EF_AES_WG for UnZip-shared crypt.c.
    crypt.c, zipfile.c (SMS)
 3. Add AES encryption to ZipCloak.  Get and save local header offset for
    central directory.  crypt.c, zipcloak.c, unix/Makefile,
    vms/build_zip.com, vms/descrip_src.mms (SMS)
 4. Add line-length limit to password "line too long" error messages.
    ttyio.c (SMS)
 5. Add NO_EXCEPT_SIGNALS macro to allow easy disablement of the signal
    handler.  (Matches UnZip.)  zip.c (SMS).
 6. Change some explicit numeric constants for AES encryption to (named)
    macros.  Add AES192_OK to enable AES192 mode.  zip.c, zip.h, zipfile.c
    (SMS).
 7. Accurate password length check for all encryption methods.  ttyio.c,
    zip.c, qdos/qdos.c (SMS).
 8. Make UNIX- and VMS-specific entropy_fun() available for Zip and Zip
    utilities (for ZipCloak).  unix/unix.c, vms/vms.c (SMS)
 9. Move entropy_fun() for Win32 from crypt.c to win32/win32.c.  crypt.c,
    win32/win32.c (EG)
10. Changes to AES code.  aes/aes.h, aes/aescrypt.c, aes/aeskey.c,
    aes/aesopt.h, aes/aestab.c, aes/brg_endian.h (SMS)

----------------------- June 9th 2011 version 3.1d09 --------------------------
 1. Change encryption method constant to macros in note.  api.c (SMS)
 2. Additional encryption updates.  crypt.c (SMS)
 3. Set minimum AES 192 password size to 20 characters.  Define
    AES_MIN_ENCRYPTION and AES_MAX_ENCRYPTION for AES encryption checks.
    Change EF_AES to EF_AES_WG for consistency.  Change references to
    Standard encryption to Traditional encryption.  zip.c, zip.h,
    zipcloak.c (SMS)
 4. Define IZ_MIN() macro for implementing MIN.  Remove define from
    zipup.c.  zip.h, zipup.c (SMS)
 5. Include time.h for CRYPE_AES_WG.  Define IS_A_DIR macro that looks for
    an end "/".  Set default encryption method to TRADITIONAL_ENCRYPTION.
    Add AES random pool initialization.  *** there are (sometimes lame)
    reasons for why 32 or 1 are used ***  Set AES globals.  Exclude
    directories from encryption.  *** probably should also exclude soft
    links and maybe pipes too ***  zipcloak.c (SMS)
 6. Change CRYPT_AES_WG_EF_TAG to EF_AES_WG.  Use NO_ENCRYPTION.  zipfile.c
    (SMS)
 7. Change i < n to i <= n.  qdos/qdos.c (SMS)
 8. Update names of AES encryption methods to AES128, AES192, AES256 and
    TRAD.  Change AES to AES_WG.  Add AES192.  vms/cmdline.c,
    vms/descrip.mms, vms/descrip_src.mms, vms/zip_cli.cld,
    vms/zip_cli.help (SMS)

----------------------- June 12th 2011 version 3.1d10 -------------------------
 1. Clean up extraneous white space.  api.h (SMS)
 2. Fix bug in ef_strip_aes().  Minor ZipCloak fixes.  crypt.c (SMS)
 3. Enable AES192_OK by default if CRYPT_AES_WG is enabled.  zip.h (SMS)
 4. Change AES to AES_WG in list of valid vars user can set.  Include
    LOCAL_ZIP in CFLAGS.  Change use of AES to AES_WG.  unix/configure (SMS)
 5. Remove obsolete os390 target.  Add %_.o: %.c rule.  Change LIB_AES to
    LIB_AES_WG.  Update zipcloak$E changing OCRCTB to LIB_AES_WG.  Change
    AES to AES_WG.  Remove note regarding IBM OS/390 as well as os390: zos
    and zos: flags rules.  unix/Makefile (SMS)
 6. Change AES to AES_WG.  Update note to change AES to AES
    (WinZip/Gladman).  vms/build_zip.com (SMS)

----------------------- June 27th 2011 version 3.1d11 -------------------------
 1. Fix blanks.  api.h (SMS)
 2. Add start for using newer Gladman AES code.  New code sections in
    CRYPT_AES_WG_NEW ifdef blocks.  globals.c, zip.c, zip.h, zipup.c (EG)
 3. Fix "bug" where some zip file creator uses 0 in the total disks
    field of the End Of Central Directory Record to mean a total of 1
    disk.  This field has traditionally used 1 for 1 disk, where as
    disk numbers have started with 0.  The "fix" is to handle a 0 here as
    a 1.  If they put a 1 here for a 2 disk split archive, they're out of
    luck as we have no way to know if 1 is 1 or 2 without looking at the
    archive structure more closely.  It might be done by scanning through
    the central directory looking for what disk numbers are used, but that
    is a waste except for these misformed archives.  However, zip -F and
    zip -FF should account for the total disks count maybe being lower
    than it should be.  zipfile.c (EG)

----------------------- June 29th 2011 version 3.1d12 -------------------------
 1. Fix blanks.  Provided changes not applied to last beta correctly.
    api.h (SMS)
 2. Change include path from aes to aes_wg.  crypt.h (SMS)
 3. Updated traditional encryption readme for CRYPT 2.9.  README.CR (EG)
 4. Changes to INSTALL to add AES instructions.  INSTALL (SMS)
 5. Additional updates to INSTALL.  INSTALL (EG)
 6. Add AES encryption command line options and comments to ZipCloak.
    zipcloak.c (SMS)
 7. Update Zip manual page.  Minor changes for encryption, including AES
    encryption.  man/zip.1 (SMS)
 8. Add AES to ZipCloak manual page.  man/zipcloak.1 (SMS)
 9. Change aes directory name to aes_wg.  unix/configure, unix/Makefile
    (SMS)
10. Change #ifdef OS390 to $if defined(__MVS__) || defined(__VM__).
    unix/unix.c (Al Dunsmuir (AD))
11. Change aes to aes_wg.  Remove AES build restriction.  vms/build_zip.com,
    vms/descrip.mms, vms/descrip_deps.mms, vms/descrip_mkdeps.mms,
    vms/descrip_src.mms (SMS)
12. Update VMS install document to include AES.  vms/install_vms.txt (SMS)
13. Add support for p6 and p7 parameters.  vms/collect_deps.com (SMS)
14. Minor updates.  vms/osdep.h, vms/vms.c (SMS)
15. Update COMPERR error.  Add CRYPT error.  vms/zip_msg.msg (SMS)

----------------------- July 5th 2011 version 3.1d13 --------------------------
 1. Remove no longer needed files for AES from VMS.  vms/endian.h,
    vms/memory.h (SMS)
 2. Add new zos directory for z/OS and related ports.  Add scripts zcc and
    zld.  zos, zos/zcc, zos/zld (AD)
 3. "zip -z" mishandled comment input whose first line was blank.  Added
    first_line check to fix.  zip.c (SMS)
 4. Remove #ifdef AES192_OK and make 192 always available when AES_WG enabled.
    zip.c, zipcloak.c, vms/cmdline.c (SMS)
 5. Put aes_wg_opt_ver in CRYPT_AES_WG block.  Use aes_wg_opt_ver as version
    string.  Set aes_wg_opt_ver to include the IZ_AES_WG package version in
    "major.minor beta" form.  Also do endian check for new AES code.
    Consolidate code for current and new (not yet completed) AES versions.
    minor sd message updates.  zip.c (SMS)
 6. Remove globals aes_vendor_version and aes_strength.  Add defines for aes
    vendor version constants.  zip.h (SMS)
 7. Update AES to AES_WG.  Add support for WinZip AES AE-2, switching from
    AE-1 (with CRC) to AE-2 (without CRC, CRC set to 0) aes_vendor_version for
    small files under 20 bytes.  zipfile.c, zipup.c (SMS)
 8. Change references to original Zip encryption from "standard" encryption to
    "traditional" encryption.  In help, change compression method abbreviation
    from "mthd" to "cm" for consistency.  Update license.  vms/vms_zip.rnh,
    vms/zip_cli.cld, vms/zip_cli.help, vms/vms_zip.rnh, vms/zip_cli.cld,
    vms/zip_cli.help (SMS)

---------------------- August 5th 2011 version 3.1d14 -------------------------
 1. Fix whitespace.  api.h, fileio.c, acorn/swiven.c, acorn/swiven.h,
    novell/netware.c, novell/signal.c, vms/cmdline.c, vms/vms.c,
    vms/vmszip.c, win32/osdep.h, win32/win32.c (SMS)
 2. Minor comment updates.  Add int cast on IZ_MIN().  crypt.c (SMS)
 3. Update crypt version from 2.91 to 3.0.  crypt.h (SMS)
 4. Remove \t and replace with spaces.  revision.h (SMS)
 5. Fix zcrypt version check to handle version 3.0 and higher.  ttyio.c (SMS)
 6. Minor comment formatting.  zipfile.c (SMS)
 7. Add pragma pack(4) to 32-bit align attr_bufr_fndr and attr_bufr_rsrc for
    UNIX APPLE (Mac OS X) to fix bug reading resources.  zipup.c,
    unix/unix.c (SMS)
 8. Update IZ_AES_WG files to version 1.0 code.  aes_wg/iz_aes_wg.h,
    aes_wg/prng.c, aes_wg/pwd2key.c, aes_wg/readme_aes_wg.txt, aes_wg/sha1.c,
    aes_wg/usexport.msg, aes_wg/zip-comment.txt (SMS)
 9. Add new file cmsmvs.c.  cmsmvs/cmsmvs.c (AD)
10. Change VMS builders to generate module-ID link options file.
    vms/build_zip.com, vms/descrip.mms, vms/optgen.com (new),
    vms/zip.opt (removed) (SMS)
11. Change OS390 to ZOS_UNIX.  Change z/OS (and z/VM) UNIX control define from
    OS390 to ZOS_UNIX.  (Revision of change 3.1d12 #10, removing
    defined(__MVS___) || defined(__VM__).)  ebcdic.h, zip.c, zipup.c,
    unix/unix.c, unix/configure (AD)
12. Remove OS390 code cloned from unix.  atheos/atheos.c (AD)
13. Add z/OS UNIX README.  unix/README.zOS (AD)
14. Remove OS390 readme.  unix/README.OS390 (AD)

---------------------- August 10th 2011 version 3.1d15 ------------------------
 1. Add feature conditionality to optional keywords in the VMS command
    definition file.  Change the VMS builders to use CC /PREPROCESS_ONLY to
    process the new conditions.  vms/build_zip.com, vms/cppcld.com (new),
    vms/descrip.mms, vms/zip_cli.cld (SMS)
 2. Replace bad-guess non-fix for the alignment/structure-packing problem
    which caused bad/spurious AppleDouble data to be archived on Intel
    Macintosh systems.  Move the required #pragma directives from
    "unix/unix.c" to "unix/macosx.h".  unix/unix.c, unix/macosx.h (SMS)
 3. Add lzma/7zVersion.h include.  Add descriptions to version information
    items VMSCLI, VMS_IM_EXTRA, and VMS_PK_EXTRA.  Add LZMA_SUPPORT to
    version information.  Add Run "unzip" comments.  Add LZMA as compression
    option, though not yet implemented.  zip.c (SMS)
 4. Change printf(var) and putchar('\n') to printf("%s\n", var) to make some
    compilers happier.  Comment out CRYPT_AES_WG random number pool
    initialization timing.  zip.c (EG)
 5. Add LZMA compression support compilation code.  LZMA preparations.
    unix/configure, unix/Makefile, vms/descrip.mms, vms/descrip_deps.mms,
    vms/descrip_mkdeps.mms, vms/descrip_src.mms (SMS)
 6. Add and conditionally include keywords for BZIP2, LZMA, and CRYPT_AES_WG.
    vms/zip_cli.cld (SMS)

---------------------- August 11th 2011 version 3.1d16 ------------------------
 1. Remove bogus cmsmvs directory.  Redistribute files from cmsmvs to new zos
    and zvm ports and remove old cmsmvs directory.  Add initial versions of
    some zos and zvm files.  zos/cczip.job, zos/cmsmvs.job, zos/cmsmvs.h,
    zos/mvs.c, zos/mvs.h, zos/mki, zos/readme.mvs, zos/readme.mvs.le,
    zos/readme.zos, zos/zipname.zos, zos/zipup.h, zvm/cczip.exec, zvm/cms.c,
    zvm/cstat.h, zvm/mc.exec, zvm/pipzip.rexx, zvm/readme.cms, zvm/zip.exec,
    zvm/zip.makefile, zvm/zipcloak.exec, zvm/zipnote.exec, zvm/zipnote.exec,
    zvm/zipsplit.exec, zvm/zipvmc.exec (AD)
 2. Update white space formatting.  zip.c (SMS)
 3. Update README.  README (AD, EG)

---------------------- August 12th 2011 version 3.1d17 ------------------------
 1. Add LZMA compression.  cmdline.c (SMS)
 2. Remove old aes_wg_old directory.  aes_wg_old/* (EG)
 3. Rename aesnew directory to aes_wg_new.  aes_wg_new/* (EG)
 4. Add README to aes_wg_new.  aes_wg_new/README_aes_wg_new.txt (EG)
 5. Remove zip.opt as now generated.  vms/zip.opt (SMS)
 6. Initial update of README as start preparing for public beta release.
    README (EG, SMS)

---------------------- August 20th 2011 version 3.1d18 ------------------------
 1. Copy LZMA files to lzma directory from UnZip.  Implement LZMA compression
    in Zip.  Modify the LZMA files as needed to work with Zip.  lzma/Alloc.c,
    lzma/Alloc.h, lzma/LzFind.c, lzma/LzFind.h, lzma/LzHash.h,
    lzma/LzmaDec.c, lzma/LzmaDec.h, lzma/LzmaEnc.c, lzma/LzmaEnc.h,
    lzma/README_LZMA.txt, lzma/SzFile.c, lzma/SzFile.h, lzma/SzVersion.h,
    lzma/Types.h, lzma/orig/7zFile.c, lzma/orig/7zFile.h,
    lzma/orig/7zVersion.h, lzma/orig/LzFind.h, lzma/orig/LzmaEnc.c,
    lzma/orig/LzmaEnc.h, zip.c, zip.h, zipup.c (EG)
 2. Attempt to fix compiling issues with bzip2 in Win32.  Will pick up next
    beta.  zip.c (EG)
 3. Update extended help to add LZMA compression method and add comments on
    encryption.  zip.c (EG)
 4. Make file_read() global for LZMA.  Add NO_USE_WINDOWS_FILE to prevent
    use of Windows API in LZMA code and instead use generic calls and
    Zip file_read() and zfwrite().  zip.h (EG)
 5. Add new error code ZE_COMPRESS (22) for errors related to compression.
    ziperr.h (EG)
 6. Comment out local prototype for file_read().  Add header block for LZMA
    to top of file, with includes, error messages, and function definitions,
    though it maybe can be pruned a bit.  Set Version Needed To Extract to
    63 (6.3) for LZMA.  Add lzma_filecompress() for LZMA.  Add LZMAed
    percent message.  Comment updates for bzip2.  Add callback function
    lzma_progress_function() for LZMA to call each loop which is used to
    output progress dots for LZMA.  Add LZMA_Encode() as modified copy of
    LZMA version.  Set "LZMA level" = "Zip compression level" - 1.  Add
    compressed_size parameter to some LZMA calls to get compressed size out
    to Zip.  zipup.c (EG)
 7. Update LZMA README.  lzma/README_LZMA.txt (EG)
 8. Add vc6_bz2_lzma project for vc6, but doesn't work yet.  Only Windows
    project that compiles LZMA currently is the win32/vc6aes project.
    win32/vc6_bz2_lzma/*, win32/vc6aes/zip.dsp (EG)

---------------------- August 22nd 2011 version 3.1d19 ------------------------
 1. Add -sF option to add information to -sf listings.  Only option value
    implemented currently is usize to add uncompressed size of files from
    file system scan.  Add sf_usize global.  Update extended help for -sf.
    Update comment for DisplayNumString().  globals.c, zip.c, zip.h,
    util.c (EG)
 2. Change i and b in union used for endian check to unsigned.  zip.c (SMS)
 3. Update LAST_KNOWN_COMPMETHOD to account for LZMA.  Avoid defining
    _7ZIP_ST if defined.  zip.h (SMS)
 4. Rename file_read() to iz_file_read() to avoid conflict with LZMA
    File_Read() on ports where function names are not case sensitive.
    zip.h, zipup.h, zipup.c, lzma/SzFile.c (SMS)
 5. Change lzma_propertied_header from byte to unsigned char.  zipup.c (SMS)
 6. If INCLUDE_LZMA_AS_SOURCE defined then include zip.h as ../zip.h.  Add
    INCLUDE_LZMA_AS_SOURCE to VC 6 project file.  lzma/LzmaEnc.c,
    lzma/SzFile.c, lzma/SzFile.h (EG)
 7. Change compressed_size from UInt64 to zoff_t.  lzma/LzmaEnc.c (SMS)
 8. Formatting changes.  lzma/LzmaEnc.h (SMS)
 9. Change <> to "" for aes_wg/aes.h and lzma/LzmaEnc.h includes.  Add
    typedef int zoff_t to LZMA test.  unix/configure (SMS)
10. Change 7zFile to SzFile.  unix/Makefile (SMS)
11. VMS updates for LZMA and AEG_WG.  vms/build_zip.com,
    vms/descrip_deps.mms, vms/descrip_src.mms, vms/install_vms.txt (SMS)
12. Initial updates to VC 6 project for compiling LZMA.  win32/vc6aes (EG)

-------------------- September 18th 2011 version 3.1d20 -----------------------
 1. Add section on LZMA compression to installation procedures.  Minor
    formatting changes.  INSTALL (SMS)
 2. Change install_vms.txt to INSTALL_VMS.txt.  bzip2/install.txt (SMS)
 3. Move zip.h include before other includes so port settings are available.
    lzma/LzmaEnc.c (SMS)
 4. In the VMS CLI, /ZIP64 is now negatable (/[NO]ZIP64), like -fz, and
    the help is now less inaccurate.  Add VMS support for new -sF (-sf list
    output contents) option.  vms/cmdline.c, vms/zip_cli.cld,
    vms/zip_cli.help (SMS)
 5. Add section on LZMA compression.  vms/install_vms.txt (SMS)
 6. Minor change in LZMA description.  vms/zip_cli.help (EG)
 7. Include <mbstr.h> if HAVE_MBSTR_H is defined.  Only define MBSCHR()
    and MBSRCHR() if not already defined.  tailor.h (AD)
 8. Restructure unix build; restructure, document, reorganize; recognize IBM
    compilers (z/OS, z/VM, AIX, Linux. iSeries); recognize z/OS system (uname
    -I variant); add $PROD/flags_bz to support BZip2 compilation; support
    build with system zlib or zlib in zip source tree; support man page and
    doc (plain text versions of man pages) generation; redirect man page
    output to a new manl directory; extensively add symbols defining various
    build variables; generate BINDIR, BINPERMS, MANEXR, MANDIR, MANPERMS
    flags; generate -Tascii man page nroff option; rename flags like CFLAGS to
    CF to match how UnZip names them; add UnZip flags so that the same basic
    stripts can be used for UnZip as well with less modification; define
    OSDEP_xx flags for OS dependent source and object files; update assembler
    sections; add flags for extensions of executables (PGMEXT) and DLLs
    (DLLEXT); add flags for RANLIB, RM, LN, and AR (required by IBMLXC for AIX
    64-bit compiles); update library dependencies for AES_WG, LZMA, BZIP2, and
    ZLIB; add AF for assembler flags; support compiler listing options; make
    cleanup consistent between Zip and UnZip; make all targets explicit for
    portability; on z/OS and AIX (XL C) use CC=c89; change to UnZip
    nl_langinfo() test; add tests for sys/param.h, sys/time.h, sys/timeb.h,
    and utime.h; set z/OS linker flags; add PORT param to unix/configure; add
    -DBZ_NO_STUDIO to BZip2 build so BZip2 configured correctly for use; add
    -D_FILE_OFFSET_BITS=64 and -D_LARGE_FILES to BZip2 build if large files
    enabled; add -Wc,'target(zOSV1R10)' to support that oldest supported
    release; add -D_XOPEN_SOURCE and -D_XOPEN_SOURCE_EXTENDED=1; eliminate
    extraneous trailing white space; generate -DHAVE_WCHAR_H if check finds
    <wchar.h>; for flags_bz, AR value omits cq flag (in Makefile); and update
    Makefile "all", "help", and "list" targets.  unix/configure,
    unix/Makefile (AD)
 9. Correct z/OS build script options parsing.  zos/zcc, zos/zld (AD)
10. Add z/OS wrapper script for C preprocessor tests.  zos/zccp (AD)
11. #include <mbstr.h> if HAVE_MBSTR_H is defined.  tailor.h (AD)
12. Change manl to manout as the man output directory (as manl could be
    confused with man1); minor documentation updates; output plain text
    man pages to top directory for backward consistency; other minor changes.
    unix/configure; unix/Makefile (EG)
13. Add note about GETNAM_MAX.  Add GETNAM_MAX error if name too long.
    fileio.c (EG)
14. Add note about LZMA compression.  Rename install_vms.txt to
    INSTALL_VMS.txt. (SMS, EG)
15. Update readme for zcrypt 2.9 used to add traditional encryption to old
    releases.  readme.cr (EG)
16. Add initial attempt at incremental archive option -DI by adding new list
    apath_list and pointer last_apath, adding add_apath() to add a path to the
    linked list, add read_inc_file() to read in entries from an incremental
    archive.  This option is unfinished and should not be run.
    zip.c, zip.h, zipfile.c (EG)
17. Add additional clarification of use of two-character options to extended
    help.  zip.c (EG)
18. Add lzma_opt_ver and crypt_opt_ver for LZMA and CRYPT version information
    to be consistent.  zip.c (EG)
19. Add new option --show-parsed-command (no short option) to show the command
    line after get_option() parses it.  zip.c, zip.h (EG)
20. Add option -cd to change root zipping directory, but not yet implemented.
    zip.c (EG)
21. Add initial implementation of -@@ option that reads names the same as -@,
    but from the given file instead of stdin.  Define o_atat for the option
    and add names_from_file to flag if names are being added from a file using
    -@@.  Names are read in while the option is being processed, but names are
    not processed until the command line is processed.  Update extended help
    for -@ and -@@.  Modify command line check to allow --show-files to show
    names read in from -@@ files.  zip.c (EG)
22. Move some of the command line checks earlier where possible so Zip can
    exit sooner if there is a problem.  zip.c (EG)
23. Always define _7ZIP_ST to allow combining of projects in MS VC.
    zip.h (EG)
24. Change messages from suggesting -fz- to suggesting --force-zip64- to avoid
    short option misinterpretations.  (Plan is to add a workaround to avoid
    this situation in the next beta.)  zipfile.c (EG)
25. Update PKZip licensed feature note.  Add CRYPT_AES_WG note.
    zipfile.c (EG)
26. Move zip.h include above other includes.  lzma/lzmaenc.c (SMS)
27. Add ifndef ZLIB_H to prevent redefinition of Byte.  lzma/types.h,
    lzma/orig/types.h (SMS)
28. Add NO and USIZE in /SHOW.  vms/cmdline.c, vms/zip_cli.cld,
    vms/zip_cli.help (SMS)
29. Minor updates.  Add LZMA compression description.
    vms/INSTALL_VMS.txt (SMS)
30. Add LZMA compression to help.  vms/zip_cli.help (SMS)
31. Update help to note that LZMA compression currently does not switch over
    to store if a file does not compress.  Update help to note that -fz-
    (--force-zip64-) prevents the use of Zip64 and zip will exit with an error
    if Zip64 is actually needed.  vms/zip_cli.help (EG)
32. Add LZMA Debug and Release targets.  win32/vc6/zip.dsp,
    win32/vc6aes/zip.dsp (EG)
33. Update README.  README (EG)

-------------------- September 22nd 2011 version 3.1d21 -----------------------
 1. Update comments.  Add documentation for unix-hosted builds of other ports.
    Remove unused OSDEP_C and OSDEP_S parms/values.  Add unix/macosx.h to
    OSDEP_H if Darwin.  Add NULL defaults for variables PORT, AES_WG, LZMA,
    IZ_BZIP2, and IZ_ZLIB.  Update MANTAB to default to '-Tascii'.  Change
    q_parms to C_PARMS and rearrange parms slightly.  Update CFLAGS_OPT for
    IBM z/OS XL C, using -Wc and suppress() and adding aggr and expmac.  Add
    autodetection for DJGPP and Cygwin.  Add port-specific customizations
    section where OSDEP_H, OSDEP_OC, OSDEP_OS, PGMEXT, and DLLEXT are set for
    cross compilation targets.  Add FIX_ME comment for assembler code.  Change
    aes_wg to lzma in LZMA check.  Add checks for ctype.h and wctype.h, setting
    -DHAVE_CTYPE_H and -DHAVE_WCTYPE_H as appropriate.  Add checks for
    towupper() and towlower().  Add date to top.  unix/configure (AD)
 2. Change OPTS to work with spaces represented by '^' for compilers that do
    not have __STDC__ defined by default.  Remove double quotes around
    -Aa^-D_HPUX_SOURCE.  unix/configure (SMS)
 3. Add cross-compilation comments.  Switch to if [] tests in places.  Changes
    to work with updated unix/configure.  Add date to top.  unix/Makefile (AD)
 4. Additional comment and formatting updates.  Minor changes.  unix/configure,
    unix/Makefile (EG)
 5. Add zlib LIBZ.OLB to LINK commands for utility programs which couldn't
    find CRC32 when using zlib.  vms/descrip.mms (SMS)
 6. Add conditional definition of new HAVE_WCHAR_H macro.  vms/osdep.h (SMS)
 7. Revise some Unicode-related conditions to accommodate SunOS 4.1.4.
    tailor.h (SMS)
 8. Add (char **) type casts for malloc() and realloc().  zip.c  (SMS)
 9. Remove -Ae option from HPUX test.  unix/configure (SMS)
10. Fix problem where langinfo.h is not available in Win32 but needed in
    Unix.  Add note regarding needed fixes for Unicode.  tailor.h (EG)
11. Update NO_NL_LANGINFO indentation.  zip.c (EG)
12. Add "Generating flags..." message at the top of configure.  Output
    "Standard Unix target" if not cross compiling.  Add note where need more
    work on Unicode testing.  Add towupper(), towlower(), and iswprint() to
    Unicode test, so missing any of these prevents enabling UNICODE_SUPPORT.
    Add HAVE_ to have towupper(), towlower(), and iswprint() defines.
    unix/configure (EG)
13. Add new clean_docs target to just clear out the doc files zip.txt,
    zipcloak.txt, zipnote.txt, and zipsplit.txt.  The user should not need
    this as the plain text manuals should be in the distribution.  Move
    the plain text manuals to root where they traditionally have been.
    Rename target from generic_doc to generic_docs.  Add some white space.
    unix/Makefile (EG)
14. Update plain text manual rules.  Recreate plain text manuals.
    unix/Makefile, zip.txt, zipcloak.txt, zipnote.txt, zipsplit.txt (EG)
15. Include "Last update:" for date at top.  Update cross compilation
    comments.  unix/configure (EG)
16. Include "Last update:" for date at top.  Update cross compilation
    comments.  Update option descriptions so they are more overviews and
    not install instructions, which are in other documents.
    unix/Makefile (EG)

--------------------- November 6th 2011 version 3.1d22 ------------------------
 1. Add Special Note for HP-UX defective mkstemp() that can't handle large
    files.  Looks fixed in 11.31 and later versions.  Document NO_MKSTEMP
    macro for use on Unix systems where mkstemp() is broke.  INSTALL (SMS)
 2. Add support for NO_TRADITIONAL_CRYPT that disables traditional zip
    encryption while leaving the strong encryption options enabled (if
    available).  zip.c (EG)
 3. Minor updates to ToDo list.  TODO  (EG)
 4. Add parentheses around "c = path_prefix[i]" to make LLVM Clang compiler
    happy.  zip.c (AD)
 5. Updated comment regarding Unicode locales.  zip.c (EG)
 6. Add support for new HAVE_HEADER_H symbols, including whatever includes
    were needed to support wide characters.  Remove NO_LANGINFO symbol.
    Add placeholder comment for defining substitute functions for those
    needed for MBCS but not provided by the OS, in the hopes that such
    additions will be enough to get MBCS suppport sufficiently working.
    tailor.h (AD)
 7. Change header to reference Zip 3.1 instead of Zip 3.  [This will likely
    get changed back to Zip 3 as this reference is to distinguish between
    threads (Zip 2.x versus Zip 3.x) rather than indicate which beta it
    goes with, which would require updating files in later versions even
    if Zip 3.2 did not change this file, which has not been the group
    policy. - EG]  Add additional "zip -v" compiler information for
    MINGW64, MINGW32, LLVM (Clang, Apple, and GCC), PCC (Portable C
    Compiler), PATHCC (EKOPath C Compiler), and Intel C Compiler.  Include
    GNUC Patch Level if GNUC_PATCHLEVEL is defined.  Add "Cray" to Cray
    version output.  Break out IBM XL C for Linux, IBM XL C for AIX,
    IBM z/OS XL C, IBM XL C for z/VM, and IBM ILC C for iSeries as distinct
    compilers in version information.  If MVS or VM and have additional
    information from uname, then list it.  Separate out IBMC as separate
    compiler name.  Update to NX_CURRENT_COMPILER_RELEASE compiler_name
    format.  unix/unix.c (AD)
 8. Update to comments.  Specify that first parameter must be name of XL
    C compiler driver program (cc, c89, xlc, xlc_64,etc.).  When not -o
    but -c then source file name is extracted from -c option parameter
    and object file directory (if any) and base name determined.  Add
    additional option cases for I, D, W, q, L, and *.
    zos/zcc, zos/zld (AD)
 9. Minor comment updates.  Remove MANTAB variable.  Remove -DUNIX from
    CFLAGS and CFLAGS_BZ.  Change -cq to cq in AR variable.  Update
    comments for PORT_SPEC (set to E when PORT=port is used).  Add note
    that SIZER_V is used for Tru64 and relatives in Query for system
    identification section.  Change "kernel name:" to "OS name:" for
    initial configure script echo (as looks better, though technically
    this is inaccurate).  Add quotes around ${CFLAGS_OPT_TRY}.  Note
    that CFLAGS_OPT is empty if a lame bundled compiler is recognized.
    Add MINGW64 test.  Add note referring to HP-UX versions below 11.31
    and use of -DNO_MKSTEMP.  Add tests for MINGW32, llvm, clang, and
    APPLE_CC.  Add tests for PCC, EKOPath C, Intel C, GNU C for OS/X
    Darwin, and GNU C for AIX.  For TOS_LINUX, restructure CC_TST,
    CFLAGS_OPT, and CFLAGS_TST assignments.  Handle case where PPC and
    AIX defined together.  If, after all the checks, target port is
    "unix", add in "-DUNIX" to CFLAGS and CFLAGS_BZ.  Update settings
    to include settings CFLAGS, CFLAGS_BZ, OSDEP_H, OSDEP_OC, OSDEP_OS,
    PGMEXT, and DLLEXT for each PORT.  Remove ANSI options check and
    attempt to enable ANSI prototypes if present.  Set HP-UX "C/ANSI C"
    compiler options explicitly.  Use _AIX for AIX recognition.  Add
    comments about the HAVE_HEADER_H, HAVE_DIR_HEADER_H, NO_HEADER_H,
    NO_DIR_HEADER_H, FUNCTION=function, and NO_FUNCTION macros.  Check
    for <ctype.h>, <wctype.h>, <langinfo.h>, and <locale.h>.  Add
    checks that set HAVE_ macros.  Correct HAVE_$func to $func defines
    where have a function.  Update wide character check to use the
    various headers.  Add note to remove langinfo.h after all NO_LANGINFO
    uses are removed.  Remove MANTAB code as not used.  unix/configure
    (AD, SMS)
10. Update comments regarding target ports and cross compilation.  Minor
    formatting and text changes to help message.  Changes to OS Dependent
    files comments.  Remove MANTAB.  Minor changes to cross compiling and
    port comments.  Other minor comment and output formatting changes.
    unix/Makefile (AD, SMS)

--------------------- February 5th 2012 version 3.1d23 ------------------------
 1. Add macro define CRYPT_TRAD to enclose traditional encryption code.
    Leave open what to do if "impossible happens" and CRYPT_TRAD is not
    defined but something is needed.  Only define crypt_opt_ver if
    CRYPT_TRAD defined.  These changes support including strong encryption
    while leaving out TRADITIONAL (weak) encryption.  Replace CRYPT with
    CRYPT_TRAD in places.  Break global CRYPT sections down to allow
    disabling just TRADITIONAL crypt code.  Minor update of
    currently unused CRYPT_AES_NEW section.  Update -Y option to use
    CRYPT_TRAD.  crypt.c, zip.c (SMS)
 2. Changed NO_TRADITIONAL_CRYPT processing to make defining
    NO_TRADITIONAL_CRYPT with no other (AES_WG) encryption enabled
    equivalent to defining NO_CRYPT.  If NO_TRADITIONAL_CRYPT is not defined,
    define CRYPT_TRAD.  crypt.h, zip.h (SMS)
 3. Reformed the error message emitted when ZipCloak is built without any
    encryption support.  Writing the message to an uninitialized-variable
    file pointer ("mesg") tended to cause the message to be lost, possibly
    with a program failure ("Segmentation fault (core dumped)").  Made the
    NO_CRYPT dummy functions/variables (which are unnecessary on VMS)
    conditional on the OS.  Added dummy functions for rename_split(),
    set_filetype(), zipmessage(), zipmessage_nl().  Trimmed unused
    content from options[].  Changed the NO_CRYPT exit status from 1 to
    ZE_COMPERR.  Changed the "ZipCloak special compilation options" list
    in in the "-v" report to show accurate encryption options, plus
    LARGE_FILE_SUPPORT and ZIP64_SUPPORT, as appropriate.  Changed the
    "-h" help text for the "-Y" option to show only the excryption methods
    enabled in the program as built.  zipcloak.c (SMS)
 4. If ENABLE_USER_PROGRESS defined, include progress globals u_p_phase,
    u_p_task, and u_p_name.  Add globals_dummy() for VMS to handle a
    linking problem.  Add USER_PROGRESS_CLASS that is set to extern if
    VMS, otherwise local.  Define user_progress().  Include pointless
    globals_dummy reference to ensure linking.  If VMS, define
    establish_ctrl_t(), otherwise use signal().  globals.c, zip.c,
    zip.h (SMS)
 5. Changed copyright[] text to quote "-L" only on VMS.  revision.h (SMS)
 6. For non-VMS, remove quotes around "-L" in copyright notice.
    revision.h (SMS)
 7. Small commented code reformatting.  tailor.h (SMS)
 8. Add PPMD_SUPPORT macro define for PPMD compression method and apply
    in many places similar to LZMA_SUPPORT.  Add PPMd compression to
    extended help.  Add ppmd_opt_ver for version information.  zip.c (SMS)
 9. Changed open-fail "zip warning:" message to include the file name, even
    when "-q" is in effect.  New function: zipwarn_unc().  zip.c (SMS)
10. Add zipwarn_i() that allows controlling indentation on console and in
    log file.  Define zipwarn_indent() as shortcut for zipwarn_i(1, a, b).
    zip.c (SMS)
11. Print additional blank line after version information and before the
    environment information.  zip.c (SMS)
12. Add o_si define for new show process ID option -si (--show-pid).  If
    not VMS, add command line option case o_si that sets show_pid = 1.
    Print PID if show_pid set.  zip.c (SMS)
13. Disable -e (--encrypt) and -P (--password) if CRYPT not defined.
    Disable -Y (--encryption-method) if CRYPT not defined.  zip.c (SMS)
14. Add "encryption (-e) not supported" error, though if the -e option
    should not exist if encryption not defined and so may never get here.
    Same for "encryption (-P) not supported" message.  Maybe also for
    "encryption (-Y) not supported" message.  zip.c (SMS)
15. Add more code to the -Z option cases to handle additional choices
    and messages created by adding PPMd compression.  zip.c (SMS)
16. If ENABLE_USER_PROGRESS set, set u_p_phase and u_p_task as step
    through the various steps.  Set u_p_name to z->oname of file being
    processed.  zip.c (SMS)
17. Use zipwarn_indent() to format warnings.  zip.c (SMS)
18. Add user_progress() function to output progress messages.  For VMS,
    Ctrl-T is used to signal desire to output progress message.  For other
    ports, a command like the following, issued in a separate process, may
    be needed:
      kill -USR1 <pid>
    (Hence the new "-si" option, to provide the victim with the PID value
    to use in his "kill -USR1" command.)  Alternatively, this might be
    set up for each port in code so a keystroke does it.  VMS shows the
    DECnet/cluster node name and terminal device name as below:
    ALP::_FTA81: 16:26:15   (DCL)   CPU=00:00:00.35 PF=778 IO=1318 MEM=115
    It seemed reasonable to retain the general format on non-VMS systems.
19. If no crypts, define NO_CRYPT.  Define PPMD as method 98.  Set
    LAST_KNOWN_COMPMETHOD to account for new PPMD method.  zip.h (SMS)
20. If CRYPT_AES_WG, include aes/iz_aes_wg.h.  If VMS, include reference
    to globals_dummy().  Update to account for CRYPT_TRAD.
    Add aes_gw_opt_ver[] and crypt_opt_ver[].  Add information to
    version_info().  Replace old "[encryption, version ...]" message.  If
    VMS, add pointless globals_dummy().  Update no CRYPT section.  Add
    do-nothing functions for the following to quiet compilers when no CRYPT
    used: rename_split(), set_fieltype(), ziperr(), zipmessage(),
    zipmessage_nl(), and zipwarn().  Update no CRYPT main().  zipcloak.c (SMS)
21. Check if UTIL defined before defining it.  Add reference to globals_dummy().
    zipnote.c, zipsplit.c (SMS)
22. If either LZMA_SUPPORT or PPMD_SUPPORT, include lzma/Types.h.  For WIN32,
    define _CRT_SECURE_NO_WARNINGS.  For PPMD_SUPPORT, also include lzma/Ppmd8.h
    and ppmd_filecompress().  Only include crypthead() if CRYPT_TRAD.  Another
    "impossible happens" that may need updating later.  If PPMD_SUPPORT, a
    "return 0" ppmd_filecompress() is defined.  zipup.c (SMS)
23. Add PPMD to Zip optional feature configuration list and LIB_PPMD to
    configuration flags list.  Add PPMD to valid_vars list.  Set default PPMD
    variable value if not already set.  Add "option -s is obsolete" warning for
    Mac OS X shared library.  Change LFLAGS_LPFX_TRY to lflags2_try, with some
    other minor changes.  Add code for configuring optional PPMd compression
    library.  unix/configure (SMS)
24. Add PPMd compression to top instructions.  Update build dependencies list.
    Remove some right side comments and add section comments instead.  Change
    "LN = ln -s" to "LN = ln" for symbolic links.  (Believe that stuff being
    done using "ln -s" is now gone from unix/Makefile:
    .c_.o:
	rm -f $*_.c; $(LN) $< $*_.c
	$(CC) -c $(CFLAGS) -DUTIL $*_.c
	rm -f $*_.c
    Further simplification is probably possible.  ("LN=ln".))
    Remove lzma/Alloc.h from H_LZMA.  Add H_PPMD for lzma/Ppmd.h and
    lzma/Ppmd8.h.  Add O_PPMD for Ppmd8.o and PPmd8Enc.o.  Change MAN_ZIP and
    other MAN_ to explicitly include the file extension dot.  Add PPMd compile
    rules.  Add PPMd object archive rule.  Add LIB_PPMD to PGM_ZIP.  Add
    PPMD variable to call to unix/configure.  Change UNZIP_MANS to ZIP_MANS.
    unix/Makefile (SMS)
25. Add PPMd compression.  Remove incl_bzip2_m.  Remove (GLOBALS) include.
    vms/build_zip.com, vms/descrip.mms (SMS)
26. Add IZ_BZIP2 and PPMD to /MACRO.  Add MODS_LIB_ZIP_PPMD.  Add space to P4
    to prevent immediate macro expansion.  vms/descrip_mkdeps.mms (SMS)
27. Remove INCL_BZIP2_M and ALLOC.OBJ.  Add PPMD.  vms/descrip_src.mms (SMS)
28. Add ENABLE_USER_PROGRESS.  Add vms_fopen() to replace use of zopen() to
    better handle files with Record Format.  Update comments for lib$getdvi().
    Add establish_ctrl_t() to handle user progress.  Move "DIAG_FLAG (verbose
    >= 2)" to top of file.  vms/vms.c, vms/vms.h (SMS)
29. Add PPMD_SUPPORT and PPMD keyword.  vms/zip_cli.cld (SMS)
29. Define fhow.  Redefine zopen() to use vms_open().  Remove old fhow macro
    definitions.  vms/zipup.h (SMS)
30. Changed VMS builders to avoid explicit LINK /INCLUDE, to avoid case
    problems with CC /NAMES = AS_IS.  Added VMS-specific globals_dummy() to
    globalc.c, and references to it in main programs, zip.c, zipcloak.c,
    zipnote.c, zipsplit.c to get the globals module linked in.  The
    rearrangement of the LINK commands also obviates the bzip2-related
    LINK /INCLUDE module (INCL_BZIP2_M = ZBZ2ERR) which has been removed.
    vms/build_zip.com, vms/descrip.mms, vms/descrip_src.mms (SMS)
31. Changed VMS file I/O details to cope better with input files having
    record format Stream or Stream_CR, and long records.  Previously,
    errors like the following could occur:
      zip warning: non-translatable vms error code: 0x181A8
      %rms-w-rtb, !ul byte record too large for user's buffer
              zip warning: could not open for reading: LONG_REC.DAT
    Or, using DECnet access, the similar:
      zip warning: non-translatable vms error code: 0x183A2
      %rms-e-netbts, network buffer too small for !ul byte record
    This seems to be the "some files" problem mentioned (but not well
    described) in TODO since at least as far back as Zip 2.3 (1999).
    vms/vms.c, vms/zipup.h (SMS)

--------------------- March 18th 2012 version 3.1d24 --------------------------
 1. Initial PPMd compression support.  Restructured interface to LZMA
    compression code, eliminating most changes to foreign code.  INSTALL,
    zipup.c, lzma/CpuArch.h, lzma/Ppmd8.c, lzma/Ppmd8.h, lzma/Ppmd8Enc.c,
    man/zip.1, vms/INSTALL_VMS.txt, vms/cmdline.c, vms/zip_cli.cld (SMS)
 2. Added missing binary-text determination for LZMA compression. 
    zip.h, zipup.c (SMS)
 3. Fixed rounding of negative compression percentages.  zipup.c (SMS)
 4. Extended "-0"-"-9", "-n", and "-Z" syntax for more control over
    compression method and level.  Added compression level to
    "(XXXXed yy%)" message with "-sd" or "-v".  Now: "(XXXXed-L yy%)".
    zipup.c, vms/cmdline.c, vms/zip_cli.cld (SMS)
 5. Initialize salt_len, aes_mode, and aes_mthd to hush compiler.  Add
    parentheses as definition of SALT_LENGTH() does not have them.
    crypt.c (SMS)
 6. Collected some scattered progress-dot code into new functions
    display_dot_char() and display_dot().  Define PROGRESS_DOTS_PER_FLUSH
    that, when defined, sets how many dots to accumulate before flushing
    (instead of flushing every dot).  deflate.c, fileio.c, zip.h, zipup.c (SMS)
 7. Add macro define PROGRESS_DOTS_PER_FLUSH and set to 64.  vms.osdep.h (SMS)
    vms/descrip_mkdeps.mms, vms/descrip_deps.mms (SMS)
 8. Processing of a split archive could stop prematurely if the split
    size was a multiple of the I/O buffer size (16K), leaving a corrupt
    output archive.  Fix bfwrite() by checking for case where fread()
    returns 0 bytes but EOF has not yet been set.  fileio.c (SMS)
 9. Add SKIP_VALUE_ARG2 setting for get_option() optchar argument that
    does same as SKIP_VALUE_ARG (skip arg that is value for previous arg)
    but skips 2 args.  Add new value type o_OPT_EQ_VALUE that allows optional
    value as long as value is preceeded by equal sign.  Currently only
    implemented for short options.  Currently forms -ovalue, -o=value,
    -o = value, and -o =value supported, but this may be reduced to only
    -ovalue and -o=value forms, maybe also -o =value after some testing.
    Need to implement for long options also.  (Last comments by EG.)
    fileio.c (SMS)  
10. Add parentheses to SALT_LENGTH() as definition does not include them.
    zipcloak.c (SMS)
11. Update Mac OS message.  Update PPMd.  unix/configure, unix/Makefile (SMS)
12. Add time.h.  unix.unix.c (SMS)
13. Update extended help for -@@.  Update description of -lF.  Move cases
    for 'a' and 'B' after -0 through -9 cases in options switch.  Update
    case o_DI.  zip.c (EG)
17. Change option type for -0 through -9 from o_OPT_OPTIONAL_VALUE to
    new o_OPT_EQ_VALUE.  (This may be modified in a later beta.)  Add new
    option -ss (--show-suffixes) to show list of defined suffixes for special
    handling and how they will be handled.  Add variable show_suffixes.
    Update option -n to allow optional value of form "M[-L]=S1:S2",
    meaning that compression method M should be used for files with suffixes
    S1 and S2.  If optional -L (as in M-L) is used, then method is only used
    when that level of compression is specified (separately using -0 through
    -9).  Add show suffixes code to list suffixes with a suffix list, all if
    -v.  zip.c, zip.h (SMS)
18. Initial implementation of -BT and -BP for a managed backup utility.
    Add options -BT (--backup-type) and -BP (--backup-path).  Backup type
    is one of FULL (normal zip archive), DIFF (same as using --diff option),
    and INCR (using new incremental archive support).  -BP sets the path
    that the control file (generated to track backup status) and the output
    archives go.  Backup support enabled by defining BACKUP_SUPPORT.  Add
    variable apath for tracking list of backup archive paths.  Add variable
    backup_type (0 = normal mode, 1 = BACKUP_FULL, 2 = BACKUP_DIFF, and
    3 = BACKUP_INCR.)  Add cases for -BT and -BP in options switch.  When
    doing a backup operation (-BT not 0) derive output paths of control file
    and output archive (archives if splitting) from -BP path.  Allow code
    for non-option argument case to drop through when -BT not 0 to handle
    missing archive name (which is generated rather than user provided).
    Build paths for input, control, and output based on which operation is
    being done, storing paths in apath so control file can be generated or
    updated once archive successfully created.  Control file lines have
    format "xxxx: yyyy", where xxxx is a 4 letter operation (info, full,
    diff, incr, etc.) and yyyy is the information or path.  Path names are
    currently generated to include the -BT method (such as diff) and a date
    and time stamp, though these long paths may not be usable on many ports.
    Checks to prevent -BT from being used with --out and other conflicting
    options.  Updates to archive reading code to allow zlist to be added to
    when incremental archives are read, with sorting only done when the base
    (full) archive is read (which is done last).  Add read_inc_file() to
    read incremental archives.  When -BT not 0, output messages when reading
    incremental and full archives.  Note that when using -BT and creating
    DIFF or INCR archives, no file data is read from the archives as all
    files to add to output archive are those not in any existing archive.
    Add variables backup_start_datetime, backup_control_path, backup_full_path,
    and backup_output_path for path names used by backup support.  Add
    BACKUP_CONTROL_FILE_NAME that stores the default name of the control
    file.  Add total_cd_total_entries to track total number of entries added
    to zlist across all archives.  Add zfilesnext global to track where next
    entry in zlist goes.  zip.c, zip.h globals.c (EG)
19. Allow use of "-" with -O (--out) to force output to stdout.  This allows
    updating an archive and having the output sent to stdout.  zip.c (SMS)
20. Add display_dot() for displaying dots.  Rename iz_file_read() to
    iz_file_read_bt().  zip.h (SMS)
21. Uncomment out iz_file_read().  Include lzma/SzFile.h, lzma/LzmaDec.h.
    Add local LZMA_Encode().  Comment out iz_file_read_bt().  Fixed rounding
    of negative compression percentages.  Replace dot code with call to
    display_dot().  Show level of method in verbose.  Add iz_file_read_bt()
    to add missing binary-text determination for LZMA compression.  Add
    lzma_read() and lzma_write() as 7-Zip-compatible I/O read and write.
    Update LZMA_Encode().  Update lzma_filecompress().  Remove ppmd_prop_word
    from ppmd_filecompress().  Adjust PPMd order, memory size, and restoration
    method.  Add PPMd progress dots.  Revert from PPMd to STORE if not getting
    any compression. zipup.c (SMS)
22. Replace k with c_d_ents as central directory entry counter.
    zipsplit.c (SMS)
23. Restructured interface to LZMA compression code, eliminating most
    changes to foreign code.  lzma/lzmaenc.c, lzma/lzmaenc.h (SMS)
24. Updated the VMS error message text file to accord with the current
    ziperr.h (ZE_COMPRESS, 3.1d18).  vms/zip_msg.msg (SMS)
25. Close comment.  vms/vms.c (SMS)
26. Minor reformatting of VMS error message text file, vms/zip_msg.msg. 
    vms/vms_msg_gen.c (SMS)
27. Add LZMA_PPMD.  Add LARGE parameter.  vms/descrip_src.mms,
28. Add _7ZIP_ST to Windows vc6aes project to fix missing include error in
    lzma/LzmaEnc.c.  Will need to make this fix in other places.
    win32/vc6aes/zip.dsp (EG)
29. Change iz_file_read() to iz_file_read_bt().  lzma/SzFile.c (EG)
30. Add (ulg) cast to display_dot() UInt64 parameter bufsize.  zipup.c (EG)
31. Define _7ZIP_ST to avoid inclusion of missing file in lzma/LzmaEnc.c.
    lzma/Types.h (EG)
32. Made attempt at documenting the -n and -ss options in extended help.
    zip.c (EG)
33. Add -BT and -BP to extended help.  zip.c (EG)

---------------------- May 8th 2012 version 3.1d25 ----------------------------
 1. Remove // commented out lines marking code to be removed.  zipfile.c (SMS)
 2. Make iz_file_read() local.  zipup.c (SMS)
 3. Add missing comma to extended help.  Allow -O (--out) to handle stdout.
    Replace empty suffix lists with NULL.  Add "All suffix lists empty" check.
    Updates to backup checks.  Remove "missing suffix list" check.  Change
    compression-method-by-suffix list processing to convert explicit null lists
    (":" or ";") to empty (NULL), before displaying (-ss) them.  No longer
    compress everything automatically with level 9. (Not backward compatible.)
    Before replacing old zip with new zip, check if out_path is "-" (stdout)
    rather than zipfile.  zip.c (SMS)
 4. Fix a spurious error message, "can't specify output file when using
    -BP", when -BP wasn't specified.  zip.c (SMS)
 5. Change -9 not to clear the -n (STORE) suffix list.  zip.c (SMS)
 6. Add check to any suffix check.  zip.c (EG)
 7. Change APL_DBL_SUFX to APL_DBL_SFX.  zipup.c (SMS)
 8. Change __VMS to VMS in MatchFinder guard macro.  lzma/lzfind.h (SMS)
 9. Change "  #ifdef" to "#  ifdef" and similar changes to ifdef endif blocks
    to make formatting more acceptable to some compilers.  lzma/ppmd8.c,
    lzma/ppmd8.h (SMS)
10. Change "signed char" to more accepted "char" in MASK(sym) macro.
    lzma/ppmd8enc.c (SMS)
11. Update comment regarding need for _7ZIP_ST.  lzma/types.h (SMS)
12. Restructure VMS CLI option translation code to reduce size and
    confusion.  Stop combining single-character options.  (/DELETE +
    /VERBOSE now gives "-d" + "-v", instead of (defective) "-dv", for
    example.)  vms/cmdline.c (SMS)
13. Add /BACKUP=(), /SHOW = SUFFIXES.  Allow SUFFIX = "".  Fix CHECK_BUF_ALLOC,
    et al.  Stop combining one-character options.  Made command-line variables
    global.  Add append_simple_option().  Add RETURN_INSFMEM().  Add
    get_suffix_list().  vms/cmdline.c (SMS)
14. Remove definition of _7ZIP_ST macro from builders.  (Now in lzma/Types.h.)
    unix/configure, vms/build_zip.com, vms/descrip_src.mms (SMS)
15. Add LSMA, PPMd compression.  Add -ss and the -n and -# updates.  Add
    error code 22 (COMPRESS).  vms/vms_zip.rnh (SMS)
16. Add compression updates to BZIP2, LZMA, and PPMd.  vms/zip_cli.cld (SMS)
17. Add new /BACKUP qualifier, and new options for /COMPRESSION, and /LEVEL
    qualifiers for VMS CLI.  vms/cmdline.c, vms/zip_cli.cld (SMS)
18. Add compression updates.  Add error codes 21 (CRYPT) and 22 (COMPRESS).
    Add section on Comments, Compression, and Encryption.  Add section for
    /BACKUP.  Update section on /COMPRESSION.  Update table to include -@@,
    -BP, -BT, -cd, -DI, -ic, -lF, -sF, -TT, -U, --version, -ws, -ww, -y,
    and -Z.  vms/zip_cli.help (SMS)
19. Remove special characters.  Add note regarding IM-style attribute
    storage.  Add note regarding "some files" and record format Stream or
    Stream_CR, and long records.  TODO (SMS)
20. Minor (spelling) update.  tandem/history (SMS)
21. Remove _7ZIP_ST.  vms/build_zip.com (SMS)
22. Add VMS-specific <memory.h> for AES as may be missing on older systems.
    vms/memory.h (SMS)
23. Minor text edits.  Add variable LOCAL_ZIP.  Change eval ${arg} to
    eval ${1}.  Change ${CFLAGS:-"-I."} to ${CFLAGS:-}' -I.'.  Same with
    CFLAGS_BZ.  Add note for using standard pre-defined preprocessor
    symbols and successful compilation of Zip.  Remove -D_7ZIP_ST.
    unix/configure (SMS)
24. Update call of unix/configure to include LFLAGS1 and LFLAGS2.
    unix/Makefile (SMS)
25. Add note to extended help regarding -v.  zip.c (EG)
26. Change BACKUP_CONTROL_FILE_NAME suffix from "zip_backup_control.txt"
    to ".zbc" so resulting names are shorter.  zip.h (EG)
27. Add options -BC (--backup-control) and -BL (--backup-log) to allow
    storing the control file and the log, respectively, in a different
    place than the backup path specified by -BP.  This is useful when the
    media used for the backup path may be swapped out when full.  Currently
    not implemented.  zip.c (EG)

--------------------- November 14th 2013 version 3.1d26 -----------------------
 1. Various comment updates.  Include file updates.  Look for both
    / and \ (instead of just \) as trailing slash on Windows.  Wrap progress
    option in ENABLE_DLL_PROGRESS.  Add "backup" for BACKUP_SUPPORT to feature
    list.  Add "vms_im_extra" and "vms_pk_extra" to feature list.  Update how
    bzip2, lzma, and ppmd are added to feature list.  Include
    store_unix_uids_gids, uidgid_not_16bit, and uidgid_16bit in feature list.
    Change "crypt" to "crypt_aes_wg" in feature list to reflect implementation.
    Include comment() function for when ZPArchive() not used.  api.c (SMS, EG)
 2. Add comments describing API interface, including macros to set.  api.h (EG)
 3. USE_ZIPMAIN and DLL_ZIPAPI are replaced by ZIPLIB (to build a library) and
    NO_ZPARCHIVE (to not use the ZPArchive() entry point).  Libraries will now
    tend to call zipmain() directly rather than fill in the API structure.  DLLs
    need to call an entry point and so use ZPArchive() for now.  A new entry
    point using zipmain() syntax is being worked.  api.h (EG)
 4. windows.h is included for some non-WIN32 builds to allow them to effectively
    use the API interface.  Add additional comments.  api.h (SMS)
 5. Change Options to ZipOpts to avoid confusion with Options structure that
    contains the list of command line options (defined in zip.c).  api.c,
    api.h (SMS)
 6. Change USE_ZIPMAIN to ZIP_DLL_LIB in many places.  Modify use of WINDLL
    (still used to create a Win32 DLL) in some cases.  api.c, zip.c (EG)
 7. Update PATH_MAX calculations.  Provide WIN32 equivalents to some WIN32
    functions used by the API (such as lstrcat).  Update _cplusplus wrapper
    code.  api.h (SMS)
 8. Update formatting.  comp_cli.txt, comp_opt.txt (SMS)
 9. Make changes for Exec Shield in assembly code (3.1c03) conditional on
    __ELF__ and __linux__, to avoid "as" errors on MinGW, where COFF is used,
    and the new ELF-specific .section directive is invalid.  crc_i386.S,
    match.S (SMS)
10. Update comments.  Update use of variable "calls".  Change eb_len
    and ef_len in ef_scan_for_aes() and ef_strip_aes() to signed long to catch
    underflow.  Add cast to IZ_MIN in zipcloak() to convert to size_t.  Minor
    updates to zipbare().  In decrypt(), quit if unable to read missing
    encryption header.  crypt.c (SMS)
11. Comment updates.  Update crypt version information.  Formatting updates.
    crypt.h (SMS)
12. Update text.  file_id.diz (SMS, EG)
13. Reorder optchar defines.  Update copy_args(), including propagating out
    of memory errors up a level rather than exit.  fileio.c (SMS)
14. In get_shortopt(), add comments regarding multi-byte matching.  fileio.c
    (EG)
15. Add o_OPT_EQ_VALUE (optional values requiring equal sign) processing for
    long options.  Disambiguate some ZE_MEM error messages in option
    processing.  fileio.c (SMS)
16. Update optional values requiring equal sign (o_OPT_EQ_VALUE), where an
    optional value is supported, but it must be flagged with a leading "="
    to avoid ambiguity.  This is more or less a replacement for the (possibly
    misleading) optional argument feature (o_OPT_VALUE) that has not been
    used.  Both short and long option versions implemented.  A leading "="
    forces whatever follows to be an option, even if it has a leading "-".
    (Leaving the "=" off results in a NULL option value.)  fileio.c (SMS, EG)
17. Optimize code in copy_args().  fileio.c (SMS)
18. Experimental new option, --etwodd (encrypt traditional without data
    descriptor), allows Traditional encryption without an extended header
    (data descriptor).  This requires reading the input file twice, but saves
    16 bytes (24 bytes, for Zip64) per archive entry and should create entries
    more compatible with other unzip utilities.  Intended for small files only
    as can greatly increase the time it takes to process files.  Not usable
    with streaming.  Currently implemented on Unix, VMS, and Windows.  ETWODD
    is only used if requested by the user via the --etwodd option.  Disable
    by defining C macro NO_ETWODD_SUPPORT.  (Only applies to Traditional zip
    encryption.  This issue does not exist for AES encryption, which should
    now be used instead of weak traditional encryption.)  globals.c,
    unix/osdep.h, unix/zipup.h, vms/osdep.h, vms/vms_pk.c, vms/zipup.h,
    win32/osdep.h, win32/zipup.h, zip.c, zip.h, zipcloak.c, zipup.c (SMS)
19. Add zread_file() to pre-read a file to calculate its CRC.  This is used by
    ETWODD encryption.  zipup.c (SMS)
20. Add zrewind() macro.  unix/zipup.h, vms/zipup.h, win32/zipup.h (SMS)
21. Check if ENABLE_ENTRY_TIMING is defined before defining.  Minor updates to
    use of ASM, ASMV, ASM_CRC, NO_ASMV, and NO_ASM_CRC.  win32/osdep.h (SMS)
22. Text updates.  Include note on known PPMd problems.  INSTALL (SMS, EG)
23. Initial attempt to provide a callable-Zip interface on UNIX and VMS
    systems.  Specifying LIBZIP at build time creates libizzip.a or
    LIBIZZIP.OLB and LIBIZZIP.OPT, which may be linked with a user-supplied
    program.  Add example of use of VMS/Unix lib.  izzip_example.c,
    unix/configure, unix/Makefile, vms/build_zip.com, vms/descrip.mms,
    vms/descrip_mkdeps.mms, vms/descrip_src.mms (SMS)
24. Move izzip_example.c lib example to new directory ziplib.
    ziplib/izzip_example.c (EG)
25. Initial update of readme.  This file will be fully updated by release.
    README (SMS)
26. Minor updates.  revision.h (SMS, EG)
27. Change UNICODE_WIDE to UNICODE_WCHAR to reflect other changes.  Change
    osdep.h to vms/osdep.h.  tailor.h (SMS)
28. Initial updates.  This file should be fully updated by release.  TODO
    (SMS, EG)
29. Add pending traditional encryption package update message.  This message
    has not been sent yet.  The previous message is still in effect and covers
    the traditional encryption code.  The AES code is covered by a separate
    message that has been sent.  usexport_pending.msg (SMS)
30. Initial update.  This file will be fully updated by release.  WHATSNEW
    (SMS, EG)
31. Add WIN32 pragma to search for bzip2 library.  zbz2err.c (SMS)
32. Finish changing APL_DBL_SFX to APL_DBL_SUFX.  unix/macosx.h (SMS)
33. Change Mac OS X system-specific code to use (C macro APL_DBL_SUFX)
    "/..namedfork/rsrc" as the suffix for resource fork access on Intel,
    staying with "/rsrc" on PowerPC.  Define the C Macro APPLE_NFRSRC as 0
    (on Intel) or 1 (on PowerPC) at build time to override the automatic
    decision.  (We believe that all PowerPC-compatible OS versions accept
    "/rsrc", and all Intel-compatible OS versions accept
    "/..namedfork/rsrc".)  Using "/rsrc" on Mac OS X 10.7 (Lion, Intel-only)
    caused spurious "Not a directory" messages, and resource forks were not
    properly stored.  zip.c, unix/macosx.h (SMS)
34. If APPLE_XATTR, include sys/xattr.h.  Handle big-endian conversion.
    Instead of array, allocate storage for apl_dbl_hdr dynamically.
    unix/macosx.h (SMS)
35. Disambiguate some ZE_MEM error messages.  Change a tempname() failure code
    from ZE_MEM to ZE_TEMP.  zip.c (SMS)
36. Change some declarations to accommodate a type change in zlib version 1.2.7.
    Added detection code to determine correct type based on existence of Z_U4
    macro in zlib code.  zip.c, zip.h, zipcloak.c (SMS)
37. Rename "lzma" directory to "szip" (seven Zip) as this includes both lzma and
    PPMd code.  INSTALL, zip.c, zipup.c, unix/configure, unix/Makefile,
    vms/build_zip.com, vms/descrip_deps.mms, vms/descrip_mkdeps.mms,
    vms/descrip_src.mms (SMS)
38. On Windows, volume labels (-$, --volume-label) longer than 12 characters
    were not processed.  Now, labels up to 32 characters should be accepted
    (and slightly more efficiently).  Update getVolumeLabel() to use "?:\\"
    as root path and to only return vol and sizeof vol (no fnlen or flags).
    win32/win32.c, zip.c, zipup.c (SMS)
39. On Windows with Unicode support, a null pointer reference could cause the
    program to fail.  Now check for z->namew being null (no wide character name
    for this entry).  zip.c, zipup.c (SMS)
40. Added initial support for volume labels (-$, --volume_label) on VMS.
    Add get_volume_label().  Remove /COMMENTS=ARCHIVE and /BATCH conflict.
    vms/cmdline.c, vms/VMS_ZIP.RNH, vms/vmszip.c, vms/zip_cli.cld, 
    vms/zip_cli.help, zip.c (SMS)
41. Update comments.  Update extended help to note use of new optional values.
    Revise extended help for extended -0/-9 and -n options.  Other extended
    help updates.  Add descriptions to some items in version feature list.
    Minor fixes to logging code.  Change tempname() error from ZE_MEM to
    ZE_TEMP.  Updates to archive comment code.  Change code that asks for new
    archive comment to stop adding \r\n within lines longer than MAXCOM, to
    allocate storage in increments of MAXCOM + 3, and to truncate too long
    comments.  Unresolved issue - should new line be added at end of message?
    zip.c (SMS)
42. Add comment describing UNICODE_TEST code.  Additional updates to archive
    comment code, including setting up to allow seeing and keeping original
    comment, but not yet implemented.  Force comment to not exceed 65513
    characters.  zip.c (EG)  
43. Add descriptions to special compilation options ASM_CRC and ASMV in the
    "-v" report.  zip.c (SMS)
44. Remove pointless unsigned < 0 test (with its attendant compiler
    complaints).  zip.c (SMS)
45. Allow "-@@ -" as equivalent to "-@".  zip.c (SMS)
46. Add check in zipmain() for proper NULL termination of argv[].  (Needed
    if argv being supplied by a user via USE_ZIPMAIN.)  zip.c (SMS)
47. Add o_OPT_EQ_VALUE type to "--show-options" report: "=val".  zip.c (SMS)
48. Specifying "-e" after "-P password" caused Zip to forget the "-P"
    password, and query the user for a password.  Now, if "-P" is
    specified, then "-e" is redundant but harmless, and its position is
    not significant.
    https://sourceforge.net/tracker/?func=detail&aid=2865769&group_id=118012
    &atid=679786
    zip.c (SMS)
    (This is not backward compatible, as the previous approach was to let the
    last -e or -P on the parsed command line (including in an environment
    variable) determine the action.  So -e could be in a variable and -P used
    to override, or -P password in a variable and -e used to override.  As
    such, this change is not consistent with how other options are handled.
    The user should not be specifying -e after -P unless they mean it.  That
    said, and given the past behavior, the change was made in this beta so it
    can be evaluated. - EG)
49. Change the behavior with "-a" on z/OS to do a binary-text test on files,
    and then do the EBCDIC-to-ASCII conversion on text files only.  Use "-aa"
    to bypass the binary-text test, and convert every file.  Previously, a
    binary-text test was done when "-a" was specified with "-l" or "-ll", but
    not when only "-a" was specified.  The new behavior is more consistent.
    zipup.c (SMS)
50. Add note on ZOS use of text translation.  zipup.c (EG)
51. Move VMS LIB$INITIALIZE to end of zip.c.  Changed C macro
    USE_ZIP_LIB$INITIALIZE to USE_ZIP_LIB_INITIALIZE to satisfy Sun C.
    zip.c (SMS)
52. Change a header file and Traditional encryption code to accommodate
    UnZip dynamic memory developer diagnostics.  Change free() to izc_free()
    in shared file crypt.c to be compatible with additional memory debugging
    added to UnZip (but not yet in Zip), with izc_free() currently resolving
    to free() in Zip.  Same with izc_malloc(), izz_realloc(), and
    izz_md_check().  crypt.c, zip.h (SMS)
53. Add comments regarding encryption.  Define new encryption macros based on
    build options.  Reorder extra field definitions, move some definitions
    to here.  Add logic for controlling use of NO_USER_PROGRESS.  Add
    vms_status().  zip.h (SMS)
54. Add comment on traditional zip encryption.  Add comment for zcount and
    fcount.  Add comment to izz_ memory functions.  Add comments regarding
    LIB and DLL creation.  zip.h (EG)  
55. Add ETWOOD (Traditional Encryption without using data descriptor) support.
    zipcloak.c (SMS)
56. Update comments.  zipcloak.c (EG)
57. Remove UTF8_PATH_EF_TAG as renamed to EF_UTFPTH and made global.  Change
    /* */ to #if #endif to comment out code.  zipfile.c (SMS)
58. Add comment about Adler16 CRC.  Add Zip64 comments.  Fix
    total_cd_total_entries bug that did not account for Zip64 information and
    so gave wrong counts for Zip64 archives.  zipfile.c (EG)
59. Add description to ASM_CRC reporting.  zipnote.c (SMS)
60. On Mac OS X versions where extended file attributes are supported (10.4
    and later, we believe), Zip now includes these attributes in AppleDouble
    ("._name") archive members (unless -df is specified).  Update
    get_apl_dbl_info().  Add make_apl_dbl_header().  unix/configure,
    unix/macosx.h, unix/unix.c, zip.h, zipup.c (SMS)
61. Add comment regarding use of file time as CRC for encryption.  zipup.c (EG)
62. Reformat AES encryption comments.  zipup.c (SMS, EG)
63. Add note regarding updating q.  zipup.c (EG)
64. Check calculated CRC against header provided CRC for mismatch.  Use
    macros such as NO_ENCRYPTION for conditionals instead of testing for
    specific numbers.  zipup.c (SMS)
65. Add note and remove IZ_CRYPT_NOEXT macro.  zipup.c (EG)
66. Change a z/OS-specific loop test in iz_file_read() to avoid a possible
    (and, apparently, actual) buffer overrun with "-a".  (See
    http://www.info-zip.org/phpBB3/viewtopic.php?f=6&t=399.)  zipup.c (SMS)
67. Change CRYPT_DEBUG to IZ_CRYPT_DEBUG.  Change CRYPT_TRAD to IZ_CRYPT_TRAD.
    Change CRYPT_AES_WG to IZ_CRYPT_AES_WG.  Reform the multi-value C macro
    CRYPT into simpler IZ_CRYPT_ANY and IZ_CRYPT_TRAD.  (Plain CRYPT_ANY would
    collide with a Microsoft system header file.)  The actual encryption code
    should now use only IZ_CRYPT_AES_WG and IZ_CRYPT_TRAD (plus IZ_CRYPT_ANY,
    derived from them).  At build time, users specify more controlled options:
    CRYPT_AES_WG, NO_CRYPT, NO_CRYPT_TRAD.  api.c, api.h, crypt.c, crypt.h,
    ebcdic.h, globals.c, INSTALL, revision.h, ttyio.c, ttyio.h, zip.c,
    zip.h, zipcloak.c, zipfile.c, zipup.c, amiga/filedate.c, qdos/qdos.c,
    tandem/tanzip.c, unix/unix.c, vms/cmdline.c, vms/vms.c, win32/win32.c (SMS)
68. Code tidying.  Moved volume label string ("label") declarations out
    of various system-specific files into central locations (globals.c).
    fileio.c, globals.c, zip.h, acorn/acornzip.c, amiga/amigazip.c,
    atari/atari.c, atheos/atheos.c, beos/beos.c, msdos/msdos.c,
    novell/Netware.c, os2/os2.c, qdos/qfileio.c, theos/theos.c,
    tops20/tops20.c, unix/unix.c, vms/vmszip.c, win32/win32zip.c (SMS)
69. Update description of volume label.  Update pattern matching option list.
    zip.1 (SMS)
70. Bad code in many places could cause Zip to mischaracterize a regular
    file v. directory v. symlink v. fifo, and so on.  First observed on
    VMS with a symlink, causing a spurious error message, "zip warning:
    file and directory with the same name: fred.slnk", but many other
    problems looked possible.  The new, OS-specific code has not been
    tested everywhere.  It uses stat()-related macros like S_ISDIR, so
    if these are missing on some system type, then please report what
    goes wrong where.  acorn/acornzip.c, amiga/amigazip.c, aosvs/aosvs.c,
    atari/atari.c, atheos/atheos.c, beos/beos.c, human68k/human68k.c,
    msdos/msdos.c, novell/Netware.c, os2/os2.c, os2/os2zip.c, qdos/qdos.c,
    qdos/qfileio.c, tandem/tanzip.c, theos/theos.c, tops20/tops20.c,
    unix/unix.c, vms/vmszip.c, win32/osdep.h, win32/win32zip.c, zos/mvs.c,
    vms/osdep.h (SMS)
71. Change AES_WG endian-determination code not to look for <sys/isa_defs.h>
    on __sun systems with __sparc defined, because it's missing on SunOS 4.1.4.
    aes_wg/brg_endian.h (SMS)
72. Add top comment.  novell/netware.c (EG)
73. Correct typo (JM to IM) for EF block type for VMS to match actual value
    of extra field tag 0x4d49.  proginfo/extrafld.txt (SMS)
74. Regression since Zip 3.1c caused Zip to produce an empty archive
    when used as a filter.  Specifying arguments "- -" worked, but
    specifying no arguments triggered the failure.  Fixed.  zip.c (SMS)
75. Add copyright.  Change reference to UnZip to Zip.  unix/configure (EG)
76. Split out OSDEP_OC and OSDEP_OS to OSDEP_OCU, OSDEP_OCZ, OSDEP_OSU, and
    OSDEP_OSZ, where U is for utilities and Z is for zip.  unix/configure (SMS)
77. Initial attempt to support Windows MinGW environment with UNIX builders
    ("generic" target).  Add rules for nt.o, win32.o, win32i64.o, and
    win32zip.o.  Add rules for win32_.o and win32i64_.o for utilities.  No DLL.
    unix/configure, unix/Makefile, win32/osdep.h (SMS)
78. Remove redundant declarations of global variable "noisy" from some
    OS-specific modules.  os2/os2zip.c, win32/win32.c (SMS)
79. Fix assembler testing in configure script, and use of assembly object
    files at link time.  Defining NO_ASM, NO_ASM_CRC, or NO_ASMV in LOCAL_ZIP
    disables use of assembly code for all, CRC, or match, respectively.  Add
    -c option to assembler rules.  unix/configure, unix/Makefile (SMS)
80. Bad white space in Unix builder caused problems in UID/GID size
    determination tests with old (K&R) compilers (SunOS 4.1.4 bundled C, for
    example).  Fixed.  unix/configure (SMS)
81. In Unix builders, accept user-specified CFLAGS_OPT macro to override
    automatic compiler optimization options setting.  For debugging, for
    example, one might specify "CFLAGS_OPT='-g -O0' LFLAGS2=-L.".  (A
    non-null value is required for each.  "-L." should be harmless.)
    Stop putting redundant "-L." linker options into "flags".
    unix/configure (SMS)
82. Allow building of Zip object library (LIB_ZIP).  Include check for
    localtime_r.  unix/configure, unix/Makefile (SMS)
83. Change some assembler-related details, including the test for an "_"
    prefix on global names.  unix/configure, unix/Makefile (SMS)
84. Fix some potential bad behavior (program aborts or loops) in ZipCloak
    (-d) caused by (intentionally) defective/corrupt archives.  Reported
    (for corresponding code in UnZip) by OUSPG
    ("https://www.ee.oulu.fi/research/ouspg/").  crypt.c, crypt.h
    (Aki Helin, SMS)
85. Replace remaining EF_MIN and MIN macros with IZ_MIN.  unix/unix.c,
    vms/vms.c, vms/vms_pk.c (SMS)
86. Update cast of charMask, making this file of the szip package unique to
    the Info-ZIP implementation.  szip/ppmd8enc.c (SMS)
87. Add comment that this file was modified.  szip/ppmd8enc.c  (EG)
88. Drop unneeded files from lzma (szip) directory.  lzma/alloc.c, lzma/alloc.h
    (SMS)
89. Add file to szip directory (for consistency with UnZip).  szip/ppmd8dec.c
    (SMS)
90. Rename readme_lzma.txt to readme_szip.txt. (SMS)
91. Update top comments.  Update displayed instructions.  Split out building
    base files (new O_ZIPL) from building apps (O_ZIP).  Add O_ZIPN to build
    library.  Add AR_ZIP as destination of callible library.  In
    unix/configure call, drop reading CF_NOOPT for flags and add reading
    LOCAL_ZIP for flags.  unix/Makefile (SMS)
92. Add copyright.  Fix IZ_ZLIB reference in comment.  Add comment regarding
    generic targets.  Add suggestion to use "generic" first if no preference.
    Add comment to AR_ZIP rule.  unix/Makefile (EG)
93. Add unix/Makefile2 as potential update to unix/Makefile.  Untested and
    subject to change.  Not recommended for use.  unix/Makefile2 (SMS)
94. Add unix/mlz.sh as a simple script to combine a set of object libraries and
    loose object files to make a new object library.  unix/mlz.sh (SMS)
95. Comment updates.  Add newly supported args HELP_TEXT, LIBZIP, SYMBOLS.
    Replace NOEXE with NOLINK.  vms/build_zip.com (SMS)
96. Modify compiler options to use new ZIPLIB and NO_ZPARCHIVE defines.
    vms/build_zip.com, vms/descrip_src.mms (EG)
97. New option on VMS, -vn (--vms-names, /[NO]VNAMES) allows preservation of
    idiosyncratic VMS file names which, by default, are adjusted (some in
    non-reversible ways) for better compatibility with non-VMS systems.  For
    example, "a^.b." is normally archived as "a.b", but with -vn it would be
    archived as "a.b.".  globals.c, vms/cmdline.c, vms/vmszip.c,
    vms/zip_cli.cld, zip.c, zip.h (SMS)
98. Add "prsrv_vms" to flag the preserving of idiosyncratic VMS file names.
    globals.c, zip.h (SMS)
99. Add API_ definitions, including for AES_WG.  Add ZIP_ object definitions,
    including for AES_WG.  vms/descrip_deps.mms (SMS)
100.Add NO_SIGNED_CHAR to C macros defined for PPMd compression code.
    vms/descrip_src.mms (SMS)
101.Update VMS install procedures and notes.  Add description of symlink problem
    on VMS V8.3[-1H1] Alpha and IA64.  Update -V and -VV descriptions.  Update
    details of GNV exit status values.  vms/install_vms.txt, vms/notes.txt (SMS)
102.Add USE_ZIPMAIN to list of conditions where <unixlib.h> is required.
    vms/osdep.h (SMS)
103.On VMS, explicitly set naml$v_search_symlink when following symlinks ("-y-",
    /[NO]SYMLINK).  Update vms_rewind() to clear context status.  vms/vms_pk.c
   (SMS)
104.Add back zip_cli.RNH.  vms/zip_cli.RNH (SMS)
105.Change the VMS CLI /BATCH=file option to use the new "-@@ file" UNIX
    option, instead of handling input redirection in VMS-specific code.  A
    side benefit is that /BATCH=file no longer uses stdin, so it no longer
    conflicts with /COMMENTS (which uses stdin).  vms/cmdline.c,
    vms/zip_cli.help.  (SMS)
106.Remove useless VMS CLI /VERBOSE=DEBUG ("-vvv") option.  vms/cmdline.c,
    vms/zip_cli.cld, vms/zip_cli.help.  (SMS)
107.Change VMS-specific /VERBOSE=MORE ("-vv") diagnostic messages to use
    the usual message stream (mesg) instead of stderr, to avoid having normal
    messages overwrite diagnostic messages due to carriage control
    differences.  Reformat the "vms_fopen(): stat()" message to avoid
    over-long lines.  vms/vms.c (SMS)
108.Change VMS-specific CLD processing DCL script to create only Stream_LF
    files, to resolve a messy file-attribute problem with DEC C V4.0-000
    when CC /PREPROCESS_ONLY hit an error.  A date comment in the CLD source
    caused an error with CC /PREPROCESS_ONLY with that old compiler, so the
    CLD "!" comment is now wrapped in "/*"+"*/".  vms/cppcld.com,
    vms/zip_cli.cld (SMS)
109.Revise VMS builders to make it easier to generate the help files (only).
    vms/build_zip.com, vms/descrip.mms (SMS)
110.On VMS, add HELP_TEXT as a builder option/target.  Specifying HELP_TEXT
    creates the text files ZIP.HTX and ZIP_CLI.HTX, which are the output
    from "help zip..." commands using the corresponding .HLP help library
    source files.  vms/build_zip.com, vms/descrip.mms (SMS)
111.Revise VMS DCL builder to recreate object libraries when not compiling
    (NOCOMPILE).  vms/build_zip.com (SMS)
112.Change VMS builders to use explicit (CC) /NOLIST and (LINK) /NOMAP
    qualifiers by default, to reduce unexpected clutter in batch mode.
    vms/build_zip.com, vms/descrip_src.mms (SMS)
113.Change VMS exit status code to SS$_NORMAL for success instead of a
    facility-specific code (%x17A38001).  This agrees with most VMS
    utilities, and with Zip versions before 3.0.  Define C macro OK_USE_FAC
    to use the facility code in all cases.  Add vms_status().  Update
    prototype for vms_exit().  Make decc_init() not static.  Remove numerous
    pragma statements for decc_init().  vms/vms.c (SMS)
114.Rearrange and update directory scanning in procname_win32w().
    win32/win32zip.c (SMS)
115.Add a type cast (__int64) to avoid a compiler complaint (and possible
    bad behavior) when left-shifting a 32-bit value instead of a 64-bit
    value by 32.  win32/win32.c (SMS)
116.Minor Windows-specific code tidying, mostly for consistency with UnZip.
    win32/win32zip.c (SMS)
117.Experimental new builders for Microsoft Visual Studio (Visual C++) 2010.
    Optional feature selection for each program (Project) is done entirely
    using "Configuration Properties > C/C++ > Preprocessor > Preprocessor
    Definitions".  Some popular options are supplied disabled - enable by
    removing the "x_" prefix for the respective compile options in the VS 2010
    project.  Use of assembly code is still controlled by choice of
    Configuration ("Debug" v. "Debug_ASM", "Release" v. "Release_ASM").  The
    "zip" project is used whether or not bzip2 compression support is requested.
    There is now no separate "zipbz2" project for Zip with bzip2 support.  The
    "zip" project has been marked as dependent on the "libbz2" project.  If a
    bzip2 source kit has not been added to the "bzip2/" subdirectory, then the
    "libbz2" project build will fail, but the "zip" project build should still
    succeed, so long as the C macro BZIP2_SUPPORT is not defined.  zbz2err.c,
    win32/vc10/zip.sln, win32/vc10/zip/zip.vcxproj,
    win32/vc10/zip/zip.vcxproj.filters, win32/vc10/zip/zipcloak.vcxproj,
    win32/vc10/zip/zipcloak.vcxproj.filters, win32/vc10/zip/zipnote.vcxproj,
    win32/vc10/zip/zipnote.vcxproj.filters, wrap/aescrypt.c, wrap/aeskey.c,
    wrap/aestab.c, wrap/fileenc.c, wrap/hmac.c, wrap/LzFind.c, wrap/LzmaDec.c,
    wrap/lzmaenc.c, wrap/Ppmd8.c, wrap/Ppmd8Dec.c, wrap/ppmd8enc.c,
    wrap/prng.c, wrap/pwd2key.c, wrap/sha1.c (SMS)
118.Add dependent bzip2 project to Win32.  win32/vc10/libbz2/libbz2.vcxproj,
    win32/vc10/libbz2/libbz2.vcxproj.filters (SMS)
119.Add new VC8 projects.  Rename old projects to vc8_old.  win32/vc8/zip.sln,
    win32/vc8/zip.vcproj, win32/vc8/vcxproj, win32/vc8/zip.vcxproj.filters,
    win32/vc8/zip.vcxproj.user, win32/vc8/zipbz2.vcproj,
    win32/vc8/zipbz2.vcxproj, win32/vc8/zipbz2.vcxproj.filters,
    win32/vc8/zipbz2.vcxproj.user, win32/vc8/zipcloak.vcproj,
    win32/vc8/zipcloak.vcxproj, win32/vc8/zipcloak.vcxproj.filters,
    win32/vc8/zipcloak.vcxproj.user, win32/vc8/zipnote.vcproj,
    win32/vc8/zipnote.vcxproj, win32/vc8/zipnote.vcxproj.filters,
    win32/vc8/zipnote.vcxproj.user, win32/vc8/zipsplit.vcproj,
    win32/vc8/zipsplit.vcxproj, win32/vc8/zipsplit.vcxproj.filters,
    win32/vc8/zipsplit.vcxproj.user, win32/vc8_old/readmevc.txt,
    win32/vc8_old/zip.sln, win32/vc8_old/zip.vcproj,
    win32/vc8_old/zipbz2.vcproj, win32/vc8_old/zipcloak.vcproj,
    win32/vc8_old/zipnote.vcproj, win32/vc8_old/zipsplit.vcproj (SMS)
120.Add Win32 DLL project for VC10.  windll/vc10/zip32_dll.sln,
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zipzip32_dll/zip32_dll.vcxproj.filters (SMS)
121.Check return from GetFileAttrributes() against INVALID_FILE_ATTRIBUTES
    instead of 0xFFFFFFFF (-1).  win32/win32zip.c (SMS)
122.Initial partial changes to support long paths z (long directory names
    and long file names) in Win32.  Not working yet.  win32/win32zip.c (EG)
123.Remove files from szip/orig.  szip/orig/7zfile.c, szip/orig/7zfile.h,
    szip/orig/lzmaenc.c, szip/orig/lzmaenc.h (SMS)
124.Add files to szip.  szip/ppmd.h, szip/ppmd8.c, szip/ppmd8.h,
    szip/ppmd8dec.c, szip/ppmd8enc.c.  (SMS)
125.Add note to readme_szip.  szip/readme_szip (EG)
126.Add quote_quotes(), but not used currently.  zip.c (EG)

---------------------- April 22nd 2014 version 3.1d27 -------------------------
 1. Update comments.  Change ZpVersion() to EXPENTRY and add ZpVer arg.  On
    Mac OS X, add "apple_xattr" to the API feature list, and APPLE_XATTR to
    the "-v" report, to show support for extended attributes.  Correct
    comments describing API functions.  api.c, zip.c (SMS)
 2. Change commented out code from using // to using #if 0.  api.h (SMS)
 3. Comment changes.  Remove unused FILE arg.  Add note regarding bfwrite
    byte counting.  Remove unused zoff_t n arg to zipcloak().  Remove some
    commented out code.  Change way HEAD_LEN calculated and change way tempzn
    calculated to move where MAC_LENGTH is added.  In zipcloak(), call
    fcrypt_end() then bfwrite() to write out AES_WG MAC trailer.  crypt.c
    (SMS, EG)
 4. Comment updates.  crypt.h (SMS)
 5. Update copyright.  deflate.c (EG)
 6. Minor text update.  file_id.diz (SMS, EG)
 7. Add global argv_cli[] for VMS.  Remove STORE method file name suffices.
    globals.c (SMS)
 8. Minor updates, including some for bzip2.  INSTALL (SMS, EG)
 9. Minor updates.  This file should be more fully updated before public
    beta release.  TODO (EG)
10. Rearrange some code to clear some "unreferenced local variable" compiler
    complaints when building Windows DLL.  Now show non-null option
    environment variables after command-line syntax error message.  (This may
    help to reduce user confusion when an otherwise invisible option (which is
    invalid or conflicting) causes a command-line parsing error.)  Handle new
    argv_cli for VMS.  Add show_env() to show environment variables.  Add
    show_env() to ziperr().  Various #if formatting and commenting.  Remove
    envptr from version_info().  Add show_env() to version_info().  Add
    parentheses to quote_quotes().  Move brace after #endif for human68k in
    check_zipfile().  Add datetime() to parse dates and times for -t and -tt.
    Add cur_time_opt local var for -t and -tt.  Put local vars for showing
    parsed command line in SHOW_PARSED_COMMAND block.  Update Mac data fork
    code (UNIX && __APPLE__).  Add default for scanimage for RISCO.  Add local
    initialization for filesync, etwodd, and some VMS variables (prsrv_vms,
    vmsver, vms_native, vms_case_2, vms_case_5, and argv_cli.  Set qlflag to
    zero for QDOS and QLZIP.  Add restore of initial compression level/method
    states to main() initialization code.  Add initialization of
    display_est_to_go, display_time, display_zip_rate, use_outpath_for_log,
    log_utf8, nonlocal_name, nonlocal_path, and label.  Initialize encryption
    and progress variables.  Initialize zip_attributes.  Initialize sf_usize,
    mvs_mode, and diff_mode.  Initialize backup_* variables.  Add (int) cast
    to sizeof() in sprintf() call for error message.  Check vms_zip_cmdline()
    return status for arg array creation.  When showing parsed args, don't
    allocate space until first arg.  Move VMS (DEC C) initialization to
    decc_init.c.  zip.c (SMS)
11. Change how time is specified for -t and -tt.  Update extended help for -t
    and -tt.  Add simple_encr_passwd() to ask user for password.  Update
    datetime() to require leading : on times.  Change o_spc to o_sP to match
    option.  Add short opt -sP to long opt --show-parsed-command.  Add
    show_parsed_args local var for showing parsed command line.  Set show
    parsed args to allocate 256 char pointers at a time (instead of 4000).
    Add show_parsed_args to flag showing parsed args with -sP rather than use
    states of show_args and use show_args only for showing input args with
    -sc.  Use simple_encr_passwd() to get password.  zip.c (EG)
12. Add IZ_MAX(a,b) macro.  Move STORE suffix lists to here.  Add argv_cli
    variable.  Move decc_init() further down.  Change /* ... */ code commenting
    to #if/#endif.  zip.h (SMS)
13. Enhance STORE suffix lists to include files generated by most common
    compression methods.  Add comment with list of suffixes to store by
    default.  zip.h (EG)
14. Add encr_passwd() from zip.c  Add options -P and -pn.  Add password length
    checks for AES encryption methods.  Use key instead of passwd for password.
    zipcloak.c (SMS)
15. Add #include decc_init.c.  zipcloak.c, zipnote.c, zipsplit.c (SMS)
16. Update copyright.  Clean mesg_line_started flag in zipwarn().  Add -P and
    -pn to help.  Add simple_encr_passwd() for reading passwords and use
    instead of encr_passwd().  zipcloak.c (EG)
17. Account for first link in list.  Error message formatting updates.
    zipfile.c (SMS)
18. Add known_how to track compression method.  Add better check for
    determining if compression method defined.  Add note regarding recent
    AppNote updates for Zip64 data descriptors.  zipfile.c (EG)
19. Some utility programs ignored the C macro NO_EXCEPT_SIGNALS, which
    should disable the default signal handler (for debugging).  If
    NO_EXCEPT_SIGNALS defined then don't define handler().  zipnote.c,
    zipsplit.c (SMS)
20. Update copyright.  Clear mesg_line_started in zipwarn().  zipnote.c (EG)
21. Change default split size from 36000L to 1474560L.  Use ReadNumString() to
    read split size and room to leave that include suffix (such as 10k for 10 x
    1024).  ZipSplit could fail with a spurious error: "zipsplit error:
    Interrupted (aborting)".  Faulty linked list construction, null pointer
    dereference.  zipsplit.c (SMS)
22. Update copyright.  Add comment regarding default split size.  Clear
    mesg_line_started in zipwarn().  Update help.  zipsplit.c (EG)
23. Move definition of k in zread_file() out of NO_SYMLINKS block.  Add free()
    of tempextra and tempcextra.  Change iz_file_read() to iz_file_read_bt() in
    zipup().  Add type cast to clear a compiler (Microsoft VS 2010) complaint.
    zipup.c (SMS)
24. Change uses of file_binary_final to use file_binary instead.  Add comment
    regarding use of zread_file() for ETWODD.  Add comment regarding
    iz_file_read() versus iz_file_read_bt().  Update bzfilecompress() binary
    detection.  Update lzma_read() to only check first buffer for binary to
    be consistent with other compression methods.  zipup.c (EG)
25. Update copyright.  Change /* */ to #if #endif.  Change "UNKNOWN " to
    "Unknown C ".  Change "Unknown compiler " to "Unknown C ".  Comment out
    "__TIME__" check and output.  amiga/amigazip.c (SMS)
26. Add missing parenthesis.  atheos/atheos.c (SMS)
27. Update Zip 3.0 to 3.1.  bzip2/readme_bzip2.txt (EG)
28. Add free(l_ef).  macos/sourse/extrafld.c (SMS)
29. Initialize err to 0.  macos/source/macos.c (SMS)
30. Add free(eb_l_ptr).  Add free(lq).  qdos/qdos.c (SMS)
31. Update comments to remove references to unimplemented multi-threading.  Add
    note regarding change of 7zVersion.h to SzVersion.h.  At bottom, change
    "Document Revision History" to "LZMA/PPMd Implementation History" as that
    seems to cover better what is described and it now serves as a quick list
    of LZMA/PPMd changes rather than simply a list of word changes in this
    file.  szip/readme_szip.txt (EG)
32. Add free(dirp).  tandem/tandem.c (SMS)
33. Remove EB_L_THSIZE.  Account for EB_HEADSIZE when malloc space.
    theos/theos.c (SMS)
34. Comment updates.  Remove CC, LD, CC_TST for LLVM Clang.  Change Unix
    "configure" script not to set CC=clang internally when Clang is detected
    as the compiler.  Remove/adjust some white space.  unix/configure (SMS)
35. Add note regarding parameters and environment variables.  Minor message
    text changes to make formatting more consistent.  Comment updates.
    unix/configure (EG)
36. [Note: As noted below, the changes for Makefile for this beta mainly come
    from Makefile2.  The changes noted here are thus from Makefile2 rather
    than Makefile.]  Add variable PROD to determine location of output
    products.  Various comment changes.  Change MAKE_ACTIONS to MISC_TARGETS.
    Change "actions" to "targets" in help.  Reorder optional overrides listed
    in help.  List actions (MISC_TARGETS) last in help.  Changes in how paths
    of installed components using MANDIR and BINDIR are created.  Add -o to
    assembler rules.  Use $@ instead of using actual target in places.  Add
    note regarding dependence of utilities (ZipCloak, ZipNote, and ZipSplit)
    on libraries because of rules rather than actual dependencies.
    unix/Makefile (SMS)
37. Add "dashv" target to the Unix builders, and "DASHV" and "SLASHV"
    targets/options to the VMS builders.  These generate a "zip -v" (or "ZIP
    /VERBOSE") report using an already built program.  unix/Makefile,
    vms/build_zip.com, vms/descrip.mms (SMS)
38. Add note that Makefile now includes changes merged in from Makefile2.
    Remove unix/Makefile2.  Various comment changes.  In some cases, change
    "targets" to "targets (actions)" in help to emphasize that these targets
    perform specific actions rather than build targets.  Add note that
    precompiled docs (like man pages) now ship in a new ./docs directory.  User
    built versions of docs go in the PROD/manout directory.  Comment out
    automatic creation of PROD directory for now.  (In the default case,
    PROD = ., so the directory should already exist.  If PROD is redefined, the
    user will need to either ensure the directory exists, or uncomment out the
    automatic creation.  This adds the need for a little thought when sending
    the products to another directory.)  unix/Makefile (EG)
39. Update comments in script file.  unix/mlz.sh (SMS)
40. In Unix- and VMS-specific header files, add directives to define C macros
    NO_ZPARCHIVE and USE_ZIPMAIN when the new ZIPLIB macro is defined.  On VMS,
    convert one existing use of USE_ZIPMAIN to ZIPLIB.  unix/osdep.h,
    vms/osdep.h (SMS)
41. Remove extra parenthesis from NETBSD check.  Change UNZIP to ZIP.
    unix/unix.c (SMS)
42. Updates to handle new time part of dates.  vms/cmdline.c (SMS, EG)
43. Add copyright.  vms/collect_deps.com, vms/cppcld.com, vms/descrip.mms (SMS)
44. Add support for LITERALW and WLARETIL.  Reconcile TPU macros in VMS help
    source and processor with corresponding UnZip files.  vms/cvthelp.tpu,
    vms/zip_cli.help (SMS)
45. Add decc_init.c dependencies.  vms/descrip_deps.mms (SMS)
46. Add or update copyright and license information in various files.
    vms/build_zip.com, vms/collect_deps.com, vms/cppcld.com,
    vms/cvthelp.tpu, vms/descrip.mms, vms/descrip_mkdeps.mms,
    vms/descrip_src.mms, vms/find_bzip2_lib.com, vms/hlp_lib_next.com,
    vms/mod_dep.com, vms/optgen.com, vms/vms_msg_gen.c, vms/VMS_ZIP.RNH,
    vms/zip_cli.cld, vms/zip_cli.help, vms/zip_msg.msg (SMS)
47. Remove unneeded NO_ZPARCHIVE.  vms/descrip_src.mms (SMS)
48. Define S_ISDIR() and S_ISREG() macros.  Switch to ZIPLIB.  Comment updates.
    vms/osdep.h (SMS)
49. Update copyright.  vms/vms.c (EG)
50. Add free(xtra).  vms/vms_im.c (SMS)
51. Add copyright to message.  vms/vms_msg_gen.c (SMS)
52. Add free(ctx).  Add free(xtra).  vms/vms_pk.c (SMS)
53. Add copyright.  vms/vms_zip.rnh, vms/zip_cli.rnh (SMS)
54. Set name to NULL.  vms/vmszip.c (SMS)
55. Change <LITERAL0> to <LITERALW>.  Change <0LARETIL> to <WLARETIL>.
    vms/zip_cli.help (SMS)
56. Update copyright.  win32/win32.c, win32/zip.rc, windll/windll.rc (EG)
57. Add free(eb_l_ptr).  win32/win32zip.c (SMS)
58. Add zipsplit to project.  win32/vc10/zip.sln, win32/vc10/zipsplit/ (new),
    win32/vc10/zipsplit/zipsplit.vcxproj (new),
    win32/vc10/zipsplit/zipsplit.vcxproj.filters (new) (SMS)
59. Add libbz2 to project.  Windows DLL builders for MS VS 2010 (and up) did
    not support bzip2 compression.  windll/vc10/zip32_dll.sln,
    windll/vc10/libbz2/ (new), windll/vc10/libbz2/libbz2.vcxproj (new),
    windll/vc10/libbz2/libbz2.vcxproj.filters (new),
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters (SMS)
60. Update project.  Add zbz2err.c,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters (SMS)
61. Change from using USE_ZIPMAIN to ZIPLIB in comments in example program
    showing use of object library.  lib/izzip_example.c (SMS)
62. Change ./zipmain directory in source kit to ./lib.  (This was previously
    iz_lib.)  The lib directory is for all things related to showing how to use
    the object library (archive) libizzip.a generated by setting the compile
    option ZIPLIB.  (The windll/examples directory serves this purpose for
    Windows, which includes examples for using the Windows LIB and the Windows
    DLL.  The new lib directory is generally for using libizzip.a only.)
    ./zipmain (remove), ./lib (add) (EG)
63. Update DLL interface.  Add ZpZip() as new entry point for calling Zip.
    This interface removes dependence on options structure that was passed to
    the DLL, replacing it with a command line string.  ZpZip() provides access
    to Zip via this single call, no other entry points, such as the old
    initialization one, are used.  Move DLLPRNT, DLLPASSWORD, DLLCOMMENT, and
    DLLPROGRESS declarations from top of api.c to api.h.  Add new
    commandline_to_argv() call to parse command line provided ZpZip().  Change
    user function comment to acomment (archive comment).  Comment out
    encr_passwd() function, replace with new simple_encr_passwd() function that
    does not include zfn (zipfile name) arg as this arg is not applicable to
    Zip.  (If Zip and UnZip functions are combined in a single app, then each
    should use their own applicable password function.)  Add test entry points
    for testing DLL interface when debugging DLL use with new app, including
    ZpTestComParse (test command line parsing), ZpTestCallback() (tests calling
    a user callback), ZpTestCallbackStruct (test providing callback addresses
    to DLL using a structure), and ZpZipTest() (test the main Zip callbacks).
    Rename user callback functions (called using lpZipUserFunc->print
    for instance) to print, ecomment (entry comment, new callback), acomment
    (existing archive comment callback), password, service (requires 64-bit),
    service_no_int64 (old simple 32-bit service callback), progress (enhanced
    progress report callback), error (new callback called when zipwarn or
    ziperr are called), and finish (new callback called when zip operation
    completes, provides stats to caller).  New interface structure not
    backward compatible, but minimal functionality may still be available to
    32-bit interface apps (like old Visual Basic 6).  Service callback now
    returns both string versions of sizes (in form 1.6G for 1.6 GiB) and byte
    counts, as well as function being performed (such as "Add" or "Update")
    and compression percent.  Progress callback now returns filename,
    uncompressed size, percent entry done (as % * 100, so 4210 is 42.1%),
    percent all files done, and function (such as "Add").  MAX_ARG_SIZE for
    DLL interface currently set to 4000.  ZpZip entry point takes args
    CommandLine (string command line to execute), CurrentDir (directory to
    form relative paths from), lpZipUserFunc (structure of callback function
    addresses), and ProgressChunkSize (string form (such as 1.0M) of number
    of bytes to process before calling progress callback.  Progress callback
    is called at start of entry, as each ProgressChunkSize is processed, and
    at completion of entry.  Update feature list to include new features such
    as windows_long_path.  In api.h, update comments at top.  Update _ZpVer
    structure to remove fixed size strings and replace with char pointers as
    they are more universally supported for passing information from Zip to a
    caller.  Update callback function interfaces.  Set ENABLE_DLL_PROGRESS by
    default.  (Caller does not have to provide a callback function if
    functionality not needed.)  New global uzise_string holds the expected
    uncompressed size for progress reports.  api.c, api.h, globals.c, zip.h,
    zip.c (EG)
64. Add support for Windows long paths (paths over MAX_PATH, currently 260
    bytes).  Add new variable include_windows_long_paths.  Add new -wl option
    to enable storing of long paths.  (Many utilities and the Windows shell do
    not handle long paths and archives with them are not readable by them.)
    api.c, globals.c, zip.h (EG)
65. Limit comment length to 32765 characters.  The comment is stored in the
    entry record, which is limited to 65535 bytes total, including the normal
    fields and any extra fields and the comment.  Setting a fixed size on this
    is a kluge, as the actual size allowed should be determined based on what
    else is in the extra block and the space left in it.  api.c (EG)
66. Add check for ascii in newnamew() to fix bug where updated entries were
    getting Unicode extra fields.  fileio.c (EG)
67. Add global action_string to capture the current action being performed
    (such as Add) so it can be reported to the DLL caller.  globals.c, zip.h
    (EG)
68. Update comment handling to allow keeping old comment.  Make comment
    variables global to support updating entry comments as each entry processed
    to support new stream mode -st.  globals.c, zip.h (EG)
69. Add new stream mode that stores file attributes and comments in the central
    directory but not in the local headers in a new extra field in the local
    headers.  Enabled by the new -st option.  Zip removes these new ef when -st
    is not used to help prevent the ef information from becoming out of date.
    A new ef with tag "xl" is defined.  globals.c, zip.h (EG)
70. Add missing macro BETA and set to 1 (in this beta).  Enable copyright and
    license for WINDLL.  revision.h (EG)
71. Update copyright.  tailor.h (EG)
72. Update comment for zipedit.  zip.c (EG)
73. Enable handler() for WINDLL.  (Seems no reason not to, and it seems to work
    fine.)  Skip fflush() of mesg for DLL.  Change output of license to use
    printf() (redefined by DLL interface) instead of puts().  Change putchar()
    to printf() for copyright to support DLL.  zip.c (EG)
74. Change references to extended help to use -hh instead of -h2 (for
    consistency with UnZip.  zip.c (EG)
75. Update extended help to add more on comments and use of -st with comments.
    Add note on time and date differences due to time zone and daylight saving
    time changes.  Add section on use of stream mode and -st.  Update example
    of -dg use from 10m to 100m.  Update comments for -T and -TT.  Add example
    of use of -sf that includes file sizes.  Add section on Windows long paths
    and use of -wl.  zip.c (EG)
76. Add WINDLL (Windows DLL) as listed compile option (as now DLL caller can
    see it).  zip.c (EG)
77. Minor updates to simple_encr_passwd().  zip.c (EG)
78. Disable -@ for WINDLL as no stdin.  Do not allow "-@@ -" when using WINDLL.
    zip.c (EG)
79. Fix bug where mthd_lvl[0].suffices was not being initialized.  zip.c (EG)
80. Remove no longer used DLL progress initialization as now handled by api.c.
    zip.c (EG)
81. Remove isatty() check when help called from DLL.  Use return instead of
    EXIT() for WINDLL when returning from help.  zip.c (EG)
82. Remove blocking of use of Version Information from DLL.  zip.c (EG)
83. Using stdin or stdout when DLL now error.  zip.c (EG)
84. Only terminate parsed_args[] if using parsed args.  zip.c (EG)
85. Change REAL_PWLEN to MAX_PWLEN as this is a maximum size for the password.
    zip.c (EG)
86. Remove restriction of using comadd (entry comments) or zipedit (archive
    comment) with -U (copy mode).  zip.c (EG)
87. Remove newlines from some progress messages so can append file size to
    lines.  zip.c (EG)
88. Save action to action_string.  zip.c (EG)
89. Update entry comment code to allow keeping old comment.  Skip code when
    using stream mode -st.  Update archive comment code to allow keeping old
    comment.  zip.c (EG)
90. Enable STREAM_EF_SUPPORT and BACKUP_SUPPORT by default.  Add EF_STREAM
    macro (0x6C78, "xl").  Enable WINDOWS_LONG_PATHS if UNICODE_SUPPORT
    enabled.  (Still need to use -wl option to include long paths.)  Enable
    ENABLE_DLL_PROGRESS by default.  zip.h (EG)
91. Add add_Stream_local_extra_field() and remove_extra_field().  zipfile.c
    (EG)
92. Change = to == in zipoddities().  zipfile.c (EG)
93. Set z->ext to 0 in scanzipf_regnew().  malloc z->com + 1 for z->comment to
    allow for adding terminator to string.  Terminate z->comment if z->com > 0.
    Add code from zip.c to process entry comments if stream mode.  Add Stream
    extra field if -st or remove Stream extra field if not -st.  Copy
    attributes and comment to localz structure for putlocal().  Copy oname for
    putlocal().  zipfile.c (EG)
94. Add methodstring for storing compression method.  Move initial progress
    callback to after where needed data available.  Update progress callback
    arguments.  Set methodstring based on compression method used.  Use
    methodstring to simplify percent compressed message.  Update service
    callbacks.  zipup.c (EG)
95. Replace zwopen() with zwopen_read_long() that can handle Windows long
    paths.  zipup.c, win32/win32.c (EG)
96. In iz_file_read() set file_binary on first read of file for TRANSLATE_EOL
    == 0.  zipup.c (EG)
97. Add extent cast to isize in call to zfwrite() in ppmd_filecompress().
    zipup.c (EG)
98. Restore $(PROD)s for docs and manuals.  unix/Makefile (EG)
99. Include share.h to define _SH_DENYNO.  win32/win32.c (EG)
100. In GetFileModeW(), if GetFileAttributesW() fails, try Windows long path
     code.  In zstat_zipwin32w(), if zwstat() fails try Windows long path code.
     Remove use of ansi_path.  Include version_local() when WINDLL.  Change //
     to #if 0 to comment out test code.  win32/win32.c (EG)
101. Add Windows long path support to OpenDirScanW().  Minor changes to
     filetimew().  win32/win32zip.c (EG)
102. Add zwopen_read_long().  win32/zipup.h (EG)
103. Limit archive comment to 32766 bytes.  Pass comment to DLL user via
     acomment callback.  windll/windll.c (EG)
104. Add ZpTestComParse, ZpTestCallbackStruct, ZpTestCallback, ZpZipTest and
     ZpZip to exported entry points.  windll/windll32.def (EG)
105. Add windll32.def, api.h, and resource.h to zip32_dll project.
     windll/vc10/zip32_dll/zip32_dll.vcxproj,
     windll/vc10/zip32_dll/zip32_dll.vcxproj.filters (EG)
106. Require use of -RE to enable special function of brackets to create list
     regular expressions (for example, foo[12].txt to match foo1.txt or
     foo2.txt) on all platforms (was just MSDOS and WIN32).  zip.c [EG]
107. Add new options -tn (--no-universal-time) and -!! (--no-security) (o_exex)
     to leave out one or the other standard extra field in the resulting
     archive.  Though recently used for testing, these options may be useful to
     other users in some contexts.  Add globals no_universal_time and
     no_security.  Modify GetSD().  zip.c, globals.c, zip.h,
     win32/win32zip.c (EG)
108. Add sections on universal time and security to extended help.  zip.c (EG)
109. Add new option -EA (--extended attributes) as placeholder for a new
     mechanism to handle extended attributes.  zip.c (EG)
110. Fix bug where Windows 7 Windows Explorer displayed wrong compressed and
     uncompressed sizes for large files (file > 4 GiB) inside an archive.
     Displayed sizes way off, as if wrong bytes were being read.  Turns out
     Windows Explorer is sensitive to the order extra fields appear in central
     directory records and, in particular, the Zip64 extra field must be the
     first extra field to get accurate sizes in Windows Explorer.  (Probably
     buggy code in Windows Explorer.)  Bug caught by Nehal Mistry while
     comparing Zip archives to 7-Zip archives (which Windows Explorer is OK
     with, and turns out puts the Zip64 extra fields at the start of the
     extra field blocks).  Fix was to alter add_central_zip64_extra_field() to
     always put Zip64 extra field at front.  For consistency,
     add_local_zip64_extra_field() also modified to put Zip64 extra field at
     front of local extra field block.  zipfile.c (Nehal Mistry, EG)
111. On VMS, specifying -V (/VMS) with LZMA compression could produce corrupt
     archive with no indication of error.  The VMS-specific file-read function,
     vms_read(), used with -V (/VMS), expected requests to be multiple of the
     disk-block size (512), but did not enforce this restriction.  LZMA
     compression code violated this expectation (unlike code for BZip2,
     Deflate, or PPMd methods).  vms_read() should now work correctly with
     requests of any size.  No corresponding changes made in the old
     (obsolete) IM I/O code (vms/vms_im.c), but build should now fail if
     VMS_IM_EXTRA is defined with LZMA_SUPPORT.  vms/osdep.h, vms/vms_pk.c,
     vms/zipup.h (SMS)
112. In simple_encr_passwd() change third arg from int to size_t to be
     consistent.  zip.c (EG)
113. Remove unused variable usDataLen from remove_extra_field().  zipfile.c
     (EG)
114. In zstat_zipwin32w(), in _open_osfhandle() call replace intptr_t with
     long as VS 6 does not have intptr_t.  Add local definition for
     INVALID_FILE_ATTRIBUTES if not set as not set in VS 6.  A global
     definition is not needed and would conflict with VS 2010 includes.  These
     changes allow compiling Zip 3.1 using VS 6.  win32/win32.c,
     win32/win32zip.c (EG)
115. Restore Windows line ends in VS 6 .dsp and .dsw project files so these can
     be opened directly in VS 6.  win32/vc6/zip.dsp, win32/vc6/zip.dsw,
     win32/vc6/zipcloak.dsp, win32/vc6/zipnote.dsp, win32/vc6/zipsplit.dsp,
116. Move Windows DLL examples that have not been updated yet to /old
     directory.  Update readme.   windll/examples/old/*, ReadmeEx.txt (EG)
117. Update Readme.  windll/vc8/ReadmeV8.txt (EG)
118. Update Readme.  windll/examples/zip31vb/readVB.txt (EG)
119. Rename vc6 example folder to show not yet updated.  Should be updated
     next beta.  windll/examples/vc6_notupdated (EG)

------------------------ June 5th 2014 version 3.1d28 -------------------------
 1. Comment updates regarding DLL api.  If UNIX and ZIP_LIB_DLL, include
    unistd.h.  In ZpInit(), comment out definitions for ZipUserFunctions and
    lpZipUserFunctions as defined elsewhere, copy over callback function
    addresses.  Remove check that callbacks print and acomment are defined.
    Add note that ZpArchive is no longer used for modern applications.  Not
    sure about Visual Studio 6 yet.  Updates to simple_encr_passwd(),
    including checking for
    use of -e option without valid password callback.  #if WINDLL block DLL
    test functions ZpTestComParse(), ZpTestCallback(), ZpTestCallbackStruct(),
    and ZpZipTest().  Add comment for ZpZip().  Only require CurrentDir for
    DLL, not LIB.  Removed bzip2 as separate feature.  (Still included as
    compression method in feature list when available.)  Add ziplib and
    windll to feature list.  Always define szCommentBuf and hStr.  Remove
    comment() function for NO_ZPARCHIVE.  Define new comment() function for
    ZIPLIB.  Error if -z used but no acomment callback.  api.c (EG)
 2. Add Version and RevYMD to version structure.  Add REVYMD macro.  Change
    windll version to libdll_interface version.  Add LIB and DLL comments.
    Change ZpTestComParse() from __stdcall to EXPENTRY.  Change argument for
    comment() from unsigned int to unsigned short.  api.c, api.h,
    revision.h (EG)
 3. Remove text files.  comp_cli.txt, comp_opt.txt (EG)
 4. In zipbare(), change n and nn from zoff_t to size_t as that's sufficient.
    Change nout from zoff_t to uzoff_t.  crypt.c (SMS)
 5. Change S_IFLNK to SYMLINK_SUPPORT where it is used as a flag that symlinks
    are supported.  Set SYMLINK_SUPPORT if S_IFLNK is set and NO_SYMLINKS and
    NO_SYMLINK_SUPPORT are not set.  fileio.c, tailor.h, zip.c, zip.h,
    msdos/osdep.h, vms/cmdline.c, win32/osdep.h (EG)
 6. Add comment noting o_OPT_EQ_VALUE has more or less replaced
    o_OPTIONAL_VALUE.  Some comment editing.  fileio.c (EG)
 7. Change backup option -BP (backup path) to -BD (backup directory).  Add
    -BN to set backup name.  Add -BC to set backup control directory.  Add
    -BL to set backup log directory.  The backup name is now used for
    backup path, control file path, and log path for consistency.  Default
    -BC and -BL to -BD.  -BL without value enables logging and places log
    in backup directory (same as -lF).  Add globals backup_dir, backup_name,
    backup_control_dir, and backup_log_dir.  globals.c, zip.c, zip.h (EG)
 8. Add -ps that allows setting a password for AES encryption shorter than the
    minimums.  Add global allow_short_key.  globals.c
 9. Remove use of ENABLE_DLL_PROGRESS to disable code.  api.c, globals.c (EG)
10. Update comments.  Limit comment size.  Add print statements to show what
    is going on.  Update callbacks to match updated LIB interface.  Create
    GetVersionInfo() function to handle details of getting version structure.
    izzip_example.c. (EG)
11. Minor updates.  TODO (EG)
12. Make version_info() available outside of ZIP_DLL_LIB.  Remove zipstdout()
    for WINDLL.  Make check_unzip_version() and check_zipfile() available for
    ZIP_LIB_DLL.  Update extended help, including for new handling of -RE and
    new -tn option.  Add new don't compress suffix list to extended help.  Add
    -ps (allow short passwords) to extended help.  Update extended help for
    backup mode.  Add ZIPLIB to version information.  In version information,
    change WinZip/Gladman to IZ WinZip/Gladman.  Require WINDLL function
    interface to be same size for 64-bit and 32-bit.  Caller does not need
    to define 64-bit callbacks.  Add "test-command" as second long option
    name for -TT.  Change REAL_PWLEN to MAX_PWLEN for max password length.
    Add warning if -ps used and password shorter than minimum.  Add short
    option -pa for --prefix-new-path.  Some format changes to shorten some
    lines to 80 characters or less.  zip.c (EG)
13. Change DLL service callback code from ZIP_LIB_DLL to WINDLL to avoid
    issues using service call with LIB.  zip.c (EG)
14. Update archive comment code by removing duplicate code, putting current
    comment between lines so it is easy to see, and changing limit from
    65513 to 32767 bytes.  End archive comment on empty input, as well as
    newline or "." line.  zip.c (EG)
15. Add -ps (--allow-short-password).  Add global allow_short_key.  zip.c,
    globals.c, zip.h (EG)
16. Define UNIXLIB if UNIX and ZIPLIB.  zip.h (EG)
17. In simple_encr_passwd(), change size from int to size_t.  zipcloak.c (EG)
18. In zipoddities(), cast BEST as ush.  Formatting changes to reduce line
    lengths.  zipfile.c (EG)
19. Replace ENABLE_DLL_PROGRESS by WINDLL as DLL progress code now always
    available for WINDLL.  zipup.c (EG)
20. Replace bzip2 1.0.5 code with 1.0.6 code.  Because 1.0.6 has compatible
    license, now include with Zip source kit and include bzip2 compression
    by default.  bzip2/blocksort.c, bzip2/bz-common.xsl, bzip2/bz-fo.xsl,
    bzip2/bz-html.xsl, bzip2/bzdiff, bzip2/bzdiff.1, bzip2/bzgrep,
    bzip2/bzgrep.1, bzip2/bzip.css, bzip2/bzip2.1, bzip2/bzip2.1.preformatted,
    bzip2/bzip2.c, bzip2/bzip2.txt, bzip2/bzip2recover.c, bzip2/bzlib.c,
    bzip2/bzlib.h, bzip2/bzlib_private.h, bzip2/bzmore, bzip2/bzmore.1,
    bzip2/changes, bzip2/compress.c, bzip2/crctable.c, bzip2/decompress.c,
    bzip2/dlltest.c, bzip2/dlltest.dsp, bzip2/entities.xml, bzip2/format.pl,
    bzip2/huffman.c, bzip2/libbz2.def, bzip2/libbz2.dsp, bzip2/license,
    bzip2/makefile, bzip2/makefile-libbz2_so, bzip2/makefile.msc,
    bzip2/manual.html, bzip2/manual.pdf, bzip2/manual.ps, bzip2/manual.xml,
    bzip2/mk251.c, bzip2/randtable.c, bzip2/readme,
    bzip2/readme.compilation.problems, bzip2/readme.xml.stuff,
    bzip2/readme_bzip2.txt, bzip2/sample1.bz2, bzip2/sample1.ref,
    bzip2/sample2.bz2, bzip2/sample2.ref, bzip2/sample3.bz2,
    bzip2/sample3.ref, bzip2/spewg.c, bzip2/unzcrash.c, bzip2/words0,
    bzip2/words1, bzip2/words2, bzip2/words3, bzip2/xmlproc.sh (EG)
21. Move izzip_example.c from lib/ to / (source kit root).  izzip_example.c
    (EG)
22. Move man pages to man/man1.  Major updates to zip.1 to bring mostly in
    sync with Zip extended help and implemented features, but still some
    minor updates to make before public beta goes out.  Minor updates to
    zipcloak, zipnote, and zipsplit man pages to add man header.
    man/man1/zip.1, man/man1/zipcloak.1, man/man1/zipnote.1,
    man/man1/zipsplit.1 (EG)
23. Including LZMA, PPMd, and bzip2 are the default now, as long as needed
    code remains in the Zip source kit.  Still need separate AES WG kit to
    add AES encryption, but dropping the code in the aes_wg directory and
    rebuilding should now be sufficient to automatically include AES.
    unix/configure, unix/Makefile, win32/vc10/zip/zip.vcxproj,
    windll/vc10/zip32_dll/zip32_dll.vcxproj (EG)
24. Update comments.  Add variables L_AES_WG, L_LZMA, L_PPMD, L_BZ2, L_ZLIB,
    and L_ZIP for names of libraries - this makes it easier to keep library
    names in sync between Makefile and configure.  Add new echon()
    function from UnZip that echos without newline.  Include all compression
    and encryption methods by default.  Use NO_AES_WG, NO_LZMA, NO_PPMD,
    and NO_BZIP2 to disable these methods if defined.  Define ICONV.
    Define IZ_BZIP2_DEFAULT as default directory for bzip2, currently "bzip2".
    Define L_AES_WG='izaes', L_LZMA='izlzma', L_PPMD='izppmd', L_BZ2='bz2',
    L_ZLIB='z', and L_ZIP='izzip' - library names will include prefixed
    'lib'.  Define function unsafe_prod_dir() based on script unsafe_prod.sh
    but forces compliance with the no '..' and no '/' rules for existing
    directories also.  Echo current directory at top.  Output message if
    creating build root directory.  Use default BZIP2 directory unless
    IZ_BZIP2 is defined.  (Preference now is to use included bzip2 code
    instead of a bzip2 library external to Zip source as this allows including
    bzip2 in libizzip library and assures BZ_NO_STDIO was used to build the
    bzip2 library.)  Convert many echo lines to use echon() to include
    check result on same line, similar to UnZip.  Echo flags set as each
    check is done.  Use L_ and LIB_ variables to avoid hard-coded library
    names.  Check BINS to determine what is being built.  (See changes for
    Makefile for more on BINS.)  Break up configure into major sections and
    echo which section in (such as "Compiler features").  Update many checks
    to work with echon() format, similar to updates in UnZip.  Add code from
    UnZip to handle setting up ICONV language conversion library.  Add check
    for "lchmod is not implemented".  Check for usr/local/man/man1, then
    usr/local/man/manl (MANL), then /usr/man/manl.  Add check for
    -Wno-format-security (for modern GCC) and -Wno-format-nonliteral (for
    Clang).  Add messages for removing temp files, finalizing flags, and
    outputting flags.  Echo where flags being written.  Save flags to
    current directory as in directory they need to go in.  Save bzip2 flags
    in current directory as that's the directory they need to go in.  Add
    message when done and exiting configure.  unix/configure (EG, with much
    input from SMS changes in UnZip)
25. Update comments, including noting that shipped plaintext comments are
    in docs directory.  Now include compression and encryption methods if
    files are in Zip source tree.  Add note that dynamic library not yet
    supported, except for Windows.  Update help to note use of NO_AES_WG,
    NO_BZIP2, NO_LZMA, and NO_PPMD to exclude each of these from build.
    Add BINS variable to control what gets built - include description of
    BINS in help.  Default is still to build zip and utilities.  Define
    L_AES_WG, L_LZMA, L_PPMD, L_BZ2, L_ZLIB, and L_ZIP and set as in
    configure.  (For some reason AR_AES, AR_LZMA, AR_PPMD, and so on need
    hard-coded library names instead of using these variables.)  Put
    compiled manuals in manout.  Put blank lines after each library build
    and each program build to allow quick finding of these in Makefile
    output.  Update rules to look for manuals in man/man1 in Zip source
    tree.  Define M, MU, U, L, ML, MUL, UL and lib targets for use with
    BINS.  Define rules config_flags and config_flags_bz to avoid circular
    rules.  Include BINS in information passed to configure.  Use BINS
    instead of zips to select targets in various rules.  unix/Makefile (EG,
    with much pulled from SMS changes in UnZip)
26. Update comments.  Add various echo statements for debugging, commented
    out.  Now copy all objects to tmpdir as makes creating the archive
    easier.  Handle input archives with absolute paths.  Add echo statements
    noting key activities.  Some echo statements may be removed next beta if
    all seems working.  unix/mlz.sh (EG)
27. Change Zip 3.1 to Zip 3 to be consistent with other files.  unix/unix.c
    (EG)
28. Add unsafe_prod.sh from UnZip, though currently not used.
    unix/unsafe_prod.sh (EG)
29. Minor formatting changes.  win32/win32.c (EG)
30. Minor updates.  win32/vc10/zip/zip.vcxproj (EG)
31. Point to wrap versions instead of directly to source files to avoid issues
    when AES is not included.  win32/vc10/zipcloak/zipcloak.vcxproj (SMS)
32. Update VS 2010 VB DLL example to account for new Version structure.
    windll/examples/zip31vb/Zip31VBExample/Form1.Designer.vb,
    windll/examples/zip31vb/Zip31VBExample/Form1.resx,
    windll/examples/zip31vb/Zip31VBExample/Form1.vb,
    windll/examples/zip31vb/Zip31VBExample/Module1.vb (EG)
33. Remove commented out reference to file_binary_final.  zipup.c (EG)
34. Additional zip man page changes to add section dividers and change
    bolded text subsection titles to subsections.  Apply some guidelines
    from man manual page.  Use "|" to show mutually exclusive options.
    Add information on optional options.  Add minimum password lengths
    for AES under -Y.  Add note that autoswitchover from compression to
    store not implemented for LZMA.  Add error codes 20, 21, and 22.
    man/man1/zip.1 (EG)
35. Update Zip 3.1 VB example to account for DLL interface changes in
    version structure.  Add message when DLL can't be found.  Change how
    features are listed.  Add check when Abort is requested to see if Zip
    is actually running - if not, output message and ignore abort request.
    Add return to Get_Zip_Version to indicate if successful.  Updates in
    form design.
    windll/examples/zip31vb/zip31vbexample/form1.designer.vb,
    windll/examples/zip31vb/zip31vbexample/form1.resx,
    windll/examples/zip31vb/zip31vbexample/form1.vb,
    windll/examples/zip31vb/zip31vbexample/module1.vb (EG)

------------------------ June 29th 2014 version 3.1d29 ------------------------
 1. Remove "global file handle y" comment.  crypt.c (SMS)
 2. Add termination to comment in get_shortopt().  fileio.c (SMS)
 3. Minor update to ToDo list.  TODO (EG)
 4. Remove handler() for ZIP_DLL_LIB.  Remove check_unzip_version() and
    check_zipfile() for ZIP_DLL_LIB due to issues with some ports.  Using
    -T or -TT with DLL/LIB now error.  (Can reenable when issues worked out.)
    Remove createsymboliclink() call in 'y' case of command line parsing
    accidentally left in during symlink testing.  zip.c (EG, SMS)
 5. Change perc (used to hold percentage) from long to int in zipup().
    zipup.c (EG)
 6. Remove "function" in front of unsafe_prod_dir() function to fix backward
    compatibility issue.  (May switch back to updated unix/unsafe_prod.sh
    next beta.)  unix/configure (SMS)
 7. Change "Make the static" to "Make only the static" and remove "must
    appear in this order" in help.  Update BINS handling to allow L, M, and
    U to appear in any order.  unix/Makefile (EG)
 8. Update to handle more unsafe cases as handled by unsafe_prod_dir().
    unix/unsafe_prod.sh (SMS)
 9. Update AES export statement to note date of submission.  Update IZ_AES_WG
    Version History to note this.  aes_wg/usexport.msg,
    aes_wg/readme_aes_wg.txt (EG)
10. Update hard and Zip limits.  proginfo/ziplimit.txt (EG)
11. Add note to see Unix man page.  proginfo/timezone.txt (EG)
12. Fix bug noted in forum item:
    Info-ZIP Bugs < Zip Bugs < wrong error code 12
    (http://www.info-zip.org/phpBB3/viewtopic.php?f=6&t=441&sid=548d6761a94330712790918a60051491)
    When Freshen (-f) or Update (-u) empty archive (zcount = 0), error
    is 12 (ZE_NONE, Nothing to do).  Fix in provided patch changes this
    to 13 (ZE_NAME, empty archive).  Update extended help to add mostly
    empty section on Zip error codes, mentioning codes are detailed on
    man page.  zip.c (pstodulk, EG)
13. Change SYMLINK_SUPPORT to SYMLINKS.  For Windows, change issymlnk() to
    return 0, as isWinSymlink() should be called for Windows instead.
    For Windows, call isWinSymlink() instead of issymlnk().  Do not do
    symlinks on Windows for utilities as not all code is in scope.  Require
    UNICODE_SUPPORT for symlinks on Windows as current Windows symlink
    code requires it.  (In addition, symlink targets are UTF-8, so need
    Unicode to work with them.)  Define S_IFLNK and S_ISLNK for WIN32 if
    not defined.  Define IO_REPARSE_TAG_DEDUP and IO_REPARSE_TAG_NFS if
    not defined.  Change ifndef NO_SYMLINKS to ifdef SYMLINKS.  fileio.c,
    tailor.h, zip.c, zip.h, zipup.c, msdos/osdep.h, vms/cmdline.c,
    win32/osdep.h (EG)
14. Implement -cd (set current directory).  Define globals startup_dir
    (directory where Zip starts) and working_dir (directory given by -cd
    to make current directory).  Only define CHANGE_DIRECTORY, which enables
    -cd, if set up in tailor.h.  Add macros CHANGE_DIRECTORY (enable -cd),
    GETCWD (either getcwd or _getcwd), and CHDIR (either chdir or _chdir).
    Add includes <direct.h> (WIN32) and <unistd.h> (UNIX) to zip.c  Add
    return to startup directory code to freeup(), but disable as not needed
    on Unix and Windows (the only ports -cd implemented on) as parent
    process not impacted by change of Zip current directory.  globals.c,
    tailor.h, zip.c, zip.h (EG)
15. Implement Windows symlinks (existing option -y) and new option -yy to
    control handling of mount points.  Normally most mount points are quietly
    followed.  -yy disables following mount points (and allows storage of
    mount point, though this is not implemented in workable form yet, and
    -yy- allows following all mount points, even those associated with slow
    or offline storage.  Define global follow_mount_points.  Define
    FOLLOW_ALL, FOLLOW_NORMAL, and FOLLOW_NONE as values for
    follow_mount_points.  Add mp as mount point flag.  Add Windows reparse
    point variables attr, reparse_tag, wtarget_name, and wpath needed to look
    at information returned by WinDirObjectInfo() if NTSD_EAS defined.  In
    zipup.c call WinDirObjectInfo() to set flags l (symlink) and mp (mount
    point) and handle other types of reparse objects.  Handle mp more or
    less like l (symlink flag).  For WIN32, set high end of z->atx to Unix
    symlink permissions.  This flags this entry as a symlink.  MSDOS
    permissions still in low end.  Currently -yy only implemented for Windows.
    Move symlink (and mount point) reading earlier in zipup.c and comment out
    old code.  globals.c, zip.h, zipup.c (EG)
16. Change default for utf8_native from 0 to 1, making -UN=UTF8 (store UTF-8
    in main path and comment fields) the default.  Add -UN=LOCAL to restore
    Zip 3.0 behavior of storing UTF-8 in extra fields.  globals.c, zip.c (EG)
17. Update copyright date of license.  LICENSE (EG)
18. For Windows (_MSC_VER), change define for zlstat from lstat() to stat() as
    Windows does not have lstat().  On Windows, need to use other API calls
    to get this information.  For Windows, change zfdopen from fdopen() to
    _fdopen().  Fix bug where on Windows output to stdout caused invalid mode
    error.  Fixed by adding macro FOPW_STDOUT that is same as FOPW but
    excludes "S" (stdout does not support sequential access) and using that
    to open y when stdout.  tailor.h, zip.c, win32/osdep.h (EG)
19. Fix forum issue
    "Info-ZIP Bugs < Zip Bugs < "zip - file >> out" creates broken archive"
    (http://www.info-zip.org/phpBB3/viewtopic.php?f=6&t=422)
    where redirecting output of Zip to file opened in append created bad
    archives.  This was reported as Unix issue and initially debugged and
    fixed on Unix.  On Unix, ">>" results in all writes going to end of
    output file.  Backward seeking not allowed.  Results in second putlocal()
    putting updated local header after file data, creating duplicate local
    header and leaving unupdated first local header.  To fix, create new
    function open_for_append(FILE *y) that uses fcntl() to get append status
    of output file y.  Add open_for_append() check to seekable().  Modify
    seekable() to take parameter, y.  Change calls to fseekable(y) to
    seekable(y).  Update is_seekable() to also check open_for_append().
    On Windows, ">>" forces first write to end of output file (same as
    Unix), but does allow seeks to before that point.  Problem is there is
    no fcntl() on Windows to check open mode.  Instead, open_for_append()
    checks FILE structure directly for Windows.  However, ">>" on Windows
    does not show as append mode.  So streaming not needed, but need to seek
    around existing contents of output file and update offsets.  On Windows
    when streaming to stdout, just when output file opened, add zftello()
    check to see if pointer not at start of file (offset 0).  If existing
    content, update byte counts and offsets to account for existing content,
    by adding size of data to bytes_this_split, current_local_offset, and
    tempzn.  Add <fcntl.h> to zipup.c for open_for_append().  Check
    open_for_append(y) and set use_descriptors to force stream mode if output
    append only.  (This currently works only for Unix.  Windows has different
    issue described above and open_for_append() returns 0 for ">>".  Other
    ports not implemented and open_for_append() always returns 0.)  trees.c,
    zip.c, zipup.c (sanvila, SMS, EG)
20. Add support for peta (10E15) as "p" suffix in ReadNumString() and
    WriteNumString().  util.c (EG)
21. Add note to extended help that -@ and -@@ can be used with -d.  Update
    extended help for -UN, detailing new default and -UN=LOCAL.  Add
    extended help section on symlinks and mount points.  Add use of ">" and
    ">>" to extended help.  Create new section "Current directory, temp
    files:", add -cd, and move -b into it.  Add section "Symlinks and Mount
    Points" to extended help for -y and -yy.  zip.c (EG)
22. Add WIN32 SYMLINKS to -v list.  Add WINDOWS_LONG_PATHS to -v list.
    zip.c (EG)
23. Comment out unused quote_quotes().  zip.c (EG)
24. Add short option -et for --etwodd.  zip.c (EG)
25. Update backup option checks comments.  Define new error ZE_BACKUP (23) for
    errors with backup control file.  Move #endif for backup after backup log
    code.  zip.c, ziperr.h (EG)
26. Generate error if stdin used with --etwodd.  zip.c (EG)
27. Add macros for General Purpose Bit Flag bits in form GPBF_*.  Add macros
    for Internal File Attributes bits in form IATTR_*.  zip.h (EG)
28. Add note to keep suffix exclude list up to date with macros.  zip.h (EG)
29. Add GetWinVersion() to get version of Windows and parse into Major,
    Minor, and Build versions.  zip.h, win32/win32.c (EG)
30. Add WinDirObjectInfo() to nt.c to get reparse point information about
    Windows directory object, including symlink and mount point information.
    Add isWinSymlink() and Windows readlink(), which use WinDirObjectInfo().
    Thanks to Kai Uwe for providing the original code, which was used with
    minimal changes.  zip.h, nt.c  (Kai Uwe, EG)
31. Add note that file_binary_final may come back if full file checking for
    binary is implemented.  Need to do performance testing to see the impact
    of checking every character.  zipup.c (EG)
32. Add note regarding binary checking first buffer(s) versus checking entire
    file.  zipup.c (EG)
33. Fix bug from forum:
    Info-ZIP Bugs < Zip Bugs < zip -y fails to store symlinks when writing to a pipe
    (http://www.info-zip.org/phpBB3/viewtopic.php?f=6&t=434&sid=3c50b02ffbfd87f18fabea997a71aa34)
    Skip check if using STORE on device for symlink (or mount point) as I
    believe point of this test is to prevent zip signatures in stored data of
    unknown length.  Symlink targets are pulled from OS and are known length
    and unlikely to include zip signatures.  zipup.c (EG)
34. Set z->ver to 63 if LZMA or PPMD used.  AppNote specifies this, even
    though Zip only supports a fraction of 6.3 features.  zipup.c (EG)
35. Remove old note regarding ZOS use of conversions.  zipup.c (EG)
36. Update copyright date.  aes_wg/license.txt (EG)
37. Update Zip man page to include version 3.1 in heading (so know which
    version page goes to), to update description of -cd option, to note that
    -d can use -@ and -@@, and to update -UN to note change in default and
    new -UN=LOCAL for reverting back to Zip 3.0 default (store UTF-8 in
    extra fields and local character set in name and comment fields).
    man/man1/zip.1 (EG)
38. Update man pages to include version 3.1 in header.  man/man1/zipcloak.1,
    man/man1/zipnote.1, man/man1/zipsplit.1 (EG)
39. If S_ISLNK defined, define SYMLINKS.  unix/osdep.h (EG)
40. Move comment regarding whole and wildtail above wild_recursew where it
    applies.  For Windows, in procname_win32w(), add variable do_not_follow
    that tells Zip not to follow a symlink or mount point.  Use
    WinDirObjectInfo() to get information about name to determine how to
    handle it.  win32/win32zip.c (EG)
41. Update copyright.  win32/zipup.h
42. Add back file that got lost.  vms/decc_init.c (SMS)

----------------------- August 6th 2014 version 3.1d30 ------------------------
 1. Change EXPENTRY to ZIPEXPENTRY, where ZIPEXPENTRY is defined as EXPENTRY
    for DLL, but empty for LIB.  This allows DLL entry points to be used by
    both LIB and DLL.  Also callbacks.  Update test entry points, such as
    ZpTestComParse(), though these are not enabled for other than WINDLL.
    They should work for other ports now, though.  api.c, api.h (EG)
 2. Change API interface to no longer pass strings back as return values, as
    Visual Studio 6 Visual Basic (vb6) has no way to support it.  This impacts
    the password(), ecomment() and acomment() callbacks.  Update all examples
    to use new interface.  In these cases the Zip functions allocate storage
    and pass that to the caller, which they fill in.  api.c, api.h (EG)
 3. Modify simple_encr_password() to use new callback interface.  api.c (EG)
 4. Change comment() to acomment() for updating the archive comment.  Add
    ecomment() for updating entry comments.  If LIB or DLL, call ecomment()
    to get entry comment.  api.c, api.h, zip.c (EG)
 5. Callbacks all tend to return long now.  The API is standardizing on
    callbacks, such as ZpError(), returning a 32-bit value.  api.c, api.h (EG)
 6. Change use of printf() to zprintf() and fprintf() to zfprintf().  The
    Zip versions pass on arguments to printf() and fprintf(), except when
    used with LIB or DLL, where they feed the print() callback.  This allows
    clean redirection of output.  Overloading printf() and fprintf() is no
    longer done.  So the DLL works as before, but without overloading (and the
    need to undef print and fprintf when these are needed), and the LIB now
    can use the print callback to get Zip output.  Change perror() to
    zperror().  api.c, api.h, deflate.c, fileio.c, trees.c, ttyio.c, util.c,
    zip.c, zip.h, zipfile.c, zipup.c, nt.c, win32/win32.c, win32/win32zip.c,
    win32/win32zip.c, unix/unix.c (EG)
 7. Define global MAX_ZIP_ARG_SIZE to replace use of local MAX_ARG_SIZE.  This
    allows other source files to use it to create compatible storage.  api.c
    (EG)
 8. Change DW_MAJOR, DW_MINOR, and DW_PATCHLEVEL to LD_MAJOR, LD_MINOR, and
    LD_PATCHLEVEL.  These are now used to set the LIB/DLL compatible version.
    api.c, revision.h (EG)
 9. For version feature list, add "debug_trace" if DEBUG is set (a Zip macro).
    Set "_debug" when compiled with debugging (such as MS debug configuration).
    This allows the feature list to be used to distinguish between these cases.
    Update -v version option to also display DEBUG and _DEBUG.  api.c, zip.c
    (EG)
10. Add "symlinks" and "zipdll" to API feature list.  api.c (EG)
11. Move MAX_COM_LEN to zip.h.  api.c (EG)
12. Add ZpStringCopy() entry point to API.  This is essentially a call to
    strncpy().  This is used by Visual Studio 2010 Visual Basic (vb10) example
    as part of the process to return a string to Zip from a callback.  This
    new entry point allows all example programs to use the same API interface.
    api.c (EG)
13. In commandline_to_argv(), quote arguments with whitespace, but not others.
    Was quoting all arguments, but then options were not recognized.  api.c
    (EG)
14. Add argv_to_commandline() for completeness.  This tends to be implemented
    in example code that converts arvg to the string needed by ZpZip().  Those
    examples could copy this version.  api.c (EG)
15. Update API comments, documenting changes in API.  Emphasize that ZpZip()
    is the only recommended interface to Zip now.  api.h, api.c (EG)
16. Comment out unneeded Windows global calls (such as GlobalAlloc()) that are
    no longer used.  If _LIB defined, define ZIPLIB.  If _USRDLL defined,
    define WINDLL.  This facilitates use with Visual Studio that automatically
    defines _LIB and _USRDLL.  Add max sizes to comments of _ZpVer struct.
    api.h (EG)
17. Comment out ZPprintf, ZPfprintf, and ZPperror defines and external
    references.  These are replaced by zprintf() and zfprintf().  Add
    zprintf() and zfprintf().  Include <stdlib.h> and <stdarg.h>.  Add
    replacement for zperror().  api.h, fileio.c (EG)
18. Only undef IZ_CRYPT_ANY if defined.  crypt.h (EG)
19. Change local defines isdir and isapldbl to globals IS_FLAGS_DIR and
    IS_FLAGS_APLDBL.  fileio.c, zip.h (AD)
20. Define ERRBUF_SIZE as size of errbuf[] error message buffer.  Change
    errbuf[FNMAX+4081] to errbuf[ERRBUF_SIZE + 1].  Remove size in extern
    declaration.  globals.c, zip.h (EG)
21. Add quick_version().  Add v_option global.  Move processing
    of version info to after option processing.  Display quick version when
    -v and -q are both used (ignoring any other options that may be on the
    command line).  globals.c, zip.c (EG)
22. Add warning when first Windows long path encountered and at end.  Add
    global archive_has_long_path.  Allow negation of -wl.  globals.c, zip.c,
    zip.h, zipup.c (EG)
23. Add options -Cl and -Cu to lower and upper case of added/updated names.
    Add options -CL and -CU to lower and upper case all names in output
    archive.  Add globals case_lower and case_upper.  Check that -Cl and
    -Cu are not used together.  Check that -CL and -CU are not used together.
    globals.c, zip.c, zip.h, zipfile.c (EG)
24. Modify Unix LIB example to support updated API.  Update to call ZpZip()
    instead of ZpInit() and zipmain().  Update example to allow user to enter
    password and comments.  Update example to receive Zip output via print()
    callback.  Add argv_to_commandline() to convert args to string for ZpZip().
    izzip_example.c (EG)
25. Add LIB/DLL overview readme.  readlibdll.txt (EG)
26. Add defines for Z_LONGLONG and UZ_LONGLONG for use by API.  tailor.h,
    api.h, win32/osdep.h (EG)
27. Change macro constants used by file_type from UNKNOWN, BINARY, and ASCII
    to FT_UNKNOWN (-1), FT_BINARY (0), FT_ASCII_TXT (1), FT_EBCDIC_TXT (2).
    Add note to handle UTF-8 and EBCDIC text.  trees.c, zip.c, zip.h,
    zipfile.c, zipup.c (AD)
28. Add strmatch() to provide more flexibility in string matching and a common
    function to use across ports.  Provides case insensitive and partial string
    matching.  util.c, zip.h (EG)
29. Do not look for libbz2 if Windows version before Vista (WINVER >= 0x0600)
    as not used.  zbz2err.c (EG)
30. Some indentation changes.  zip.c (AD)
31. In addition to DLL, now also call error() callback for LIB.  zip.c (EG)
32. Add note to -hh regarding -i, -x and -R being filters.  Add extended help
    for -Cl, -CL, -Cu, -CU, and update for -pp and -pa.  zip.c (EG)
33. Update EBCDIC extended help to include CMS and z/VM.  zip.c (EG)
34. Make case on lead character of version item descriptions consistent.  Minor
    text updates.  Add ZIPDLL to list.  zip.c (EG)
35. Limit returned value from get_option() to MAX_OPTION_VALUE_SIZE.  zip.c
    (EG)
36. Using -F or -FF with DLL or LIB now error.  Could be added to API later.
    zip.c (EG)
37. Using -s with DLL or LIB now error.  Could be added to API later.  In
    particular, -s is probably DLL safe, but -sp needs the split callback.
    zip.c (EG)
38. Enable -Y for all encryption methods, including Traditional, even if
    only one method.  Add "not supported in this build" error for AES if
    not enabled.  zip.c (EG)
39. Replace multiple "valid compression methods" strings with string built from
    component methods.  Include unknown method in error.  zip.c (EG)
40. If encrypting, display message saying the type of encryption being used.
    zip.c (EG)
41. Remove restriction that -X- can't be used with -Y (-X- ignored).  Not sure
    why this is here, except that AES WG encryption requires an extra field.
    That extra field is not impacted by -X.  -X- copies old extra fields, so
    that should not impact adding or rewriting the AES extra field.  Testing
    does not reveal any issues.  zip.c (EG)
42. Add Trace() statement for tempzip.  Add Trace() for zfiles.  Add Trace()
    for z->zname.  Indentation changes.  Change z->oname Trace() to use
    z->zname.  (oname includes OEM conversions, zname doesn't.)  Add Trace()
    for "ignore file" case (fexpel(f)).  Add diag() for "Nothing left -
    update/freshen" case.  Add diag() for "Nothing left - error" and "Nothing
    left - zipfile" cases.  Add Trace() for "grow zipfile" case.
    zip.c (AD)
43. Add action == DELETE to change return code for trying to delete from empty
    archive from "Nothing to do" (ZE_NONE) to "Empty archive" (ZE_NAME).
    zip.c (EG, pstodulk (see "Info-ZIP Bugs < Zip Bugs < wrong error code 12"
    forum thread))
44. Add additional displayed line when requesting archive comment.  zip.c (EG)
45. Remove __EBCDIC 2 define.  zip.h (AD)
46. Break out Windows enabling of symlinks, requiring NTSD_EAS, no UTIL,
    UNICODE_SUPPORT, and at least VISTA.  If Windows and SYMLINKS, define
    WINDOWS_SYMLINKS.  zip.h (EG)
47. Define MAX_COM_LEN as 32766L.  Define MAX_PASSWORD_LEN as 1024.  Define
    MAX_ZIP_ARG_SIZE as 4096.  Define MAX_EXTRA_FIELD_BLOCK_SIZE as 65535.
    Define MAX_OPTION_VALUE_SIZE as ERRBUF_SIZE - 1024.  zip.h (EG)
48. Update declaration of abbrevmatch() to be more descriptive.
49. Move define for SHOW_PARSED_COMMAND outside of long option support section.
    zip.h (EG)
50. If data descriptor, skip local vs. central CRC check as don't have local
    CRC yet.  zipfile.c (EG)
51. If no extension given on archive name and .zip file not found, look for
    .zipx file.  Support aspects of .zipx archive we can understand, which is
    most except for a few compression methods (like XZ (which is on the list
    to add), Jpeg, and WavPack).  By doing this, we are implicitly saying we
    in part support the WinZip .zipx format, though we default to .zip for
    all output archives.  zipfile.c (EG)
52. In putlocal() and putcentral(), update iname and add uname as variables
    holding z->iname and z->uname.  iname and uname (if not NULL) will be
    used to write the actual headers.  This allows iname and uname to be
    modified by the path prefix (-pp and -pa) and change case (-Cl, -Cu, -CL,
    and -CU) options.  Add Unicode support to -pp and -pa, which previously
    only changed iname and ignored Unicode (uname).  Implement the change
    output case options.  iname now gets its own memory, so it can be always
    freed after the header is written.  zipfile.c (EG)
53. If stream support, if updating entry comments as LIB or DLL, call
    ecomment().  zipfile.c (EG)
54. In zipcopy() set localz->mark = 0 as copied entries are not selected.
    This supports selection in putlocal and putcentral of which entries are
    affected by the prefix and change case options.  zipfile.c (EG)
55. Use file_binary for initial binary detection and file_binary_final for
    final result.  This was being done inconsistently.  Update
    iz_file_read() to handle most all binary decisions.  iz_file_read_bt()
    now only used to influence file_binary after first buffer read.  Replace
    iz_file_read_bt() with iz_file_read() as needed.  iz_file_read_bt() should
    only be used before the write buffer is flushed (and decision can still be
    changed).  zipup.c (EG)
56. Use WINDOWS_SYMLINKS for enabling Windows symlinks instead of NTSD_EAS.
    This accounts for not using Windows symlinks in utilities as well as
    platforms before Vista not supporting symlinks.  zipup.c (EG)
57. When copying old extra fields, make sure result is under new limit
    MAX_EXTRA_FIELD_BLOCK_SIZE, which is currently half of available extra
    block space.  zipup.c (EG)
58. If existing file is encrypted and has a data descriptor, need to keep
    data descriptor so set use_descriptors = 1.  If using traditional
    encryption with data descriptors, don't allow deflate to change method.
    zipup.c (EG)
59. If not allow_short_key (-ps), force use of longer password lengths with
    AES.  zipup.c, api.c (EG)
60. Include file name in "has binary" warnings.  This is useful if only
    warnings and errors are going to the log file.  zipup.c (EG)
61. In iz_file_read(), fix bug by checking for EOF and 0 bytes read after
    zread().  (Forum issue.  Look up thread.)  zipup.c (EG)
62. In iz_file_read(), check for binary only until binary found.  This should
    be efficient as very large text files are rare, and a binary file should
    set the flag quickly.  Comment out later binary check as already done.
    Add note that if initial decision of text file wrong, could seek back,
    but with splits (in particular -sp) this may not be practical.  Move
    updating of bytes_read_this_entry to after EOF check.  zipup.c (EG)
63. Text updates to iz_file_read_bt().  Remove unneeded (char *) casts.
    zipup.c (EG)
64. In bzfilecompress, use file_binary_final for setting att.  Use
    file_binary_final in LZMA_Encode().  In ppmd_filecompress() add
    (unsigned char) cast to arg in ppmd_write_byte().  Add (char *) cast
    to f_ibuf in iz_file_read() call.  Use iz_file_read().  Use
    file_binary_final.  zipup.c (EG)
65. Update project file from Visual Studio 5 to Visual Studio 6.  (May revert
    it later, but we are not really supporting VS 5 now.)  bzip2/libbz2.dsp
    (EG)
66. Update Zip man page.  Set update date to August 4th.  Change references
    to unzip (1L) to unzip (1) (per user request).  Same with SEE ALSO list
    (bzip2, gzip, and shar).  Wording updates.  Add subsection on Compression
    Methods.  Add options -Cl, -Cu, -CL, and -CU.  Add note that -i, -x, and
    -R are filters and either the given directory trees or the current tree
    (for -R) will be fully scanned before the filters are applied.  Reflect
    change from --prefix-new-path to --prefix-add-path.  Add -vq
    (--quick-version) option.  In -wl description, change Windows path limit
    from 256 to 260.  Add note that Zip issues warnings when Windows long
    paths are encountered.  Add note on Windows symlinks under -y.  Add -yy
    (--mount-points) and what is implemented and what is not yet.  Add
    section on LIBRARIES.  Clarify some error codes.  Add code 23 (Backup
    Error).  Add some examples and the error codes they would return.
    (Suggested by forum.)  man/man1/zip.1 (EG)
67. Adjust indentation of some comments.  Add "X-Debian-version: 2.32-1" note.
    unix/configure (EG, from forum)
68. Add -DICONV=1 to CFLAGS_TST in multiple places.  Change "AR='ar -cq -X64'"
    to "AR='ar -X64 -cq'" in multiple places.  unix/configure (AD)
69. Help updates.  For LIB, create object files zip_l.o and fileio_l.o.
    (fileio.c now has lib specific code.)  Update targets.  Change target
    zip_.o to zip_l.o.  Add target fileio_l.o.  unix/Makefile (EG)
70. Put Windows symlinks inside ifdef WINDOWS_SYMLINKS block.  This makes it
    invisible to Windows XP, who can't handle it.  Wording updates.  win32/nt.c
    (EG)
71. Change GetFileAttributes() to GetFileAttributesA() in has_win32_wide() as
    in some Visual Studio 2010 configurations (specifically when creating a
    DLL) it wants to force use of Unicode and GetFileAttributes() links to
    wide version GetFileAttributesW() instead, messing up has_win32_wide().
    Use WINDOWS_SYMLINKS to block Windows symlinks code.  win32/win32zip.c
    (EG)
72. Update vc10 project.  win32/vc10/zip.vcxproj, win32/vc10/zip.vcxproj.user,
    win32/vc10/zipcloak.vcxproj, win32/vc10/zipcloak.vcxproj.user,
    win32/vc10/zipnote.vcxproj, win32/vc10/zipnote.vcxproj.user,
    win32/vc10/zipsplit.vcxproj, win32/vc10/zipsplit.vcxproj.user (EG)
73. Update vc6 project to include all compression methods by default.  Add
    Readvc6.txt readme.  win32/vc6/readvc6.txt, win32/vc6/zip.dsp (EG)
74. Update vc6aes project.  This project adds AES to vc6.  Add Readvc6aes.txt
    readme.  win32/vc6aes/zip.dsp, win32/vc6aes/zip.dsw,
    win32/vc6aes/zipcloak.dsp, win32/vc6aes/zipnote.dsp,
    win32/vc6aes/zipsplit.dsp (EG)
75. Add to WINDLL contents.txt (renamed old readme), readme.txt (updated
    readme), and WhatsNew.txt (describes changes in API).  windll/contents.txt,
    windll/readme.txt, windll/WhatsNew.txt (EG)
76. Comment out some unneeded parts.  These files may be useful when WiZ is
    updated.  windll/windll.c, windll/windll.h (EG)
77. Add comment.  This file may be useful when WiZ is updated.
    windll/windll.txt (EG)
78. Add ZpStringCopy to list.  windll/windll32.def (EG)
79. Update readme for Windows WINDLL examples.  windll/examples/readmeex.txt
    (EG)
80. Add readme explaning use.  windll/examples/readuse.txt (EG)
81. Make copy of old csharp project.  Not updated yet.
    windll/examples/csharp10/* (EG)
82. Update readme in old directory.  windll/examples/old/readold.txt (EG)
83. Add readme to vb10 example.  Update vb10 example.
    windll/examples/vb10/readvb.txt, windll/examples/vb10/zip31vbexample.sln,
    windll/examples/vb10/zip32_dll.dll here.txt,
    windll/examples/vb10/zip31vbexample/app.config,
    windll/examples/vb10/zip31vbexample/form1.designer.vb,
    windll/examples/vb10/zip31vbexample/form1.resx,
    windll/examples/vb10/zip31vbexample/form1.vb,
    windll/examples/vb10/zip31vbexample/module1.vb,
    windll/examples/vb10/zip31vbexample/zip31vbexample.vbproj,
    windll/examples/vb10/zip31vbexample/zip31vbexample.vbproj.user,
    windll/examples/vb10/zip31vbexample/my project/application.designer.vb,
    windll/examples/vb10/zip31vbexample/my project/application.myapp,
    windll/examples/vb10/zip31vbexample/my project/assemblyinfo.vb,
    windll/examples/vb10/zip31vbexample/my project/resources.designer.vb,
    windll/examples/vb10/zip31vbexample/my project/resources.resx,
    windll/examples/vb10/zip31vbexample/my project/settings.designer.vb,
    windll/examples/vb10/zip31vbexample/my project/settings.settings (EG)
84. Update vb6 example.  windll/examples/vb6/mssccprj.scc,
    windll/examples/vb6/readvb6.txt, windll/examples/vb6/vbzip.vbp,
    windll/examples/vb6/vbzip.vbw, windll/examples/vb6/vbzipbas.bas,
    windll/examples/vb6/vbzipfrm.frm, windll/examples/vb6/vbzipfrm.frx,
    windll/examples/vb6/zip32_dll.ll here.txt (EG)
85. Update vc10 examples.
    windll/examples/vc10/c_dll_ex.c, windll/examples/vc10/c_dll_ex.h,
    windll/examples/vc10/c_lib_ex.c, windll/examples/vc10/c_lib_ex.h,
    windll/examples/vc10/read10ex.txt,
    windll/examples/vc10/c_dll_ex/c_dll_ex.dsp,
    windll/examples/vc10/c_dll_ex/c_dll_ex.dsw,
    windll/examples/vc10/c_dll_ex/c_dll_ex.sln,
    windll/examples/vc10/c_dll_ex/c_dll_ex.vcxproj,
    windll/examples/vc10/c_dll_ex/c_dll_ex.vcxproj.filters,
    windll/examples/vc10/c_dll_ex/c_dll_ex.vcxproj.user,
    windll/examples/vc10/c_dll_ex/zip32_dll.lib here.txt,
    windll/examples/vc10/c_lib_ex/c_lib_ex.dsp,
    windll/examples/vc10/c_lib_ex/c_lib_ex.dsw,
    windll/examples/vc10/c_lib_ex/c_lib_ex.sln,
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj,
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj.filters,
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj.user,
    windll/examples/vc10/c_lib_ex/zip32_lib.lib & libbz2.lib here.txt,
    windll/examples/vc10/debug/zip32_dll.dll here.txt,
    windll/examples/vc10/release/zip32_dll.dll here.txt (EG)
86. Update vc6 examples.  windll/examples/vc6/c_dll_ex.c
    windll/examples/vc6/c_dll_ex.h, windll/examples/vc6/c_lib_ex.c,
    windll/examples/vc6/c_lib_ex.h, windll/examples/vc6/readvc6ex.txt,
    windll/examples/vc6/c_dll_ex/c_dll_ex.dsp,
    windll/examples/vc6/c_dll_ex/c_dll_ex.dsw,
    windll/examples/vc6/c_dll_ex/zip32_dll.lib here.txt,
    windll/examples/vc6/c_lib_ex/c_lib_ex.dsp,
    windll/examples/vc6/c_lib_ex/c_lib_ex.dsp,
    windll/examples/vc6/c_dll_ex/c_dll_ex.dsw,
    windll/examples/vc6/c_dll_ex/zip32_lib.lib & zip32_libd.lib here.txt,
    windll/examples/vc6/debug/zip32_dll.dll here.txt,
    windll/examples/vc6/release/zip32_dll.dll here.txt (EG)
87. Update vc10 LIB and DLL projects.  windll/vc10/readme10.txt,
    windll/vc10/zip32_dll.sln, windll/vc10/libbz2/libbz2.vcxproj.user,
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.user,
    windll/vc10/zip32_dll/zip32_lib.vcxproj.filters,
    windll/vc10/zip32_lib/zip32_lib.vcxproj,
    windll/vc10/zip32_lib/zip32_lib.vcxproj.filters,
    windll/vc10/zip32_lib/zip32_lib.vcxproj.user (EG)
88. Update vc6 LIB and DLL projects.  windll/vc6/readmevc6.txt,
    windll/vc6/dll/zip32_dll.dsp, windll/vc6/lib/zip32_lib.dsp,
    windll/vc6/lib/zip32_lib.dsw (EG)
89. Update vc6 LIB and DLL AES projects.  windll/vc6aes/readmevc6aes.txt,
    windll/vc6aes/dll/zip32_dll.dsp, windll/vc6aes/dll/zip32_dll.dsw,
    windll/vc6aes/lib/zip32_lib.dsp, windll/vc6aes/lib/zip32_lib.dsw (EG)
90. Update vc8 readme.  windll/vc8/readmev8.txt (EG)
91. Updates to z/OS to bring in line with Zip 2.32 changes.  Files cmsmvs.h,
    mvs.c, and mvs.h are updates.  Rest of files added.  zos/bbzip.c,
    zos/build.jcl, zos/cmsmvs.c, zos/cmsmvs.h, zos/mvs.c, zos/mvs.h,
    zos/xmit.jcl, zos/zipsrc.jcl (AD)
92. Support single-source z/OS MVS builds.  zos/bbzip.c, zos/build.jcl (AD)
93. Revamp z/OS MVS file I/O using stream I/O routines.  fileio.c, trees.c,
    zip.c, zip.h, zipfile.c, zipup.c, zos/cmsmvs.c, zos/cmsmvs.h, zos/mvs.c,
    zos/mvs.h (AD)
94. Add z/OS MVS executable and source ship builds.  zos/xmit.jcl,
    zos/zipsrc.jcl (AD)
95. Correct ar -X option placement.  unix/configure (AD)
96. IBM XL C builds need ICONV=1 to support utf-8 via iconv().  unix/configure
    (AD)
97. Comment out old ZIPLIB defines as not needed anymore.  unix/osdep.h (EG)
98. If using descriptors, do not allow bzip2 and PPMd to revert to STORE (as
    can't rewrite method).  If LZMA eventually can revert to store, this would
    need to be fixed there also.  zipup.c (EG)

---------------------- September 6th 2014 version 3.1d31 ----------------------
 1. Add support for iconv to convert to and from UTF-8, wchar_t, and local
    character set.  Update Unicode to use these macros:
    UNICODE_SUPPORT   - Some form of Unicode support is enabled.
    UNICODE_WCHAR     - wchar_t support where wide is Unicode.
    HAVE_WCHAR        - Have wchar_t wide support, but wide encoding not known.
    HAVE_ICONV        - Sufficient iconv support is available.
    UNICODE_FILE_SCAN - Port is capable of doing file scan in Unicode.
    Also defined:
    UNICODE_ICONV     - Not currently used, as support automatic if HAVE_ICONV.
    Implementation is crude, but seems workable.  fileio.c, tailor.h (EG)
 2. When UNICODE_SUPPORT and WIN32, use UNICODE_SUPPORT_WIN32.  Change some
    UNICODE_SUPPORT and WIN32 code in main sections to UNICODE_SUPPORT_WIN32
    as applicable.  fileio.c, zip.c (EG)
 3. Add function string_dup().  fileio.c
 4. Add utf8_to_wchar_string().  For WIN32, call WIN32 version, now named
    utf8_to_wchar_string_windows().  If not WIN32 but wchar_t is 4 bytes, use
    Zip internal wide character functions.  If not 4 bytes but HAVE_ICONV,
    use iconv.  Otherwise generate ZE_COMP error as no way to do conversion.
    Add wchar_to_utf8_string() with similar implementation.  fileio.c (EG)
 5. Minor updates to wchar_to_wide_string(), including adding zwchar casts.
    Add wide_to_wchar_string(), but no surrogate support.  fileio.c (EG)
 6. Update is_ascii_stringw() and is_ascii_string().  Update
    local_to_utf8_string().  Add zwchar_string_len().  Update
    local_to_escape_string(), wchar_to_local_string().  Update
    wide_to_local_string(), including adding iconv support using UCS-4LE as
    the from character set.  Update wide_to_escape_string().  Update
    utf8_to_local_string(), using Zip functions if UNICODE_WCHAR, iconv if
    HAVE_ICONV, and generating error if no support.  Update
    local_to_wide_string(), using wide functions if UNICODE_WCHAR, iconv if
    HAVE_ICONV with UCS-4LE as to code, and generating error if no support.
    Minor updates to other character set conversion functions.  fileio.c,
    zip.h (EG)
 7. Add argument file support (@argfile) to get_option().  Update long option
    support comment.  Add comments to optchar symbolic values.  Make
    allow_arg_files global.  Add dump_args() to allow debugging arg file
    support.  Add insert_args_from_file() to handle reading arg files
    and inserting args into argv[] arrays as well as arg file recursion.  Add
    arg file support, setting max depth to 4 levels.  Default arg file .zag
    set in ARGFILE_EXTENSION.  Create option -AF to turn on argument files
    processing and -AF- to disable, allowing files like @argfile to be just
    another file.  Modify get_option() to restore arg file capability, except
    recursion now handled by insert_args_from_file() rather than processed by
    get_option() and related functions through recursion.  Result is now all
    arg file args are retrieved and inserted into main args[] before processing
    rather than each arg file being processed separately.  This means an option
    can be in a different file than the value that goes with it.
    fileio.c, zip.h, globals.c, zip.c (EG)
 8. Update locale code.  Add globals localename and charsetname set by locale
    code.  localename is what is returned by setlocale(), while charsetname is
    the name of the local character set in iconv compatible form.  Add new
    option -UT to run Unicode tests on the port.  Add function Unicode_Tests()
    to perform the Unicode tests.  Locale detection now done regardless of
    setting of UNICODE_SUPPORT.  No longer try setting UTF-8 locale if not
    already native.  (Tim K. advised this.)  Rework locale code to support
    new locale_debug variable that can turn on and off locale debugging easily.
    Add section for WIN32 locale.  zip.c, globals.c, zip.h (EG)
 9. Update path case conversion.  Add global case_upper_lower with values
    CASE_PRESERVE, CASE_UPPER, and CASE_LOWER.  Define USE_WCHAR_CASE_CONV and
    USE_PORT_CASE_CONV to control how path case conversions are handled.  Add
    ENABLE_PATH_CASE_CONV that is enabled if there's a way to do case
    conversions.  Options -Cl and -Cu are only available if this is set.
    Add ustring_upper_lower() and astring_upper_lower() to perform Unicode
    and 7-bit ASCII case conversions.  If USE_PORT_CASE_CONV is set, then
    these are disabled and the port must supply them.  Update case conversion
    code in putlocal() and putcentral().  globals.c, zip.c, zip.h, zipfile.c
    (EG)
10. Add -UN option value ShowUTF8, allowing the passing through of UTF-8 to
    the console, even if not native.  (If UTF-8 is native, it already gets
    displayed; this is for non-native display.)  Add global unicode_show.
    Add WIN32 functions write_console() and write_consolew(), which write
    directly to the console if tty.  If unicode_show and z->uname or f->uname,
    output uname to console.  globals.c, zip.h, zip.c, zipfile.c (EG)
11. Update Unicode comment.  Add checks for NO_SETLOCALE, NO_UNICODE_WCHAR,
    and similar.  tailor.h (EG)
12. Use UNICODE_SUPPORT_WIN32.  Minor formatting updates.  util.c (EG)
13. Update extended help to include argument files.  Add missing comma.
    Add reference to -UN=ShowUTF8.  Add -UN=ShowUTF8 to extended help.
    Remove options -CL and -CU.  Remove checks for -CL and -CU.
    zip.c (EG)
14. Add UNICODE_WCHAR, UNICODE_ICONV, and UNICODE_FILE_SCAN to version info.
    zip.c (EG)
15. Enable -s split support for LIB/DLL, as no additional interfacing needed.
    Disable -sp split pause support for LIB/DLL as that requires not yet
    implemented split callback.  It's likely release candidate will go out
    this way.  zip.c (EG)
16. Add utf8_path to flist and zlist structures.  This gets set if:
    - An existing entry has a uname.
    - The locale is UTF-8, so assume paths coming in are Unicode.
    - The entry has a namew (WIN32), which should have come from a wide scan.
    If utf8_path is set, then uname is primary path that others are
    derived from.  Otherwise, iname is primary and uname derived from it.
    zip.c, zip.h (EG)
17. Put Escaped Unicode on a new line.  zip.c (EG)
18. Add BUILD_BUG_ON() macro that fails to compile if condition met, such as
    sizeof() not being some size.  zip.h (EG)
19. Add MAX_PATH_SIZE and set to 8192.  Used to set upper storage limits, this
    needs to be integrated into other sizing checks.  zip.h (EG)
20. Add checks for UTF_16 and UTF_32, though not used.  zip.h (EG)
21. Change perror() to zperror().  Change iname to uname in ZIPERR().
    zipfile.c (EG)
22. Change isize from zoff_t to uzoff_t.  Change s from zoff_t to uzoff_t.
    Change isize_prev from zoff_t to uzoff_t.  Put (zoff_t) casts on check
    of isize to isize_prev for overflow detection.  zipup.c (EG)
23. Add local to iz_file_read_bt().  zipup.c (AD).
24. Change "extra block" to "extra field" for consistency.
    proginfo/extrafld.txt (EG)
25. Update Unicode checks.  Add CFLAGS_TST where needed.  Update locale, iconv
    and native UTF-8 checks.  unix/configure (EG)
26. Change target generic_man to generic_altdocs.  Update help.  Change
    extension for altdocs (previously man) from .1 to .txtr (text roff).
    Change target manuals to altdocs.  Change zipsman to zipsaltdocs.  Remove
    manuals from install target.  unix/Makefile (EG, SMS)
27. For Windows, set defaults to UNICODE_WCHAR, HAVE_SETLOCALE, NO_NL_LANGINFO.
    win32/osdep.h (EG)
28. Move local_to_wchar_string() Windows version from win32zip.c to win32.c.
    win32/win32zip.c, win32/win32.c (EG)
29. Update manual to include description of argument files, and options -AS and
    -UN=ShowUTF8.  /man/man1/zip.1 (EG)
30. Change ZpError() to Zp_Error() to avoid name conflict on VMS with zperror().
    api.c (SMS, EG)
31. Update argfile opening code in insert_args_from_file().  Add support for
    updated "--" argument by preventing opening of later arg files recursively
    once "--" is seen.  Add variable double_dash_seen.  Remove quotes from
    read arguments before inserting into args array.  fileio.c (EG)
32. Enable support for Windows long paths by default by setting start value of
    include_windows_long_paths = 1.  globals.c (EG)
33. Move using_utf8 outside UNICODE_SUPPORT so always visible.  Works with
    locale check which is also now outside UNICODE_SUPPORT.  Move langinfo.h
    and locale.h code outside UNICODE_SUPPORT.  globals.c, tailor.h, zip.h (EG)
34. Change UNICODE_SUPPORT and WIN32 to UNICODE_SUPPORT_WIN32.  Remove various
    debugging printf statements inserted during testing.  util.c (EG)
35. Remove includes for Unicode_Tests for WIN32 as not needed.  zip.c (EG)
36. Change add_name() to add second argument, int verbatim.  Setting this
    makes the argument a verbatim argument, as set by using "--" on command
    line.  Add int verbatim to filelist_struct to track which command line
    arguments are verbatim arguments.  (Args can come from multiple sources,
    including the environment and arg files.)  Set fileentry->verbatim in
    add_name().  Currently -@ and -@@ args are never verbatim
    (add_name(path, 0)), only command line args after "--".  When processing
    files for add/update, set no_wild = filelist->verbatim to turn off
    wildcard matching in shmatch() and recmatch() for verbatim args.  zip.c
    (EG)
37. Update section in extended help on verbatim arguments.  Update section in
    extended help on argument files.  Simplify section in extended help on
    compression methods.  zip.c (EG)
38. Change description of UNICODE_SUPPORT from "UTF-8 Unicode paths" to
    "Unicode paths", as UNICODE_SUPPORT is more general now.  zip.c (EG)
39. Format changes to reduce long lines and line up output.  zip.c (EG)
40. Change option --arg-files to --argfiles.  Remove extra -- from options
    -Cl and -Cu long option names.  zip.c (EG)
41. Put unicode_show blocks in UNICODE_SUPPORT blocks.  zip.c (EG)
42. Add start of draft Zip 3.1d announcement.  zip31d.ann (EG)
43. Add readme for /docs directory.  docs/ReadmeDocs.txt (EG)
44. Update plain text manual docs using unix/Makefile docs target.
    docs/zip.txt, docs/zipcloak.txt, docs/zipnote.txt, docs/zipsplit.txt (EG)
45. Update Zip manual.  Formatting updates.  Reference Windows 7.  Add
    Encryption subsection.  Add subsection on argument files.  Add p (PiB)
    to list of byte size modifiers.  Add note about using UTF-8 locale windows.
    Note that Windows long paths are included by default now.  Note that
    options can have spaces around =, as in "-s = value".  Add subsection
    on Unix shell processing of command line arguments.  Add subsection on
    time zones.  Add -AF option to turn argfiles on and off.  Update backup
    option -BT description.  Update -Cl description.  Note -dt output format.
    Remove .BR (line break) in -D description.  Add warnings that format of
    arg files not one file name per line as -@, -@@, and -i@, but use white
    space separation, and so args with spaces must be quoted.  Update note
    for -UN=ShowUTF8.  Updates to suffix option description.  Add quotes to
    -R examples.  Remove extra "the".  Add note about using -UN=ShowUTF8 to
    view Unicode on a Windows code page 65001 window.  Redo password lengths
    table.  Add @argfile to options list under -@ and -@@; though not an
    option, it makes sense to list these together for comparison.  Update
    PATTERN MATCHING section to remove quotes where shell is processing and
    add where Zip is and note Zip 3.1 supports full internal wildcard
    processing for quoted and escaped wildcards.  Add subsection on filters
    and limiting directory scan scope to save time.  man/man1/zip.1 (EG)
46. Add PROCNAME definition to Unix to allow calling wild() when adding or
    updating.  Previously the default PROCNAME was being used, which only
    calls procname().  Add check of escaped Unicode names to procname(),
    allowing a Unicode escaped path to be used to match archive entries,
    as Windows allows.  Add wild() and wild_recurse() to support processing
    of command line wildcards.  unix/osdep.h, unix/unix.c (EG)
47. Add note that Windows needs to distinguish file symlinks from directory
    symlinks.  win32/win32zip.c (EG)
48. Change Readme.txt to windll/Readme.txt in title.  windll/readme.txt (EG)

---------------------- September 11th 2014 version 3.1d32 ----------------------
 1. Minor updates.  Note that Zip 3.1d is release candidate.  betas_readme.txt
    (EG)
 2. Add note at top that we are not aware of any major bugs in Zip 3.1.
    BUGS (EG)
 3. Comment out debugging statement ("check_dup").  fileio.c (EG)
 4. Rework to bring in line with the current state of things.  INSTALL (EG)
 5. Updates.  README (EG)
 6. Add feature list for Zip 3.1d.  Updates.  WHATSNEW (EG)
 7. Implement sorted directory lists on Unix.  Test.  Too slow and it's
    inefficient to sort directory lists where the entries may not all
    get used.  Remove.  Updating check_dup() better approach.  Some formatting
    changes.  Remove comments and printf used to trace directory sorting.
    unix/unix.c (EG)
 8. Minor updates.  windll/examples/csharp10/readmecs.txt (EG)
 9. Implement Unix found files sorting.  Add fqcmpz_icfirst() for qsort that
    first compares ignoring case, then for exact matches compares using case.
10. Rename check_dup() to check_dup_sort() and add parameter sort_found_list.
    Change sort of inames to use fqcmpz_icfirst() for UNIX and WIN32.  (Other
    ports would need to verify fqcmpz_icfirst() works for them.)  If
    sort_found_port, use sorted nodup[] array to redo found list pointers.
    Add timing statements to see how long redoing pointers takes.  Comment
    out timing statements.  fileio.c, zip.c, zip.h (EG)
11. Update TODO list, removing items that have been done or are no longer
    relevant and updating others.  TODO (EG)
12. Shorten version description for ETWODD_SUPPORT.  zip.c (SMS, EG)
13. Put show_unicode in UNICODE_SUPPORT block.  zip.c (SMS, EG)
14. Update announcement for Zip 3.1d.  zip31d.ann (EG)
15. Change incorrect show_unicode to unicode_show.  zip.c (EG)
16. Change Zp_Error() to ZpErrorMessage().  api.c (SMS, EG)

--------------------- September 20th 2014 version 3.1d33 ----------------------
 1. Clean up CHANGES and TODO.  CHANGES, TODO (EG)
 2. Update Readme for BZIP2.  README_BZIP2.txt (EG)
 3. Remove AES encryption files.  These need to be provided by Info-ZIP's
    AES_WG source kit.  aes_wg/aes.h, aes_wg/aescrypt.c, aes_wg/aeskey.c,
    aes_wg/aesopt.h, aes_wg/aestab.c, aes_wg/brg_endian.h, aes_wg/fileenc.c,
    aes_wg/fileenc.h, aes_wg/hmac.c, aes_wg/hmac.h, aes_wg/iz_aes_wg.h,
    aes_wg/LICENSE.txt, aes_wg/main.c, aes_wg/prng.c, aes_wg/prng.h,
    aes_wg/pwd2key.c, aes_wg/pwd2key.h, aes_wg/sha1.c, aes_wg/sha1.h,
    aes_wg/USexport.msg, aes_wg/zip-comment.txt (EG)
 4. Remove AES encryption files from development aes_wg_new directory.
    aes_wg_new/aes.h, aes_wg_new/aescrypt.c, aes_wg_new/aeskey.c,
    aes_wg_new/aesopt.h, aes_wg_new/aestab.c, aes_wg_new/aestab.h,
    aes_wg_new/aes_via_ace.h, aes_wg_new/brg_endian.h,
    aes_wg_new/brg_types.h, aes_wg_new/ccm.c, aes_wg_new/ccm.h,
    aes_wg_new/mode_hdr.h, aes_wg_new/rdtsc.h (EG)
 5. Minor updates.  windll/examples/ReadmeEx.txt,
    windll/examples/ReadUse.txt (EG)
 6. Add announcement for Zip 3.1 in preparation for release.  Draft.
    zip31.ann (EG)
 7. Update manual.  Add new option -vq (--quick-version).
    man/man1/zip.1 (EG)
 8. Update formatting of callback prototypes.  Add UTF-8 name to API parameters
    of callbacks DLLPROGRESS, DLLSERVICE, DLLSERVICE_NO_INT64, and DLLECOMMENT,
    allowing caller choice of using onames as before or using unames (when
    available), for instance to view Unicode paths in VB 2010 example.  Change
    names of callback parameters in prototypes to more descriptive ones.
    api.h (EG)
 9. Updates to API description comments.  api.h (EG)
10. Update ZpZipTest() to account for new UTF-8 parameter.  Update ecomment()
    to include uname.  api.c (EG)
11. Comment out old fqcmpz() function to avoid unused function warnings and
    use new fqcmpz_icfirst() for iname sort compares on all ports.  Change
    fqcmpz_icfirst() to use _stricmp() for WIN32 and strcasecmp() for all
    other ports.  Add note that a port without an ignore case compare can
    just use strcmp().  Use sort_found_list as check_dup_sort() parameter.
    fileio.c (EG)
12. Consistently derive oname from zname.  It was sometimes coming from iname
    (internal representation of path) and other times from zname (externalized
    version of iname).  The exception is when zname is not available, such as
    when rebuilding a local header where only iname exists.  fileio.c,
    zipup.c (EG)
13. Add global unicode_entry_name for tracking uname used by progress callback.
    globals.c, zip.h (EG)
14. Update Unix/VMS LIB example to document callback function parameters.  Add
    ufilename parameter where needed.  izzip_example.c (EG)
15. Move items for later releases from end of CHANGES to TODO.  Divide TODO
    into The Short List and The Longer List.  Subdivide The Short List into
    sections.  Update TODO.  CHANGES, TODO (EG)
16. On WIN32, don't use write_console() or write_consolew() if compiled as LIB
    or DLL as there may not be an attached console to write to.  zip.c (EG)
17. Change Traditional encryption message from "Using traditional zip
    encryption" to "Using traditional (weak) zip encryption".  This change
    indirectly suggested by the Oracle guys (2014/09/19 SourceForge patch
    posting).  zip.c (EG)
18. Set action_string when using -sf to show what would do.  Not setting it
    in these cases resulted in empty strings in the LIB/DLL examples that
    use it.  Make sure oname is set to z->oname/f->oname and uname is either
    set to z->uname/f->uname if UNICODE_SUPPORT, or NULL if not.  Update calls
    to service callback to include uname.  Remove bytes output used with
    unicode_show for debugging.  Update calls to service_no_int64 callback to
    include uname.  zip.c (EG)
19. Check for existence of _WIN32_WINNT_VISTA macro to determine if Windows
    symlinks can be supported, fixing previous test that did not work on
    Windows XP (because _WIN32_WINNT_VISTA is undefined there).  zip.h (EG)
20. Add "Announcement" to title of announcement.  zip31d.ann (EG)
21. Set entry_name to z->oname (not z->zname), which is now consistently
    a display version of z->zname (OEM conversions and such).  Set
    unicode_entry_name to z->uname if not NULL, otherwise set to z->oname.
    If not UNICODE_SUPPORT, set z->uname to NULL.  Add unicode_entry_name
    to progress callback parameters.  zipup.c (EG)
22. Fix bug where, when using Traditional encryption, small files could be
    added and "unzip -t" used to verify successfully, but if the same Zip
    command line was used to update the entry, "unzip -t" would fail to
    recognize the password.  The TRADITIONAL_ENCRYPTION setup code was not
    being executed during updates, so the CRC was being left 0 and not set
    to the file time.  zipup.c (EG)
23. An empty file is now considered text, so that -l and -ll don't give
    warnings for empty files.  zipup.c (EG)
24. Update service, service_no_int64 and progress callbacks to include uname.
    zipup.c (EG)
25. Fix bug in iz_file_read() where empty file was not setting file_binary
    and file_binary_final.  Comment out iz_file_read_bt() if BZIP2_SUPPORT
    not set to avoid unused function warning, as bzip2 is only compression
    method to use it.  zipup.c (EG)
26. Change error code from ZE_LOGIC to new ZE_COMPRESS in cases where
    compression method code was generating the error.  zipup.c (EG)
27. Update some error messages involving zlib to note these are zlib errors.
    zipup.c (EG)
28. Change "zlib/bzlib" to "bzlib" in error message from bzip2.  Add
    bzip2 to some "error writing to zipfile" messages involving bzip2.  Change
    zlib message in bzip2 code to bzip2 message.  zipup.c (EG)
29. Remove commented out redundant "if (file_binary_final)" code.  zipup.c (EG)
30. Update bzip2 readme, noting that the bzip2 license changed and now it's
    possible to include bzip2 in the Zip source kit.
    bzip2/readme_bzip2.txt (EG)
31. Fix bug preventing use of external bzip2 library.  Change $L_BZ2E to
    $L_BZ2.  Other updates.  unix/configure (EG)
32. For VB10 example, add checkboxes for removing service call output and
    for selecting if Zip output should be Unicode by adding -UN=s to command
    line.  windll/examples/vb10/zip31vbexample/form1.designer.vb,
    windll/examples/vb10/zip31vbexample/form1.resx (EG)
33. Update comments at top.  Update callbacks, including adding uname where
    needed.  Run output received by print callback through Unicode converter
    so UTF-8 paths in output get converted to VB Unicode strings.  Output
    Unicode to window when enabled.  Output Unicode to EntryPath_Box.  Add
    function utf8_to_string() to convert a string received through a callback
    to a Unicode VB string.  Add currently unused function string_to_utf8().
    windll/examples/vb10/zip31vbexample/module1.vb (EG)
34. Add ZipCBChar parameter for UFileName as needed.
    windll/examples/vb6/vbzipbas.bas (EG)
35. Change "... here.txt" file names to "...__goes_here.txt" file names.
    Split up names using & and && to one pointer each file name.
    windll/examples/vb10/zip32_dll.dll__goes_here.txt,
    windll/examples/vb6/zip32_dll.dll__goes_here.txt,
    windll/examples/vc10/c_dll_ex/zip32_dll.lib__goes_here.txt,
    windll/examples/vc10/c_lib_ex/libbz2.lib__goes_here.txt,
    windll/examples/vc10/c_lib_ex/zip32_lib.lib__goes_here.txt,
    windll/examples/vc10/debug/zip32_dll.dll__goes_here.txt,
    windll/examples/vc10/release/zip32_dll.dll__goes_here.txt,
    windll/examples/vc6/c_dll_ex/zip32_dll.lib__goes_here.txt,
    windll/examples/vc6/c_lib_ex/zip32_lib.lib__goes_here.txt,
    windll/examples/vc6/c_lib_ex/zip32_libd.lib__goes_here.txt,
    windll/examples/vc6/debug/zip32_dll.dll__goes_here.txt,
    windll/examples/vc6/release/zip32_dll.dll__goes_here.txt (SMS, EG)
36. Update Windows C DLL example.  Update comments.  Comment out old code.
    Add ufilename as needed.  windll/examples/vc10/c_dll_ex.c (EG)
37. Update readme.  windll/examples/vc10/read10ex.tst (EG)
38. Update Windows C LIB example.  Update comments.  Comment out old code.
    Add ufilename as needed.  windll/examples/vc10/c_lib_ex.c (EG)
39. Update Windows XP C DLL example.  Update comments. Comment out old code.
    Add ufilename as needed.  Change usage from c_lib_ex to c_dll_ex.
    Put lines around calls to ZpZip() and ZpVersion().
    windll/examples/vc6/c_dll_ex/c  (EG)
40. Update Windows XP C LIB example.  Update comments.  Comment out old code.
    Add ufilename as needed.  windll/examples/vc6/c_lib_ex.c (EG)
41. Add reference to WhatsNew_DLL_LIB.txt.
    windll/examples/vc6/readvc6ex.txt (EG)
42. Update Zip 3.1d announcement, dividing into sections.  zip31d.ann (EG)

----------------------- October 5th 2014 version 3.1d34 -----------------------
 1. Change ZE_COMP and ZE_COMPERR to ZE_COMPILE to distinguish compilation
    options errors from new ZE_COMPRESS error code used for compression
    errors.  fileio.c, zip.c, ziperr.h, zipup.c, win32/win32.c (EG)
 2. Change iconv() use in wide_to_local_string() from doing bulk conversion
    to converting one wide character at a time.  This allows checking for
    error EILSEQ (illegal input character sequence) after each conversion
    attempt.  When a character does not convert, insert the Unicode escape
    sequence for that character in output string, duplicating how the wchar
    code does it.  This mostly avoids large numbers of duplicate paths when
    output language does not support input language (such as converting
    Japanese to English).  fileio.c (EG)
 3. Implement option -pt to report performance time, i.e. time it takes Zip
    to execute the command.  Add globals performance_time and start_time.
    Store startup time at startup using get_time_in_usec().  Display execution
    time in freeup() if -pt used.  Set displayed resolution to 3 decimals (ms).
    -pt only available if ENABLE_ENTRY_TIMING is enabled, as uses same timing
    code.  globals.c, zip.c, zip.h (EG)
 4. Implement new "compression" method "cd_only", which only stores the central
    directory and end records of an archive.  Does not store local headers or
    file data.  This can be used with --dif and -BT archives to create diff
    archives against, without the need to store the full archive on the system.
    Define CD_ONLY as compression method.  Add macro CD_ONLY_SUPPORT to
    enable.  cd_only compression only available when copying an existing
    archive to a new archive using --out.  Add "noting" of names when cd_only
    mode going through files but not storing them.  Add warning at end of
    operation that cd_only mode did not store data.  NO_CD_ONLY_SUPPORT
    disables.  Set CD_ONLY to 999, which should be unused compression method.
    Add global cd_only.  globals.c, zip.c, zip.h (EG)
 5. No longer store default suffix list MTHD_SUFX_0 when structure array
    mthd_lvl[] is created, but set the default STORE list on Zip startup
    using malloc().  This allows the list to be freed later.  globals.c,
    zip.c (EG)
 6. Fix bug where suffix lists in mthd_lvl[] were not being freed.  Add
    code to free suffix lists in freeup().  zip.c (EG)
 7. Add support for using * as a suffix to include the existing suffix list.
    This allows chaining -n parameters.  Without *, the previous behavior
    where specifying a compression method (or none for STORE) in a later -n
    would wipe out any previous list is used.  Now remove a suffix from
    other lists when added to a list, allowing a suffix to be pulled from the
    STORE list and processed using the specified compression method instead.
    Previously a suffix was stuck in a list once added, unless the entire
    list was wiped.  zip.c (EG)
 8. Update extended help on suffixes.  Add help on using * to include existing
    suffix list.  Be more clear on how suffix lists are handled.  zip.c (EG)
 9. Add suffixes_option() and move rather lengthy -n processing to this and
    out of the command line option switch.  zip.c (EG)
10. Add macros CASE_INS (0) and CASE_SEN (1) to set the case sensitivity
    parameter of abbrevmatch(), rather than use 0 and 1.  zip.c, zip.h,
    zipcloak.c (EG)
11. Add "zip up existing entries" and "zip up found list" comments.  zip.c (EG)
12. Update manual.  Add note encouraging use of UTF-8 locale.  Add description
    of using "*" to include existing suffix list.  man/man1/zip.1 (EG)
13. Change L"\\?\" to L"\\\\?\\" in commented out code to avoid complaints from
    one compiler.  win32/win32zip.c (SMS, EG)
14. Replace bzip2 kit in bzip2/ with custom kit provided by SMS that includes
    VMS support.  Should work the same for other ports.  Add constructs for
    handling VMS names, file operations.  Add VMS defines and includes.  Use
    BZ_VMS to enable code for VMS.  Use BZIP_OPTS and BZIP2_OPTS for env
    vars instead of BZIP2 (which may be a foreign command on VMS).  Set
    variable verbosity to 0.  Minor updates to zlib support.  Add
    BZ2_bzlibVersionBase and BZ2_bzlibVersionDate.  Move includes <string.h>
    and <stdio.h> out of #ifndef BZ_NO_STDIO block.  Add various files in
    new VMS directory.  Add vms_basename().  Add vms_redot() to support VMS
    dots in file specs.  Add vms_wild.  Add trimFileNameVersion().  Add
    various static storage.  Add get_rms_defaults().  Add acc_cb().  Add
    decc_init().  Add b2_prvt_strncasecmp().  Add bz2_prvt_strdup().
    Add bz2_prvt_fchmod().  Add bz2_prvt_fchown().  Add VMS notes.
    bzip2/bzip2.c, bzip2/bzip2.c_orig, bzip2/bzip2recover.c,
    bzip2/bzip2recover.c_orig, bzip2/bzlib.c, bzip2/bzlib.c_orig,
    bzip2/bzlib.h, bzip2/bzlib.h_orig, bzip2/bzlib_private.h,
    bzip2/bzlib_private.h_orig, bip2/vms/collect-deps.com,
    bip2/vms/decc_ver.c, bip2/vms/descrip.mms, bip2/vms/descrip_deps.mms,
    bip2/vms/descrip_mkdeps.mms, bip2/vms/descrip_src.mms,
    bip2/vms/mod_dep.com, bip2/vms/my_module_name.h, bip2/vms/vms_misc.c,
    bip2/vms/vms_misc.h, bip2/vms/vms_notes.txt (SMS)
15. Add readme to new bzip2 kit in bzip2/.  bip2/readme_zip.txt (EG)
16. In argv_to_commandlinestring(), add parentheses to for loop parameter
    to clear compiler (Apple LLVM) warning.  api.c (SMS)
17. Change '^..$' to '^\.\.$' in regular expression.  unix/unsafe_prod.sh
    (SMS)
18. Add Zip source kit archive comment file.  zip-comment.txt (SMS, EG)
19. Change reference to BINS=lib to BINS=L.  izzip_example.c (EG)
20. Update Zip plain text doc file from latest man pages in man/man1.
    docs/zip.txt (EG)
21. Update Zip man page.  Update -RE, -vq, -y and -yy options.  Remove
    "cannot adjust line" error from man by shortening string.  Add -UT
    (--utest) option that performs Unicode tests.  man/man/zip.1 (EG)
22. Reconcile Unix builder files configure and Makefile with corresponding
    UnZip ones.  Correct issues with BINS and PROD usage.  Move some
    functionality from configure to Makefile.  Comments and help updates.
    Add KIT variable.  Remove unsafe_prod_dir() function (though the external
    script version seems to have a security flaw if permissions not properly
    set).  Remove "set " when displaying configure script decisions to
    conform with UnZip approach.  Reconcile wording of output statements to
    minimize differences against UnZip versions where possible.  Add note
    regarding differences between wchar_t and zwchar and how the term
    "wide string" is used.  Remove parameters passed to configure that are
    no longer needed by configure.  Update "docs" target processing to use
    "man -M" instead of relative paths to address need of platform that does
    not handle relative paths for man.  Change "manuals" target to "docsrof"
    as target does same thing as docs, but using nroff.  "docsrof" outputs
    .txtr "plain" text files (currently including format escapes).  Add note
    regarding "_" and "_l" object files.  Add use of unix/unsafe_prod.sh to
    Makefile to check if directory outside source tree before cleaning.
    "clean_docs" now also cleans ROF files.  Updates to install procedures.
    Solaris now alias for generic_pkg.  unix/configure, unix/Makefile (SMS, EG)
23. Change call to unix/unsafe_prod.sh to use sh and new variable safe to
    avoid issue when unsafe_prod.sh does not have execute permission.  (As
    it was, the check was always "successful" when the script did not have
    permission to run.)  unix/configure (EG)
24. Change call to unix/mlz.sh to build Zip library to use sh to avoid fail
    if mlz.sh does not have execute permission.  unix/Makefile (EG)

------------------------ April 3rd 2015 version 3.1d35 ------------------------
 1. Accommodations for old compilers: Removed white space before various
    #directive; Insert missing commas.  Also adjust some indentation
    of and comments on various #directive.  For new compilers: Add
    some parentheses.  zip.c (SMS) 
 2. Remove redundant (and unconditional) "#include <fcntl.h>" to
    accommodate VMS VAX C.  zipup.c (SMS)
 3. Change VMS builders to agree better with Unix builders (and with
    corresponding UnZip VMS builders):  Enable bzip2, LZMA, and PPMd
    compression methods by default.  Enable large-file support by default on
    non-VAX hardware.  vms/build_zip.com, vms/check_large.com,
    vms/descrip.mms, vms/descrip_mkdeps.mms, vms/descrip_src.mms,
    vms/INSTALL_VMS.txt, vms/collect_deps.com, vms/cppcld.com, vms/cvthelp.tpu
    vms/find_bzip2_lib.com, vms/hlp_lib_next.com, vms/mod_dep.com,
    vms/optgen.com  (SMS)
 4. Add buildbz2.com for building VMS bzip2 library.  bzip2/buildbz2.com (SMS)
 5. Add comment to zfwrite().  crypt.c (EG)
 6. Add casts to support 64-bit Windows compile.  strlen() accounts for
    many of these changes.  crypt.c, fileio.c, zip.c, zipup.c, zipsplit.c,
    zipnote.c, zipcloak.c, zipfile.c (EG)
 7. Comment out beta define.  Crypt package is final.  crypt.h (EG)
 8. Add macro FILE_SYSTEM_CASE_INS that sets global file_system_case_sensitive
    that can be used to to adjust actions based on if file system is case
    sensitive.  Currently VMS, DOS, and WIN32 set this.  globals.c, zip.h (EG)
 9. Add WIN32 wide character support for setting working directory using -cd.
    globals.c (EG)
10. Add -BF (--binary-full-check) to enable checking entire files for binary.
    (This is already done by default for deflate.)  Without -BF, the current
    Zip 3.0 approach is used, i.e. check the first buffer or two and assume
    that no binary there means it's a text file.  Options -l (Unix/Mac line
    ends to Windows), -ll (Windows line ends to Unix/Mac), and -a (EBCDIC to
    ASCII) automatically set -BF.  globals.c (EG)
11. Add -kf (--keyfile) to read (end of) password from a file.  If -P or -e
    used, the first bytes of the keyfile are used to fill the password to
    up to 128 bytes.  If no -P or -e, then entire password from keyfile.
    Null bytes in keyfile are skipped.  Add globals keyfile and keyfile_pass.
    globals.c, zip.c, zip.h (EG)
12. Add global win32_utf8_argv to track when WIN32 reads wide command line and
    converts args to UTF-8.  globals.c, zip.c, zip.h (EG)
13. Add note to INSTALL that Zip should be compiled under a UTF-8 locale to
    fully enable Unicode support.  INSTALL (EG)
14. Add note to README that IBM port support has been limited.  README (EG)
15. Update copyright dates.  revision.h (EG)
16. Add note about UTF-8 now being default for paths and comments in archives.
    Add note that build locale needs to be UTF-8 to set UNICODE_FILE_SCAN
    on Unix.  tailor.h (EG)
17. In filterlist_to_patterns(), if pattern is UTF-8, save
    patterns[].uzname as pattern (UTF-8 name) and .duzname same as
    .uzname, but with any embedded Unicode escapes converted to UTF-8.
    Otherwise, .uzname saved as local charset pattern and .duzname is
    same with embedded Unicode escapes converted to UTF-8.  Add uzname
    and duzname to struct plist.  For UTF-8 patterns, matching is first
    against UTF-8 then against de-escaped UTF-8.  If not UTF-8, matching is
    first against local charater set pattern, then de-escaped local pattern.
    zip.c, zip.h (EG)
18. Replace "Zip took" performance timing message with "Zip elapsed time:".
    zip.c (SMS)
19. In ziperr(), add internal buffer ebuf for message building.  This avoids
    overwriting a message in errbuf.  Use print_utf8() to add Unicode display
    support for WIN32 to ziperr().  zip.c (EG)
20. Use ZIP_DLL_LIB where appropriate.  zip.c (EG)
21. Move zipmessage_nl(), zipmessage(), and zipwarn_i() to fileio.c to allow
    use of these by the utilities.  Add parameter to zipwarn_i() to pass
    prefix message unique to zip and each utility.  zip.c, zip.h, fileio.c (EG)
22. In extended help, change title from "Zip" to "Zip 3.1".  Add note on
    argument and path length limits (currently 4096 and 8192, respectively).
    Minor updates.  Add note that argfiles now supported.  Update section on
    include files.  Note that paths from include files now have leading and
    trailing white space removed (unless quoted).  Add paragraph on how on
    WIN32 UTF-8 is now detected automatically and processed as Unicode, else
    paths and patterns are assumed in local charset.  Add paragraph noting
    that non-Window ports currently only understand local charset, but if
    that is UTF-8 then Unicode should be naturally handled.  Add more on
    argfiles.  Add note that -R can be slow as recurses entire tree.  Add
    warning that the binary detection algorithm is simplistic and can fail.
    Add description of -BF (--binary-full-check) that tells Zip to check
    entire files for binary.  Add note that UTF-16 (Windows double-byte
    Unicode) files are considered binary and not line end converted.  Add
    descriptions of -r and -R recursion.  Add note on using -d with argfiles.
    Add note on using -sf with -FS to list differences between archive and
    file system.  Add note on -Z.  Add note on using new compression method
    cd_only with -BT and --dif.  Add more on setting compression methods and
    levels.  Add use of -kf (--keyfile).  Add more on encryption.  Add note
    that UnZip 6.00 and earlier can't read split archives, and the zip -s-
    and zipsplit alternatives.  Add note that -BT backup options need long
    name support.  More on use of -BT and related options.  Update section
    "Unicode and charsets" to note Zip 3.1 now defaulting to UTF-8 for
    storing paths and comments.  Note on Windows now reading wide command
    line.  Some notes on Unicode display on Windows.  zip.c (EG)
23. Add -BF (--binary-full-check) option to force checking entire files for
    binary.  (Deflate is already full file checked due to nature of deflate.)
    Maintain Zip 3.0 default of only checking first buffers, but when -l, -ll
    or -a used, set binary_full_check so entire files checked.  Add global
    binary_full_check.  Fix indent on option cases 'a' and o_aa.  zip.c,
    globals.c, zip.h (EG)
24. Add support for reading Windows wide command line and converting Unicode
    args to UTF-8.  Enabled using macro WIN32_WIDE_CMD_LINE by default if
    Windows version at least Windows XP. Add "WIN32_WIDE_CMD_LINE" to version
    info.  If reading wide command line, enable unicode_show by default.
    Add macro WIN32_WIDE_CMD_LINE to enable use of wide command line code on
    Windows.  Add code to read Windows wide command line.  Read environment
    variables ZIPOPT and ZIP to get those args, then call
    get_win32_utf8_argv() to get wide command line args in UTF-8, and then
    combine into one args[] array.  If not WIN32_WIDE_CMD_LINE, copy argv[] to
    args[] as before.  Command line args in this case are local, but args
    from include files may still be UTF-8.  On Windows, default to reading
    wide command line if version at least Windows XP.  zip.c, zip.h (EG)
25. Add fopen_utf8() that, on WIN32, detects paths that are UTF-8 and converts
    them to Unicode to open.  Other paths are opened as local charset paths.
    For other ports, just calls zfopen().  Replace calls to zfopen() with
    fopen_utf8().  zip.c, zip.h (EG)
26. Move rename_split() to fileio.c to allow use by utilities.  zip.c,
    fileio.c (EG)
27. Move write_console() and write_consolew() WIN32 functions for display of
    Unicode to fileio.c to allow use by utilities.  zip.h, zip.c (EG)
28. Remove Unicode string constant from Unicode_Tests().  String already
    set using escapes.  Minor changes to Unicode_Tests(), including use of
    print_utf8().  zip.c (EG)
29. Enable options -BC, -BD, -BL, -BN and -BT by default, but display error
    message if not enabled.  Enable options -cd, -de, -dr, -su, -sU, -UN
    and -UT by default, but display error if not enabled.  Reserve option -CP
    for setting Windows code page, though may be deleted later.  Need to
    resolve what to do with -so for disabled options.  zip.c (EG)
30. Put locale code in set_locale() and move to fileio.c so utilities can use.
    Add note regarding Windows console display of Japanese and similar
    fonts.  Add note that IBM support still rough and untested.  zip.c, zip.h,
    fileio.c (EG)
31. For cases o_kf, 'e' and 'P', default to TRADITIONAL encryption, if not
    enabled default to AES_128 if enabled, else display error.  zip.c (EG)
32. For option cases o_lu and o_pt, display error if not enabled.  zip.c
    (SMS, EG)
33. Add negation support for -UN suboptions ESCAPE, LOCAL, UTF8 and ShowUTF8.  
    zip.c (EG)
34. Add "ZipCrypto" as another name for "Traditional" encryption, as this is
    the name other utilities use.  zip.c (EG)
35. Use CASE_INS (case insensitive) and CASE_SEN with strmatch() where
    appropriate.  zip.c (EG)
36. Add is_utf8_string() that determines if a string contains valid UTF-8
    and no bad UTF-8.  Also checks for and skips over UTF-8 BOM.  Add
    read_utf8_bom() that reads and skips over bom in file.  Add and later
    comment out is_utf8_file() which does UTF-8 check on file.  Commented out
    as labeling file as UTF-8 or not no longer useful to Zip now that each arg
    and path separately checked.  Add is_utf16LE_file() check to prevent
    processing a Windows double-byte Unicode file as include file, which we
    don't support.  zip.c, zip.h, fileio.c (EG)
37. Only add_name() if path not empty string.  zip.c (EG)
38. For show_what_doing (-sd), indicate if zipfile is UTF-8.  zip.c (EG)
39. Allow WIN32 to show UTF-8 args for -sc and parsed command line.  zip.c (EG)
40. For -sc, return cleanly with RETURN(finish(ZE_OK)) instead of aborting.
    zip.c (EG)
41. Add WIN32 wide support to -cd.  zip.c, zip.h, globals.c (EG)
42. Allow backup control files to use prefixes that are other than 4 length,
    instead using ':' to mark end of prefix.  Use strmatch() for matching
    when parsing backup control file.  This was to support changes in backup
    control files that later were not needed and removed.  zip.c (EG)
43. If -sd, show (possibly Unicode) in_path and out_path.  Add message after
    archive read.  Show zcount.  zip.c (EG)
44. Define AES_128_MIN_PASS, AES_192_MIN_PASS and AES_256_MIN_PASS as the
    minimum password sizes.  Currently minimum password lengths are 16
    for AES 128, 20 for AES 192 and 24 for AES 256.  Add additional password
    length checks after merge keyfile password.  Add globals keyfile (for
    keyfile path) and keyfile_pass (for keyfile password).  zip.c, zip.h,
    globals.c (EG)
45. If show_files and kk == 3 (no input files), then set action to ARCHIVE to
    list archive paths.  zip.c (EG)
46. Remove \n from ZIPERR messages in option checks.  zip.c (EG)
47. Add error check when kk == 3 (no input files) and filesync (since to
    create the original archive there should have been input files).
    zip.c (EG)
48. If Unicode and WIN32, filter on UTF-8 path from z->znamew instead of
    on z->zname.  zip.c (EG)
49. Use "name" pointing to "filelist->name" to reduce line lengths.  zip.c (EG)
50. Use UPDATE || FRESHEN code for ARCHIVE to allow use of that processing,
    such as date filtering.  Show -sf results as "(filtered)" if date
    filtered.  zip.c (EG)
51. Only set f->utf8_path if f->uname != NULL.  zip.c (EG)
52. Add support to -sf, -su and -sU for filesync (would Add, Freshen or
    Delete).  Clear mesg_displayed and log_displayed before displaying each
    file in found list and track when output displayed to avoid outputting
    f->usize (if requested) if entry was filtered out.  Handle output of
    "entry"/"entries" and "byte"/"bytes".  zip.c (EG)
53. Add warning if setfileattr() fails.  zip.c (EG)
54. For WIN32, include <sdkddkver.h> to get Windows version compiled on.
    zip.h (EG)
55. Enable backup support options only on UNIX, WIN32, and VMS, as these
    can support long file names.  Would need to confirm long path support
    before enabling on other ports.  zip.h (EG)
56. Add checks that define AT_LEAST_WINXP and AT_LEAST_WINVISTA.  Use
    AT_LEAST_WINVISTA in SYMLINKS check.  win32/osdep.h, zip.h (EG)
57. In size and limit macro section, moved comments after defines for
    clarity.  Updated some comments.  Added defines for ERRBUF_SIZE (for
    the buffer errbuf and similar), MAX_INCLUDE_FILE_SIZE (used by
    is_utf8_file(), though that function is currently not used),
    ADD_ARGS_DELTA (for insert_args_from_file()), MAX_ARGFILE_LINE (max
    size of a line in an argfile) and MAX_ARGFILE_DEPTH (recursion depth
    allowed in an argfile).  zip.h (EG)
58. Change putend() arg from extent to ush to avoid extend and size_t
    size changes when compiled for 64-bit.  zip.h (EG)
59. Add trim_string() that trims white space from front and back and returns
    malloc'd string.  zip.h, fileio.c (EG)
60. Add macro ENTIRE_STRING macro for strmatch().  zip.h (EG)
61. For WIN32, add isWinSymlinkw() that takes wchar_t path.  Add readlinkw()
    that takes wchar_t path.  zip.h (EG)
62. Remove redundant #endif/#ifdef WIN32.  zip.h (EG)
63. Add ZCONST to in_string parameter of string_dup() to remove compiler
    warning.  Add ZCONST to utf8_string parameter of utf8_to_wide_string()
    to remove compiler warning.  Add OF() to zwchar_string_len() prototype.
    Add ZCONST to utf8_string parameter of utf8_to_wchar_string() to remove
    compiler warning.  In utf8_to_wchar_string(), make working copy of inp
    to avoid compiler warning that ZCONST utf8_string is being improperly
    used by iconv().  zip.h, fileio.c (EG)
64. Remove outdated commented out block of string conversion prototypes.
    zip.h (EG)
65. Add char_to_wide_string() that simplisticly converts an ASCII 7-bit
    string to a wide string.  Add utf8_to_wchar_string_windows().  Add
    escapes_to_wide_string() and escapes_to_utf8_string() that convert
    Unicode escapes in a string to the wide and UTF-8 characters they
    represent.  zip.h, fileio.c (EG)
66. Add arg_count() that counts args.  zip.h
67. For WIN32, include <locale.h> and <mbctype.h> for locale support.
    fileio.c (EG)
68. Set GETNAM_MAX (used by getnam()) to MAX_PATH_SIZE.  Add note that
    getnam() assumes names do not include '\0'.  Modify getnam() to trim
    leading and trailing white space, unless name surrounded by double quotes.
    If trimming results in empty string, skip adding name.  fileio.c (EG)
69. In proc_archive_name() that processes names from an archive, if Unicode
    and WIN32, check if name is UTF-8 and, if so, process as UTF-8.  Use
    MATCHW() to perform matching as wide.  Filter as UTF-8.  fileio.c (EG)
70. In filter, if Unicode, match against UTF-8 version of pattern uzname as
    well as de-escaped version duzname, else match against zname and
    de-escaped zname.  Assume de-escaped dpattern has slashes in same spots
    as pattern (so escaped '/' is not handled as path separator but as normal
    character when matching).  If pattern not matched, try dpattern.
    fileio.c (EG)
71. In newnamew(), first look for UTF-8 path before looking for local path.
    fileio.c (EG)
72. In replace(), if Unicode and WIN32, check for UTF-8 source and destination
    paths and handle as such.  Use isWinSymlinkw(), _wunlink(), _wrename() and
    _wunlink()for wide paths.  fileio.c (EG)
73. In setfileattr(), if Unicode and WIN32, check for UTF-8 path and handle as
    such.  fileio.c (EG)
74. Add print_utf8() that calls write_consolew() to write Unicode directly to
    console window if Windows and not DLL or LIB, otherwise output to mesg
    stream using zfprintf() as usual.  zip.c, fileio.c (EG)
75. Rename escape_string_to_wide() to escape_to_wide_char().  fileio.c (EG)
76. Add escapes_to_wide_string() that converts any Unicode escapes found in
    input wide string to the wide char represented.  Returns malloc'd wide
    string.  Add escapes_to_wchar_string() that converts from wchar to wide
    and calls escapes_to_wide_string().  Add escapes_to_utf8_string() that
    converts from UTF-8 and calls escapes_to_wide_string().  fileio.c (EG)
77. Add note that wide_to_local_string() no longer TRANSLITs chars not in
    the output charset.  Add Unicode note to local_to_display_string().
    Add note to utf8_to_local_string() that iconv conversion is not updated.
    Change default when HAVE_ICONV defined to calling wide_to_local_string()
    which can then call its updated iconv code rather than use old iconv
    code in utf8_to_local_string().  This all should be cleaned up shortly.
    fileio.c (EG)
78. Put UNICODE_SUPPORT block around some Unicode conversion functions.
    fileio.c (EG)
79. Update comments for get_option() to note that argfiles are now implemented.
    fileio.c (EG)
80. Move limit macros for insert_args_from_file() to zip.h.  fileio.c,
    zip.h (EG)
81. In insert_args_from_file(), add new error ZE_DEPTH and use it when
    recursion depth exceeded.  Use strmatch() to check for argfile
    extension.  Check for unsupported UTF-16 argfile.  Use unsigned char
    with isspace().  For echo directive, display pieces separately as one
    could be UTF-8 and the other local.  fileio.c, ziperr.h (EG)
82. Simplify call to unix/unsafe_prod.sh script.  unix/configure (SMS)
83. In wild_recursew(), if file does not exist, check if input path has
    Unicode escapes and, if so, convert the escapes to wchar_t characters and
    look for the path again.  This allows the user to enter a path with
    Unicode escapes and have that path match paths with those Unicode chars
    in it.  Add utf8 parameter to wild().  If utf8, use utf8_to_wchar_string()
    to convert path, else assume local path and use local_to_wchar_string().
    In procname_win32w(), convert matched wchar name to UTF-8 and filter as
    UTF-8.  Previously filtering in procname_win32w() did not allow for
    non-local characters in filters.  Modify escaped path check to match
    escaped path against iname in local charset instead of wchar path, as
    escaped path most likely in local iname field.  Escaped path check is
    only done if no match so far and is filtered using local char set.  Add
    procname_utf8() to select procname_win32w() or procname_win32() based
    on utf8 parameter.  win32/win32zip.c (EG)
84. Enable BACKUP_SUPPORT options by default, but error if not enabled.
    Enable CD option by default, but error if not enabled.  Enable su and sU
    options by default, but error if UNICODE_SUPPORT not enabled.  Enable
    UN and UT options by default, but error if UNICODE_SUPPORT not enabled.
    zip.c (EG)
85. For -@@ filename, check for Windows UTF-8 marker bytes at start of file
    and flag file contents as UTF-8 if present.  Also check if Windows Unicode
    (UTF-16) format, which is not supported.  Check first line of include file
    for "UTF-8" or "UTF8" and, if present, set UTF-8 flag and skip line.  If
    -sd, note reading paths from file and if UTF-8.  Trim leading and trailing
    white space from input paths.  zip.c (EG)
86. For UNICODE_SUPPORT_WIN32, add code for -cd that saves startup dir and
    changes to working dir using wide paths, allowing -cd to work with
    Windows Unicode paths.  zip.c (EG)
87. In copy mode, support filtering using UTF-8.  zip.c (EG)
88. Support filtering new entries using UTF-8.  zip.c (EG)
89. In zipcopy(), update note on current compression methods.  zipfile.c (EG)
90. For ZipSplit, add support for long options using get_option().  Update
    help to note that -n can now take multipliers for size, including k, m
    and g, and new options -hh (more help) and -so (show options).  Add
    extended_help() with first draft of extended help.  Add show_options().
    zipsplit.c (EG)
91. For ZipSplit, fix an issue that caused crashes in some cases.  The
    issue was related to improper incrementing of a pointer.  The following
    type and cast changes fixed it.  In simple(), change k from extent to
    uzoff_t to avoid a cast that was causing trouble.  Remove (ulg huge *)
    cast.  Add (extent) cast to return value.  In descmp(), update note
    to say that pointers to uzoff_t's are now coming in.  In greedy(),
    update some comment alignments.  Change extent variables to uzoff_t
    to avoid casts.  Add (uzoff_t) casts where needed.  Avoid m = -1 by
    changing t = 0 to t = 1.  Update qsort() call to work on uzoff_t.  Add
    (size_t) cast to malloc().  Add (extent) cast to return.  zipsplit.c (EG)
92. For ZipSplit, add options[] table to support long options.  Assign long
    names to options.  Add new command line processing.  zipsplit.c (EG)
93. For ZipSplit, update locale support to that used by Zip.  zipsplit.c (EG)
94. For ZipSplit, set out_path to empty string to keep readzipfile() happy.
    zipsplit.c (EG)
95. For ZipSplit, add used_simple to keep track of use of simple.  Free
    tempath if used.  When writing index, change use of zip_fzofft() to
    just outputting index as unsigned long.  This puts an upper limit of
    on the number of disks, but 4 billion disks is probably a reasonable
    upper limit.  zipsplit.c (EG)
96. Add shellapi.h include to support reading Windows wide command line.
    Add is_atleast_WinXP().  Add compiler version information for _WIN64
    compile.  win32/win32.c (EG)
97. In wide_to_local_string(), now only ANSI 7-bit characters are
    passed through.  All other characters are converted to Unicode
    escapes.  This provides for a consistent repeatable conversion that
    can be used as command line input.  Allowing transliteration (best
    guessing) of characters not directly in the destination charset was
    not all that helpful and provided marginal value at best.  Typically
    the output looked like gibberish.  Replacing missing characters by
    '_' or '?' ends up creating many paths with just '_' or '?' for a
    directory tree of Japanese (for example) file names, likely with
    many collisions.  By using Unicode escapes the paths get long but
    more or less stay unique and predictable, and can be converted back
    to the original Unicode (unless the escape sequences are part of the
    original names).  win32/win32.c (EG)
98. In insert_args_from_file(), update file extension detection to not
    assume size of suffix and to use strmatch().  Use fopen_utf8() instead
    of fopen().  Display message when argfile is detected to be UTF-8.  Pass
    unsigned char instead of char to isspace().  fileio.c (EG)
99. Update zipmessage() and zipmessage_nl() to handle UTF-8 on Win32 via
    print_utf8() and change uses of zipmessage_utf8() to zipmessage() and
    zipmessage_nl_utf8() to zipmessage_nl().  Comment out zipmessage_utf8()
    and zipmessage_nl_utf8().  Update ziperr() to handle UTF-8.  Change
    #if defined(ZIPLIB) || defined(ZIPDLL) to #ifdef ZIP_DLL_LIB.  fileio.c,
    zip.c (EG)
100.Update -UN option to allow negation of the option values.  Error if
    a value negated that does not support it.  Allow negating -UN=ESCAPE
    (as -UN=ESCAPE-), LOCAL, UTF8, and ShowUTF8.  Now if bad value include
    in error message.  zip.c (EG)
101.Update -sf, su, and sU to show UTF-8 on Windows console when appropriate.
    Fix show options to properly show files that would be Freshened, Deleted,
    or Added when used with -FS (file sync).  zip.c (EG)
102.Include archive name in some -sd messages.  Add -sd message after
    reading archive.  zip.c (EG)
103.Add macro FIFO_SUPPORT to control enabling of Unix -FI option to allow
    reading a live FIFO (named pipe).  This feature might be applicable to
    other platforms in the future.  zip.h (EG)
104.Add note that WSIZE needs to be kept in sync between C and assembler
    code.  zip.h (EG)
105.Add <errno.h> include.  zipcloak.c (EG)
106.Change inc_path to in_path in read_inc_file() for consistency.  (in_path
    is set to inc_file so no functional difference.)  zipfile.c (EG)
107.Add note that deflate sets final value of binary/text flag.  zipup.c (EG)
108.Fix -l (UNIX -> WINDOWS) line end conversion code to read at least one
    byte.  (Returning 0 bytes tells LZMA that it reached end of file.)  Fix
    -ll (WINDOWS -> UNIX) to not always read "size - 1" (which can result in
    zero bytes being read.  Instead, read size if size == 1, but otherwise
    read "size - 1" to leave space for end \n.  Instead of assuming \n follows
    an end \r, actually read next byte and append.  Does not handle case where
    another \r follows \r (as \n may follow second \r), but that should not
    happen in pure text file.  Could be fixed by tracking last read char
    from previous buffer.  zipup.c (EG)
109.Change some sub-"int" types to "int", for easier function argument
    passing, mainly involving AES salt.  Also see changes in AES WG code
    package.  crypt.c, globals.c, zip.c, zip.h, zipfile.c, zipup.c,
    crypt.h (SMS)
110.Add proper file path/name generation for backup control, log, and
    output files on VMS, including excluding adding '/' directory
    separator.  zip.c (SMS)
111.Add support for -cd (macro: CHANGE_DIRECTORY) on VMS.  tailor.h,
    vms/vms.c, zip.h.
112.Update VMS-style CLI interface to support new options:
    /[NO]ARGFILES (-AF), /BACKUP = (CONTROL, DIRECTORY, LOG, NAME,
    TYPE) (-BC, -BD, -BL, -BN, -BT), /DEFAULT_DIRECTORY (-cd),
    /ENCRYPT = SHORT_PASSWORD (-ps), /PREFIX = ([ ALL | NEW ], PATH)
    (-pa, -pp), /STATISTICS = TIME (-pt), /[NO]STREAM (-st),
    /VERSION = BRIEF (-vq)  vms/cmdline.c, vms/vms.c, vms/zip_cli.cld (SMS)
113.Add support for using FAKE_SALT to set a known salt for debugging.
    zip.c, zipup.c (SMS)
114.Comment out add_crypt_aes_local_extra_field() and
    add_crypt_aes_cen_extra_field() prototypes.  zipfile.c (SMS)
115.In finish(), change delta from uzoff_t to zoff_t as VS 6 not able to
    convert unsigned Int64 to double.  zip.c (EG)
116.Fix missed change of aes_strength from uch to int.  zip.h (EG)
117.In Unix procname(), add parentheses to allow adding debugging printf().
    Fix code that allows matching names with Unicode escapes if no match
    normally.  Now UTF-8 names, UTF-8 patterns, Unicode escaped names and
    Unicode escaped patterns should all match when using a UTF-8 locale.
    When using a non-UTF-8 locale, matching is in that locale's character
    set, but Unicode escapes will still expand to UTF-8 if used.
    unix/unix.c (EG)
118.Only use <sdkddkver.h> if Windows version is at least 1400.  If less,
    just check _MSC_VER as that include does not exist.  (Windows XP VS 6 is
    1200.)  win32/osdep.h (EG)
119.Minor updates to VS 2010 DLL readme.  windll/vc10/readme10.txt (EG)
120.Fix typo in print_utf8.  fileio.c (EG)
121.Change some missed errbuf to ebuf in ziperr.  zip.c (EG)
122.Do not ask for encryption password if only showing files (show_files is
    set).  Change error from ZE_PARMS (parameter error) to ZE_CRYPT (encryption
    error) when password issue.  Do not perform second set of password checks
    unless keyfile used.  zip.c (EG)
123.When using -sf (show_files) with -FS (filesync) do not show total count
    and size summary.  zip.c (EG)
124.In ZipSplit, if USE_LONG_TEMPLATE set, increase output path template size
    to include more of the output path, and so allowing longer output file
    names.  Some ports, like CMS, do not support this, and this is disabled
    on those ports (MSDOS, RISCOS, QDOS, VM_CMS).  zipsplit.c (EG)


------------------------ April 4th 2015 version 3.1d36 ------------------------
 1. Add back missing VMS files.  build_zip.com, check_large.com,
    collect_deps.com, cppcld.com, find_bzip2_lib.com, hlp_lib_next.com,
    mod_dep.com, optgen.com (SMS)
 2. Change zfopen macro for WIN32 64-bit file open from "fopen" to
    "fopen_utf8", allowing WIN32 with Unicode support to open files with
    UTF-8 paths.  Replace all fopen_utf8() with zfopen() as it was previously,
    allowing VMS to supply multiple additional parameters to fopen as before.
    Move fopen_utf8() into UNICODE_SUPPORT_WIN32 block as now only used by
    WIN32 when Unicode enabled.  Remove alternative fopen() implementation of
    fopen_utf8() as should never be used.  Only define zfopen to fopen_utf8
    if UNICODE_SUPPORT_WIN32.  tailor.h, fileio.c, zip.c, zipcloak.c,
    zipfile.c (SMS, EG)
 3. Put unicode_show and z->uname into UNICODE_SUPPORT block.  zipup.c (SMS)
 4. Updates to WhatsNew.  WHATSNEW. (EG)
 5. Remove redundant "s =" from MB_NEXTCHAR() macro use.  Label end of
    commented out #if 0.  fileio.c, zipfile.c (EG)

----------------------- April 15th 2015 version 3.1d37 ------------------------
 1. Add back missing files.  README.CR, bzip2/makefile.msc, bzip2/sample1.ref,
    bzip2/sample2.ref, bzip2/sample3.ref, bzip2/vms/collect_deps.com,
    bzip2/vms/mod_dep.com, macos/readme.1st, msdos/makefile.msc,
    msdos/readme.dos, novell/m.cmd, novell/zip.lnk, proginfo/perform.dos,
    win32/makefile.w32, win32/makenoas.w32,
    windll/examples/csharp10/zip/app.ico,
    windll/examples/csharp10/zip/backup/app.ico,
    windll/examples/csharp10/zip/bin/debugcsharpinfozipsample.exe,
    windll/examples/csharp10/zip/bin/debugcsharpinfozipsample.vshost.exe,
    windll/examples/csharp10/zip/bin/debugcsharpinfozipsample.vshost.exe.manifest,
    windll/examples/csharp10/zip/obj/debug/csharpinfozipsample.exe,
    windll/examples/old/csharp/zip/app.ico,
    windll/examples/vb10/zip31vbexample/app.config (SMS)
 2. Add VMS build file for bzip2.  This file from UnZip 6.10c18.
    bzip2/buildbz2.com (SMS)
 3. Add Int32 cast to bzip2 code to address issues with 64-bit platforms.  Make
    backup copy of original file.  bzip2/compress.c, bzip2/compress.c_orig (EG)
 4. Update WhatsNew to include latest feature additions and updates.
    WHATSNEW (EG)
 5. For WIN32 Visual Studio 2010, include build configuration and platform in
    version information.  win32/win32.c, zip.c, win32/vc10/zip/zip.vcxproj,
    win32/vc10/zipcloak/zipcloak.vcxproj, win32/vc10/zipnote/zipnote.vcxproj,
    win32/vc10/zipsplit/zipsplit.vcxproj (EG)
 6. Add extended help on use of -fz (--force-zip64).  Add section on Large files
    and Zip64.  Also add note to manual.  zip.c, man/man1/zip.1 (EG)
 7. Implement use of placeholder Zip64 extra field (current tag 0x5048 ("PH"))
    to allow changing to Zip64 when the uncompressed size of an input file
    exceeds a threshold dependent on the compression method and use of -l, but
    is still less than the 4.0 GiB Zip64 threshold.  Threshold set by
    subtracting a margin for the particular compression method (set in zip.h)
    from 4.0 GiB (2.0 GiB if -l used).  Not used if output not seekable
    (use_descriptors set) as requires updating already written local header.
    NO_USE_ZIP64_PLACEHOLDER disables use of this feature.  Update
    add_local_zip64_extra_field() to recognize placeholder extra field and add
    add_local_zip64_placeholder_extra_field().  Add note to INSTALL.  Using
    this approach avoids need for -fz in most cases and makes handling files
    in the vague uncompressed file size region just before Zip64 is required
    automatic.  INSTALL, zip.h, zipfile.c (EG)
 8. Fix bug in putlocal() and putcentral() where Windows OEM conversions were
    being done to UTF-8 paths.  If UTF-8 native mode is being used (now the
    default for modern Windows ports) UTF-8 should be saved directly without
    OEM (or other) conversions.  zipfile.c (EG)
 9. Minor updates to ToDo.  TODO (EG)
10. Change MAX_PATH_SIZE limit from 8192 to 32768 as that is the max size (in
    bytes) that a Windows path can be.  Change MAX_ZIP_ARG_SIZE from 4096 to
    8192.  (This should cover most input arguments, but it may make sense to
    increase this to 32768 also.)  zip.h (EG)
11. Define AESWG for compression method 99 (WinZip AES).  zip.h
12. Add notes that USE_ZIPMAIN and NO_ZPARCHIVE are now deprecated.  zip.h (EG)
13. Add note that most EF tags are now defined in zip.h.  zipfile.c (EG)
14. Update comments in putlocal().  zipfile.c (EG)
15. Add path length check in putlocal() to putcentral().  Truncation at MBCS
    character boundaries.  zipfile.c (EG)
16. Restore Win32 Visual Studio 2010 .filter files that sort *.h and *.c files.
    win32/vc10/zip/zip.vcxproj.filters,
    win32/vc10/zipcloak/zipcloak.vcxproj.filters,
    win32/vc10/zipnote/zipnote.vcxproj.filters,
    win32/vc10/zipsplit/zipsplit.vcxproj.filters (EG)

------------------------ May 25th 2015 version 3.1d38 -------------------------
 1. Updates to Zip manual, including case changes on compression methods,
    updating note on uncompressible files and reverting to store, updating
    default Store (no compression) list to match updates, and changing
    UnZip 6.10 to UnZip 6.1 to match change in UnZip.  man/man1/zip.1 (SMS)
 2. Sort default Store list extensions, add .txz (for Tar XZ compressed
    file).  zip.h (SMS)
 3. Minor updates to Zip manual.  man/man1/zip.1 (EG)
 4. Change MAXCOM (max size of a comment line) to MAXCOMLINE.  This is to
    distinguish this from MAX_COM_LEN, the max total size of a comment.
    zip.h, zip.c (EG)
 5. Add new string_replace() that allows replacing a substring in a string
    with another string.  Add REPLACE_FIRST and REPLACE_ALL macros to use
    with string_replace().  Not MBCS aware, currently just works on bytes,
    not characters.  zip.h, fileio.c (EG)
 6. Move prototype for string_dup() to more appropriate location.  Group
    with string_replace() prototype.  In fileio.c, move string_dup() next
    to trim_string() and string_replace().  zip.h, fileio.c (EG)
 7. Reduce width of comment.  Minor comment updates.  Define FEATURE_LIST_SIZE
    as the size of the feature list.  api.c (EG)
 8. Add description for CHANGES at top of CHANGES, mentioning WhatsNew.
    CHANGES (EG)
 9. Add note to crypt.c that work still needs to be done to coordinate Zip
    splits with UnZip and get Zip, UnZip, and ZipCloak to support splits.
    In zipbare(), when a data descriptor is being dropped as no longer needed,
    set the probably wrong local CRC to the correct CRC from the central
    header.  Cast size and z->siz to size_t in IZ_MIN() compares.  (This
    quiets the compiler, but the actual sizing needs to be looked at.)
    crypt.c (EG)
10. In bfwrite(), update some comments.  Fix bug when using descriptors where
    the first split was not being closed.  This can happen when Traditional
    encryption is used, which uses descriptors, but the output is seekable
    and so use_descriptors is not set.  Now only delay closing the split when
    putlocal() will be rewriting the local header.  fileio.c (EG)
11. Move entry comment code in zip.c used also by putlocal() to new
    get_entry_comment() in fileio.c.  This is used for adding/updating entry
    comments except for LIB/DLL which use ecomment().  In get_entry_comment(),
    allow display of multi-line entry comments.  Add ability to add multi-line
    entry comments.  (If existing comment, hit ENTER to keep, TAB ENTER to
    remove, SPACE ENTER to enter multi-line comment, or just type in the
    single line comment.  SPACE ENTER is new.)  Now allocate memory for
    comment buffers on stack when get_entry_comment() called, rather than
    using malloc().  Use string_replace() to add a space before each line
    of old comment to indent it for display.  fileio.c, zip.h, zip.c,
    zipfile.c (EG)
12. Update comments in LIB example.  izzip_example.c (EG)
13. Change VERSION macro from "3.1d38b BETA" to "3.1d38b-BETA", adding a
    dash so that the version is always a single word (no space between).
    In quick_version(), change quick version (-vq) format from
    "zip 3.1.0  2015-04-22  (zip 3.1d38b BETA)" to
    "zip 3.1d38b-BETA (2015-04-22) by Info-ZIP (www.info-zip.org)".  After
    further discussion, change format of quick version to
    "Zip 3.1d38c-BETA (2015-04-28)  (c)2015 Info-ZIP  http://info-zip.org".
    Similar formats will be used by UnZip and the self extractor.
    revision.h, zip.c (EG)
14. Add \n to fix missing line end in ziperr().  zip.c (EG)
15. Update comment regarding use of -fz (--force-zip64) to account for
    recent changes to automate Zip64 decision, especially when streaming.
    zip.c (EG)
16. In version_info(), update description for WIN32_OEM to note OEM
    conversions not done for UTF-8.  Replace puts() with zprintf() so
    "Zip special compilation options:\n" can be redirected for LIB/DLL.  Add
    display of current charset as retrieved by set_locale().  zip.c (EG)
17. Comment out apparently no longer needed char *p.  zip.c (EG)
18. Add error if -c (entry comments) used with -sf (show files).  zip.c (EG)
19. If comadd (entry comments) and kk == 3 (no input files), i.e.
    "zip -c archive", set action to ARCHIVE to allow filtering.  Skip "copy
    requires --out" error when processing comments (comadd).  Remove "comments"
    from copy mode warning.  Remove "copying:" messages when updating entry
    comments.  (Stay quiet until reach entry comment update code at end.  This
    could result in a long pause if updating comments of a huge archive.)
    zip.c (EG)
20. Replace use of 32767 and 32766 as comment max length with MAX_COM_LEN.
    zip.c (EG)
21. Update ZipCloak extended help by removing version insertion and just
    including "ZipCloak 3.1" in the help.  This can be updated when the help
    is updated.  Version and date insertion still is used in the main help.
    Minor extended help updates.  Start standardizing on "text" as array with
    help text instead of using "extended_help_info" and make help array local
    to extended_help().  Add note to use -so to see list of options, add
    show_options().  Update options table.  Add long option --license to -l.
    Change long option --allow-short-password to --short-password, which fits
    better when listing options.  Enable -Y all the time, but add error if -Y
    used but not applicable (for example, have only one method).  Add ZipCrypto
    as alternate name for Traditional.  Split up encryption methods warning for
    easier formatting.  zipcloak.c (EG)
22. Add new error ZE_SPLIT.  Add check for split archive and generate error
    ZE_SPLIT if ZipCloak tries to process split archive.  Some day Zip Cloak
    should support split archives and then this check can be removed.
    ziperr.h, zipcloak.c (EG)
23. Only verify password (ask for it a second time) if not decrypting.  Only
    verify password lengths a second time if using a keyfile.  zipcloak.c (EG)
24. In readlocal(), only do Windows OEM translations if UTF-8 bit not set.
    In scanzipf_regnew(), initialize eocdr_disk and eocdr_offset.  Skip
    "cannot update a split archive" error if out_path NULL.  (A NULL out_path
    is used to flag that a utility, not Zip, is calling scanzipf_regnew().)
    This supports crypt.c.  zipfile.c (EG)
25. Update comment to putlocal().  When output not seekable, use Zip64
    threshold to decide if Zip64 needs to be set in local header to prepare
    for Zip64 data descriptor.  Support previous approach if
    USE_ZIP64_PLACEHOLDER is not defined.  For putlocal() and putcentral(),
    if utf8_native, make sure UTF-8 bit is set.  This results in all entries
    being flagged as having UTF-8 names, and avoids Windows OEM translations
    on all names, even ANSI.  The current standard is for UTF-8 bit names to
    always be used as is.  zipfile.c (EG)
26. Update comment to putextended() to note changes from use of Placeholder.
    zipfile.c (EG)
27. Increase WRBUFSIZ to max size of Windows path (32K), as this needs to
    hold a path.  zipnote.c (EG)
28. Add options[] table and long option support to ZipNote.  Add extended
    help and show options to ZipNote.  Update ZipNote help to include long
    options.  Add Windows specific example to help, showing notepad as editor.
    (The old command line editor seems gone in newer versions of Windows.)
    Add note to see extended help for more on using "@=name".  Add details
    for modifying ZipNote output to extended help.  On WIN32, check for UTF-8
    on stdin and generate error if found, noting UTF-8 not yet supported.
    zipnote.c (EG)
29. Minor rewording of floppy comment.  Add long options to help.  Add 3.1 to
    extended help title.  Move version_info().  Add support for VM_CMS to
    long options.  Add "license" to "l" (small L) option.  Fix duplicate ID
    for -so.  zipsplit.c (EG)
30. Fix bug on Windows where, when using Traditional (ZipCrypto) encryption
    and splitting, the first split would not close, leaving a temp file.
    The problem was in open_for_append(), which on Windows would falsely
    return true.  Fix was to comment out Windows code in open_for_append() as
    on Windows a separate check is used to detect if the just opened output
    file already has contents.  zipup.c (EG)
31. For testing, enable AES for WIN32 vc10 Release Win32 configuration.
    Sort preprocessor lists for vc20 projects to put AES and common items
    first, allowing "All configurations" setting to be more effective.
    win32/vc10/zip/zip.vcxproj, win32/vc10/zipcloak/zipcloak.vcxproj (EG)
32. Move unfinished C# and old WINDLL examples to new archive notready.zip.
    This removes very long paths from the Zip source kit that were causing
    problems on VMS and removes old examples that are not directly applicable
    to this latest version of Zip.  This will likely be resifted before
    release.  Update WINDLL examples readme.  windll/examples/csharp10/*,
    windll/examples/old/*, windll/examples/notready.zip,
    windll/examples/readmeex.txt (EG)
33. Updates to extended help on line ends.  zip.c (EG)
34. Split CHANGES into CHANGES30 (entries up to release of Zip 3.0) and CHANGES
    (all entries after release of Zip 3.0).  CHANGES30, CHANGES (EG)
35. Define macro UNIX_APPLE when UNIX and APPLE (Mac OS X).  Replace uses of
    "defined(UNIX) && defined(__APPLE__)" with UNIX_APPLE.  zip.h, fileio.c,
    zipup.c (EG)
36. Change newname() parameter "flags" to "zflags" to indicate these are flags
    specific to Zip (not the local or central flags).  Replace FLAGS_DIR and
    FLAGS_APLDBL with ZFLAG_DIR and ZFLAG_APLDBL to indicate these are ZFLAG
    masks.  Replace IS_FLAGS_DIR and IS_FLAGS_APLDBL with IS_ZFLAG_DIR(zflags)
    and IS_ZFLAG_APLDBL(zflags), the old macros hiding what was being checked
    and the new macros able to test other than "flags" (can also test
    z->zflags).  Add ZFLAG_FIFO and IS_ZFLAG_FIFO(zflags) to support tracking
    which entries are FIFOs (named pipes).  Remove UNIX APPLE guard defines
    around zflag use, changing zflag use from UNIX APPLE only to general use
    to support use with FIFOs.  zflags now always available in flist and zlist.
    Propagate zflags to f->zflags and z->zflags.  Use ZFLAG masks instead of
    hard-coded constants like 1 in newname() calls.  fileio.c, zip.h, zipup.c,
    unix/unix.c, vms/vmszip.c (EG)
37. Define STDIN_PIPE_PERMS and set to 0600.  This is the default set of
    permissions given to a file created from stdin.  (On Linux this seems the
    default, but other ports apparently assign stdin various permissions, some
    of which don't make that much sense.  Now all ports assign stdin content
    the same permissions.)  zip.h (EG)
38. Add note that struct zlist no longer usable with old scanzipf_reg() without
    significant changes.  zip.h (EG)
39. Add note that WIN32 with Unicode enabled should not be using newname(), but
    should be using newnamew() instead.  It does.  This is just a reminder.
    fileio.c (EG)
40. In insert_args_from_file(), handle cases when can't open argfile because
    "no such file" and "too many files open".  The latter can occur if argfile
    recursion tries to open tens of thousands of argfiles across multiple
    argfile recursion branches.  This case now handled more gracefully.  Also
    use perror() to output error.  Add <errno.h> to get error codes.
    fileio.c (EG)
41. Update WhatsNew to note OEM conversions no longer applied to Unicode on
    Windows.  (This should be considered a bug fix.)  WHATSNEW (EG)
42. Add note to extended help that if a file contains mix of Unix and Windows
    line ends, the -l and -ll conversions can't be reversed.  Update extended
    help on entry and archive comments, adding mention of multi-line entry
    comments and noting support for UTF-8 comments currently limited.  (Given
    lack of support for Unicode comments in other utilities, adding Unicode
    comment support in Zip should be handled carefully.)  zip.c (EG)
43. Add check to generate error if try to grow a split archive.  zip.c (EG)
44. Replace use of "f->flags == 0" with "!IS_ZFLAG_APLDBL(f->zflags)".
    zip.c (EG)
45. Replace "try:" -r no matches recommendation that reparsed command line
    with simple static suggestion:
    "maybe try something like:  zip -r archive . -i pattern1 patter2 ...".
    This fixes possible overflow bug where a large list of patterns was
    overflowing errbuf.  This again was replaced by a simple warning:
    "for -r, be sure input names resolve to relative paths (or use -i)".
    zip.c (EG)
46. Check if archive comment (-z) comming from a terminal.  If not, note that
    the archive comment is coming from stdin.  Display the comment read from
    stdin.  zip.c (EG)
47. Fix bug in archive comment code where line end was being inserted one
    spot off (too far), creating line end problems (an extra unmatched \n)
    in the archive comment.  Also NULL termination of comment was off by one
    (one too far), which has been fixed.  Note that UnZip adds line end at end
    if one not present.  zip.c (EG)
48. Add error if a Zip64 margin is not set for a compression method.  This
    should catch if a new compression method is added but a threshold is not
    set for it.  zipfile.c (EG)
49. Remove commented out fflush(stdout).  This is leftover from debugging when
    splits were being developed.  zipfile.c (EG)
50. In zipup(), add is_fifo_to_skip variable that is set if the ZFLAG_FIFO
    flag is set and allow_fifo is not.  If is_fifo_to_skip, skip reading named
    pipe (handle similar to a symlink or directory, i.e. skip content and just
    store meta data).  This supports storing named pipes without stopping to
    read their content (and hanging if the named pipe is not fed).  Before
    this change Unix named pipes were skipped if -FI not used.  Now named
    pipes are always added to archive, but content is skipped without -FI.
    In procname(), no longer skip FIFO, just output warnings. zipup.c,
    unix/unix.c (EG)
51. Add note regarding looking for data descriptors.  zipup.c (EG)
52. Add note that zwopen_read_long() opens files (on Windows) with paths
    that may be greater than 256 bytes.  zipup.c (EG)
53. Allow restart of store/compression if file labeled "text" is later found
    to be "binary".  Add ALLOW_TEXT_BIN_RESTART to control, with note.  Add
    variable restart_as_binary, set when a restart is being done.  Uses goto
    label Restart_As_Binary.  Output must be seekable and not split, and input
    must not be stdin or special device.  If restart, reset key byte counts,
    seek back to start of entry and jump back to start of processing.  zip.h,
    zipup.c (EG)
54. Add note that "new" IZ_CRYPT_AES_WG_NEW code is no longer very new and
    should not be used without much work.  zipup.c (EG)
55. Move free((zvoid *)b) earlier.  zipup.c (EG)
56. For Unix, if input stdin, change mode from FIFO (S_IFIFO) or character
    device (S_IFCHR) to regular file (S_IFREG).  Change permissions to
    STDIN_PIPE_PERMS (currently 0600).  unix/unix.c (EG)
57. On Windows, now always just store the file mode, ignoring any Unix
    style attributes from stat().  Previously this was only done when
    WIN32_OEM was set.  win32/win32zip.c (EG)
58. Comment out unused trim_string().  fileio.c (SMS)
59. Add support for compilers without prototype support (NO_PROTO) to
    functions string_dup(), local_to_display_string(), zprintf() and
    zfprintf() (though with no variable arg list support at this point),
    zperror(), dump_args(), insert_args_from_file(), and suffixes_option().
    fileio.c, zip.c (SMS, EG)
60. Remove NULL case for setting u_p_nodename.  zip.c (SMS)
61. Comment out prototypes for add_Stream_local_extra_field() and
    remove_extra_field() and add NO_PROTO support.  zipfile.c (SMS, EG)
62. Add NO_PROTO support to astring_upper_lower() and ustring_upper_lower().
    zipfile.c (SMS, EG)
63. Add AES vender/version detection to ZipCloak.  Issue warning when invalid
    AES mode detected.  If AES version AE-2, in zipbare() recalculate CRC when
    decrypting and replace zero CRC with real CRC, then seek back and rewrite
    local header.  crypt.c (EG)
64. In ZipCloak, if encryption method specified as "aes" or "aes1", issue
    warning that method is ambiguous, rather than (just) "unknown method"
    warning.  Similar for zip.  zipcloak.c, zip.c (EG)
65. In newnamew(), replace use of isdir with zflags for consistency with
    changes to newname().  Use IS_ZFLAG_DIR(zflags) instead of isdir.  Fix bug
    by setting z->zflags = zflags and f->zflags = zflags.  fileio.c (EG)
66. Update some prototypes to what may become a standard format using #ifndef
    NO_PROTO to switch between proto and no proto versions.  Impacts
    trim_string(), string_dup(), local_to_display_string(), zprintf(),
    zfprintf(), zperror(), dump_args(), insert_args_from_file(),
    suffixes_option(), add_Stream_local_extra_field, remove_extra_field(),
    ustring_upper_lower(), astring_upper_lower(), putlocal(),
    simple_encr_passwd() and iz_file_read_bt().  Add OF to
    wchar_to_wide_string() and wide_to_wchar_string().  fileio.c, zip.c,
    zipfile.c, zip.h (EG)
67. Update Zip source kit archive comment.  Target to Zip 3.1d.
    zip-comment.txt (EG)
68. In (short) help, for -x and -i change "names" to "paths".  "paths" seems
    improvement over "names".  "exclude following patterns" would not be
    technically correct, as paths MATCHING patterns are what are excluded,
    not the patterns themselves.  zip.c (EG)
69. Minor updates to extended help to clarify -u, -f and -j.  Clarify "Include
    and Exclude" section.  zip.c (EG)
70. In Unicode_Tests(), remove UTF-8 string constant and replace with ANSI
    string using escapes.  zip.c (EG)
71. Fix minor bug setting methodstring where if mthd was not a compression
    method, it was assumed Store.  Now, Store is explicitly checked for and
    "unknown method" returned if not a specificly defined method.  This mainly
    impacts the LIB/DLL.  zipup.c (EG)
72. In iz_file_read(), if converting CR LF to LF (-ll), and CR at end of
    buffer and buffer size > 1, save that CR until the next call of
    iz_file_read() so can determine if a matching LF follows the CR.  This
    allows CR LF to LF conversions to be handled consistently, regardless of
    where the CR occurs in a buffer.  If size = 1 and that char is CR, read
    next char (to avoid returning zero size buffer which flags EOF).  If the
    next char is LF, drop CR and return LF.  If next char not LF, output
    unmatched CR and save next char for next read.  Add variables
    char_was_saved, saved_char and eof_reached.  zipup.c (EG)
73. Minor updates to -Z option section of manual, mainly standardizing
    compression method name formats.  man/man1/zip.1 (EG)
75. Update WhatsNew.  WHATSNEW (EG)
76. Fix ZipNote bug where entry name was not updating when UTF-8 bit was set.
    In this case putlocal() and putcentral() use z->uname, which ZipNote was
    not updating.  Now when fix = 3 uname is updated.  zipfile.c (EG)
77. Move is_text_buf outside UTIL block, making it available to ZipNote.
    util.c (EG)
78. Add check for binary in archive (zip file) comment and exit with error if
    found.  Issue warning if archive comment contains UTF-8.  (As long as no
    binary is in the archive comment, a PK signature can't appear, which is
    the main thing to avoid.  UTF-8 itself can't contain a signature, so should
    be safe for the archive comment, but UTF-8 archive comments are not handled
    by any other utility out there.)  zip.c (EG)
79. Add !NO_PROTO case for is_utf8_string() and is_text_buf() prototypes.
    zip.h (EG)
80. In zipcopy(), if fix = 3 (ZipNote mode), set localz->uname and z->uname to
    UTF-8 version of z->iname.  This allows ZipNote to set UTF-8 names.
    zipfile.c (EG)
81. In ZipNote, if UNICODE_SUPPORT_WIN32 set unicode_show = 1 so ZipNote
    displays Unicode paths on Windows.  zipnote.c (EG)
82. Comment out "UTF-8 input not yet supported" message if UTF-8 found when
    reading stdin.  Still strip UTF-8 BOM if present.  When looking for
    matches to -w input file names, check z->uname in addition to z->zname so
    can match UTF-8 paths.  Issue warning if entry comment has UTF-8.  Issue
    warning if archive comment has UTF-8.  Issue error if archive comment has
    binary.  zipnote.c (EG)
83. Add thresh_mthd to zlist to pass to putlocal() the compression method to
    use to determine Zip64 threshold.  Usually set to z->how.  Add macro
    COPYING as method thresh_mthd is set to when copying entry using zipcopy().
    Set COPYING to 9998 and change CD_ONLY to 9999.  Set thresh_mthd in
    scanzipf_fixnew() and scanzipf_regnew().  Use z->thresh_mthd to select
    Zip64 margin to apply to threshold in putlocal().  Set thresh_mthd to
    COPYING in zipcopy().  zip.h, crypt.c, zipup.c, zipfile.c (EG)
84. Add note regarding reverting to store to Zip64 thresholds comment.
    zip.h (EG)
85. Update announcement.  zip31d.ann (EG)

------------------------ May 29th 2015 version 3.1d39 -------------------------
 1. Reformat definitions of szRootDir, szExclude, szInclude and szTempDir.
    Remove NULL checks of preallocated arrays.  api.c (SMS)
 2. Adjustments to account for CRC32() now being used by zipbare(), including
    changing IZ_CRYPT_TRAD to IZ_CRYPT_ANY.  crypt.c (SMS)
 3. In check_dup_sort(), if UNIX_APPLE_SORT, if sort_apple_double (set by
    --apple-double or when compiled on Unix Apple), sort Zip added "._"
    AppleDouble files (detected using IZ_ZFLAG_APLDBL()) after files they go
    with.  If sort_apple_double_all (set by --apple-double), also sort any
    "._" files found on the file system, allowing recreating of ditto
    compatible archive on other platforms.  Sorting is done by changing iname
    from "._filename" to "filename@" where @ is character \01, then restoring
    original names after sort.  Define sort_apple_double and set to 1 if
    UNIX_APPLE, otherwise 0.  Define sort_apple_double_all and set to 0.  Add
    option -ad/--apple-double.  Now sort found list if UNIX_DIR_SCAN_SORT set
    instead of UNIX set, and now if sort_apple_double set.  Add saved_iname to
    flist when UNIX_APPLE_SORT for storing original path.  fileio.c, zip.h,
    globals.c, zip.c (EG)
 4. In check_dup_sort(), change tempbuf from size FNMAX+4081 to ERRBUF_SIZE + 1
    for consistency.  fileio.c (EG)
 5. In get_entry_comment(), change %d to %ld in MAX_COM_LEN message.
    fileio.c (SMS)
 6. Add section in extended help on Unix Apple (Mac OS X).  zip.c (EG)
 7. Change additional "defined(UNIX) && defined(__APPLE__)" to UNIX_APPLE.
    zip.c (EG)
 8. Change "Licence" to "License".  zip.h (SMS)
 9. Add missing "#  ifndef FIFO_SUPPORT".  zip.h (EG)
10. Set UNIX_DIR_SCAN_SORT if UNIX.  Set UNIX_APPLE_SORT by default, and if
    UNIX_APPLE also set UNIX_DIR_SCAN_SORT.  zip.h (EG)
11. Comment out CRC_TABLE_ONLY define as CRC32 now always used somewhere.
    zip.h (SMS)
12. Remove redundant comment start from "Store method" comment.  zip.h (SMS)
13. Move is_utf8_string() out of UNICODE_SUPPORT block.  fileio.c, zip.h (SMS)
14. Move references to uname within UNICODE_SUPPORT blocks.  zipfile.c (SMS)
15. Move compare of z->uname to within UNICODE_SUPPORT block.  zipnote.c (SMS)
16. Updates to extended help.  Mostly formatting, but some content updates.
    zip.c (EG)

------------------------ May 29th 2015 version 3.1d40 -------------------------
 1. Replace additional UNIX && APPLE with UNIX_APPLE.  fileio.c, globals.c,
    zip.c (EG)
 2. On Unix Apple (Mac OS X), disable AppleDouble sorting if sequester option
    used.  Warn when -as and -ad used together that -ad ignored.  zip.c (EG)

------------------------ June 5th 2015 version 3.1d41 -------------------------
 1. Move compatibility testing results gathered so far to new file.  Plan
    additional updates as time permits.  Need to work on the disclaimer.
    proginfo/compatib.txt (EG)
 2. Restore files that went missing after zip31d37.  README.CR,
    bzip2/buildbz2.com, bzip2/makefile.msc, bzip2/sample1.ref,
    bzip2/sample2.ref, bzip2/sample3.ref, bzip2/vms/collect_deps.com,
    bzip2/vms/mod_dep.com, macos/readme.1st, msdos/makefile.msc,
    msdos/README.DOS, novell/m.cmd, novell/zip.lnk, proginfo/perform.dos,
    vms/build_zip.com, vms/check_large.com, vms/collect_deps.com,
    vms/cppcld.com, vms/find_bzip2_lib.com, vms/hlp_lib_next.com,
    vms/mod_dep.com, vms/optgen.com, win32/makefile.w32,
    win32/makenoas.w32 (EG)
 3. Indent change.  zipnote.c (SMS)
 4. Add VMS messages for new errors ZE_DEPTH and ZE_SPLIT.
    vms/zip_msg.msg (SMS)
 5. Updates to "Extended Local File Header Extra Field" ("streaming extra
    field").  proginfo/extrafld.txt (EG)
 6. Update AppleDouble pre-sort to also sort sequestered ("__MACOSX/") paths
    under the matching primary path.  If multiple AppleDouble and/or
    sequestered paths exist, the first of these will likely end up after the
    primary path.  (This should be verified.)  Should not happen if the Zip
    AppleDouble flag is set, as there should only be one matching "._" or
    sequestered file generated by Zip for each primary file.  When using -ad
    and getting AD files from the OS (-ad currently does not support
    sequestered files), user will need to ensure there's no resource fork
    duplicates.  fileio.c (EG)
 7. Update comment for UNIX_APPLE_SORT presort code in check_dup_sort().  Fix
    bug where nodup[j]->saved_iname was not being initialized to NULL.  Add
    support for sorting Mac OS X sequestered paths (__MACOSX), including
    sorting Zip added sequestered paths correctly.  fileio.c (EG)
 8. Change -ad long option from --apple-double to --ad-sort.  zip.c (SMS, EG)
 9. Remove entry comments from stream support by putting in STREAM_COMMENTS
    blocks where STREAM_COMMENTS not defined.  No longer collect comments with
    each entry in putlocal() when -st, but collect after all entries processed
    as normal.  zip.c, zipfile.c (EG)
10. Update definition of Extended Local FileHeader Extra Field (Streaming Extra
    Field), removing entry comments and clarifying wording to focus on use as
    storage of information needed for stream extraction.  Clarify structure of
    Bitmap.  Add definition of Placeholder Extra Field used to reserve space
    for Zip64 extra field.  proginfo/extrafld.txt (EG)
11. Change Placeholder extra field tag from 0x5048 to 0x4850 to match "PH".
    zip.h, proginfo/extrafld.txt (EG)

------------------------ June 8th 2015 version 3.1d42 -------------------------
 1. For Unix, remove prepending of "./" to paths in wild().  This was needed on
    another port, but apparently not for Unix ports.  (Paths parse as relative
    without it.)  Note that wild() was added in Zip 3.1d31 to support Unix
    handling of command line wildcards internally.  unix/unix.c (EG)
 2. Partial update to Zip extended help covering multiple sections.  Should be
    finished next internal beta. zip.c (EG)

------------------------ June 11th 2015 version 3.1d43 ------------------------
 1. In crypt, add note that readlocal() sets default thresh_mthd.  Remove lines
    that set ->thresh_mthd as not needed.  crypt.c (EG)
 2. Sort AppleDouble normal "._" files to be the files that appear directly
    after matching primary files if both normal and sequestered files exist for
    a particular primary file.  Update comments on AppleDouble sorting.
    fileio.c (EG)
 3. Update prototype used when NO_PROTO not set for newname().  fileio.c,
    zip.h (EG)
 4. Change "presense" to "presence" in AES description.  INSTALL (SMS)
 5. Add missing "break" after o_ad (-ad) command line option case.  zip.c (EG)
 6. Fix bug preventing sorting of sequestered files by removing line that
    specifically turned off sorting for sequestered files.  (This was added
    when sort support for sequestered paths (__MACOSX) was not yet implemented.
    Now it is.)  Update AppleDouble sort comments.  zip.c (EG)
 7. When showing what doing (-sd), output message when -ad enabled (sorting
    AppleDouble files from file system).  On UnixApple, output message when
    -ad- (AppleDouble sorting, on by default on Mac OS X, is disabled).
    zip.c (EG)
 8. Update prototypes when NO_PROTO not set for zipmessage_nl(), zipmessage(),
    zipwarn(), zipwarn_i(), ziperr() and print_utf8().  zip.h (EG)
 9. Add comments for use of thresh_mthd.  zipfile.c (EG)
10. Fix bug where key was being NULLed before the archive was passed to UnZip
    for testing in check_zipfile(), so password was never passed.  zip.c (EG)
11. Add option -pu (--pswd-to-unzip) that enables passing of password given to
    Zip to unzip for testing.  Default now is to not pass password, allowing
    unzip to prompt for it.  This avoids the passing of password on viewable
    command line issue in the default case.  Currently keyfiles with binary
    may not be handled.  Add global pass_pswd_to_unzip.  globals.c, zip.c,
    zip.h (EG)
12. Add -pu to WhatsNew.  WHATSNEW (EG)
13. Formatting updates to extended help.  Minor updates attempting to improve
    clarity.  In "Testing archives" section, clarify handling of passwords and
    document new -pu option.  zip.c (EG)
14. When -sd (show what doing) and -T, show the unzip command used for
    testing.  zip.c (EG)
15. Initialize keylen as was used without initialization in one case.
    zip.c (EG)
16. In INSTALL_VMS.txt, fix "wiil" typo.  Update text describing errors that
    old VMS compilers may generate when including bzip2.  Add note that old VMS
    compilers may not be able to include LZMA, PPMd and AES, which include
    code constructs newer than those old compilers can handle.
    vms/INSTALL_VMS.txt (SMS)

------------------------ June 21st 2015 version 3.1d44 ------------------------
 1. Minor updates.  INSTALL (EG)
 2. Update main README, including clarifications, moving copyright to its own
    section, deemphasizing IBM updates (as untested in current beta), adding
    Contents list, updating highlights for Zip 3.1d, removing Zip 3.0 section,
    adding Encryption Notice (based on Apache version of notice), removing the
    space between URLs and end period, updating Compression FAQ, adding FAQ on
    Encryption, updating Multi-part Archive FAQ, updating details in Unix FAQ,
    update example commercial statement FAQ to remove reference to anonymous
    ftp sites, and update commercial use FAQ to just say that conditions of
    license must be met.  README (EG)
 3. Update AES Strong Encryption Notice to include reference to TSU exception
    and ECCN 5D002.C.1, and to add note to see README.  revision.h (EG)
 4. Add tentative Test List to start gathering the various test cases.  May
    go away or get put elsewhere before public beta goes out.
    testlist.txt (EG)
 5. Update WhatsNew to note how keyfiles work and to use "64-bit" instead of
    WIN64 when clarifying which binaries are faster on Windows.  WHATSNEW (EG)
 6. Adjust spacing for "test-command" option in options table.  zip.c (EG)
 7. Update Zip 3.1d Announcement, removing reference to possible Zip 3.1e,
    clarify new -cd option, clarify CD_ONLY compression method, note that
    LIB/DLL options structure is now deprecated, remove reference to Visual
    Basic 2010, clarify Streaming option, add item for using -FS and -sf
    together to compare archive to file system, and some other minor updates.
    zip31d.ann (EG)
 8. In zipcloak, in ziperr(), add newline before message if mesg_line_started
    is set.  Add note that cryptnote and cryptAESnote are now used.  Move
    encryption notices from license() to version_info(), where it is in Zip.
    Identify IZ_CRYPT_AES_WG as "IZ AES encryption (WinZip/Gladman)" instead
    of "AES encryption (WinZip/Gladman)".  zipcloak.c (EG)
 9. Updates to Zip man page, from top to beginning of options.  (Will continue
    from this point on to bottom in later betas.)  Updates include changing
    "Windows 9x/NT/XP/7" to just "Windows", bolding use of PKZIP (as it is a
    referenced product), minor clarifications, addition of Encryption Notice,
    clarification of Traditional encryption data descriptor issue, add note
    that leading and trailing white space now stripped when -@ and -@@ used,
    add note that Zip can perform same function as Unix "find" in cases, minor
    clarification on use of argfiles, minor clarification on use of "#" in
    argfiles, add output of example showing use of -sc command to show command
    line, add note that funzip only processes first item in archive, add note
    that Zip 3.1 now handles near 4 GiB files more gracefully, add note that
    -d (delete) and -U (copy) when used with --out are opposites, add note
    clarifying workarounds for using splits with UnZip 6.00 and earlier and
    that UnZip 6.1 can handle splits, clarify Zip handling of UTF-8 and need
    to set UTF-8 locale, add note that 7-Zip can handle Windows long paths,
    and clarify Unix shell processing of wildcards versus Zip processing.
    man/man1/zip.1 (EG)
10. In Unix configure, add "<stdio.h> to iconv test program, remove "*" from
    outbuf, and change return codes for specific error conditions to 201,
    202 and 203 and output more specific messages when these occur.  Also
    output count of non-reversible conversions when not zero.
    unix/configure (EG)

------------------------ July 15th 2015 version 3.1d45 ------------------------
 1. Add IZ_CRYPT_TRAD block around variables in zfwrite().  Add IZ_CRYPT_AES_WG
    block around variable crc.  crypt.c (EG)
 2. Add global passwd to store original password.  key stores the complete key,
    which may include the password in passwd as well as content from a keyfile.
    crypt.h, zip.h, globals.c (EG)
 3. Add third parameter to string_dup() that allows adding fluff (extra unused
    bytes) to the allocated string, which can be used later.  fileio.c,
    zip.c, zipcloak.c, zipfile.c (EG)
 4. Update string_replace() to use clean prototype when not NO_PROTO.  This
    allows Visual Studio to recognize the function and is similar to updates
    to some other functions.  fileio.c (EG)
 5. Add function string_find() that finds a string within a string, handling
    case sensitivity and occurrence count.  fileio.c (EG)
 6. Increase optname[] from 50 to 100.  If the options table is incorrectly
    set up, specifically if the option is set not to take a value but then "="
    is used to assign a value, or something like that, the code in optionerr()
    can fail with a stack error when returning.  Bug has been hard to reproduce
    and is added to the ToDo list.  fileio.c (EG)
 7. Add global sf_comment that controls including entry comments in -sf
    listing.  zip.h, globals.c (EG)
 8. Add global passwd that stores the password provided by the user.  The
    global key now includes both the password and any keyfile content.  If no
    keyfile, passwd is the same as key.  globals.c (EG)
 9. Add note that first character of a compression method must be unique due
    to code in zip.c for method processing.  ToDo item to fix this before
    release.  globals.c (EG)
10. Add items to test list, including an Updated list, various compilation
    options to test (NO_UNICODE_SUPPORT, NO_LARGE_FILES_SUPPORT, and
    NO_ZIP64_SUPPORT), LIB and DLL testing, password testing, and -T testing.
    testlist.txt (EG)
11. Update prototype for abbrevmatch() to use the ifndef NO_PROTO form.  Update
    prototype for strmatch() to use the ifndef NO_PROTO form.  util.c (EG)
12. Rename macro UNICODE_TEST to UNICODE_EXTRACT_TEST.  This is used to enable
    the development feature where Zip can create empty files for entries in
    an archive.  This feature is used to test Unicode features during
    development and enables the -sC option.  This rename is to avoid confusing
    this feature with the Unicode testing feature -UT.  This macro is set
    in zip.h and is currently disabled.  zip.h, zip.c (EG)
13. The UNICODE_TESTS_OPTION macro enables the -UT option that tests Unicode
    support on the current platform.  This macro is set in zip.h and is
    currently disabled.  zip.h (EG)
14. Make definition of EF_ZIP64 (Zip64 extra field tag) global.  zip.h (EG)
15. Make prototypes for suffixes() and filetypes() global to support use in
    determining unzip features needed.  zip.h, zipup.c (EG)
16. Minor updates to "encryption rules" comment.  zip.h (EG)
17. Remove "L" from MAX_COM_LEN 32766L.  zip.h (SMS)
18. Add macro ALLOWED_PREFIX_CHARS that sets the characters, in addition to
    alphanumeric, allowed in -pa and pp prefixes.  List currently is
    "!@#$%^&()-_=+/[]{}|".  zip.h (EG)
19. Update Zip64 thresholds comment.  zip.h (EG)
20. Add function read_crypt_aes_cen_extra_field() to determine if AES is used
    by an entry and, if so, what the actual compression method is.  This is
    used to determine the compression methods needed by the unzip used to test
    the archive.  zip.h, zipfile.c (EG)
21. Make exceeds_zip64_threshold() global so can be used to determine if Zip64
    will likely be needed by the unzip used to test the archive.  zip.h (EG)
22. Group string_dup(), string_replace(), trim_string(), abbrevmatch(), and
    strmatch() prototypes with other string utility function prototypes.
    zip.h (EG)
23. Include <string.h> to support string processing supporting updated archive
    test code.  zip.c (EG)
24. Add zip.c local variables unzip_string (string to -TT) and unzip_verbose
    (don't pass -qq to unzip).  unzip_path is now the path to unzip, possibly
    supplied by -TU.  zip.c (EG)
25. Create set of macros describing UnZip features we may need to test the
    archive (for example, UNZIP_LARGE_FILE_SUPPORT).  These map to bit masks
    used to build a feature set.  Currently a feature set is stored in an
    unsigned long.  zip.h, zip.c (EG)
26. Add local variables needed_unzip_features and unzip_supported_features.
    These are feature sets composed of feature masks.  Add local variable
    unzip_version, a float that is set to the version of the unzip to use for
    testing.  zip.c (EG)
27. In freeup(), if set, free encryption and test variables passwd, keyfile,
    keyfile_pass, unzip_string, and unzip_path.  zip.c (EG)
28. In extended help, clarify use of @file in -i and -x.  Clarify single
    item list case.  Provide example of list of include files.  zip.c (EG)
29. In extended help, clarify how -R works.  Add n for number of components
    to allow explanation closer to what is actually happening.  (Thanks to
    pstodulk from the forum for bringing the issue to light and providing
    good feedback.) zip.c (EG)
30. In extended help, update description of -sF to include entry comments.
    Update descriptions of -su and -sU.  zip.c (EG)
31. In extended help, update descriptions for -T and -TT, and add -TU (unzip
    path) and -TV (verbose unzip).  Update description for -pu.  zip.c (EG)
32. Tentatively add compile option/feature SPLIT_SUPPORT.  This is always
    set as Zip 3.0 on has supported split archives.  Change "Zip special
    compilation options:" to "Zip special compilation options/features:".
    zip.c (EG)
33. Add unzip_feature() that when given an unzip feature bit mask returns
    an allocated string describing the feature.  zip.c (EG)
34. Add get_needed_unzip_features() that looks at command line options
    and goes through zlist and flist to determine what features the unzip
    will likely need to test the archive.  Some guess work is done, tending
    to err on the false positive side, to generate this feature list after
    the file scan but before archive generation starts.  Previously a
    much simplified version of this was done after archive generation.
    Now the check should be more precise, greatly reducing tests that
    fail, not because of a defective archive, but because unzip is missing
    a feature to test it.  Doing the check before archive generation has
    the added benefit of returning an incompatible unzip error quickly,
    without waiting for a lengthy archive operation to finish first.
    zip.c (EG)
35. Add get_unzip_features() that does the popen() that check_unzip_version()
    used to do, does "unzip -v", and parses the returned version information
    into a feature set (unsigned long bit mask set).  Previously getting the
    path to unzip was postponed until just before the archive was checked and
    the default "unzip" was checked here.  Now the unzip path is resolved in
    get_unzip_features() and the same path used for the archive test.  Once
    the unzip feature set is derived, it is used for both the feature check
    after the file scan and for the feature check just before the archive is
    tested.  Some tests are a bit convoluted due to lack of direct test
    features in UnZip.  For instance, the particular beta version needs to be
    checked to determine if the unzip being used supports basic split archives.
    Ideally UnZip could just provide a feature listing in "unzip -v" saying
    it does, removing the need to assume support once a version is reached,
    and which assumes a user did not disable splits for some reason or a
    particular port does not support splits.  zip.c (EG)
36. The "try zip path" feature, where if unzip was not found the path used
    to execute zip was parsed and unzip looked for there, has been
    discontinued.  This feature was only implemented on MSDOS and Windows.
    It makes sense, but since this was implemented more than ten years ago
    it seems the preference is to now just set PATH to the location where
    unzip can be found.  Lacking that, unzip can be put in the current
    directory or the new -TU option used to say where unzip is.  Even if
    unzip is found in the same place as zip, there is no telling what version
    of unzip it is and so if it's compatible.  If this feature was being
    kept, it would have been moved to get_unzip_features(), and in fact some
    code for it is there, but commented out.  However, at this point the
    feature is dropped.  zip.c (EG)
37. Update check_unzip_version() to call get_unzip_features() to check the
    path to unzip and get the version and the supported feature set.  The
    needed feature set is passed in as a parameter, which is created by a
    call to get_needed_unzip_features().  The two feature set bit arrays
    are then compared.  Any feature needed but missing generates a warning
    specifying the missing feature via a call to unzip_feature().  UnZip
    version is no longer specifically checked as the feature set check is
    more specific.  If any needed features are missing, check_unzip_version()
    returns 0, which results in a Zip error being generated and Zip exiting.
    zip.c (EG)
38. Add warn_unzip_return(), which generates a warning with a description of
    the UnZip error number provided to it.  When UnZip is being used to test
    the archive (the default and also when -TU is used or -TT with {u}), this
    function is used to interpret the status returned from the test.
    zip.c (EG)
39. Add parse_TT_string(), which takes the string supplied to -TT, parses it,
    and generates the unzip command line to execute.  This function interprets
    placeholders in the string, including {} for where the "archive to test"
    path goes, {p} for the password, {p: ...} where ... gets inserted into
    the command line if a password is used (... typically is "-P {p}"), {k}
    for keyfile path, {k: ...} where ... gets inserted if a keyfile is used
    (typically ... is "-kf {k}"), and {y} for the full key (combined password
    and keyfile content) and could be used as "{p: -P {y}}".  If {u} is
    found in the string, it is removed and the unzip_being_used flag is set,
    which tells Zip to interpret status returns as if they were from UnZip.
    As -TT can be used with other than unzip, some unzip specific support is
    not available.  Further support may be added later.  zip.c (EG)
40. Add build_unzip_command() to build the command line to execute unzip.
    Unlike parse_TT_string(), this function requires UnZip to be used for
    the archive test, which allows better support for UnZip.  If unzip_path
    is defined, then that is used, otherwise "unzip" is used as the path of
    the unzip executable.  This function is used by -TU.  -TV tells this
    function to drop the "-qq" to unzip, which results in unzip providing
    test results for each entry.  Now all test command line forming is done
    by either parse_TT_string() or build_unzip_command().  zip.c (EG)
41. Add backslash_double_quotes_and_quote(), which puts double quotes around
    the input string and escapes with a backslash any double quote in the
    string.  zip.c (EG)
42. Update check_zipfile() to use qzipname, qpasswd, qkeyfile, and qkey for
    the quoted versions of zipname, passwd, keyfile, and key.  Use
    backslash_double_quotes_and_quote() to build q versions of parameters.
    Remove Unix apostrophe quoting (' -> '"'"') as does not seem needed.
    Add additional show_what_doing entries in this function and the functions
    it calls, showing the quoted inputs used to build the command line to run
    unzip, as well as the command line generated.  Call parse_TT_string() if
    -TT used, otherwise call build_unzip_command() to build the unzip command.
    These functions are now used for all ports, reducing the port-specific
    code.  Call check_unzip_version() here in check_zipfile() and separately
    after the file scan (well before check_zipfile() is called).  Now always
    use system() to test the archive.  If unzip was used and an error status
    was returned, call warn_unzip_return(), else just report the error number.
    zip.c (EG)
43. Only include the Unicode_Tests() code if UNICODE_SUPPORT and now
    UNICODE_TESTS_OPTION are enabled.  These tests need updating, and so are
    currently disabled as UNICODE_TESTS_OPTION is currently undefined in
    zip.h.  zip.c (EG)
44. Put printf() used to debug suffix code in SUFDEB blocks.  zip.c (EG)
45. Update -sc to allow optional value.  If no value or value = "read", show
    command line as read (as -sc previously did).  If value = "parsed", show
    parsed command line as -sP previously did.  If value = "all", show both
    read and parsed command lines.  Remove option -sP.  zip.c (EG)
46. Update -T and -TT description in options table.  Put -UT in
    UNICODE_TEST_OPTION block.  Put o_UT code in UNICODE_TEST_OPTION block.
    zip.c (EG)
47. Allow -p to be negated (-p- == -j).  zip.c (EG)
48. Add "comment" as -sF value to enable output of entry comments in -sf
    listing.  Comment appears under the path line.  Currently ambiguity is
    not checked for.  Use string_replace() to indent lines.  zip.c (EG)
49. Update -TT to use unzip_string instead of unzip_path.  Add -TU to set
    unzip_path (which is now just the path to unzip).  Add -TV to pass
    "-t" instead of "-tqq" to unzip for archive test.  The Zip -v option
    is no longer used for this.  zip.c (EG)
50. Do not free keyfile after used to get keyfile contents as -T needs it
    to determine if a keyfile was used.  Set passwd to copy of key before
    keyfile content is potentially added.  Do not free keyfile_pass after
    key generated, as may be needed later.  zip.c (EG)
51. Replace allowed_other_chars string with ALLOWED_PREFIX_CHARS added to
    zip.h.  zip.c (EG)
52. Remove backslash to slash conversion for prefix strings.  Prefix strings
    should always be in internal archive format.  zip.c (EG)
53. Add check to prevent -TT and -TU from being used together, or -TV with
    -TT.  zip.c (EG)
54. As closing created zip file, if y == current_local_file, set
    current_local_file to NULL when close y and set y to NULL.  zip.c (SMS,
    forum)
55. Add new error ZE_UNZIP (26).  Split error ZE_TEST (8) into ZE_UNZIP (26),
    which is now used whenever unzip could not be run or unzip is incompatible
    with the archive to test, and ZE_TEST, which is now only used if the
    zip file is invalid or there is some test error.  ziperr.h (EG)
56. If testing the archive and not using -TT (test && !unzip_string), after
    the file scan call get_needed_unzip_features() to get the set of UnZip
    features projected to be needed to test the resulting archive.  Then
    call check_unzip_version() to verify that UnZip can be run and check the
    needed features against the features of the unzip just called.  If any
    needed features are missing, say so and exit with ZE_UNZIP error.  This
    check is not done for -TT, as we don't know anything about the utility
    being called to test the archive.  zip.c (EG)
57. When a split archive is tested or --out used, and test fails, display
    message that failed archive remains.  Add "test FAILED" message to log
    if logfile open.  zip.c (EG)
58. Test single disk archives not using --out before renaming, testing the
    temp path.  Test multi-disk archives and archives created using --out
    after the rename.  In the first case, Unzip needs the final name of a
    multi-disk archive to find the split files.  In the second case, the
    output archive status has no impact on the input archive, so removing
    it gains little.  Removing it seems the right thing to do, but leaving
    it allows the user to try to fix it or test it using something else.
    zip.c (EG)
59. In ZipCloak, switch to using encryption notices in zip.h.  zipcloak.c (EG)
60. Add note to ZipCloak extended help that split archives are not yet
    supported.  This is because ZipCloak uses the code in crypt.c instead of
    the standard code in Zip that knows how to read and write splits.
    zipcloak.c (EG)
61. Add IZ_CRYPT_TRAD around cryptnote display code.  Add IZ_CRYPT_AES_WG
    around cryptAESnote display code.  Only the relevant notes get displayed
    now.  zipcloak.c (EG)
62. Comment out the local version of rename_split().  Comment out the local
    version of zipmessage() and zipmessage_nl().  zipcloak.c (EG)
63. Change ZE_COMPERR to ZE_COMPILE.  zipcloak.c (EG)
64. Add read_ushort_from_mem() and read_ulong_from_mem(), which read a ushort
    or a ulong from a block of memory stored in LE byte order.  The ushort
    version is used by read_crypt_aes_cen_extra_field().  zipfile.c (EG)
65. Move Zip64 threshold code into new function exceeds_zip64_threshold()
    and out of putlocal() so the threshold code can be accessed by
    get_needed_unzip_features().  zipfile.c (EG)
66. Update Zip manual.  Replace \fP with \fR in many places.  Add section on
    MSDOS/Windows drive letters.  Clarify -a (--ascii) option.  Update -aa.
    Add -ad (--ad-sort).  Update -as (--sequester).  Add -BF
    (--binary-full-check).  Clarify -BL (--backup-log).  Clarify -BT
    (--backup-type).  Update -c (--entry-comments).  Update -cd
    (--current-directory).  Clarify -d (--delete).  Update -df (--datafork).
    Update -dr (--display-rate) to explain timing rates and needs.  Clarify
    -dt (--display-time).  Clarify -dv (--display-volume).  Clarify -DF
    (--difference-archive), including use of CD_ONLY.  Add -et for --etwodd,
    and clarify.  In -f (--freshen) add note regarding daylight saving time.
    Update -FI (--fifo) to cover changes.  Clarify -FS (--filesync), and note
    that -FS and -sf together can show the differences between file system and
    archive.  Update -fz (--force-zip64).  Clarify -g (--grow).  Major updates
    to -i (--include), including notes on using filters, description of single
    value versus list formats, updating examples, and adding note to use -sf
    to see what files would be included.  Clarify -j (--junk-paths).  Add
    -kf (--keyfile).  Clarify -l (--to-crlf).  Clarify -ll (--from-crlf),
    including how binary is handled.  Clarify -lu (--log-utf8).  Minor
    clarifications in -n (--suffixes).  Add note to -o (--latest-time) to see
    -f for more on time zones.  Clarify -O (--output-file).  Add note to
    -p (--paths) that -p and -j- are equivalent.  Clarify -pa
    (--prefix-add-path), adding note that the slash can be used to put contents
    into a subdirectory.  Clarify -pn (--non-ansi-password).  Add -pt
    (--performance-time).  Add -pu (--pswd-to-unzip).  Update -P (--password),
    including adding note about using argfiles.  Clarify -Q (--Q-flag).
    Clarify -r (recurse-paths), including adding note that Zip now internally
    processes wildcards on Unix.  Major clarification to -R
    (--recurse-patterns), fixing inaccuracies and adding description of what
    -R actually does.  (Thanks to pstodulk from the forum for bringing the
    issue to light and providing good feedback.)  Clarify -RE (--regex).
    Clarify -s (--split-size).  Update -sc (--show-command) to show the new
    optional mode parameter, which can be "read", "parsed", or "all".  Add
    note to -sd (--show-debug).  Clarify -sf (--show-files), and add note
    that can use with -FS to compare file system to archive.  Update -sF
    (--sf-params) to note new comment parameter.  Clarify -sp (--split-pause).
    Clarify -st (--stream).  Major updates to -T (--test) and -TT
    (--unzip-command), and addition of -TU (--unzip-path) and -TV
    (--unzip-verbose), to explain changes to how archives are tested.  Add
    note to -u (--update) on how time zones can impact results.  Add note
    to -UN (--unicode) to also see -lu.  man/man1/zip.1 (EG)
67. Recreate plain text manual.  docs/zip.txt (EG)
68. Update WhatsNew.  WHATSNEW (EG)

------------------------ July 22nd 2015 version 3.1d46 ------------------------
 1. Remove "l" (lower case "L") from %ld printf format for MAX_COM_LEN.
    fileio.c (SMS)
 2. Shorten comment for string_replace().  fileio.c (EG)
 3. Shorten some lines.  ReadLibDll.txt (EG)
 4. Remove .txt from LICENSE.txt to match name of file.  zip-comment.txt (SMS)
 5. Update project files so "zip -v" feature showing build settings works.
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zip32_lib/zip32_lib.vcxproj (EG)
 6. Shorten comment in parse_TT_string().  Change "note:  use -pu ..." to
    "note:  add -pu ...".  Clarify comment in build_unzip_command().  Restore
    QDOS -Q4 code to unzip command line processing.  zip.c (EG)
 7. Rename backslach_double_quotes_and_quote() to quote_arg().  In quote_arg()
    used to preprocess arguments for unzip command line used to test archives,
    add additional escapes to processing.  The following are now done:
      All:     Add " at beginning and end.
      MSDOS:   % -> "^%"
               " -> \""
      Unix:    ! -> "'!'"
               $ -> \$
               \ -> \\
               ` -> \`
      Non-VMS: " -> \"
      VMS:     " -> """
    Define QA_FACTOR as a multiplier for size of tempstring and QA_INCR as
    amount of extra bytes to add to tempstring.  zip.c (SMS, EG)
 8. Remove some old archive test code that was in #if 0 blocks now that the
    new code looks to be working.  zip.c (EG)
 9. Skip check_unzip_version() if using -TT, as -TT could be using something
    other than UnZip.  zip.c (EG)
10. Add some comments regarding archive testing.  zip.c (EG)
11. Update unzip archive test return code check on VMS from
    "(result & STS$M_SEVERITY) != STS$M_SUCCESS)" to
    "(result & STS$M_SUCCESS) == 0".  zip.c (SMS)
12. Adjust some lines to reduce below 80 characters.  zip.c (EG)
13. Update get_filters() comment.  zip.c (EG)
14. Add comment to options table that long option names should be 18 characters
    or less to avoid problems with -so.  zip.c (EG)
15. Change long option name from allow-short-password to allow-short-pass
    to address 18 character limit.  zip.c (EG)
16. Add warning when FAKE_SALT is enabled for debugging, noting that encryption
    is compromised.  zip.c (EG)
17. Add note to sorting comment regarding -ad.  zip.c (EG)
18. Remove check_unzip_version() code when using LIB or DLL.  Currently the
    LIB and DLL do not support archive testing.  zip.c (EG)
19. In get_unzip_features(), add detection of Traditional encryption in
    UnZip 5.52.  zip.c (EG)
20. Update Zip manual.  Update -T.  Update -UN.  Update -UT.  Update -v.
    Update -vq.  Other updates.  man/man1/zip.1 (EG)
21. Add Windows.h to includes for WIN32 to define FILE_ATTRIBUTE_REPARSE_POINT
    and related.  This include was not included if no additional compression
    method was defined.  zipup.c (EG)
22. Add (int) casts to strlen() to address compiler warnings when compiling
    Windows x64.  fileio.c, zip.c (EG)

------------------------ July 30th 2015 version 3.1d47 ------------------------
 1. Add option -SI (--rename-stdin) that renames "-" in the archive to a name
    provided by the user.  (Currently this does not distinguish between "-"
    from stdin and "-" from the file system.)  Add global stdin_name.  Name
    provided subject to same rules as prefixes (-pa and -pp).  Conversion
    is done in putlocal() and putcentral() where prefixing is done.  zip.h,
    globals.c, zip.c (EG)
 2. Change -sd debugging output from using zfprintf() to using zipmessage().
    This allows zipmessage() to output a newline before outputting the message
    if needed.  It also writes -sd output to the log.  fileio.c, zip.c (EG)
 3. Add note to "zip -L" license screen to see "zip -v" screen for encryption
    notices.  zip.c (EG)
 4. Update extended help description of -R.  zip.c (EG)
 5. In quote_arg(), break down conversions by port.  Fix bug where MSDOS did
    not do the double quote conversions.  zip.c (EG)
 6. In quote_arg(), make the Unix conversions the default for all ports not
    explicitly specified.  (Currently MSDOS/Windows and VMS are explicitly
    specified, as well as Unix.)  zip.c (SMS, EG)
 7. Add "(fastest)" to description of "-1" and "(most compression)" to
    description of "-9" in options table.  zip.c (EG)
 8. Update comment for get_options().  zip.c (EG)
 9. Instead of -sd calling print_utf8() explicitly, call zipmessage() and
    let that call print_utf8().  zip.c (EG)
10. Update putlocal() and putcentral() to isolate uname to UNICODE_SUPPORT.
    Replace malloc() code in places with string_dup().  zipfile.c (EG)
11. In iz_file_read(), update translate_eol comment.  Fix bug in -ll
    conversion code where size was being updated, but len wasn't, resulting
    in CRC corruption when a CR (\r) appeared at the end of a buffer and was
    saved for the next buffer.  len was left one greater than size, resulting
    in the last character in the buffer being repeated.  Move "Should be OK if
    it is a text file." comment a couple lines down to go with what it applies
    to (suppress final ^Z).  zipup.c (EG)
12. Finish updates to Zip manual.  Updates include addition of Option Summary
    table (putting a quick list of all options in one place); minor updates to
    many topics; additions under -s regarding UnZip split archive support;
    addition of -SI option; add note under -T that Zip is now considered
    more or less stable and is unlikely to create a "bad" archive unless some
    outside factor prevents it from doing so; add note under -u that it does
    not catch a file being replaced by an older one (but -FS does); significant
    updates under -UN to Unicode description including noting the dropping of
    transliteration; add note that --verbose is currently of limited use;
    under -z clarify support for multi-line archive comments; under -Z clarify
    support for newly added compression methods; some updates to the EXAMPLES
    section; minor updates under PATTERN MATCHING; change title of section
    LIBRARIES to LIBRARIES/API and add note that API now looks to remain
    stable to release of Zip 3.1; update DIAGNOSTICS section to include new
    error codes 24 (DEPTH), 25 (SPLIT) and 26 (UNZIP) and include name of
    each error code (as just shown), update some dated/incorrect
    error code descriptions and add note that these errors also apply to
    ZipCloak, ZipNote and ZipSplit; under AUTHORS note that license is in
    Zip source kit and on web site; and update recommended bug submission
    information and note that bugs can also be submitted via the forum.
    The manual should now be in sync with current feature set.
    man/man1/zip.1 (EG)
13. Update Zip plain text doc.  docs/zip.txt (EG)
14. Minor updates to compatibility testing doc.  proginfo/compatib.txt (EG)
15. Add "." to ALLOWED_PREFIX_CHARS list.  This allows things like "../",
    but is needed to allows specifying file extentions.  zip.h (EG)
16. Update WhatsNew.  WHATSNEW (EG)

----------------------- August 9th 2015 version 3.1d48 ------------------------
 1. Define macro API_FILESIZE_T as the type used to pass file sizes via the
    LIB/DLL API.  This replaces UZ_LONGLONG.  API_FILESIZE_T defaults to
    64-bit (unsigned long long), but can be set to another size by a port (e.g.
    VAX VMS).  An application includes "api.h" to define the API structures,
    including API_FILESIZE_T.  Add additional comments regarding API.  Reformat
    some lines to get them under 80 characters.  api.h, zip.h (EG)
 2. Update Unix/VMS LIB example.  Add Service callback to demonstrate use of
    API_FILESIZE_T.  Update comment to now refer to ReadLibDll.txt for more
    information.  Add leading "." on most callback output so it's clear what
    the callback output is.  Update GetVersionInfo() to return LIB/DLL major,
    minor, and patch numbers and use these to detertime if LIB is compatible
    with example.  izzip_example.c (EG)
 3. Updates to LIB/DLL readme.  ReadLibDll.txt (EG)
 4. Comment out Z_LONGLONG and UZ_LONGLONG as no longer used.  tailor.h (EG)
 5. Change %04x to %04lx in places to account for long arguments to sprintf().
    zip.c (SMS, EG)
 6. Add check that when ZIPDLL used, API_FILESIZE_T is unsigned long long.
    This is needed to stablize the size of the DLL interfaces.  Also add
    BUILD_BUG_ON() statement but comment out for now.  zip.c (EG)
 7. Add to existing comment regarding size of fcount and zcount.  Add cast to
    unsigned long to allow -sd display of zcount to always use %ld.  For now
    this should take care of any practical use of -sd, as Zip probably can't
    handle 2 trillion entries well.  (In particular, qsort() may take
    prohibitively long to sort that many entries.)  This now matches how -sd
    handled fcount.  Change cast for -sd display of fcount from (unsigned) to
    (unsigned long).  zip.c (EG)
 8. Change WINDLL guards on Service callbacks to ZIP_DLL_LIB to allow LIB to
    also use the callbacks.  Add missing Service callback for Freshen and
    Update.  Add missing Service callback for Add.  fileio.c, zip.c,
    zipup.c (EG)
 9. Shorten lines to under 80 characters.  zipup.c (EG)
10. Add check for long long to configure, setting HAVE_LONG_LONG if long long
    supported.  unix/configure (SMS)
11. Update VMS to support API_FILESIZE_T, but comment out until reviewed by
    VMS guy.  vms/osdep.h (SMS, EG)
12. Comment out no longer used Z_LONGLONG and UZ_LONGLONG.  Set API_FILESIZE_T
    to unsigned __int64 to override default unsigned long long setting in
    zip.h, allowing this to work for older WIN32.  win32/osdep.h (EG)
13. Add missing format in sprintf() for GetLastError().  api.c (SMS)
14. Add note that to enable AES encryption in Visual Studio projects need to
    change preprocessor definition (under Porject/Properties) to
    "CRYPT_AES_WG".  INSTALL (EG)
15. Lowercase all action_string values for consistency.  Reset action_string
    to more specific values ("add" instead of "add/update") and error strings
    ("filename=directory") where appropriate.  zip.c (EG)
16. Use API_FILESIZE_T to cast values to size expected by callbacks.
    zip.c (EG)
17. Move definitions of IO_REPARSE_TAG_DEDUP and IO_REPARSE_TAG_NFS from
    zip.h to nt.h to avoid already defined warnings from Visual Studio
    2015.  Moving them to nt.h allows winnt.h to define them first, if
    the platform knows of them.  zip.h, win32/nt.h (SMS, EG)
18. _CRT_SECURE_NO_WARNINGS was not defined for all configurations in
    the Windows vc10 project descriptions for the bzip2 library in both
    the normal program and DLL directories, causing avoidable compiler
    warnings.  win32/vc10/libbz2/libbz2.vcxproj,
    windll/vc10/libbz2/libbz2.vcxproj (SMS)
19. Change some type casts to clear some compiler warnings.  zipfile.c,
    zipnote.c (SMS)
20. In the Windows vc10 builders, add MASM option UseSafeExceptionHandlers
    (/safeseh), for configurations which use assembler, to mark assembly-code
    object files as safe, to satisfy linker in VS 2015 on Windows 10.  Add
    some missing data for the Debug_ASM configurations in the ZipNote project
    file.  win32/vc10/zip/zip.vcxproj, win32/vc10/zipcloak/zipcloak.vcxproj,
    win32/vc10/zipnote/zipnote.vcxproj, win32/vc10/zipsplit/zipsplit.vcxproj
    (SMS)
21. Update Win32 LIB and DLL C examples to match izzip_example.c.
    windll/examples/vc10/c_dll_ex.c, windll/examples/vc10/c_dll_ex.h,
    windll/examples/vc10/c_lib_ex.c, windll/examples/vc10/c_lib_ex.h (EG)
22. Update WhatsNew to start including references where more information can
    be found.  Includes references for the Windows Explorer bug and for the
    -R documentation correction.  WHATSNEW (EG)
23. Change "Current charset:" to "Current charset/code page:".  zip.c (EG)
24. Update AES README, noting need to update Visual Studio projects to include
    AES encryption.  Also update version numbering to use minor versioning
    for doc updates.  aes_wg/readme_aes_wg.txt (EG)
25. On WIN32, use _MSC_VER to set new macro Z_INTPTR_T to intptr_t if MSC
    version is at least 1600 (Visual Studio 2010), otherwise set to long.
    intptr_t is not supported on early MS C++ versions (such as in VS 6),
    so long is needed there, but long won't work if 64-bit is supported.
    Update _open_oshandle() calls to use Z_INTPTR_T.  win32/osdep.h,
    win32/win32.c (EG)
26. Update README with additional encryption information.  README (EG)
27. Update README for LIB and DLL, clarifying need to match DEBUG versions
    and match RELEASE versions when linking to the LIB.  ReadLibDll.txt (EG)
28. Update main README to point to README_AES_WG.txt for more information on
    AES encryption.  README (EG)
29. In AES README, add information on how to update Visual Studio projects
    to support AES encryption.  Also add note that if AES is included in Zip,
    the Encryption Notice governs distribution and use.
    aes_wg/README_AES_WG.txt (EG)
30. Add note about matching DEBUG and RELEASE versions to comments at top of
    c_lib_ex example.  windll/examples/vc10/c_lib_ex.c (EG)
31. Add code that breaks up feature list across multiple lines.
    windll/examples/vc10/c_lib_ex.c, windll/examples/vc10/c_dll_ex.c,
    izzip_example.c (EG)
32. Rename Read10Ex.txt to README_VC10_EXAMPLES.txt.  Update to include
    reference to README_LIB.txt.  windll/examples/vc10/Read10Ex.txt,
    windll/examples/vc10/README_VC10_EXAMPLES.txt (EG)
33. Visual Studio 2010 project updates to order of preprocessor defines.
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj (EG)
34. Add new file README_LIB.txt that emphasizes that the matching version
    of the library (DEBUG or RELEASE) be used.
    windll/examples/vc10/c_lib_ex/README_LIB.txt (EG)
35. Rename Readme10.txt to README_VC10.txt.  Update to include reference to
    aes_wg/README_AES_WG.txt.  windll/vc10/Readme10.txt,
    windll/vc10/README_VC10.txt (EG)
36. Update order of preprocessor definitions.
    windll/vc10/zip32_dll/zip32_dll.vcproj,
    windll/vc10/zip32_lib/zip32_lib.vcproj (EG)

----------------------- August 11th 2015 version 3.1d49 ------------------------
 1. When ZIP_DLL_LIB, scope the variables used for the VB 6 file size kluge
    (low, high, filesize64) to only be visible to WIN32.  This removes issues on
    VAX VMS where 64-bit variables are not available.  Only enable callback
    SERVICE_NO_INT64() if WIN32 && LARGE_FILE_SUPPORT.  zip.c, zipup.c (EG)
 2. Update description of DLLSERVICE_NO_INT64 to note that it is now only
    available on WIN32.  api.h, windll/WhatsNew_DLL_LIB.txt (EG)
 3. Change %u to %lu for fcount.  zip.c (SMS)
 4. Bring percent_all_entries_processed, percent_this_entry_processed, and
    bytetotal into scope for other ports by changing WINDLL to ZIP_DLL_LIB.
    These are used by the Progress() callback.  zipup.c (EG)

----------------------- August 12th 2015 version 3.1d50 ------------------------
 1. Modify AES WG kit so that Zip automatically detects its presense and
    includes AES WG if present by default.  This is done by iz_aes_wg.h.
    Include real and dummy versions of this file so that AES WG can be enabled
    and disabled by copying the relevant file to iz_aes_wg.h.  Note that
    iz_aes_wg.h is now always included by zip.h.  Update INSTALL to note the
    changes.  Update comments in zip.h.  INSTALL, zip.h, aes_wg/iz_aes_wg.h,
    aes_wg/iz_aes_wg_dummy.h, aes_wg/iz_aes_wg_real.h, aes_wg/README_AES_WG.txt
    (EG)
 2. Other updates to INSTALL.  INSTALL (EG)
 3. Update copyright date of LICENSE.  LICENSE (EG)
 4. Add (int) cast to strlen() to clear 64-bit compile warning.  zipup.c (EG)
 5. Remove CRYPT_AES_WG and disabled variations from Visual Studio 2010 project
    files, as this is now automatically handled by aes_wg/iz_aes_wg.h.
    win32/vc10/zip/zip.vcproj, win32/vc10/zipcloak/zipcloak.vcproj,
    windll/vc10/zip32_dll/zip32_dll.vcproj,
    windll/vc10/zip32_lib/zip32_lib.vcproj (EG)
 6. Update wrapper files for AES WG to include aes_wg/iz_aes_wg.h to detect
    the presence of the AES WG kit.  wrap/aescrypt.c, wrap/aeskey.c,
    wrap/aestab.c, wrap/fileenc.c, wrap/hmac.c, wrap/prng.c, wrap/pwd2key.c,
    wrap/sha1.c (EG)

----------------------- August 17th 2015 version 3.1d51 ------------------------
 1. Update AES WG kit 1.5 by restoring iz_aes_wg.h to more or less what it was
    in AES WG kit 1.4.  This is done to restore support for UnZip, which has
    not been updated yet.  Add iz_con.h, iz_con_no.h, and iz_con_yes.h to the
    draft AES WG 1.5 kit.  iz_con.h is set to iz_con_no.h in the base Zip kit
    aes_wg directory (AES WG not installed) and currently contains no content.
    iz_con.h is set to iz_con_yes.h in the AES WG 1.5 kit's aes_wg directory,
    which defines AES_WG_KIT_INSTALLED.  This is the only difference.  This
    file is used to detect if the AES WG 1.5 kit is installed in the Zip aes_wg
    directory.  If so, AES_WG_KIT_INSTALLED is defined, if not it isn't.
    iz_con.h is included by the Zip file iz_aes.h.  aes_wg/iz_aes_wg.h,
    aes_wg/iz_con.h, aes_wg/iz_con.no.h, aes_iz_con_yes.h (EG)
 2. Remove now unused "dummy" and "real" files from draft AES WG 1.5 kit.
    aes_wg/iz_aes_wg_dummy.h, aes_wg/iz_aes_wg_real.h (EG0
 3. Add iz_aes.h to Zip source kit to control default AES behavior.  iz_aes.h
    includes aes_wg/iz_con.h, which sets AES_WG_KIT_INSTALLED if the AES WG 1.5
    kit is installed in the aes_wg directory.  iz_aes.h defaults to enabling
    AES WG encryption if AES_WG_KIT_INSTALLED is defined, by defining
    CRYPT_AES_WG.  If AES encryption is not being set, iz_aes.h defines
    NO_CRYPT_AES_WG, so either that or CRYPT_AES_WG is defined by the time
    iz_aes.h exits, but not both.  If CRYPT_AES_WG or NO_CRYPT_AES_WG are
    already defined, iz_aes.h respects that and does not change the setting,
    thus allowing scripts to control the behavior of iz_aes.h.  Where as
    aes_wg/iz_con.h is specific to the AES WG kit shared between Zip and UnZip,
    iz_aes.h is specific to Zip and can be used for port specific changes to
    Zip AES behavior.  iz_aes.h is included by zip.h, and by the AES wrappers.
    iz_aes.h (EG)
 4. Use iz_aes.h to control enabling and disabling of AES encryption in zip.h
    as well as in the AES WG wrapper files.  zip.h, wrap/aescrypt.c,
    wrap/aeskey.c, wrap/aestab.c, wrap/fileenc.c, wrap/hmac.c, wrap/prng.c,
    wrap/pwd2key.c, wrap/sha1.c (EG)
 5. Update disabling code in zip.h to only undefine IZ_CRYPT_TRAD if set.
    Comment out undefines for IZ_CRYPT_AES_WG and IZ_CRYPT_AES_WG_NEW, as
    these internal macros could not have been set yet.  If NO_CRYPT, make sure
    CRYPT_AES_WG is undefined and NO_CRYPT_AES_WG is defined.  Only undefine
    IZ_CRYPT_TRAD if defined, which it looks like it should never be before
    being set just below this point.  zip.h (EG)
 6. Update Encryption section of INSTALL to clarify handling of Traditional
    encryption and detail new procedures for enabling and disabling AES WG
    encryption.  Update LIB note.  INSTALL (EG)
 7. Update AES WG kit iz_aes_wg.zip comment.  aes_wg/zip-comment.txt (EG)
 8. Add setting of "-DNO_CRYPT_AES_WG" to disable AES encryption when NO_AES_WG
    is set or an error condition occurs preventing use of AES WG.  This is
    needed to prevent iz_aes.h from trying to include AES WG anyway.  (Testing
    in unix/configure is probably no longer necessary, but remains until
    Zip 3.1e when this will be looked at.)
    unix/configure (EG)
 9. Add iz_aes.h to Visual Studio zip project.  win32/vc10/zip/zip.vcxproj,
    win32/vc10/zip/zip.vcxproj.filters (EG)
10. Update date of 1.5 release.  aes_wg/readme_aes_wg.txt (EG)

----------------------- August 19th 2015 version 3.1d52 ------------------------
 1. Update CHANGES to note when ZipSplit long output names was added.  Update
    WhatsNew to add this new feature.  Other minor changes to WhatsNew.
    CHANGES, WHATSNEW (EG)
 2. Due to complaints regarding VMS, update iz_aes.h from automatically enabling
    AES encryption to requiring the user to manually enable it.  Limit scope to
    WIN32 only.  This should restore Unix, Mac OS X, and VMS ports to previous
    behavior.  Add instructions for user in comments.  iz_aes.h (EG)
 3. Update INSTALL to include the AES WG kit download instructions, the only
    item in aes_wg/README_AES_WG.txt needed by the user.  All other information
    in that file is only relevant if AES encryption is installed.  Update
    INSTALL to detail the current procedures for enabling, disabling, and
    removing AES encryption on Unix, Mac OS X, VMS, and Windows.  Add note that
    AES encryption has only been tested, and so is only supported on, the noted
    four ports, but that we would be interested in help adding it to other
    ports.  Add warning that the Encryption Notice in README should be read and
    agreed to BEFORE downloading the AES WG kit.  INSTALL (EG)
 4. Remove the contents of the aes_wg directory, as no longer needed.  The
    empty directory will be entirely populated by the IZ AES WG source kit.
    aes_wg/* (EG)
 5. Update README by moving copyright back to top.  Instead of referring to
    README_AES_WG.txt, refer to INSTALL, which now has the relevant
    information.  README (EG)
 6. For consistency, change IZ_AES_WG, when referring to the name of IZ AES WG
    encryption, to Info-ZIP's AES WG encryption, where WG is spelled out the
    first time used, i.e. use the name rather than a shorthand symbol.  The
    abbreviation is now IZ AES WG.  When the context is clear that Info-ZIP's
    AES WG encryption kit is being referred to, use the shorter terms "AES WG"
    and "AES encryption" as appropriate.  Also refer to Traditional encryption
    by name instead of using the symbol IZ_CRYPT_TRAD as appropriate.  README,
    README_CR.txt, INSTALL (EG)
 7. Update Traditional Encryption readme to emphasize that version 2.9 is
    needed, not version 3.0, to add encryption to older Zip and UnZip kits.
    README_CR.txt (EG)

---------------------- September 1st 2015 version 3.1d53 ----------------------
 1. Change "p->zlib_version" to "p->zlib_Version" to fix typo that prevented use
    of ZLIB.  api.c (SMS)
 2. Define Z_INTPTR_T as intptr_t for MINGW32.  Z_INTPTR_T supports earlier
    Visual Studio versions that don't have intptr_t.  win32/osdep.h (SMS)
 3. In crypt.c, remove unneeded inside "#ifdef IZ_CRYPT_ANY" block.  Reformat
    crypthead() comment.  Change zfwrite() from "unsigned" to "unsigned int".
    Reformat Message Authentication Code (MAC) comment.  Reformat AE-2 comments.
    Reformat AES comment.  crypt.c (SMS)
 4. In crypt.h, add hyphen to get "encryption-free".  Update ZCRYPT version to
    "l" (small L).  Formatting changes.  crypt.h (SMS)
 5. In simple_encr_passwd(), change bufsize from int to size_t.  Add
    defined(IZ_CRYPT_TRAD) to #ifdef ETWODD_SUPPORT.  Make changes to handling
    of archive comments to fix issues with reading comment from stdin.  zip.c
    (SMS)
 6. Rename iz_aes.h to control.h.  In addition to AES control, add control for
    compression method enabling and disabling.  Currently control.h is only used
    for Windows.  iz_aes.h, control.h (EG)
 7. In crypt.h, remove "Last revised:", as this is now tracked in CHANGES for
    Zip (and has been for awhile).  Add comment that notes that crypt.h and
    crypt.c are (were) part of the ZCRYPT kit, but as that kit is no longer
    provided (as crypt.h and crypt.c are now part of each source kit), changes
    in these files are now tracked in the Zip and UnZip change logs.  Note that
    ZCRYPT version now frozen at 3.0 unless Traditional (ZipCrypto) algorithms
    change.  Add to see INSTALL for more information on AES encryption.  Remove
    "Transpose blocks" method of setting if ZCRYPT is beta or not, as crypt.h
    is the only place where version and beta status should be set for ZCRYPT.
    Freeze version of ZCRYPT at 3.0.  This represents a freezing of algorithms,
    not the code in crypt.h and crypt.c, which are tracked as Zip changes in
    the Zip versions of crypt.h and crypt.c.  Beta status is now set by setting
    either a 0 or 1.  As there is no 3.0 ZCRYPT kit, and these algorithms
    should not change, there probably will never be a beta ZCRYPT kit from
    this point on.  crypt.h (EG)
 8. In crypt.c, add note to see crypt.h for more information.  Update Zip splits
    note.  Add (unsigned int) cast to strlen(passwd) for 64-bit support.
    crypt.c (EG)
 9. Make seekable() visible to ZLIB as it uses it.  zip.h, zipup.c (SMS)
10. Remove include for iz_aes.h.  Add include for control.h to allow control of
    inclusion of AES encryption and additional compression methods from that
    file.  Annotate some #if/#else/#endif blocks.  Add ETWODD_SUPPORT to list of
    encryption macros.  If ETWODD_SUPPORT defined and IZ_CRYPT_TRAD is not,
    undefine ETWODD_SUPPORT.  zip.h (EG)
11. Change "#if defined(IZ_CRYPT_TRAD) && defined(ETWODD_SUPPORT)" to
    #ifdef ETWODD_SUPPORT, as that now implies IZ_CRYPT_TRAD.  zip.h, zip.c,
    globals.c, zipup.c (EG)
12. Split out Windows REPARSE_POINTS from Windows SYMLINKS in version list as
    these are separate things and there may be changes regarding reparse and
    mount points in the future.  zip.c (EG)
13. In get_unzip_features(), only check UnZip version string for beta version
    if there's still string left.  zip.c (EG)
14. When getting archive comment, only recognize an empty first line to keep
    existing comment if getting the comment interactively from the user
    (comment_from_tty).  When getting the comment from stdin, the keep existing
    feature is turned off, but a line with just "." still terminates the comment
    for backward compatibility.  Update WhatsNew to note changes.  Only display
    the comment from stdin if there was a comment.  zip.c, WHATSNEW (EG)
15. Update INSTALL to note use of control.h to enable and disable AES and
    additional compression methods for Windows.  It can also be used to disable
    Traditional encryption.  INSTALL (EG)
16. In INSTALL, note that CRYPT and ZCRYPT are still valid names for
    Traditional encryption (the package is still called ZCRYPT), but is now
    also called "IZ_CRYPT_TRAD".  Note that the package zcrypt29.zip is still
    available, but that Zip uses ZCRYPT 3.0 not available in a kit, as the
    files are now part of the Zip source kit.  Note that zcrypt29.zip is still
    used to add Traditional encryption to releases before Zip 2.31.
    INSTALL (EG)
17. In INSTALL, refer to AES source kit as iz_aes_wg.zip instead of adding
    version number.  Note that the AES kit now creates and populates the aes_wg
    directory.  Add WARNING that the user must read and agree to the Encryption
    Notice in README first, BEFORE downloading the AES kit.  Update instructions
    for disabling an installed AES kit and for removing it (now just delete the
    entire aes_wg directory).  INSTALL (EG)
18. In INSTALL, update notes on supported WIN32 compilers, as we really don't
    know if Borland C++ or Watcom C/C++ still will work.  INSTALL (EG)
19. In INSTALL, update sections for Windows DLL and for LIB to now point to
    ReadLibDll.txt, windll/Readme_DLL_LIB.txt, and windll/WhatsNew_DLL_LIB.txt
    for more information.  INSTALL (EG)
20. Update project to add "d" to TargetName.  The Visual Studio 2010 LIB
    project now names the DEBUG version of the Windows LIB as zip32_libd.lib
    and the RELEASE version of the Windows LIB as zip32_lib.lib.  This is to
    avoid the confusion when both are named the same.  Remove references to
    additional compression methods.  Remove reference to iz_aes_wg.h.  Add
    control.h to project.
    windll/vc10/zip32_lib/zip32_lib.vcproj (EG)
21. Update LIB/DLL Readme to clarify use of zip32_lib.lib and zip32_libd.lib.
    ReadLibDll.txt (EG)
22. Update README_CR.txt to note that ZCRYPT 3.0 is dated 2015-08-26 (when
    the algorithms were frozen as noted in crypt.h).  Dating this to 2011
    makes no sense if we were still tracking beta versions of ZCRYPT then.
    README_CR.txt (EG)
23. Update copyright date.  Add note to ZE_NOTE.  ziperr.h (EG)
24. In ZipNote, wrap utf8 variable in UNICODE_SUPPORT block.  Change wrap from
    WIN32 to UNICODE_SUPPORT_WIN32 for read_utf8_bom() check.  This check is
    now not done if UNICODE_SUPPORT is not enabled.  zipnote.c (EG)
25. Changes to the contents of aes_wg (the AES WG kit) are no longer tracked
    in this change log.  CHANGES (EG)
26. Remove aes_wg directory.  aes_wg/* (EG)
27. Remove aeg_wg_new directory.  aes_wg_new/* (EG)
28. Add references to [.VMS]ZLIB.h to vms/descrip_deps.mms.  Remove reference
    to []CRC32.H.  vms/descrip_deps.mms (SMS, EG)
29. Remove old files.  vms/descrip_deps.mms_3, vms/descrip_deps.mms_4,
    vms/descrip_deps.mms_old (SMS)
30. Add and update comments.  win32/osdep.h (EG)
31. Remove hard-coded references to additional compression methods from
    project/configuration preprocessor strings.  Add control.h to projects.
    win32/vc10/zip/zip.vcxproj, win32/vc10/zip/zip.vcxproj.filters,
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters (EG)
32. Add NotReady.txt to explain NotReady.zip.  windll/examples/NotReady.txt (EG)
33. Update WINDLL examples readme to note use of static DEBUG and RELEASE
    library versions.  windll/examples/ReadUseEx.txt (EG)
34. Update comments.  windll/examples/vc10/c_dll_ex.c (EG)
35. Update VC10 Examples Readme.  windll/examples/vc10/ReadMe_VC10_examples.txt
    (EG)
36. Remove references to CRYPT_AES_WG from examples project.  Use library
    zip32_libd.lib for DEBUG configurations.
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj (EG)
37. Update LIB readme.  windll/examples/vc10/c_lib_ex/ReadMe_Lib.txt (EG)
38. Add "zip32_libd.lib__goes_here.txt" file.
    windll/examples/vc10/c_lib_ex/zip32_libd.lib__goes_here.txt (EG)
39. Update VC10 readme to note use of zip32_lib.lib and zip32_libd.lib.  Other
    updates.  windll/vc10/readme_vc10.txt (EG)
40. Add "Source Files" filter to wrap/aeskey.c.
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters (EG)
41. Remove reference to iz_aes_wg.h.  Add control.h to project.
    windll/vc10/zip32_lib/zip32_lib.vcxproj,
    windll/vc10/zip32_lib/zip32_lib.vcxproj.filters (EG)
42. Update wrappers to use control.h to determine if AES or compression enabled.
    wrap/aescrypt.c, wrap/aeskey.c, wrap/aestab.c, wrap/fileenc.c, wrap/hmac.c,
    wrap/lzfind.c, wrap/lzmadec.c, wrap/lzmaenc.c, wrap/ppmd8.c,
    wrap/ppmd8dec.c, wrap/ppmd8enc.c, wrap/prng.c, wrap/pwd2key.c, wrap/sha1.c
    (EG)
43. For backward compatibility, restore use of "." alone on line to end an
    archive comment when reading the comment from stdin.  Update WhatsNew to
    note that "." still works in stdin (in case someone didn't know it did
    that).  zip.c, WHATSNEW (EG)
44. To ZpZip description in api.c, add note that, on Windows, the command line
    passed to Zip can contain UTF-8.  Otherwise UTF-8 only supported if the
    current character set is UTF-8.  api.c (EG)
45. Replace MAX_ARG_SIZE with MAX_ZIP_ARG_SIZE.  api.c (EG)
46. In ZpZip(), comment out debugging and unneeded directory reading code.
    If CurrentDir not NULL, always change to directory, not just for Windows.
    api.c (EG)
47. For version entry IZ_CRYPT_TRAD, label version ZCRYPT ver.  zip.c (EG)
48. Update DLL comment.  zip.c (EG)
49. Move WIN32_WIDE_CMD_LINE code farther down, and don't use if ZIP_DLL_LIB
    set, as in that case command line comes in through ZpZip().  Note that
    the effects of this bug before fixing are "hidden" when testing the C
    examples on Windows that get the command line just like Zip (except for
    Unicode parameters), but the bug is clearly evident when testing the
    VS 2010 VB example.  zip.h (EG)
50. Rename win32/vc8 to win32/vc8_old, as project has not been updated.
    win32/vc8 (EG)
51. Updates to Visual Basic DLL example project comments.  Comment out return
    of Option struct Size, as Option struct no longer used.  In
    ZpTestCallback_Button_Click(), default to using ZpVbCallback() to test
    with.  Remove insertion of "-UN=s", as now default for Zip for Win32.
    Update comments.  windll/examples/vb10/zip31vbexample/form1.vb,
    windll/examples/vb10/zip31vbexample/module1.vb (EG)
52. Update comments to note that example does not handle Windows Unicode,
    but it could.  For LIB version, note need to use right library for
    DEBUG and for RELEASE.  windll/examples/vc10/c_dll_ex.c,
    windll/examples/vc10/c_lib_ex.c (EG)
53. Add note to ReadMe to look at comments in examples.
    windll/examples/vc10/README_VC10_EXAMPLES.txt (EG)

---------------------- September 24th 2015 version 3.1d54 ---------------------
 1. Include errno.h.  api.c (SMS)
 2. Fix uncommented #endif comment.  control.h (SMS)
 3. For Unix, add dependency on control.h to H_ZIP build rule.  unix/Makefile
    (SMS)
 4. For VMS, add dependency on []CONTROL.H to build rules.
    vms/descrip_deps.mms (SMS)
 5. Update comments.  control.h (EG)
 6. Move resolved bug histories from CHANGES to BUGS.  CHANGES, BUGS (EG)
 7. Add title to BUGS.  Break BUGS into sections.  BUGS is being updated to
    act as a bug log for Zip and associated utilities.  TODO remains the
    feature log for Zip.  Also, as features are pulled from TODO to work,
    the actual work is being tracked in BUGS; in this case TODO is updated to
    show the work is being done, or is completed/abandoned.  BUGS (EG)
 8. Change typo "betwee" to "between".  proginfo/compatib.txt (EG)
 9. Change "#if defined(ZIPLIB) || defined(ZIPDLL)" to "#ifdef ZIP_DLL_LIB".
    api.c (EG)
10. For WIN32, add bzip2 special compile options when compiling in bzip2
    code.  control.h (EG)
11. For WIN32, do not include "<shellapi.h>" if using DLL or LIB, as only
    needed for CommandLineToArgvW(), which is not used by DLL or LIB.  Only
    use CONFIG_PLATFORM if defined.  (VC 6 does not support this feature.)
    Exclude get_win32_utf8_argv() if DLL/LIB as not used.  win32/win32.c (EG)
12. Update VC 6 Zip project to remove additional compression method related
    defines.  These are now set in control.h.  Add wrap versions of aescrypt.c,
    aeskey.c, aestab.c, fileenc.c, hmac.c, LzFind.c, LzmaDec.c, LzmaEnc.c,
    Ppmd8.c, Ppmd8Dec.c, Ppmd8Enc.c, prng.c, pwd2key.c, and sha1.c to project.
    Remove references to szip/LzFind.c, szip/Ppmd8.c, and szip/Ppmd8Enc.c from
    project.  Add control.h to project.  win32/vc6/zip.dsp (EG)
13. Update order of preprocessor defines in Zip utility projects.
    win32/vc6/zipcloak.dsp, win32/vc6/zipnote.dsp, win32/vc6/zipsplit.dsp (EG)
14. For WIN32 DLL and LIB, remove additional compression method related defines
    from project preprocessor lists.  These are now defined in control.h.  Add
    control.h to projects.  Add zip.h to DLL project.
    windll/vc6/dll/zip32_dll.dsp, windll/vc6/lib/zip32_lib.dsp (EG)
15. Add wrap files for bzip2.  wrap/blocksort.c, wrap/bzlib.c, wrap/compress.c,
    wrap/crctable.c, wrap/decompress.c, wrap/huffman.c, wrap/randtable.c (EG)
16. Add note to control.h regarding bzip2 compilation settings set there.
    control.h (EG)
17. On Windows VS 2010, remove bzip2 library dependency; instead, compile in
    bzip2 code directly as has been done for VS 6.  This removes the need to
    separately link to the libbz2.lib bzip2 library.  Now the Zip library is
    all that's needed.  Add wrappers for bzip2 files.  Remove reference to
    iz_aes.h.  win32/vc10/zip/zip.vcxproj, win32/vc10/zip/zip.vcxproj.filters,
    wrap/blocksort.c, wrap/bzlib.c, wrap/compress.c, wrap/crctable.c,
    wrap/decompress.c, wrap/huffman.c, wrap/randtable.c (EG)
18. No longer look for the libbz2 library if WIN32 and BZIP2_USEBZIP2DIR is
    set.  In this case the code is being included directly and the bzip2
    library is not needed.  zbz2err.c (EG)
19. Update note at end of "zip -L" license page to include mention of
    additional copyright information on "zip -v" page.  To version page, add
    note to LZMA and PPMd that code is in public domain.  Add note to ZCRYPT
    that parts of code are in public domain.  Add note to AES that code is
    copyright Dr Brian Gladman.  Add missing i++ to bzip2.  zip.c (EG)
20. As base vc6 projects can now include AES (via control.h), remove vc6aes
    projects.  win32/vc6aes/*, windll/vc6aes/* (EG)
21. Update VC6 readmes.  win32/vc6/readvc6.txt, windll/vc6/ReadMeVC6.txt (EG)
22. Rename win32/vc8 to win32/vc8_old, as out of date.  win32/vc8/* (EG).
23. Minor updates.  windll/README_DLL_LIB.txt, windll/vc10/README_VC10.txt (EG)
24. Automatic update of contents.  windll/windll.aps (EG)
25. Minor updates to readme.  windll/examples/ReadUseEx.txt (EG)
26. Minor updates.  windll/examples/vc10/c_dll_ex.c,
    windll/examples/vc10/c_lib_ex.c (EG)
27. Automatic updates.  windll/examples/vc10/c_dll_ex/c_dll_ex.sln,
    windll/examples/vc10/c_lib_ex/c_lib_ex.sln (EG)
28. Remove references to libbz2.lib.
    windll/examples/vc10/c_lib_ex/c_lib_ex.vcxproj (EG)
29. In VS 2010, remove bzip2 directory from include path.  Access now through
    wrappers.  Add bzip2 wrappers to file list.
    windll/vc10/zip32_dll/zip32_dll.vcxproj,
    windll/vc10/zip32_dll/zip32_dll.vcxproj.filters,
    windll/vc10/zip32_lib/zip32_lib.vcxproj,
    windll/vc10/zip32_lib/zip32_lib.vcxproj.filters (EG)
30. Remove libbz2.lib__goes_here.txt file as on Windows libbz2.lib is no longer
    used.  windll/examples/vc10/c_lib_ex/libbz2.lib__goes_here.txt (EG)
31. Add _CRT_SECURE_NO_WARNINGS to wrap/bzlib.c to quiet deprecation warnings
    for strcat().  wrap/bzlib.c (EG)
32. Add "method" and "info" parameters to Service and Progress API callbacks.
    Though the Action being performed was being reported, the compression
    method used was not.  This corrects that.  The new "info" field provides a
    place to report additional information without changing the API later.  The
    initial use is expected to be reporting the encryption method used.  Add
    globals method_string[] and info_string[] to store the method being used
    (generally updated in zipup()) and additional information (currently not
    used).  Define MAX_ACTION_STRING, MAX_METHOD_STRING, and MAX_INFO_STRING
    to set the max sizes of action_string[], method_string[] and info_string[].
    In zipup(), change use of local methodstring to new global method_string.
    In zip.c, initialize method_string and info_string to "".  Add
    method_string and info_string to Service and Progress callbacks.  Update
    API calls in ZpZipTest().  api.c, api.h, zip.h, zipup.c zip.c (EG)
33. Add note that DLLSERVICE does not use 64-bit parameters for VMS.
    api.h (EG)
34. Update Unix/VMS LIB example to include method parameter.  izzip_example.c
    (EG)
35. Minor documentation updates.  windll/WhatsNew_DLL_LIB.txt (EG)
36. Update WINDLL Visual Studio 2010 examples to include method_string and
    info_string.  windll/examples/vb10/zip31vbexample/module1.vb,
    windll/examples/vc10/c_dll_ex.c, windll/examples/vc10/c_lib_ex.c (EG)
37. Update Visual Studio 6 VB example to include method_string and
    info_string.  windll/examples/vb6/vbzipbas.bas (EG)
38. Do not include build date on "zip -v" page if NO_BUILD_DATE defined.
    acorn/acornzip.c, amiga/amigazip.c, atari/atari.c, atheos/atheos.c,
    beos/beos.c, human68k/human68k.c, macos/source/macos.c, msdos/msdos.c,
    novell/netware.c, os2/os2zip.c, qdos/qfileio.c, tandem/tanzip.c,
    theos/theos.c, tops20/tops20.c, unix/unix.c, vms/vms.c, win32/win32.c,
    zos/cmsmvs.c (SMS)
39. Remove comma, field.  qdoz/qfileio.c (SMS)
40. Add fields for " on " and " ".  theos/theos.c (SMS)
41. Update comments.  Add Info-ZIP copyright notice.  Note that 32-bit
    dll_service_no_int64() callback is deprecated.  (No longer needed for
    VB 6 example, as dll_service() callback can be used instead.)  Add note
    that SetZipOptions() is deprecated as uses deprecated options structure.
    windll/examples/vb6/vbzipbas.bas (EG)
42. Update comments.  Add note that the VS 2010 VB example should be used
    instead of this example when can.  Add Info-ZIP copyright.  Add note
    that bugs in old Zip 2.31 dll were fixed in Zip 2.32 dll.
    windll/examples/vb6/vbzipfrm.frm (EG)
43. Indent callback messages in Win32 C DLL and LIB examples consistently.
    windll/examples/vc10/c_dll_ex.c, windll/examples/vc10/c_lib_ex.c (EG)
44. Remove key_needed conditional on outputting "Using traditional ..."
    and other encryption messages so -P outputs the message also.
    zip.c (EG)

----------------------- October 18th 2015 version 3.1d55 -----------------------
 1. Updates to README.  README (EG)
 2. Move BUGS and TODO entries to BUGS and TODO.  Clean up lists a bit.
    CHANGES, BUGS, TODO (EG)
 3. Add perf_win.txt to track Windows performance information.
    proginfo/perf_win.txt (EG)
 4. Move PKWARE, UnZip, and BIS ToDo items to Forum.  (EG)
 5. Enable adding "./" to local directory Unix scans as apparently needed if
    wildcards are involved.  Fix bug where p was always overwritten by w, not
    just when the "./" code was disabled.  Now Unix internal wildcard support
    (last working around zip31d38) restored.  unix/unix.c (EG)

----------------------- October 31st 2015 version 3.1d56 -----------------------
 1. Add note that DLLSERVICE_NO_INT64 is now deprecated.  api.h (EG)
 2. Update wording.  Betas_Readme.txt (EG)
 3. Add zip31d note.  Clarify control.h comment.  Change IZ_CRYPT_TRAD to IZ
    CRYPT TRAD when used as name.  Update WARNING text.  Minor text updates.
    Clarify limited Visual Studio 2015 testing.  For compression settings, add
    note for Windows to see control.h.  Clarify [list] matching.  Clarify adding
    AES encryption on Windows.  INSTALL (EG)
 4. Minor clarifications.  ReadLibDll.txt (EG)
 5. Change date to match public beta release.  Minor wording updates.  Change
    order and update highlights to better match list in zip31d.ann announcement.
    Clarify which versions of UnZip support which encryption.  Note that -FF
    can't restore files in the missing parts of fixed archives.  README (EG)
 6. Update to note that ZCRYPT 3.0 is not a separate package, but instead refers
    to the algorithms in crypt.c and crypt.h, and that ZCRYPT 3.0 refers to
    these files in the Zip and UnZip source kits.  Also note that ZCRYPT 2.9 is
    the last published ZCRYPT kit and is used only for old releases.  As
    README.CR is being kept in the Zip source kit, remove note that it has been
    removed.  Refer to README.CR for additional information.  Note that we
    expect ZCRYPT 3.0 to remain stable for now, and if it changes README_CR.txt
    will be updated to reflect that.  Note that INSTALL has the AES install
    instructions.  Remove Compatibility section, as that information is already
    covered elsewhere.  README_CR.txt (EG)
 7. Add updated copy of pending AES BIS message.  USexport_AES_WG_pending.msg
    (EG)
 8. Update ZCRYPT BIS notification message.  USexport_pending.msg (EG)
 9. Minor updates regarding AES.  Clarify path white space trimming.  Note that
    "-@@ -" is same as "-@".  Reformat note.  WHATSNEW (EG)
10. Update Zip source kit archive comment to put descriptive line at top.  Some
    utilities only display the first line of the archive comment.
    zip-comment.txt (EG)
11. Update Zip 3.1d announcement to more or less match the order in README,
    which refers to this announcement file for more information regarding the
    listed highlights.  Wording updates.  Note that WHATSNEW has more details.
    Clarify some wording.  Note that Windows 64-bit compile now supported.  Add
    note that some z/OS and MVS updates are untested due to lack of platform
    support.  zip31d.ann (EG)
12. Update man page dates to date of public beta (6 November 2015).  Update
    format of .TH line of utilities to match format of line in Zip manual.
    man/man1/zip.1, man/man1/zipcloak.1, man/man1/zipnote.1, man/man1/zipsplit.1
    (EG)
13. Update ZipNote and ZipSplit manual pages to include long options.
    man/man1/zipnote.1, man/man1/zipsplit.1 (EG)
14. Update bug lists on ZipCloak, ZipNote, and ZipSplit manual pages.
    man/man1/zipcloak.1, man/man1/zipnote.1, man/man1/zipsplit.1 (EG)
15. Update plain text versions of man pages.  docs/zip.txt, docs/zipcloak.txt,
    docs/zipnote.txt, docs/zipsplit.txt (EG)

----------------------- November 6th 2015 version 3.1d57 -----------------------
 1. Remove unused old Zip 3.1 announcement.  zip31.ann (SMS)
 2. Remove intermediate generated VMS help file.  vms/zip_cli.rnh (SMS)
 3. Add note that "unzip -a" can be used to change Unix line ends to Windows
    format for easier reading.  ReadLibDll.txt (SMS, EG)
 4. Rename USexport.msg to USexport_orig.msg.  Sent notices for zcrypt and
    iz_aes_wg to BIS with "new" group email.  Rename USexport_pending.msg to
    USexport_zcrypt.msg and update with contents of actual email to BIS.
    Rename USexport_aes_wg_pending.msg to USexport_aes_wg.msg and update with
    contents of actual email to BIS.  USexport_orig.msg, USexport_zcrypt.msg,
    USexport_aes_wg.msg (EG)
 5. Update Unix packaging prototype.  unix/packaging/prototype (EG)
 6. Update README.CR (ZCRYPT 2.9 readme) to include current information.  Update
    README_CR.txt (ZCRYPT 3.0 readme) to include current information.
    README.CR, README_CR.txt (EG)

----------------------- November 15th 2015 version 3.1d ------------------------
 1. Apply updates for PPMd compression problem description in UnZip INSTALL to
    Zip.  Now includes test example.  INSTALL (SMS)
 2. Update release date.  README, revision.h, zip-comment.txt, zip31d.ann (EG)

