Subversion Repositories autosfx

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
//---------------------------------------------------------------------------
2
#ifndef CommonH
3
#define CommonH
4
//---------------------------------------------------------------------------
5
 
6
/*
7
  Common.h - common definitions and functions
8
 
9
  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.
10
 
11
  See the accompanying file LICENSE, version 2007-Mar-4 or later
12
  (the contents of which are also included in zip.h) for terms of use.
13
  If, for some reason, all these files are missing, the Info-ZIP license
14
  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
15
 
16
  parts Copyright (C) 1997 Mike White, Eric W. Engler
17
************************************************************************
18
 Copyright (C) 2009, 2010  by Russell J. Peters, Roger Aelbrecht
19
 
20
   This file is part of TZipMaster Version 1.9.
21
 
22
    TZipMaster is free software: you can redistribute it and/or modify
23
    it under the terms of the GNU Lesser General Public License as published by
24
    the Free Software Foundation, either version 3 of the License, or
25
    (at your option) any later version.
26
 
27
    TZipMaster is distributed in the hope that it will be useful,
28
    but WITHOUT ANY WARRANTY; without even the implied warranty of
29
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
30
    GNU Lesser General Public License for more details.
31
 
32
    You should have received a copy of the GNU Lesser General Public License
33
    along with TZipMaster.  If not, see <http://www.gnu.org/licenses/>.
34
 
35
    contact: problems@delphizip.org (include ZipMaster in the subject).
36
    updates: http://www.delphizip.org
37
    DelphiZip maillist subscribe at http://www.freelists.org/list/delphizip
38
************************************************************************/
39
 
40
#ifdef __MT__
41
    #define MULTITHREAD
42
#else
43
#undef MULTITHREAD
44
    #error no Multithread
45
#endif
46
 
47
#define  MAX_UNSIGNED 0xFFFFFFFFul
48
#define  MAX_WORD 0xFFFFu
49
#define  MAX_BYTE = 0xFFu
50
#ifndef MAXINT
51
    #define MAXINT      0x7fffffff
52
#endif
53
#ifndef MAXLONG
54
    #define MAXLONG     0x7fffffffl
55
#endif
56
 
57
#include "DelZip.h"
58
#include "dz_msgs.h"
59
 
60
__int64 SetFilePointer64(HANDLE hf, __int64 ofs, int from);
61
 
62
typedef unsigned char   uch;          /* unsigned 8-bit value */
63
typedef unsigned short  ush;          /* unsigned 16-bit value */
64
typedef unsigned long   ulg;          /* unsigned 32-bit value */
65
typedef size_t  extent;
66
 
67
typedef char zchar;
68
 
69
extern HINSTANCE ModuleInst;
70
 
71
typedef unsigned long OperKeys;
72
 
73
#ifndef _FORCE_Z64_
74
#define Z64THRESHOLD 0xFFED0000u
75
#else
76
#define Z64THRESHOLD 0x400u
77
#endif
78
 
79
//                       these are stored in reverse order
80
#define  CentralFileHeaderSig   0x02014B50   // 'PK'12
81
#define  LocalFileHeaderSig     0x04034B50   // 'PK'34  (in file: 504b0304)
82
#define  CentralDigSig          0x05054B50   // 'PK'55
83
#define  EndCentralDirSig       0x06054B50   // 'PK'56
84
#define  ExtLocalSig            0x08074B50   // 'PK'78
85
#define  EndCentral64Sig        0x06064B50   // 'PK'66
86
#define  EOC64LocatorSig        0x07064B50   // 'PK'67
87
 
88
typedef __int64 ZInt64;
89
/*  The zipfile format is defined as below:
90
 *
91
 *   [Extra Extended Signature]
92
 *   NumberOfFiles *{ local header + Filename + [extra data] + [file data] + [data_descriptor] }
93
 *   NumberOfFiles *{ central directory + Filename + [extra data] + [filecomment] }
94
 *   End Of Central directory + [ZipFile comment]
95
 */
96
#pragma pack(push, 1)
97
typedef struct _ZipLocalHeader
98
{
99
    unsigned long   HeaderSig;        // Should be 0x04034B50
100
    union
101
    {
102
        unsigned char VersionNeeded[2];
103
        unsigned short VersionNeed;
104
    };
105
    unsigned short  Flag;
106
    unsigned short  ComprMethod;
107
    union
108
    {
109
 
110
        struct
111
        {
112
            unsigned short  ModifTime;
113
            unsigned short  ModifDate;
114
        };
115
 
116
        unsigned long ModifStamp;
117
    };
118
    unsigned long   CRC32;
119
    unsigned long   ComprSize;
120
    unsigned long   UnComprSize;
121
    unsigned short  FileNameLen;
122
    unsigned short  ExtraLen;
123
 
124
    // ... and the filename itself,
125
    // ... and the extra data.
126
}ZipLocalHeader;
127
#pragma pack(pop)
128
 
129
#pragma pack(push, 1)
130
typedef struct _ZipDataDescriptor
131
{
132
    unsigned long DataDescSig;        // Should be 0x08074B50
133
    unsigned long CRC32;
134
    unsigned long ComprSize;
135
    unsigned long UnComprSize;
136
} ZipDataDescriptor;
137
#pragma pack(pop)
138
 
139
#pragma pack(push, 1)
140
struct ZipCentralHeader
141
{
142
    unsigned long HeaderSig;          // Should be 0x02014B50
143
    union
144
    {
145
        struct
146
        {
147
            unsigned char MadeByVersion;  // Made by version number
148
            unsigned char MadeByHost;     // Made by host number
149
        };
150
        unsigned short  MadeBy;
151
    };
152
    union
153
    {
154
        unsigned char VersionNeeded[2];
155
        unsigned short VersionNeed;
156
    };
157
//  unsigned short  VersionNeed;
158
    unsigned short  Flag;
159
    unsigned short  ComprMethod;
160
    union
161
    {
162
        struct
163
        {
164
            unsigned short  ModifTime;
165
            unsigned short  ModifDate;
166
        };
167
        unsigned long ModifStamp;
168
    };
169
    unsigned long   CRC32;
170
    unsigned long   ComprSize;
171
    unsigned long   UnComprSize;
172
    unsigned short  FileNameLen;
173
    unsigned short  ExtraLen;
174
    unsigned short  FileComLen;
175
    unsigned short  DiskStart;        // The number of the disk on which this file begins.
176
    unsigned short  IntFileAtt;
177
    unsigned long   ExtFileAtt;
178
    unsigned long   RelOffLocal;      // This is the offset from the start of the first disk on
179
 
180
    // which this file appears, to where the local header
181
    // should be found.
182
    // ... and the filename itself,
183
    // ... and the extra data,
184
    // ... and the file comment.
185
};
186
#pragma pack(pop)
187
 
188
#pragma pack(push, 1)
189
typedef struct _ZipEndOfCentral
190
{
191
    unsigned long   HeaderSig;        // Should be 0x06054B50
192
    unsigned short  ThisDiskNo;
193
    unsigned short  CentralDiskNo;
194
    unsigned short  CentralEntries;   // Total number of entries in the central dir on this disk.
195
    unsigned short  TotalEntries;     // Total number of entries in the central dir.
196
    unsigned long   CentralSize;
197
    unsigned long   CentralOffset;    // Offset of start of central directory with respect to the starting disk number.
198
    unsigned short  ZipCommentLen;
199
    // And the comment itself.
200
} ZipEndOfCentral;
201
#pragma pack(pop)
202
 
203
#pragma pack(push, 1)
204
// must be same disk as EOC
205
typedef struct _Zip64EOCLocator
206
{
207
    unsigned long   HeaderSig;        // (4) Should be 0x07064B50
208
    unsigned long   EOC64DiskStt;     // (4)
209
    ZInt64          EOC64RelOfs;      // (8) relative to start of it's disk
210
    unsigned long   NumberDisks;      // (4) total disks
211
}Zip64EOCLocator;
212
#pragma pack(pop)
213
 
214
#pragma pack(push, 1)
215
typedef struct _ZipEOC64
216
{
217
    unsigned long   HeaderSig;            // (4) should be 0x06064b50
218
    ZInt64          vsize;                // (8)    size of variable part
219
    // variable part   - fields as needed? (old field = 0XFFFF or 0XFF)
220
    unsigned short  VersionMade;          // (2)
221
    unsigned short  VersionNeed;          // (2)
222
    unsigned long   ThisDiskNo;           // (4)
223
    unsigned long   CentralDiskNo;        // (4)
224
    ZInt64          CentralEntries;       // (8) Number of central dir entries on this disk
225
    ZInt64          TotalEntries;         // (8) Number of entries in central dir
226
    ZInt64          CentralSize;          // (8) Size of central directory
227
    ZInt64          CentralOffSet;        // (8) offsett of central dir on 1st disk
228
//  zip64 extensible data sector    (variable size)
229
}ZipEOC64;
230
#pragma pack(pop)
231
 
232
#pragma pack(push, 1)
233
typedef struct _ZipDataDescriptor64
234
{
235
    unsigned long DataDescSig;        // Should be 0x08074B50
236
    unsigned long CRC32;
237
    ZInt64 ComprSize;
238
    ZInt64 UnComprSize;
239
}ZipDataDescriptor64;
240
#pragma pack(pop)
241
 
242
 
243
#pragma pack(push, 1)
244
typedef struct _ZipCentralDigitSignature
245
{
246
    unsigned long   HeaderSig;            // (4) should be 0x05054b50
247
    unsigned short  vsize;                // (2)
248
//    data[vsize]
249
}ZipCentralDigitSignature;
250
#pragma pack(pop)
251
 
252
#pragma pack(push, 1)
253
union XDataHead //Zip64_xdata
254
{
255
    struct
256
    {
257
        unsigned short Tag;                   // (2) should be 0x0001
258
        unsigned short vsize;                 // (2)
259
    };
260
    unsigned long _head;
261
    // data[vsize]
262
};
263
#pragma pack(pop)
264
 
265
#pragma pack(push, 1)
266
struct UPhead
267
{
268
    XDataHead hed;
269
    unsigned char ver;         // 1
270
    unsigned long crc;          // crc of orig field
271
//        char u;
272
};
273
#pragma pack(pop)
274
 
275
#pragma pack(push, 1)
276
struct XNTFSData
277
{
278
    _FILETIME MTime;
279
    _FILETIME ATime;
280
    _FILETIME CTime;
281
};
282
#pragma pack(pop)
283
 
284
#pragma pack(push, 1)
285
struct XNTFSHead
286
{
287
        XDataHead hed;
288
        unsigned  rsrvd;
289
        unsigned short Tg1;       // (2) should be 0x0001
290
        unsigned short Sz1;       // (2) should be 24
291
        XNTFSData times;
292
};
293
#pragma pack(pop)
294
 
295
#pragma pack(push, 1)
296
struct X_NTFSHeader
297
{
298
        XDataHead hed;
299
        unsigned  rsrvd;
300
//      unsigned short Tg1;       // (2) should be 0x0001
301
//      unsigned short Sz1;       // (2) should be 24
302
//      XNTFSData times;
303
};
304
#pragma pack(pop)
305
 
306
 
307
#define  ZIP64_XDATA_TAG 0x0001     // Zip64 extra field tag
308
#define  UPATH_XDATA_TAG 0x7075
309
#define  UCMNT_XDATA_TAG 0x6375
310
#define  NTFS_STAMP_TAG 0x000A      // NTFS time stamps
311
 
312
const unsigned char* __fastcall FindTag(WORD tag, const unsigned char *p, unsigned &siz);
313
 
314
#define FS_FAT 0
315
#define FS_HPFS 6
316
#define FS_NTFS 11
317
#define OS_NTFS 0x0B00
318
#define FLAG_ENCRYPT_BIT 0x0001
319
#define FLAG_EXTEND_BIT 0x0008
320
#define FLAG_UTF8_BIT 0x0800
321
 
322
#ifndef MAX
323
#  define MAX(a, b)   ((a) > (b) ? (a) : (b))
324
#endif
325
#ifndef MIN
326
#  define MIN(a, b)  ((a) < (b) ? (a) : (b))
327
#endif
328
 
329
 
330
extern const ulg crc_table[];
331
 
332
ulg __fastcall crc32(ulg crc, const uch *buf, int len);
333
 
334
int __fastcall Close_Handle(HANDLE *h);
335
 
336
time_t          dos2unixtime(ulg dostime);
337
ulg             dostime(int, int, int, int, int, int);
338
ulg             unix2dostime(time_t *);
339
 
340
char * __fastcall zstrdupB(const char* from);
341
TCHAR * __fastcall zstrdup(const TCHAR* from);
342
 
343
#endif
344
 
345
 
346
 
347
 
348
 
349
 
350