What's New

Last updated 20 June 2010

This file is the full list of new features and major changes for Zip 3.x
by beta release.  See the announcement file zip31c.ann for a quick summary
of all features and changes in Zip 3.1c (this beta).  Also see the file
README for release information, INSTALL for installation procedures, and
the manual pages zip.txt, zipsplit.txt, zipcloak.txt, and zipnote.txt, as
well as the extended help in Zip, for how to use the new features.  The
file CHANGES has all the day-to-day changes made during development.


Below are some of the more significant items on the list for Zip 3.1
(see ToDo for a more complete list):

- AES encryption.
- Extended attributes for Windows, Linux, and Mac OS X.
- Support -d@ for deleting list of files.
- Decide if -R, -i and -x should use external rather than internal patterns.
- Though Unicode paths have been implemented and tested, Unicode comments
  are not yet supported (except for comments on UTF-8 native systems which
  are supported).
- Verbose mode -v may still need work.
- When user pattern is a directory, add end / automatically.
- Add C# example for Zip 3.1 (need to be converted to new DLLs) - original
  C# example already added with note.
- A way to rename paths in an archive (like ZipNote, but as creating archive).
- UNC path support maybe.
- Support for other languages maybe.
- Send in your suggestions.
- ...


MAJOR CHANGES BY BETA VERSION
-----------------------------

New things in Zip 3.1d

- Optional support for WinZip-compatible AES (strong) encryption.  A new
  -Y option specifies encryption method/strength.  For export-control
  reasons, AES encryption source code is distributed separately.
- Optional support for LZMA and PPMd compression methods.  Extended
  -1/-9, -n, and -Z options offer more detailed control over compression
  method and level.
- Behavior change: -9 option no longer clears the -n (STORE) suffix
  list.  Previously, with -9, Zip tried to compress all files, including
  files whose name endings matched the -n (STORE) suffix list.  Now, -9
  only sets the compression level.  Now, use "-n:" explicitly to clear the
  default -n (STORE) suffix list, if you want Zip to try to compress all
  files (with or without -9).
- User-triggered progress messages provide some (limited) information to
  an interactive user when -q is used to suppress mormal messages.  On
  VMS, the usual Ctrl/T trigger is used.  On Unix(-like) systems, use a
  "kill -USR1 <pid>" command in another process.  (A new -si option
  reports the process ID for this purpose.)

New things in Zip 3.1c

- New EBCDIC -aa option to skip binary check.  Update EBCDIC message
  display code to use standard display and logging functions.  Other
  EBCDIC updates, including better handling of unprintable characters.
- z/OS and MVS updates, including addition of 64-bit large file support.
  Fixes to -aa and -MV options to better support MVS.
- MVS and z/OS makefile updates.  Create target for zos, which now works
  like the generic target, and redirect os390 target to the zos target. 
  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 z/OS readme.
- Update EXPENTRY entries for DLL.
- Update extended help.
- Fix file name memory leak.  Fix problem where patterns are not
  matching stored paths when the -j option is used to strip the path.  Fix
  split_path bug and memory leak.  Fix entries count rollover bug
  resulting in some archives with large numbers of entries being rejected.
- Add new options -dt (--display_time), -de (--display_est_to_go), and
  -dr (--display_rate) options.  Option -dt displays the time each entry
  is started and uses standard timing to one second resolution.  Option
  -de provides an estimate of the time remaining to complete the operation
  based on the average throughput rate so far.  Option -dr displays the
  current estimated throughput rate.  Options -de and -dr use microsecond
  timing to get better rate estimates.
- Add Fedora stack markings patch from Debian to prevent stack from being
  executable.
- For VMS, avoid saving a user-specified version (";1") when the
  user-specified file is a directory.  Fix to eliminate annoying
  %SET-E-PRONOTCHG messages when SET PROT failed during "zip -m" directory
  deletions.  Update handling of exit codes.
- Added checks for uname -m, uname -o, uname -p, uname -r, uname -s, and
  uname -v to version information.
- Minor Apple fixes.
- Update DLL interface.  Add feature list that is returned to user.  Add
  support for setting compression method from DLL.  Keep DLL Version fixed
  at Zip 3.1 while DLL interface remains backward compatible, allowing DLL
  user to check if DLL is compatible with calling code.  Add
  ProgressReport callback giving user percent complete progress reports
  and allowing termination during large file operations.  Add feature list
  string to Version callback so user can check what features are compiled
  in and enabled.  Support separate Exclude Before Date and Include Before
  Date so DLL user can set date range.  Fix bug in DLL UTF-8 option bit
  checks.  Various cleanup changes.
- Add bzip2 support to Windows DLL and LIB MSVS 6 projects.
- Incomplete update of WinDLL C example.  Should be completed next beta.
- More or less complete update of VB example that uses latest DLL
  interface structures, sets up a ProgressReport callback, and implements
  new UTF8 options.
- If logfile is specified as "-", suppress normal output (as -q) and
  send log output to stdout.
- Fix formatting of -dg global dot output.
- Allow negating -j as replacement for -p, which is now deprecated.

New things in Zip 3.1b

- EBCDIC and MVS fixes for file includes, tty detection, better error
  reporting for file opens, and character exceptions for binary detection.
- File close bug in ZipNote fixed.
- Fixes and structure enhancements for DLL.  Update DLL build parts of
  makefiles.  Do not force NO_ASM for DLL to allow build scripts to
  determine setting.
- License update that removes requirement for additional documentation
  when binary includes option to display license.
- VB example update.
- Static library fixes.
- Use Windows 64-bit fseek and ftell as available to more modern compilers.
- Update to local character set detection and UTF-8 activation.  Fixes
  for MAEMO OS.
- Additional Acorn/RISCOS fixes.  Use APCS-32 build and C swiven code.
  Add GAS versions for GCCSDK 4 (ELF).  Simplified indirect variable
  loading.  Update Acorn ReadMe.  Change to kernel OS error calls.
  Change from binary srcrename to BASIC version.
- Fix bug in character set conversions causing illegal memory access.
- Fixes and updates to character set handling for VMS.  Change from
  \ to ^ for default escape character for VMS.  Update handling of
  escapes.
- Change matching of command line arguments to file and archive paths
  to use internal format paths instead of local OS format paths for
  consistent matching.
- Update Unix configure and makefile to add additional parameters for
  ZLIB and PROD destination directory.
- Add choosing of output directory to VMS build.
- Fix VMS ACL buffer overrun problem.  Update VMS command descriptions.
- Header file include updates for WinDLL.
- Add compatibility defines for VC++ 8 and newer.
- Change settings to compile LIB library for multithreading projects
  as DLL already did.
- Add examples directory to source tree and organize examples in
  directory tree.  Add LIB examples.  Fix example.exe build rules.
- Add new -pp option to allow adding a prefix to archive paths.
- Add optional bzip2 support for DLL build.
- Add missing "delete resource binaries" (*.res) command to clean
    target.
- Update WinDLL tree to be more consistent.
- Link updates for VMS.
- Remove old borland dll and lib from WinDLL contents list.
- Fix a few memory leaks.
- Add -MV option to control how MVS paths are stored.
- Add -aa option to force all files to be processed as text files
  (including EBCDIC and line end translations).  Useful for moving
  EBCDIC files (as from Z/OS) to ASCII systems.
- Minor updates to logging.
- Pass Zip password (from -e or -P) to unzip when testing archive.


New things in Zip 3.1a

- Add support for -UN=N (no Unicode) and -UN=U (store Unicode as native
  UTF-8) options to dll interface.
- Add preliminary support for Mac OS X file resource data (uses Unix port).
- Add support for -df option to Unix Apple (Mac OS X) to only save data
  fork.  Add new option -as to save in Apple sequestered format.
- Remove tabs from some messages.
- VMS bzip2 fixes.
- WINDLL fixes.
- Fix UTF-8 bug where using native UTF-8 setting created a wrong central
  directory size in the End Of Central Directory.
- Update Acorn port.  (Thanks to Jeffrey Lee.)
- Compiler makefile updates for MSDOS and WIN32 ports.
- Add support for ZLIB for VMS.
- Better handling of VMS dots.
- Update WINDLL C example.
- Debian patch 844_003 with fixes for manual text.
- Debian patch 5988_006 to change INSTALL_PROGRAM to INSTALL in makefile
  for manuals.


New things in Zip 3.0 since Zip 3.0h

- Unicode fixes.
- Test and fix various ports as needed.
- Update Win32 resource to support more Windows ports.
- Add djgpp 2.x makefile that includes bzip2.
- Add Win32 version resource to Win32 executable.
- Bug fixes.
- Documentation updates.
- Package for release.


New things in Zip 3.0h

- Allow -@ and -x to work together.
- Unicode code cleanup.
- Allow forcing use of UTF-8 storage in standard path and comment.
- Update symbolic link checks.
- Add support for storing 32-bit UIDs/GIDs using new extra field.
  Backward compatible support for the old 16-bit UID/GID extra field
  remains if Zip is compiled on an OS that has 16-bit UID/GID
  storage.
- Update VMS notes.
- Directory scan using -AS (include only files with Windows archive
  bit set) now ignores archive bit on directories to include all files
  with archive bit set in all directories.  Also, to avoid empty
  directories being created, -AS now does not store directory
  entries.
- Add Unix IBM support.
- Change -W to -ws to free -W for later use.
- Fix large file support for MinGW.
- Fix large file support for bzip2.
- Fix compile error in ZipCloak when UNICODE_SUPPORT is not enabled.
- Fix Unicode bug in ZipCloak involving Unicode paths.
- Long Unicode escapes changed from #Lxxxxxxxx to #Lxxxxxx to shorten
  paths with escaped Unicode.
- Bug fixes.


New things in Zip 3.0g

- Add split support to VB project for Zip64.
- Disable reading of Unix FIFOs unless new -FI option used to avoid an
  archiving operation stopping when it hits an active unfed FIFO.
- The "[list]" wildcard expression (regular expression matching of any
  character or range of characters in list) is now disabled on DOS and
  Windows as it has caused confusion when filenames have [ and ] in
  them.  The new -RE option reenables it.
- Add negation to many display options such as -dc and -db.
- Allow -FF to read and fix archives having local entries that appear
  after central directory entries.
- Bug fixes.


New things in Zip 3.0f

- bzip2 - The bzip2 compression method looks supported for at least
  Windows, Unix, and VMS using the bzip2 library.  A new option, -Z cm,
  selects the compression method.

- Split archives - Can now use -s to create a split archive.  The
  default is to update split files as the archive is being written,
  which requires all splits to remain open until the archive is done.
  This should be no problem when writing the archive to a hard drive,
  for example, and this approach creates archives that should be
  supported by all unzips that support splits.  Adding the -sp option
  enables split pause mode that instead writes splits that do not
  need updating and pauses Zip after each split.  This allows splits
  to be written directly to removable media, however -sp archives
  may not be as universally compatible.

- Unicode support - Zip now stores Unicode paths that should be more
  portable across character sets and languages.  The unzip must have
  Unicode support enabled or the Unicode paths are ignored.  If
  reading an archive with Unicode paths, unsupported characters are
  replaced by #Uxxxx and #Lxxxxxxxx escapes in the file name.  Option
  -UN controls how Unicode is handled.  Also, on systems where the
  current character set is UTF-8, preliminary support for the new
  General Purpose Bit Flag, bit 11, UTF-8 flag, that indicates UTF-8
  is stored in the path and comment fields is implemented for paths.
- Unicode on Win32 - On WIN32 systems that support the wide character
  calls (mainly NT and later systems using NTFS), when UNICODE SUPPORT
  is enabled Zip will now do directory scans using Unicode and convert
  the Unicode paths to the local character set for storage in the standard
  path field and store UTF-8 in the Unicode extra field.  This allows
  directory scans to complete successfully regardless of the character
  set the path is in.  On Win9x systems wide character scans are not
  generally supported and Zip automatically uses a local character scan
  instead.

- Keep extra fields option - The default operation has been, and continues
  to be, to read then strip old extra fields when reading entries from an
  existing archive and then recreate the extra fields that Zip knows about.
  Extra fields specific to each operating system get added by default also.
  The new option -X- (negated -X) keeps any old extra fields, copying
  them to the updated archive unchanged (unless Zip has updated them).
  The unnegated -X still strips most all extra fields except Zip64,
  Unicode, and UT time.

- License - minor updates to the license.

- Windows OEM - When compiled with WIN32_OEM (the default for WIN32),
  Zip on WIN32 now stores OEM paths, which should be more compatible
  with other zips and should fix some character set problems.
- Windows Archive Bit support - On Windows can now use new -AS
  (include if archive bit set) option to select files with the DOS
  archive bit set and use new -AC (clear archive bits) option to clear
  the archive bits on files after the archive has been created.
  But -DF is probably better.

- Difference mode - A new option -DF (--dif) creates an output archive
  that includes only files changed or new since the input archive was
  created.  Can use to create incremental backups.
- File Sync - The new option -FS enables File Sync, a new mode that
  synchronizes the entries in an archive with the files on the file
  system, adding updating, and deleting entries as needed.  This
  should create the same results as creating a new archive, but
  since existing entries are copied, may be much faster.

- Copy Mode - A new --out option allows creating a new archive with a
  different name than the input archive, leaving the input archive
  unchanged.  This allows updating split archives.  It also allows
  for a new copy mode to select entries in one archive and copy them
  directly to a new archive.
- Empty archives - Now an empty archive is created when -i or -i@ is used
  and the file patterns given do not match anything.  This has been
  requested to support scripts.

- Global dots - A new -dg option now displays progress dots as -dd does,
  but instead of displaying them for each file, the dots track the total
  bytes read for the archive.  The -dg option also works when -q is used
  to disable most output, which allows for something like zip -qdgds 100m
  to be used to not display specific files but display a dot every 100 MB
  as a global status.
- Date range - Can now use -t and -tt to set a date range
- Fix options - Option -F redone and can recover files from an archive
  with a mostly complete central directory more reliably, but no longer
  can handle truncated archives.  Option -FF redone and now can salvage
  files from slightly more damaged archives, including truncated archives.
  In some ways -F is less powerful but more stable than it was and -FF will
  be needed where -F in Zip 2.32 was enough.  One big change is -F and -FF
  both now support split archives.
- Console writing - Updates to how messages are written to the console have
  been made including more consistent handling of line breaks.
- Show Files options - Option -sf lists the files that would be operated
  on.  This option can be used alone to list the files in an archive.
  Also see options -su and -sU for showing Unicode paths.
- UnZip Check - Now check that UnZip 6.00 or later is being used for
  unzip if testing a Zip64 archive.  A new option -TT can be used to set
  the unzip to use with the -T check.  Currently UnZip does not support
  split archives so split archives can't be tested by UnZip.
- Streaming - Directories are now handled better when streaming.
- Case matching - Normally all matching against archive entries is case
  sensitive, so *.BAR will not match or find foo.bar in an archive
  when deleting, copying, or freshening entries (deleting and copying
  only on VMS).  New option -ic (--ignore-case) enables case insensitive
  matching.  Currently -ic is only implemented on WIN32 and VMS.

- Delete date bug fixed - Bug when using -d to delete files while
  using -t or -tt to select the files based on date is fixed
- Large file encryption bug fixed - Fix for bug that very rarely
  results in bad data being stored when deflating and encrypting
  uncompressable data and resulting in CRC errors when extracting,
  but the chance of error increases with file size (thanks to
  WinZip for finding this bug).  See CHANGES for details.


New things in Zip 3.0e

- Bugs described in Debian patches 004 (unix configure script update) and
  005 (large path bug) fixed
- Various fixes
- Add optional running stats and also end stats if not all files could
  be read
- Options -l and -ll now do quick binary check on first buffer and skip
  formatting if first buffer has binary - still check at end to note
  if formatting was done on file that was later determined to be binary,
  but now potential file corruption is generally avoided
- Main binary check now uses new algorithm that should also treat UTF-8 and
  other similar encodings as text, allowing proper line end translation
  for UTF-8 files
- When output is not updatable by seeking back and Zip64 is enabled, output
  is forced to Zip64 to avoid possible later need for Zip64 when not enabled
- More work on splits, but still not usable
- Fixes for djgpp
- Add log file capability to save all errors and optionally messages
- Add code to test for a Zip64 archive when compiled without Zip64 support
- New VC6 projects for Win32 and WinDLL
- Updates to extended help
- Changes to force-zip64 option
- ZE_BIG error now given also for files too big to read or write
- Fix file delete bug
- Update license
- Update export documentation
- Add VMS extended filename support
- Add directory traversal improvements, some for Win32 ports and some for
  all ports, that can result in a 10 times increase in speed in some cases


New things in Zip 3.0d

- Some large file crypt fixes
- Some updates to support WiZ
- On VMS, changed -V (/VMS) processing to truncate file at EOF, allowing
  greater compatability with non-VMS systems.  New -VV (/VMS=ALL) option
  saves all allocated blocks in a file.  (Previously, -V did neither.)
- On VMS, pushed 2GB file size limit with -V out to 4GB
- On VMS (recent, non-VAX), with SET PROCESS /PARSE = EXTEND,
  command-line case is preserved.  This obviates quoting upper-case
  options, like -V, when enabled
- On VMS, fixed problems with mixed-case directory names.  Also changed
  to keep ODS5 extended file name escape characters ("^") out of the
  archived names in simple cases
- Changes to the display dots
- Option -W should now force wildcard matching to not cross directory
  separators.  For example, a/b*r/d will match a/bar/d but not a/ba/r/d
- Option -nw should turn off all wildcard matching so foo[bar] is matched
  literally and [bar] is not considered a regular expression
- Atheos port
- Debugging of Unix and VMS large file ports.  Most features may work now
  on these ports for large files.  Still need to fix 2 GB to 4 GB when not
  compiled with large file support
- On VMS, added an open callback function which (where supported) senses
  the process RMS_DEFAULT values for file extend quantity (deq)
  multi-block count (mbc), and multi-buffer count (mbf), and sets the
  FAB/RAB parameters accordingly.  The default deq is now much larger
  than before (16384 blocks, was none), and the default mbc is now 127
  (up from 64), speeding creation of a large archive file.  The "-v"
  option shows some of the activity.  On old VMS versions, RMS_DEFAULT
  sensing (GETJPI) fails (silently, without "-v"), and no changes will
  be made.  Even there, (DCL) SET RMS /EXTEND = <big> can help
  performance.  RMS_DEFAULT values override built-in default values.


New things in Zip 3.0c

- Converted to using 64-bit file environment instead of transitional functions
  like fseeko64 for ports that support it
- Added "--" argument to read all following arguments as paths
- Second help page added
- Binary detection adjusted from 20% binary is binary to 2%
- When -R and -i used together now -i has precedence over -R
- Archive names with spaces can now be tested on MSDOS and Win32


New things in Zip 3.0b

- Fixed ifdefs so can test base code by compiling with
  NO_LARGE_FILE_SUPPORT, then compiling with NO_ZIP64_SUPPORT to test
  64-bit file calls (if port enables) but otherwise use base code, and
  compiling normally to enable Zip64 code
- Unix Zip64 fixes - should now be able to create and read large files
- WinDLL changes to support Zip64.  Zip 3.0 dll named Zip32z64.dll
- New VB example to show use of Zip32z64.dll
- New options -sc (show final command line and exit) and -sd (show each
  step zip is doing, a little different than verbose which is still there)
  added to help debug but both or at least -sd might go away in the
  release
- Some minor posted bugs fixed (see Changes)


New things in Zip 3.0a

- Initial Zip64 support allowing large files and large numbers of files
- New command line processor
- Other changes, see file Changes


Note:  Zip 2.4 was never released.  That code was the start of the Zip 3.0
effort above.


New things in Zip 2.3

- IBM OS/390 port (Unix like, but EBCDIC) by Paul von Behren
- Apple Macintosh (MACOS) port by Dirk Haase
- Theos port by Jean-Michel Dubois
- Multibyte characterset support by Yoshioka Tsuneo
- Support for ISO 8601 date format with -t and -tt options
- Info-ZIP license


New things in Zip 2.2

- BEOS port by Chris Herborth
- QDOS port by Jonathan Hudson
- TANDEM port by Dave Smith
- WINDLL port (16-bit Win 3.x and 32-bit WinNT/Win95) by Mike White
- SYSV packages support by John Bush
- zip -P SeCrEt encrypts entries in the zip file with password SeCrEt
  (WARNING: THIS IS INSECURE, use at your own risk)
- zip -R recurses into subdirectories of current dir like "PKZIP -rP"
- zip -x@exclude.lst excludes files specified in the file exclude.lst
- zip -i@include.lst includes files specified in the file include.lst
- zip -@ only handles one filename per line, but supports whitespace in names
- zip -t mmddyyyy, 4 digit year number for uniqueness of years beyond 2000
- zip -tt mmddyyyy only includes files before a specified date
