Initial commit
This commit is contained in:
200
Torque/SDK/engine/core/zipHeaders.h
Normal file
200
Torque/SDK/engine/core/zipHeaders.h
Normal file
@@ -0,0 +1,200 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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_
|
||||
Reference in New Issue
Block a user