1 /* 2 * HLLib 3 * Copyright (C) 2006-2010 Ryan Gregg 4 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later 9 * version. 10 */ 11 12 #ifndef XZPFILE_H 13 #define XZPFILE_H 14 15 #include "stdafx.h" 16 #include "Package.h" 17 18 namespace HLLib 19 { 20 class HLLIB_API CXZPFile : public CPackage 21 { 22 private: 23 #pragma pack(1) 24 25 struct XZPHeader 26 { 27 hlChar lpSignature[4]; 28 hlUInt uiVersion; 29 hlUInt uiPreloadDirectoryEntryCount; 30 hlUInt uiDirectoryEntryCount; 31 hlUInt uiPreloadBytes; 32 hlUInt uiHeaderLength; 33 hlUInt uiDirectoryItemCount; 34 hlUInt uiDirectoryItemOffset; 35 hlUInt uiDirectoryItemLength; 36 }; 37 38 struct XZPDirectoryEntry 39 { 40 hlUInt uiFileNameCRC; 41 hlUInt uiEntryLength; 42 hlUInt uiEntryOffset; 43 }; 44 45 struct XZPDirectoryMapping 46 { 47 hlUInt16 uiPreloadDirectoryEntryIndex; 48 }; 49 50 struct XZPDirectoryItem 51 { 52 hlUInt uiFileNameCRC; 53 hlUInt uiNameOffset; 54 hlUInt uiTimeCreated; 55 }; 56 57 struct XZPFooter 58 { 59 hlUInt uiFileLength; 60 hlChar lpSignature[4]; 61 }; 62 63 #pragma pack() 64 65 private: 66 static const char *lpAttributeNames[]; 67 static const char *lpItemAttributeNames[]; 68 69 Mapping::CView *pHeaderView; 70 Mapping::CView *pDirectoryEntryView; 71 Mapping::CView *pDirectoryItemView; 72 Mapping::CView *pFooterView; 73 74 const XZPHeader *pHeader; 75 const XZPDirectoryEntry *lpDirectoryEntries; 76 const XZPDirectoryEntry *lpPreloadDirectoryEntries; 77 const XZPDirectoryMapping *lpPreloadDirectoryMappings; 78 const XZPDirectoryItem *lpDirectoryItems; 79 const XZPFooter *pFooter; 80 81 public: 82 CXZPFile(); 83 virtual ~CXZPFile(); 84 85 virtual HLPackageType GetType() const; 86 virtual const hlChar *GetExtension() const; 87 virtual const hlChar *GetDescription() const; 88 89 protected: 90 virtual hlBool MapDataStructures(); 91 virtual hlVoid UnmapDataStructures(); 92 93 virtual CDirectoryFolder *CreateRoot(); 94 95 virtual hlUInt GetAttributeCountInternal() const; 96 virtual const hlChar *GetAttributeNameInternal(HLPackageAttribute eAttribute) const; 97 virtual hlBool GetAttributeInternal(HLPackageAttribute eAttribute, HLAttribute &Attribute) const; 98 99 virtual hlUInt GetItemAttributeCountInternal() const; 100 virtual const hlChar *GetItemAttributeNameInternal(HLPackageAttribute eAttribute) const; 101 virtual hlBool GetItemAttributeInternal(const CDirectoryItem *pItem, HLPackageAttribute eAttribute, HLAttribute &Attribute) const; 102 103 virtual hlBool GetFileSizeInternal(const CDirectoryFile *pFile, hlUInt &uiSize) const; 104 virtual hlBool GetFileSizeOnDiskInternal(const CDirectoryFile *pFile, hlUInt &uiSize) const; 105 106 virtual hlBool CreateStreamInternal(const CDirectoryFile *pFile, Streams::IStream *&pStream) const; 107 }; 108 } 109 110 #endif 111