1 { Copyright (C) <2010> <Andrew Haines> itolitlstypes.pas 2 3 This library is free software; you can redistribute it and/or modify it 4 under the terms of the GNU Library General Public License as published by 5 the Free Software Foundation; either version 2 of the License, or (at your 6 option) any later version. 7 8 This program is distributed in the hope that it will be useful, but WITHOUT 9 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 11 for more details. 12 13 You should have received a copy of the GNU Library General Public License 14 along with this library; if not, write to the Free Software Foundation, 15 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 16 } 17 { 18 See the file COPYING.modifiedLGPL, included in this distribution, 19 for details about the copyright. 20 } 21 unit ITOLITLSTypes; 22 23 {$mode objfpc}{$H+} 24 {$PACKRECORDS C} 25 26 interface 27 28 uses ChmBase; 29 30 type 31 32 TSig = array[0..3] of char; 33 TITOLITLSHeader = record 34 Sig: Array [0..1] of TSig; // ITLO/ITLS 35 Version: DWord; // = 1 36 HeaderSectionTableOffset: DWord; 37 HeaderSectionEntryCount: DWord; 38 PostHeaderTableSize: DWord; 39 GUID: TGuid; // {0A9007C1-4076-11D3-8789-0000F8105754} 40 end; 41 42 TITOLITLSHeaderSectionEntry = record 43 OffSet: QWord; // From Start of ITLO/ITLS 44 Length: QWord; 45 end; 46 47 TChunkDirInfo = record 48 TopAOLIChunkIndex: QWord; // -1 if none 49 FirstAOLLChunkIndex, 50 LastAOLLChunkIndex: QWord; 51 Unknown0: QWord; // 0 52 ChunkSize: DWord; // = $2000 if list $200 if Index 53 QuickRefDensity: DWord; // = 2 54 Unknown1: DWord; // = 0 55 DirDepth: DWord; // 1 there is no index, 2 if there is one level of AOLI 3 if two index levels etc 56 Unknown2: QWord; // 0 57 DirEntryCount: QWord; // Number Of Directory Entries 58 end; 59 60 TITSFHeaderV4= record 61 ITSFsig: array [0..3] of char; 62 Version: LongWord; 63 HeaderLength: LongWord; 64 Unknown_1: LongWord; 65 Section0Offset: QWord; 66 TimeStamp: LongWord; //bigendian 67 LanguageID: LongWord; 68 end; 69 70 TCAOLRec = record 71 Sig: TSig; // CAOL 72 Version: DWord; // 2 73 CAOLSize: DWord; // includes ITSF section = $50 74 CompilerID: array [0..1] of char; // = "HH" 75 Unknown: Word; // 0 76 Unknown1: DWord; // $43ED or 0 77 DirChunkSize: DWord; // $2000 78 DirIndexChunkSize: DWord; // $200 79 Unknown2, // $100000 80 Unknown3: DWord;// $20000 81 Unknown4, 82 Unknown5, 83 Unknown6: DWord; // = 0 84 ITSFHeader: TITSFHeaderV4; 85 end; 86 87 TITOLITLSPostHeader = record 88 Version: DWord; // 2 89 CAOLOffset: DWord; // usually $98 (is from start of PostHeader) 90 ListChunkInfo, 91 IndexChunkInfo: TChunkDirInfo; 92 Unknown3: DWord; // = $100000 93 Unknown4: Dword; // = $20000 94 Unknown5: QWord; // 0 95 96 end; 97 98 THeaderSection0 = TITSPHeaderPrefix; 99 100 TIFCMRec = record 101 SIG: TSig; // = IFCM 102 Version: DWord; // = 1 103 ChunkSize: DWord; // = $2000 104 UnKnown: DWord; // = $100000 105 Unknown1: DWord; // = -1 106 Unknown2: DWord; // = -1 107 ChunkCount: Dword;// 108 Unknown3: DWord; // = 0 109 end; 110 111 TAOLLChunkHeader = record 112 Sig: TSig; // = AOLL 113 QuickRefSize: DWord; 114 ChunkIndex: QWord; // must be correct in the order written 115 PrevChunkIndex: QWord; 116 NextChunkIndex: QWord; 117 FirstEntryIndex: QWord; 118 Unknown0, // = 1 119 Unknown1: DWord;// = 0 120 // entries 121 end; 122 123 TAOLIChunkHeader = record 124 Sig: TSig; // = AOLI 125 QuickRefSize: DWord;// Length of quickref area at end of directory chunk 126 ChunkIndex: QWord;// Directory chunk number 127 // entries 128 end; 129 130 const 131 ITOLITLSGuid: TGuid = '{0A9007C1-4076-11D3-8789-0000F8105754}'; 132 133 type 134 TLZXv3ControlData = record 135 Sig: TSig; 136 Version: DWord; 137 ResetInterval: Dword; 138 WindowSize: DWord; 139 CacheSize: Dword; 140 Unknown1, 141 Unknown2: DWord; // 0 142 end; 143 144 TLZXv3ResetTable = record 145 Version: Dword; 146 EntryCount: DWord; 147 EntrySize: DWord; 148 EntryStart: DWord; 149 UnCompressedSize, 150 CompressedSize: QWord; 151 BlockSize: QWord; // $8000 152 end; 153 154 155 implementation 156 157 end. 158