diff options
Diffstat (limited to 'public/zip_uncompressed.h')
| -rw-r--r-- | public/zip_uncompressed.h | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/public/zip_uncompressed.h b/public/zip_uncompressed.h new file mode 100644 index 0000000..11f4e86 --- /dev/null +++ b/public/zip_uncompressed.h @@ -0,0 +1,117 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef ZIP_UNCOMPRESSED_H +#define ZIP_UNCOMPRESSED_H +#ifdef _WIN32 +#pragma once +#endif + +#include "datamap.h" + +#define PKID( a, b ) (((b)<<24)|((a)<<16)|('K'<<8)|'P') + +// compressionMethod field +#define ZIP_COMPRESSION_NONE 0 +#define ZIP_COMPRESSION_LZMA 14 + +#pragma pack(1) + +struct ZIP_EndOfCentralDirRecord +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned int signature; // 4 bytes PK56 + unsigned short numberOfThisDisk; // 2 bytes + unsigned short numberOfTheDiskWithStartOfCentralDirectory; // 2 bytes + unsigned short nCentralDirectoryEntries_ThisDisk; // 2 bytes + unsigned short nCentralDirectoryEntries_Total; // 2 bytes + unsigned int centralDirectorySize; // 4 bytes + unsigned int startOfCentralDirOffset; // 4 bytes + unsigned short commentLength; // 2 bytes + // zip file comment follows +}; + +struct ZIP_FileHeader +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned int signature; // 4 bytes PK12 + unsigned short versionMadeBy; // version made by 2 bytes + unsigned short versionNeededToExtract; // version needed to extract 2 bytes + unsigned short flags; // general purpose bit flag 2 bytes + unsigned short compressionMethod; // compression method 2 bytes + unsigned short lastModifiedTime; // last mod file time 2 bytes + unsigned short lastModifiedDate; // last mod file date 2 bytes + unsigned int crc32; // crc-32 4 bytes + unsigned int compressedSize; // compressed size 4 bytes + unsigned int uncompressedSize; // uncompressed size 4 bytes + unsigned short fileNameLength; // file name length 2 bytes + unsigned short extraFieldLength; // extra field length 2 bytes + unsigned short fileCommentLength; // file comment length 2 bytes + unsigned short diskNumberStart; // disk number start 2 bytes + unsigned short internalFileAttribs; // internal file attributes 2 bytes + unsigned int externalFileAttribs; // external file attributes 4 bytes + unsigned int relativeOffsetOfLocalHeader; // relative offset of local header 4 bytes + // file name (variable size) + // extra field (variable size) + // file comment (variable size) +}; + +struct ZIP_LocalFileHeader +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned int signature; //local file header signature 4 bytes PK34 + unsigned short versionNeededToExtract; // version needed to extract 2 bytes + unsigned short flags; // general purpose bit flag 2 bytes + unsigned short compressionMethod; // compression method 2 bytes + unsigned short lastModifiedTime; // last mod file time 2 bytes + unsigned short lastModifiedDate; // last mod file date 2 bytes + unsigned int crc32; // crc-32 4 bytes + unsigned int compressedSize; // compressed size 4 bytes + unsigned int uncompressedSize; // uncompressed size 4 bytes + unsigned short fileNameLength; // file name length 2 bytes + unsigned short extraFieldLength; // extra field length 2 bytes + // file name (variable size) + // extra field (variable size) +}; + +//=============================================================================// +// Valve Non standard Extension, Preload Section +// An optional first file in an aligned zip that can be loaded into ram and +// used by the FileSystem to supply header data rather than disk. +// Is is an optimization to prevent the large of amount of small I/O performed +/// by the map loading process. +//=============================================================================// + +#define PRELOAD_SECTION_NAME "__preload_section.pre" +#define PRELOAD_HDR_VERSION 3 +#define XZIP_COMMENT_LENGTH 32 +#define INVALID_PRELOAD_ENTRY ( (unsigned short)-1 ) + +struct ZIP_PreloadHeader +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned int Version; // VERSION + unsigned int DirectoryEntries; // Number of zip directory entries. + unsigned int PreloadDirectoryEntries; // Number of preloaded directory entries (equal or less than the zip dir). + unsigned int Alignment; // File alignment of the zip +}; + +struct ZIP_PreloadDirectoryEntry +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned int Length; // Length of the file's preload data in bytes + unsigned int DataOffset; // Offset the file data in the .zip, relative to the logical beginning of the preload file. +}; + +struct ZIP_PreloadRemapTable +{ + DECLARE_BYTESWAP_DATADESC(); + unsigned short PreloadIndex; // Index into preload directory, entry marked invalid if no preload entry present +}; + +#pragma pack() + +#endif // ZIP_UNCOMPRESSED_H |