summaryrefslogtreecommitdiffstats
path: root/PC/bdist_wininst/archive.h
blob: 31a7805fd1d05ea2e775fb2d3b4133e2fd9ff6ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
  IMPORTANT NOTE: IF THIS FILE IS CHANGED, WININST-6.EXE MUST BE RECOMPILED
  WITH THE MSVC6 WININST.DSW WORKSPACE FILE MANUALLY, AND WININST-7.1.EXE MUST
  BE RECOMPILED WITH THE MSVC 2003.NET WININST-7.1.VCPROJ FILE MANUALLY.

  IF CHANGES TO THIS FILE ARE CHECKED INTO PYTHON CVS, THE RECOMPILED BINARIES
  MUST BE CHECKED IN AS WELL!
*/

#pragma pack(1)

/* zip-archive headers
 * See: http://www.pkware.com/appnote.html
 */

struct eof_cdir {
    long tag;           /* must be 0x06054b50 */
    short disknum;
    short firstdisk;
    short nTotalCDirThis;
    short nTotalCDir;
    long nBytesCDir;
    long ofsCDir;
    short commentlen;
};

struct cdir {
    long tag;           /* must be 0x02014b50 */
    short version_made;
    short version_extract;
    short gp_bitflag;
    short comp_method;
    short last_mod_file_time;
    short last_mod_file_date;
    long crc32;
    long comp_size;
    long uncomp_size;
    short fname_length;
    short extra_length;
    short comment_length;
    short disknum_start;
    short int_file_attr;
    long ext_file_attr;
    long ofs_local_header;
};

struct fhdr {
    long tag;           /* must be 0x04034b50 */
    short version_needed;
    short flags;
    short method;
    short last_mod_file_time;
    short last_mod_file_date;
    long crc32;
    long comp_size;
    long uncomp_size;
    short fname_length;
    short extra_length;
};


struct meta_data_hdr {
    int tag;
    int uncomp_size;
    int bitmap_size;
};

#pragma pack()

/* installation scheme */

typedef struct tagSCHEME {
    char *name;
    char *prefix;
} SCHEME;

typedef int (*NOTIFYPROC)(int code, LPSTR text, ...);

extern BOOL
extract_file(char *dst, char *src, int method, int comp_size,
             int uncomp_size, NOTIFYPROC notify);

extern BOOL
unzip_archive(SCHEME *scheme, char *dirname, char *data,
              DWORD size,  NOTIFYPROC notify);

extern char *
map_new_file(DWORD flags, char *filename, char
             *pathname_part, int size,
             WORD wFatDate, WORD wFatTime,
             NOTIFYPROC callback);

extern BOOL
ensure_directory (char *pathname, char *new_part,
                  NOTIFYPROC callback);

/* codes for NOITIFYPROC */
#define DIR_CREATED 1
#define CAN_OVERWRITE 2
#define FILE_CREATED 3
#define ZLIB_ERROR 4
#define SYSTEM_ERROR 5
#define NUM_FILES 6
#define FILE_OVERWRITTEN 7