The *.cpp and *.h files in this archive are 
Copyright (C) 2007-2011 Angius Fabrizio (hippydream@42cows.org)

You may use, distribute and copy the files under the terms of
GNU General Public License version 2 (see the file LICENSE.GPL for details)

-------------------------------------------------------------------------

Website: http://osdab.42cows.org/
Google Code project page: http://code.google.com/p/osdab

**************** ******* ******************************************************

detailed description
--------------------
Meet a couple of pure-Qt/C++ classes capable of handling PKZIP 2.0 compatible 
zip archives. 

This is not a "port" of some other existing implementation, everything has been 
written from scratch (althought some code was actually inspired by existing 
public domain projects) and it's all pure C++/Qt. Please note that this is not 
a complete stand-alone library, it's just a bunch of classes. You will have to 
add them to your project and modify them to best fit your needs. 

It supports basic features like file extraction and compression (with optional 
password encryption) and archive comments. There are methods to extract single 
files or the whole archive and methods to compress the contents of a whole 
directory. Nevertheless, it should be quite trivial to add other features. 
The public API only has a few methods because this is what I was looking for. 
This does not mean you can't write a few more lines of code (it really shouldn't 
take more than a few lines!) to add more features. 

The classes are great if you only need to use the PKZIP format for loading/saving 
your application's data. Just remember that you will need to customize a few 
parts of the code, i.e. to add your own password retrieval method. 

zlib is used for actual compression and decompression.

Please refer to the example application's main.cpp file or to the class comments 
in the source files for details and more usage examples.

history
-------
2011-06-25 - Bug entry #1 - checking of "version needed to extract" flag 
  (thanks to Dominik for reporting)
2011-06-25 - Fix compile errors on GCC/Linux.
2011-03-27 - Added support for namespace; 
  added support for shared library builds;
  added basic support for time zones; 
  no longer take ownership of QIODevices (MAJOR API CHANGE!);
  unzip will update last modified time on win32 and posix compliant OS;
  code clean up.
2010-07-08 - Bug fix: extractFile() was permanently updating the compressed file 
  size in the zip entry in case of an encrypted entry. Thanks to Serge 
  Kolokolkin for finding and reporting the exact bug.
2008-09-07 - Bug fix: end of central directory was sometimes not being found when 
  the archive had a comment.
2007-02-01 - New IgnorePaths compression option and two more 
  "addDirectoryContents()" convenience methods to use this option.
2007-01-28 - Major changes:
 - Bug fix: there was a big problem with directory names.
 - API changes: the Zip::addDirectory() method is now easier to use.
   The password can now be set using a setPassword() method and a new flag 
   allows to preserve absolute paths.
 - Added an "encrypted" flag to the Unzip::ZipEntry struct.
 - Removed QObject inheritance. Internationalization is now achieved through 
   QCoreApplication::translate().
2006-11-30 - A good part of the UnZip class has been rewritten. Zip entries with 
  a Data Descriptor (like OpenOffice files) are now correctly parsed; some minor 
  API changes and bug fixes; new features: comments, zip entry list, skip paths 
  unzip option
2006-11-24 - Bug fix. An additional directory was being created for some files 
  in the root directory
2006-10-23 - Minor API changes; QIODevice support added; better binary 
  compatibility; "long long" issue with older compilers solved
2006-06-09 - Minor API changes
2005-10-03 - First public release

features
--------
- Pure C++/Qt based, clean & oo implementation. 
- Retrieve archive contents information before extracting any file. 
- Fast (but less robust with corrupt archives) parsing of the ZIP file format. 
- Traditional PKWARE password encryption (strong encryption as introduced by PKZip 
  versions 5.0 and later is NOT available). 
- Support for archive comments.
- Optional namespace and shared lib support (see below)
- Time zone support (see below)

missing features and restrictions
---------------------------------
- Needs to be modified to fit into an existing project (i.e.: you might need to 
  add your own password handling routine). 
- Weak support of corrupted archives (althought some files could be extracted 
  even if the archive is corrupted). 
- No support for filesystem specific features like unix symbolic links. 
- No support for spanned archives. 
- No support for strong encryption or features introduced after PKZIP 
  version 2.0 (see the PKWARE specs for details).

requirements
------------
Qt version 4.0.x or later
zlib library

namespace support
-----------------
If you need the classes to be inside a namespace, simply define OSDAB_NAMESPACE 
in the project file. The classes will then be in a Osdab::Zip namespace.

building as a shared library (.DLL / .so / .dylib)
--------------------------------------------------
There are two ways to achieve this. The easiest and cleanest way is to
edit the zipglobal.h file and remove the "#ifndef OSDAB_ZIP_LIB" block.
The other way consists in #defining OSDAB_ZIP_LIB in both the project
you create for the shared zip library and in the projects linking the library.
An example in the "Example.SharedLib" directory contains such a sample build.

time zones
----------
Time zone support is implemented only on Windows and Unix compatible systems.
It can be disabled by defining OSDAB_ZIP_NO_UTC in the project file.
The currentUtcOffset() method in zipglobal.cpp is where the current UTC offset
is calculated. Qt has no proper time zone support (Qt 4.7.x) so the code 
relies on gmtime and localtime.


**************** ******* ******************************************************
BEFORE SENDING ANY EMAILS, CHECK OUT THE WEBSITE: http://osdab.42cows.org/
**************** ******* ******************************************************
