| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        zipstrm.h
 
- // Purpose:     interface of wxZipNotifier
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /// Compression Method, only 0 (store) and 8 (deflate) are supported here
 
- enum wxZipMethod
 
- {
 
-     wxZIP_METHOD_STORE,
 
-     wxZIP_METHOD_SHRINK,
 
-     wxZIP_METHOD_REDUCE1,
 
-     wxZIP_METHOD_REDUCE2,
 
-     wxZIP_METHOD_REDUCE3,
 
-     wxZIP_METHOD_REDUCE4,
 
-     wxZIP_METHOD_IMPLODE,
 
-     wxZIP_METHOD_TOKENIZE,
 
-     wxZIP_METHOD_DEFLATE,
 
-     wxZIP_METHOD_DEFLATE64,
 
-     wxZIP_METHOD_BZIP2 = 12,
 
-     wxZIP_METHOD_DEFAULT = 0xffff
 
- };
 
- /// Originating File-System.
 
- ///
 
- /// These are Pkware's values. Note that Info-zip disagree on some of them,
 
- /// most notably NTFS.
 
- enum wxZipSystem
 
- {
 
-     wxZIP_SYSTEM_MSDOS,
 
-     wxZIP_SYSTEM_AMIGA,
 
-     wxZIP_SYSTEM_OPENVMS,
 
-     wxZIP_SYSTEM_UNIX,
 
-     wxZIP_SYSTEM_VM_CMS,
 
-     wxZIP_SYSTEM_ATARI_ST,
 
-     wxZIP_SYSTEM_OS2_HPFS,
 
-     wxZIP_SYSTEM_MACINTOSH,
 
-     wxZIP_SYSTEM_Z_SYSTEM,
 
-     wxZIP_SYSTEM_CPM,
 
-     wxZIP_SYSTEM_WINDOWS_NTFS,
 
-     wxZIP_SYSTEM_MVS,
 
-     wxZIP_SYSTEM_VSE,
 
-     wxZIP_SYSTEM_ACORN_RISC,
 
-     wxZIP_SYSTEM_VFAT,
 
-     wxZIP_SYSTEM_ALTERNATE_MVS,
 
-     wxZIP_SYSTEM_BEOS,
 
-     wxZIP_SYSTEM_TANDEM,
 
-     wxZIP_SYSTEM_OS_400
 
- };
 
- /// Dos/Win file attributes
 
- enum wxZipAttributes
 
- {
 
-     wxZIP_A_RDONLY = 0x01,
 
-     wxZIP_A_HIDDEN = 0x02,
 
-     wxZIP_A_SYSTEM = 0x04,
 
-     wxZIP_A_SUBDIR = 0x10,
 
-     wxZIP_A_ARCH   = 0x20,
 
-     wxZIP_A_MASK   = 0x37
 
- };
 
- /// Values for the flags field in the zip headers
 
- enum wxZipFlags
 
- {
 
-     wxZIP_ENCRYPTED         = 0x0001,
 
-     wxZIP_DEFLATE_NORMAL    = 0x0000,   // normal compression
 
-     wxZIP_DEFLATE_EXTRA     = 0x0002,   // extra compression
 
-     wxZIP_DEFLATE_FAST      = 0x0004,   // fast compression
 
-     wxZIP_DEFLATE_SUPERFAST = 0x0006,   // superfast compression
 
-     wxZIP_DEFLATE_MASK      = 0x0006,
 
-     wxZIP_SUMS_FOLLOW       = 0x0008,   // crc and sizes come after the data
 
-     wxZIP_ENHANCED          = 0x0010,
 
-     wxZIP_PATCH             = 0x0020,
 
-     wxZIP_STRONG_ENC        = 0x0040,
 
-     wxZIP_UNUSED            = 0x0F80,
 
-     wxZIP_RESERVED          = 0xF000
 
- };
 
- /**
 
-     @class wxZipNotifier
 
-     If you need to know when a wxZipInputStream updates a wxZipEntry,
 
-     you can create a notifier by deriving from this abstract base class,
 
-     overriding wxZipNotifier::OnEntryUpdated().
 
-     An instance of your notifier class can then be assigned to wxZipEntry
 
-     objects, using wxZipEntry::SetNotifier().
 
-     Setting a notifier is not usually necessary. It is used to handle
 
-     certain cases when modifying an zip in a pipeline (i.e. between
 
-     non-seekable streams).
 
-     See @ref overview_archive_noseek.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive_noseek, wxZipEntry, wxZipInputStream, wxZipOutputStream
 
- */
 
- class wxZipNotifier
 
- {
 
- public:
 
-     /**
 
-         Override this to receive notifications when an wxZipEntry object changes.
 
-     */
 
-     virtual void OnEntryUpdated(wxZipEntry& entry) = 0;
 
- };
 
- /**
 
-     @class wxZipEntry
 
-     Holds the meta-data for an entry in a zip.
 
-     @section zipentry_avail Field availability
 
-     When reading a zip from a stream that is seekable, wxZipEntry::GetNextEntry()
 
-     returns a fully populated wxZipEntry object except for wxZipEntry::GetLocalExtra().
 
-     wxZipEntry::GetLocalExtra() becomes available when the entry is opened, either by
 
-     calling wxZipInputStream::OpenEntry() or by making an attempt to read the entry's data.
 
-     For zips on non-seekable streams, the following fields are always available
 
-     when wxZipEntry::GetNextEntry() returns:
 
-     - wxZipEntry::GetDateTime
 
-     - wxZipEntry::GetInternalFormat
 
-     - wxZipEntry::GetInternalName
 
-     - wxZipEntry::GetFlags
 
-     - wxZipEntry::GetLocalExtra
 
-     - wxZipEntry::GetMethod
 
-     - wxZipEntry::GetName
 
-     - wxZipEntry::GetOffset
 
-     - wxZipEntry::IsDir
 
-     The following fields are also usually available when GetNextEntry() returns,
 
-     however, if the zip was also written to a non-seekable stream the zipper is
 
-     permitted to store them after the entry's data. In that case they become
 
-     available when the entry's data has been read to Eof(), or CloseEntry()
 
-     has been called. (GetFlags() & wxZIP_SUMS_FOLLOW) != 0 indicates that
 
-     one or more of these come after the data:
 
-     - wxZipEntry::GetCompressedSize
 
-     - wxZipEntry::GetCrc
 
-     - wxZipEntry::GetSize
 
-     The following are stored at the end of the zip, and become available when the
 
-     end of the zip has been reached, i.e. after GetNextEntry() returns @NULL
 
-     and Eof() is true:
 
-     - wxZipEntry::GetComment
 
-     - wxZipEntry::GetExternalAttributes
 
-     - wxZipEntry::GetExtra
 
-     - wxZipEntry::GetMode
 
-     - wxZipEntry::GetSystemMadeBy
 
-     - wxZipEntry::IsReadOnly
 
-     - wxZipEntry::IsMadeByUnix
 
-     - wxZipEntry::IsText
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive, wxZipInputStream, wxZipOutputStream, wxZipNotifier
 
- */
 
- class wxZipEntry : public wxArchiveEntry
 
- {
 
- public:
 
-     wxZipEntry(const wxString& name = wxEmptyString,
 
-                const wxDateTime& dt = Now(),
 
-                wxFileOffset size = wxInvalidOffset);
 
-     /**
 
-         Copy constructor.
 
-     */
 
-     wxZipEntry(const wxZipEntry& entry);
 
-     /**
 
-         Make a copy of this entry.
 
-     */
 
-     wxZipEntry* Clone() const;
 
-     //@{
 
-     /**
 
-         Gets and sets the short comment for this entry.
 
-     */
 
-     wxString GetComment() const;
 
-     void SetComment(const wxString& comment);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The low 8 bits are always the DOS/Windows file attributes for this entry.
 
-         The values of these attributes are given in the enumeration ::wxZipAttributes.
 
-         The remaining bits can store platform specific permission bits or
 
-         attributes, and their meaning depends on the value of SetSystemMadeBy().
 
-         If IsMadeByUnix() is @true then the high 16 bits are unix mode bits.
 
-         The following other accessors access these bits:
 
-         - IsReadOnly() / SetIsReadOnly()
 
-         - IsDir() / SetIsDir()
 
-         - GetMode() / SetMode()
 
-     */
 
-     wxUint32 GetExternalAttributes() const;
 
-     void SetExternalAttributes(wxUint32 attr);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The extra field from the entry's central directory record.
 
-         The extra field is used to store platform or application specific
 
-         data. See Pkware's document 'appnote.txt' for information on its format.
 
-     */
 
-     const char* GetExtra() const;
 
-     size_t GetExtraLen() const;
 
-     void SetExtra(const char* extra, size_t len);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The extra field from the entry's local record.
 
-         The extra field is used to store platform or application specific
 
-         data. See Pkware's document 'appnote.txt' for information on its format.
 
-     */
 
-     const char* GetLocalExtra() const;
 
-     size_t GetLocalExtraLen() const;
 
-     void SetLocalExtra(const char* extra, size_t len);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The compression method.
 
-         The enumeration ::wxZipMethod lists the possible values.
 
-         The default constructor sets this to @c wxZIP_METHOD_DEFAULT,
 
-         which allows wxZipOutputStream to choose the method when writing the entry.
 
-     */
 
-     int GetMethod() const;
 
-     void SetMethod(int method);
 
-     //@}
 
-     //@{
 
-     /**
 
-         If IsMadeByUnix() is true then returns the unix permission bits stored
 
-         in GetExternalAttributes(). Otherwise synthesises them from the DOS attributes.
 
-     */
 
-     int GetMode() const;
 
-     /**
 
-         Sets the DOS attributes in GetExternalAttributes() to be consistent with
 
-         the @a mode given.
 
-         If IsMadeByUnix() is @true then also stores @a mode in GetExternalAttributes().
 
-         Note that the default constructor sets GetSystemMadeBy() to
 
-         @c wxZIP_SYSTEM_MSDOS by default. So to be able to store unix
 
-         permissions when creating zips, call SetSystemMadeBy(wxZIP_SYSTEM_UNIX).
 
-     */
 
-     void SetMode(int mode);
 
-     //@}
 
-     //@{
 
-     /**
 
-         The originating file-system.
 
-         The default constructor sets this to @c wxZIP_SYSTEM_MSDOS.
 
-         Set it to @c wxZIP_SYSTEM_UNIX in order to be able to store unix
 
-         permissions using SetMode().
 
-     */
 
-     int GetSystemMadeBy() const;
 
-     void SetSystemMadeBy(int system);
 
-     //@}
 
-     /**
 
-         The compressed size of this entry in bytes.
 
-     */
 
-     wxFileOffset GetCompressedSize() const;
 
-     /**
 
-         CRC32 for this entry's data.
 
-     */
 
-     wxUint32 GetCrc() const;
 
-     /**
 
-         Returns a combination of the bits flags in the enumeration @c wxZipFlags.
 
-     */
 
-     int GetFlags() const;
 
-     //@{
 
-     /**
 
-         A static member that translates a filename into the internal format used
 
-         within the archive. If the third parameter is provided, the bool pointed
 
-         to is set to indicate whether the name looks like a directory name
 
-         (i.e. has a trailing path separator).
 
-         @see @ref overview_archive_byname
 
-     */
 
-     wxString GetInternalName(const wxString& name,
 
-                             wxPathFormat format = wxPATH_NATIVE,
 
-                             bool* pIsDir = NULL);
 
-     /**
 
-         Returns the entry's filename in the internal format used within the archive.
 
-         The name can include directory components, i.e. it can be a full path.
 
-         The names of directory entries are returned without any trailing path separator.
 
-         This gives a canonical name that can be used in comparisons.
 
-     */
 
-     wxString GetInternalName() const;
 
-     //@}
 
-     /**
 
-         Returns @true if GetSystemMadeBy() is a flavour of unix.
 
-     */
 
-     bool IsMadeByUnix() const;
 
-     //@{
 
-     /**
 
-         Indicates that this entry's data is text in an 8-bit encoding.
 
-     */
 
-     bool IsText() const;
 
-     void SetIsText(bool isText = true);
 
-     //@}
 
-     //@{
 
-     /**
 
-         Sets the notifier (see wxZipNotifier) for this entry.
 
-         Whenever the wxZipInputStream updates this entry, it will then invoke
 
-         the associated notifier's wxZipNotifier::OnEntryUpdated() method.
 
-         Setting a notifier is not usually necessary. It is used to handle
 
-         certain cases when modifying an zip in a pipeline (i.e. between
 
-         non-seekable streams).
 
-         @see @ref overview_archive_noseek, wxZipNotifier
 
-     */
 
-     void SetNotifier(wxZipNotifier& notifier);
 
-     void UnsetNotifier();
 
-     //@}
 
-     /**
 
-         Assignment operator.
 
-     */
 
-     wxZipEntry& operator=(const wxZipEntry& entry);
 
- };
 
- /**
 
-     @class wxZipInputStream
 
-     Input stream for reading zip files.
 
-     wxZipInputStream::GetNextEntry() returns a wxZipEntry object containing the
 
-     meta-data for the next entry in the zip (and gives away ownership).
 
-     Reading from the wxZipInputStream then returns the entry's data.
 
-     Eof() becomes @true after an attempt has been made to read past the end of
 
-     the entry's data.
 
-     When there are no more entries, GetNextEntry() returns @NULL and sets Eof().
 
-     Note that in general zip entries are not seekable, and
 
-     wxZipInputStream::SeekI() always returns ::wxInvalidOffset.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive, wxZipEntry, wxZipOutputStream
 
- */
 
- class wxZipInputStream : public wxArchiveInputStream
 
- {
 
- public:
 
-     //@{
 
-     /**
 
-         Constructor. In a Unicode build the second parameter @a conv is used to
 
-         translate the filename and comment fields into Unicode.
 
-         It has no effect on the stream's data.
 
-         If the parent stream is passed as a pointer then the new filter stream
 
-         takes ownership of it. If it is passed by reference then it does not.
 
-     */
 
-     wxZipInputStream(wxInputStream& stream,
 
-                      wxMBConv& conv = wxConvLocal);
 
-     wxZipInputStream(wxInputStream* stream,
 
-                      wxMBConv& conv = wxConvLocal);
 
-     //@}
 
-     /**
 
-         @deprecated
 
-         Compatibility constructor (requires WXWIN_COMPATIBILITY_2_6).
 
-         When this constructor is used, an emulation of seeking is
 
-         switched on for compatibility with previous versions. Note however,
 
-         that it is deprecated.
 
-     */
 
-     wxZipInputStream(const wxString& archive,
 
-                      const wxString& file);
 
-     /**
 
-         Closes the current entry.
 
-         On a non-seekable stream reads to the end of the current entry first.
 
-     */
 
-     bool CloseEntry();
 
-     /**
 
-         Returns the zip comment.
 
-         This is stored at the end of the zip, therefore when reading a zip
 
-         from a non-seekable stream, it returns the empty string until the end
 
-         of the zip has been reached, i.e. when GetNextEntry() returns @NULL.
 
-     */
 
-     wxString GetComment();
 
-     /**
 
-         Closes the current entry if one is open, then reads the meta-data for
 
-         the next entry and returns it in a wxZipEntry object, giving away ownership.
 
-         The stream is then open and can be read.
 
-     */
 
-     wxZipEntry* GetNextEntry();
 
-     /**
 
-         For a zip on a seekable stream returns the total number of entries in
 
-         the zip. For zips on non-seekable streams returns the number of entries
 
-         returned so far by GetNextEntry().
 
-     */
 
-     int GetTotalEntries();
 
-     /**
 
-         Closes the current entry if one is open, then opens the entry specified
 
-         by the @a entry object.
 
-         @a entry should be from the same zip file, and the zip should
 
-         be on a seekable stream.
 
-         @see overview_archive_byname
 
-     */
 
-     bool OpenEntry(wxZipEntry& entry);
 
- };
 
- /**
 
-     @class wxZipClassFactory
 
-     Class factory for the zip archive format.
 
-     See the base class for details.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive,
 
-          @ref overview_archive_generic,
 
-          wxZipEntry, wxZipInputStream, wxZipOutputStream
 
- */
 
- class wxZipClassFactory : public wxArchiveClassFactory
 
- {
 
- public:
 
- };
 
- /**
 
-     @class wxZipOutputStream
 
-     Output stream for writing zip files.
 
-     wxZipOutputStream::PutNextEntry() is used to create a new entry in the
 
-     output zip, then the entry's data is written to the wxZipOutputStream.
 
-     Another call to wxZipOutputStream::PutNextEntry() closes the current
 
-     entry and begins the next.
 
-     @library{wxbase}
 
-     @category{archive,streams}
 
-     @see @ref overview_archive, wxZipEntry, wxZipInputStream
 
- */
 
- class wxZipOutputStream : public wxArchiveOutputStream
 
- {
 
- public:
 
-     //@{
 
-     /**
 
-         Constructor.
 
-         @a level is the compression level to use.
 
-         It can be a value between 0 and 9 or -1 to use the default value
 
-         which currently is equivalent to 6.
 
-         If the parent stream is passed as a pointer then the new filter stream
 
-         takes ownership of it. If it is passed by reference then it does not.
 
-         In a Unicode build the third parameter @a conv is used to translate
 
-         the filename and comment fields to an 8-bit encoding.
 
-         It has no effect on the stream's data.
 
-     */
 
-     wxZipOutputStream(wxOutputStream& stream, int level = -1,
 
-                       wxMBConv& conv = wxConvLocal);
 
-     wxZipOutputStream(wxOutputStream* stream, int level = -1,
 
-                       wxMBConv& conv = wxConvLocal);
 
-     //@}
 
-     /**
 
-         The destructor calls Close() to finish writing the zip if it has
 
-         not been called already.
 
-     */
 
-     virtual ~wxZipOutputStream();
 
-     /**
 
-         Finishes writing the zip, returning @true if successful.
 
-         Called by the destructor if not called explicitly.
 
-     */
 
-     bool Close();
 
-     /**
 
-         Close the current entry.
 
-         It is called implicitly whenever another new entry is created with CopyEntry()
 
-         or PutNextEntry(), or when the zip is closed.
 
-     */
 
-     bool CloseEntry();
 
-     /**
 
-         Transfers the zip comment from the wxZipInputStream
 
-         to this output stream.
 
-     */
 
-     bool CopyArchiveMetaData(wxZipInputStream& inputStream);
 
-     /**
 
-         Takes ownership of @a entry and uses it to create a new entry
 
-         in the zip. @a entry is then opened in @a inputStream and its contents
 
-         copied to this stream.
 
-         CopyEntry() is much more efficient than transferring the data using
 
-         Read() and Write() since it will copy them without decompressing and
 
-         recompressing them.
 
-         For zips on seekable streams, @a entry must be from the same zip file
 
-         as @a inputStream. For non-seekable streams, @a entry must also be the
 
-         last thing read from @a inputStream.
 
-     */
 
-     bool CopyEntry(wxZipEntry* entry, wxZipInputStream& inputStream);
 
-     //@{
 
-     /**
 
-         Set the compression level that will be used the next time an entry is
 
-         created.
 
-         It can be a value between 0 and 9 or -1 to use the default value
 
-         which currently is equivalent to 6.
 
-     */
 
-     int GetLevel() const;
 
-     void SetLevel(int level);
 
-     //@}
 
-     /**
 
-         Create a new directory entry (see wxArchiveEntry::IsDir) with the given
 
-         name and timestamp.
 
-         PutNextEntry() can also be used to create directory entries, by supplying
 
-         a name with a trailing path separator.
 
-     */
 
-     bool PutNextDirEntry(const wxString& name,
 
-                          const wxDateTime& dt = wxDateTime::Now());
 
-     //@{
 
-     /**
 
-         Takes ownership of @a entry and uses it to create a new entry in the zip.
 
-     */
 
-     bool PutNextEntry(wxZipEntry* entry);
 
-     /**
 
-         Create a new entry with the given name, timestamp and size.
 
-     */
 
-     bool PutNextEntry(const wxString& name,
 
-                       const wxDateTime& dt = wxDateTime::Now(),
 
-                       wxFileOffset size = wxInvalidOffset);
 
-     //@}
 
-     /**
 
-         Sets a comment for the zip as a whole.
 
-         It is written at the end of the zip.
 
-     */
 
-     void SetComment(const wxString& comment);
 
- };
 
 
  |