201 lines
4.7 KiB
C++
Executable File
201 lines
4.7 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef _ZIPHEADERS_H_
|
|
#define _ZIPHEADERS_H_
|
|
|
|
//Includes
|
|
#ifndef _PLATFORM_H_
|
|
#include "platform/platform.h"
|
|
#endif
|
|
|
|
//-------------------------------------- NB: Structures in this header are BYTE
|
|
// aligned!
|
|
|
|
#ifdef TORQUE_COMPILER_VISUALC
|
|
# pragma pack(push,1)
|
|
#else
|
|
#ifdef TORQUE_COMPILER_CODEWARRIOR
|
|
# pragma options align=packed
|
|
#endif
|
|
#endif
|
|
|
|
|
|
class Stream;
|
|
|
|
//-------------------------------------- Structure designed to fit exactly 256 bytes.
|
|
class ZipLocalFileHeader
|
|
{
|
|
// NB: Extra field in the header is ignored, but the stream read seeks
|
|
// past it...
|
|
//
|
|
private:
|
|
static const U32 csm_localFileHeaderSig;
|
|
|
|
public:
|
|
enum {
|
|
MaxFileNameLength = 211
|
|
};
|
|
enum CompressionMethod {
|
|
Stored = 0,
|
|
Shrunk = 1,
|
|
ReducedL1 = 2,
|
|
ReducedL2 = 3,
|
|
ReducedL3 = 4,
|
|
ReducedL4 = 5,
|
|
Imploded = 6,
|
|
ReservedTokenized = 7,
|
|
Deflated = 8,
|
|
EnhDefalted = 9,
|
|
DateCompression = 10
|
|
};
|
|
|
|
struct LocalFileHeader {
|
|
U32 headerSig;
|
|
U16 versionToDecompress;
|
|
U16 bitFlags;
|
|
U16 compressionMethod;
|
|
U16 lastModTime;
|
|
U16 lastModDate;
|
|
U32 crc32;
|
|
U32 compressedSize;
|
|
U32 uncompressedSize;
|
|
|
|
U16 fileNameLength;
|
|
U16 extraFieldLength;
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
LocalFileHeader m_header; // Fixed size header
|
|
char m_pFileName[226]; // Variable size: FileName. Note that the
|
|
// number of chars here is more than the
|
|
// max allowed filename for alignment
|
|
// purposes
|
|
|
|
// Stream read routines
|
|
public:
|
|
bool readFromStream(Stream& io_rStream);
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
|
|
//-------------------------------------- Also designed to fit into 256 bytes, note
|
|
// that we ignore the extra and file comment
|
|
// fields.
|
|
class ZipDirFileHeader
|
|
{
|
|
private:
|
|
static const U32 csm_dirFileHeaderSig;
|
|
|
|
public:
|
|
enum {
|
|
MaxFileNameLength = 211
|
|
};
|
|
enum CompressionMethod {
|
|
Stored = 0,
|
|
Shrunk = 1,
|
|
ReducedL1 = 2,
|
|
ReducedL2 = 3,
|
|
ReducedL3 = 4,
|
|
ReducedL4 = 5,
|
|
Imploded = 6,
|
|
ReservedTokenized = 7,
|
|
Deflated = 8,
|
|
EnhDefalted = 9,
|
|
DateCompression = 10
|
|
};
|
|
|
|
struct DirFileHeader {
|
|
U32 headerSig;
|
|
U16 versionMadeBy;
|
|
U16 versionToDecompress;
|
|
U16 bitFlags;
|
|
U16 compressionMethod;
|
|
U16 lastModTime;
|
|
U16 lastModDate;
|
|
U32 crc32;
|
|
U32 compressedSize;
|
|
U32 uncompressedSize;
|
|
U16 fileNameLength;
|
|
U16 extraFieldLength;
|
|
U16 fileCommentLength;
|
|
U16 diskNumberStart;
|
|
U16 internalFileAttributes;
|
|
U32 externalFileAttributes;
|
|
U32 relativeOffsetOfLocalHeader;
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
DirFileHeader m_header;
|
|
char m_pFileName[212];
|
|
|
|
// Stream read routines
|
|
public:
|
|
bool readFromStream(Stream& io_rStream);
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
|
|
//-------------------------------------- Padded to 32 bytes. Note that we completely
|
|
// ignore any zip file comments.
|
|
class ZipEOCDRecord
|
|
{
|
|
private:
|
|
static const U32 csm_eocdRecordSig;
|
|
|
|
public:
|
|
enum {
|
|
ProperRecordSize = 22
|
|
};
|
|
|
|
struct EOCDRecord {
|
|
U32 eocdSig;
|
|
U16 diskNumber;
|
|
U16 eocdDiskNumber;
|
|
U16 numCDEntriesDisk;
|
|
U16 numCDEntriesTotal;
|
|
U32 cdSize;
|
|
U32 cdOffset;
|
|
U16 zipFileCommentLength;
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
EOCDRecord m_record;
|
|
char __padding[10];
|
|
// Stream read routines
|
|
public:
|
|
bool readFromStream(Stream& io_rStream);
|
|
#ifndef TORQUE_COMPILER_GCC
|
|
};
|
|
#else
|
|
} __attribute__ ((packed));
|
|
#endif
|
|
|
|
|
|
#ifdef TORQUE_COMPILER_VISUALC
|
|
# pragma pack(pop)
|
|
#else
|
|
#ifdef TORQUE_COMPILER_CODEWARRIOR
|
|
# pragma options align=reset
|
|
#endif
|
|
#endif
|
|
|
|
#endif //_NZIPHEADERS_H_
|