/*
  IMPORTANT NOTE: IF THIS FILE IS CHANGED, WININST.EXE MUST BE RECOMPILED WITH
  THE MSVC6 WININST.DSW WORKSPACE FILE MANUALLY.

  IF CHANGES TO THIS FILE ARE CHECKED INTO PYTHON CVS, THE RECOMPILED BINARY
  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

