You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
4.4 KiB
117 lines
4.4 KiB
//========= 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
|
|
|