X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Finclude%2Funzip.h;fp=src%2Finclude%2Funzip.h;h=16654ca6cb340d8e5557369d119ee49908ee51af;hb=fa566a2c8ec532eb5325b4d5a663fb2a7d72adc6;hp=0000000000000000000000000000000000000000;hpb=1d5f61c81bd6a213debf733970575154da696f23;p=virtualjaguar diff --git a/src/include/unzip.h b/src/include/unzip.h new file mode 100644 index 0000000..16654ca --- /dev/null +++ b/src/include/unzip.h @@ -0,0 +1,135 @@ +#ifndef __UNZIP_H__ +#define __UNZIP_H__ + +#include "types.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************************** + * Support for retrieving files from zipfiles + ***************************************************************************/ + +struct zipent +{ + UINT32 cent_file_header_sig; + UINT8 version_made_by; + UINT8 host_os; + UINT8 version_needed_to_extract; + UINT8 os_needed_to_extract; + UINT16 general_purpose_bit_flag; + UINT16 compression_method; + UINT16 last_mod_file_time; + UINT16 last_mod_file_date; + UINT32 crc32; + UINT32 compressed_size; + UINT32 uncompressed_size; + UINT16 filename_length; + UINT16 extra_field_length; + UINT16 file_comment_length; + UINT16 disk_number_start; + UINT16 internal_file_attrib; + UINT32 external_file_attrib; + UINT32 offset_lcl_hdr_frm_frst_disk; + char * name; /* 0 terminated */ +}; + +typedef struct _ZIP +{ + char * zip; /* zip name */ + FILE * fp; /* zip handler */ + int pathtype, pathindex; /* additional path info */ + long length; /* length of zip file */ + char * ecd; /* end_of_cent_dir data */ + unsigned ecd_length; /* end_of_cent_dir length */ + char * cd; /* cent_dir data */ + unsigned cd_pos; /* position in cent_dir */ + struct zipent ent; /* buffer for readzip */ + /* end_of_cent_dir */ + UINT32 end_of_cent_dir_sig; + UINT16 number_of_this_disk; + UINT16 number_of_disk_start_cent_dir; + UINT16 total_entries_cent_dir_this_disk; + UINT16 total_entries_cent_dir; + UINT32 size_of_cent_dir; + UINT32 offset_to_start_of_cent_dir; + UINT16 zipfile_comment_length; + char * zipfile_comment; /* pointer in ecd */ +} ZIP; + +/* Opens a zip stream for reading + return: + !=0 success, zip stream + ==0 error +*/ +ZIP * openzip(int pathtype, int pathindex, const char * path); + +/* Closes a zip stream */ +void closezip(ZIP * zip); + +/* Reads the current entry from a zip stream + in: + zip opened zip + return: + !=0 success + ==0 error +*/ +struct zipent * readzip(ZIP * zip); + +/* Suspend access to a zip file (release file handler) + in: + zip opened zip + note: + A suspended zip is automatically reopened at first call of + readuncompressd() or readcompressed() functions +*/ +void suspendzip(ZIP * zip); + +/* Resets a zip stream to the first entry + in: + zip opened zip + note: + ZIP file must be opened and not suspended +*/ +void rewindzip(ZIP * zip); + +/* Read compressed data from a zip entry + in: + zip opened zip + ent entry to read + out: + data buffer for data, ent.compressed_size UINT8s allocated by the caller + return: + ==0 success + <0 error +*/ +int readcompresszip(ZIP * zip, struct zipent * ent, char * data); + +/* Read decompressed data from a zip entry + in: + zip zip stream open + ent entry to read + out: + data buffer for data, ent.uncompressed_size UINT8s allocated by the caller + return: + ==0 success + <0 error +*/ +int readuncompresszip(ZIP * zip, struct zipent * ent, char * data); + +/* public functions */ +int /* error */ load_zipped_file(int pathtype, int pathindex, const char * zipfile, const char * filename, + unsigned char ** buf, uint32 * length); + +void unzip_cache_clear(void); + +/* public globals */ +extern int gUnzipQuiet; /* flag controls error messages */ + +#ifdef __cplusplus +} +#endif + +#endif // __UNZIP_H__