/* szlib.h -- internal interface and configuration of the compression library * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* This source as presented is a modified version of original zlib for use with SSNES, * and must not be confused with the original software. */ #ifndef _SZLIB_H #define _SZLIB_H #if defined(__cplusplus) extern "C" { #endif #include #include "zconf.h" /* constants */ #define ZLIB_VERSION "1.1.4" #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 /* Allowed flush values; see deflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_DEFAULT_STRATEGY 0 #define Z_BINARY 0 #define Z_ASCII 1 #define Z_UNKNOWN 2 /* Possible values of the data_type field */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ typedef voidpf (*alloc_func) (voidpf opaque, unsigned int items, unsigned int size); typedef void (*free_func) (voidpf opaque, voidpf address); typedef struct z_stream_s { Bytef *next_in; /* next input byte */ unsigned int avail_in; /* number of bytes available at next_in */ unsigned long total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ unsigned int avail_out; /* remaining free space at next_out */ unsigned long total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ int data_type; /* best guess about the data type: ascii or binary */ unsigned long adler; /* adler32 value of the uncompressed data */ unsigned long reserved; /* reserved for future use */ } z_stream; typedef z_stream *z_streamp; typedef unsigned char uch; typedef unsigned char uchf; typedef unsigned short ush; typedef unsigned short ushf; typedef unsigned long ulg; extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] #define ERR_RETURN(strm,err) \ return (strm->msg = (char*)ERR_MSG(err), (err)) /* To be used only when the state is known to be valid */ /* common constants */ #ifndef DEF_WBITS # define DEF_WBITS MAX_WBITS #endif /* default windowBits for decompression. MAX_WBITS is for compression only */ #if MAX_MEM_LEVEL >= 8 # define DEF_MEM_LEVEL 8 #else # define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif /* default memLevel */ #define STORED_BLOCK 0 #define STATIC_TREES 1 #define DYN_TREES 2 /* The three kinds of block type */ #define MIN_MATCH 3 #define MAX_MATCH 258 /* The minimum and maximum match lengths */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ /* target dependencies */ #ifdef WIN32 /* Window 95 & Windows NT */ # define OS_CODE 0x0b #endif #if defined(ATARI) || defined(atarist) # define OS_CODE 0x05 #endif #if defined(MACOS) || defined(TARGET_OS_MAC) # define OS_CODE 0x07 # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # include /* for fdopen */ # else # ifndef fdopen # define fdopen(fd,mode) NULL /* No fdopen() */ # endif # endif #endif #ifdef __50SERIES /* Prime/PRIMOS */ # define OS_CODE 0x0F #endif #ifdef TOPS20 # define OS_CODE 0x0a #endif #if defined(_BEOS_) || defined(RISCOS) # define fdopen(fd,mode) NULL /* No fdopen() */ #endif #if (defined(_MSC_VER) && (_MSC_VER > 600)) # define fdopen(fd,type) _fdopen(fd,type) #endif /* Common defaults */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif /* functions */ #ifdef HAVE_STRERROR extern char *strerror (int); # define zstrerror(errnum) strerror(errnum) #else # define zstrerror(errnum) "" #endif typedef unsigned long ( *check_func) (unsigned long check, const Bytef *buf, unsigned int len); voidpf zcalloc (voidpf opaque, unsigned items, unsigned size); void zcfree (voidpf opaque, voidpf ptr); #define ZALLOC(strm, items, size) \ (*((strm)->zalloc))((strm)->opaque, (items), (size)) #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) /* Huffman code lookup table entry--this entry is four bytes for machines that have 16-bit pointers (e.g. PC's in the small or medium model). */ typedef struct inflate_huft_s inflate_huft; struct inflate_huft_s { union { struct { Byte Exop; /* number of extra bits or operation */ Byte Bits; /* number of bits in this code or subcode */ } what; unsigned int pad; /* pad structure to a power of 2 (4 bytes for */ } word; /* 16-bit, 8 bytes for 32-bit int's) */ unsigned int base; /* literal, length base, distance base, or table offset */ }; /* Maximum size of dynamic tree. The maximum found in a long but non- exhaustive search was 1004 huft structures (850 for length/literals and 154 for distances, the latter actually the result of an exhaustive search). The actual maximum is not known, but the value below is more than safe. */ #define MANY 1440 extern int inflate_trees_bits ( unsigned int *, /* 19 code lengths */ unsigned int *, /* bits tree desired/actual depth */ inflate_huft **, /* bits tree result */ inflate_huft *, /* space for trees */ z_streamp); /* for messages */ extern int inflate_trees_dynamic ( unsigned int, /* number of literal/length codes */ unsigned int, /* number of distance codes */ unsigned int *, /* that many (total) code lengths */ unsigned int *, /* literal desired/actual bit depth */ unsigned int *, /* distance desired/actual bit depth */ inflate_huft **, /* literal/length tree result */ inflate_huft **, /* distance tree result */ inflate_huft *, /* space for trees */ z_streamp); /* for messages */ extern int inflate_trees_fixed ( unsigned int *, /* literal desired/actual bit depth */ unsigned int *, /* distance desired/actual bit depth */ inflate_huft **, /* literal/length tree result */ inflate_huft **, /* distance tree result */ z_streamp); /* for memory allocation */ struct inflate_blocks_state; typedef struct inflate_blocks_state inflate_blocks_statef; extern inflate_blocks_statef * inflate_blocks_new ( z_streamp z, check_func c, /* check function */ unsigned int w); /* window size */ extern int inflate_blocks ( inflate_blocks_statef *, z_streamp , int); /* initial return code */ extern void inflate_blocks_reset ( inflate_blocks_statef *, z_streamp , unsigned long *); /* check value on output */ extern int inflate_blocks_free ( inflate_blocks_statef *, z_streamp); struct inflate_codes_state; typedef struct inflate_codes_state inflate_codes_statef; extern inflate_codes_statef *inflate_codes_new ( unsigned int, unsigned int, inflate_huft *, inflate_huft *, z_streamp ); extern int inflate_codes ( inflate_blocks_statef *, z_streamp , int); typedef enum { TYPE, /* get type bits (3, including end bit) */ LENS, /* get lengths for stored */ STORED, /* processing stored block */ TABLE, /* get table lengths */ BTREE, /* get bit lengths tree for a dynamic block */ DTREE, /* get length, distance trees for a dynamic block */ CODES, /* processing fixed or dynamic block */ DRY, /* output remaining window bytes */ DONE, /* finished last block, done */ BAD} /* got a data error--stuck here */ inflate_block_mode; /* inflate blocks semi-private state */ struct inflate_blocks_state { /* mode */ inflate_block_mode mode; /* current inflate_block mode */ /* mode dependent information */ union { unsigned int left; /* if STORED, bytes left to copy */ struct { unsigned int table; /* table lengths (14 bits) */ unsigned int index; /* index into blens (or border) */ unsigned int *blens; /* bit lengths of codes */ unsigned int bb; /* bit length tree depth */ inflate_huft *tb; /* bit length decoding tree */ } trees; /* if DTREE, decoding info for trees */ struct { inflate_codes_statef *codes; } decode; /* if CODES, current state */ } sub; /* submode */ unsigned int last; /* true if this block is the last block */ /* mode independent information */ unsigned int bitk; /* bits in bit buffer */ unsigned long bitb; /* bit buffer */ inflate_huft *hufts; /* single malloc for tree space */ Bytef *window; /* sliding window */ Bytef *end; /* one byte after sliding window */ Bytef *read; /* window read pointer */ Bytef *write; /* window write pointer */ check_func checkfn; /* check function */ unsigned long check; /* check on output */ }; /* defines for inflate input/output */ /* update pointers and return */ #define UPDBITS {s->bitb=b;s->bitk=k;} #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} #define UPDOUT {s->write=q;} #define UPDATE {UPDBITS UPDIN UPDOUT} #define LEAVE {UPDATE return inflate_flush(s,z,r);} /* get bytes and bits */ #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} #define NEEDBYTE {if(n)r=Z_OK;else LEAVE} #define NEXTBYTE (n--,*p++) #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((unsigned long)NEXTBYTE)<>=(j);k-=(j);} /* output bytes */ #define WAVAIL (unsigned int)(qread?s->read-q-1:s->end-q) #define LOADOUT {q=s->write;m=(unsigned int)WAVAIL;} #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(unsigned int)WAVAIL;}} #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} #define OUTBYTE(a) {*q++=(Byte)(a);m--;} /* load local pointers */ #define LOAD {LOADIN LOADOUT} /* masks for lower bits (size given to avoid silly warnings with Visual C++) */ extern unsigned int inflate_mask[17]; /* copy as much as possible from the sliding window to the output area */ extern int inflate_flush (inflate_blocks_statef *, z_streamp , int); // utility functions extern voidp gzopen (const char *path, const char *mode); extern voidp gzdopen (int fd, const char *mode); extern int gzread (voidp file, voidp buf, unsigned len); extern int gzwrite (voidp file, const voidp buf, unsigned len); extern int gzprintf (voidp file, const char *format, ...); extern int gzputs (voidp file, const char *s); extern char * gzgets (voidp file, char *buf, int len); extern int gzputc (voidp file, int c); extern int gzgetc (voidp file); extern int gzflush (voidp file, int flush); extern z_off_t gzseek (voidp file, z_off_t offset, int whence); extern int gzrewind (voidp file); extern z_off_t gztell (voidp file); extern int gzeof (voidp file); extern int gzclose (voidp file); extern const char * gzerror (voidp file, int *errnum); /* checksum functions */ extern unsigned long adler32 (unsigned long adler, const Bytef *buf, unsigned int len); extern unsigned long crc32 (unsigned long crc, const Bytef *buf, unsigned int len); /* various hacks, don't look :) */ extern int inflateInit_ (z_streamp strm, const char * version, int stream_size); extern int inflateInit2_ (z_streamp strm, int windowBits, const char *version, int stream_size); #define inflateInit(strm) \ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #if (!defined(_WIN32)) && (!defined(WIN32)) // Linux needs this to support file operation on files larger then 4+GB // But might need better if/def to select just the platforms that needs them. #ifndef __USE_FILE_OFFSET64 #define __USE_FILE_OFFSET64 #endif #ifndef __USE_LARGEFILE64 #define __USE_LARGEFILE64 #endif #ifndef _LARGEFILE64_SOURCE #define _LARGEFILE64_SOURCE #endif #ifndef _FILE_OFFSET_BIT #define _FILE_OFFSET_BIT 64 #endif #endif #if defined(USE_FILE32API) #define fopen64 fopen #define ftello64 ftell #define fseeko64 fseek #else #ifdef _MSC_VER #define fopen64 fopen #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) #define ftello64 _ftelli64 #define fseeko64 _fseeki64 #else // old MSC #define ftello64 ftell #define fseeko64 fseek #endif #endif #endif #ifdef HAVE_MINIZIP64_CONF_H #include "mz64conf.h" #endif /* a type choosen by DEFINE */ #ifdef HAVE_64BIT_INT_CUSTOM typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; #else #ifdef HAS_STDINT_H #include "stdint.h" typedef uint64_t ZPOS64_T; #else #if defined(_MSC_VER) || defined(__BORLANDC__) typedef unsigned __int64 ZPOS64_T; #else typedef unsigned long long int ZPOS64_T; #endif #endif #endif #define ZLIB_FILEFUNC_SEEK_CUR (1) #define ZLIB_FILEFUNC_SEEK_END (2) #define ZLIB_FILEFUNC_SEEK_SET (0) #define ZLIB_FILEFUNC_MODE_READ (1) #define ZLIB_FILEFUNC_MODE_WRITE (2) #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) #define ZLIB_FILEFUNC_MODE_EXISTING (4) #define ZLIB_FILEFUNC_MODE_CREATE (8) typedef voidpf ( *open_file_func) (voidpf opaque, const char* filename, int mode); typedef unsigned long ( *read_file_func) (voidpf opaque, voidpf stream, void* buf, unsigned long size); typedef unsigned long ( *write_file_func) (voidpf opaque, voidpf stream, const void* buf, unsigned long size); typedef int ( *close_file_func) (voidpf opaque, voidpf stream); typedef int ( *testerror_file_func) (voidpf opaque, voidpf stream); typedef long ( *tell_file_func) (voidpf opaque, voidpf stream); typedef long ( *seek_file_func) (voidpf opaque, voidpf stream, unsigned long offset, int origin); /* here is the "old" 32 bits structure structure */ typedef struct zlib_filefunc_def_s { open_file_func zopen_file; read_file_func zread_file; write_file_func zwrite_file; tell_file_func ztell_file; seek_file_func zseek_file; close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; } zlib_filefunc_def; typedef ZPOS64_T ( *tell64_file_func) (voidpf opaque, voidpf stream); typedef long ( *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin); typedef voidpf ( *open64_file_func) (voidpf opaque, const void* filename, int mode); typedef struct zlib_filefunc64_def_s { open64_file_func zopen64_file; read_file_func zread_file; write_file_func zwrite_file; tell64_file_func ztell64_file; seek64_file_func zseek64_file; close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; } zlib_filefunc64_def; void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def); void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def); /* now internal definition, only for zip.c and unzip.h */ typedef struct zlib_filefunc64_32_def_s { zlib_filefunc64_def zfile_func64; open_file_func zopen32_file; tell_file_func ztell32_file; seek_file_func zseek32_file; } zlib_filefunc64_32_def; #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode); long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin); ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream); void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); #define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) #define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) #define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) #define Z_BZIP2ED 12 typedef voidp unzFile; #define UNZ_OK (0) #define UNZ_END_OF_LIST_OF_FILE (-100) #define UNZ_ERRNO (Z_ERRNO) #define UNZ_EOF (0) #define UNZ_PARAMERROR (-102) #define UNZ_PARAMERROR_UL (-102UL) #define UNZ_BADZIPFILE (-103) #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) /* tm_unz contain date/time info */ typedef struct tm_unz_s { unsigned int tm_sec; /* seconds after the minute - [0,59] */ unsigned int tm_min; /* minutes after the hour - [0,59] */ unsigned int tm_hour; /* hours since midnight - [0,23] */ unsigned int tm_mday; /* day of the month - [1,31] */ unsigned int tm_mon; /* months since January - [0,11] */ unsigned int tm_year; /* years - [1980..2044] */ } tm_unz; /* unz_global_info structure contain global data about the ZIPfile These data comes from the end of central dir */ typedef struct unz_global_info64_s { ZPOS64_T number_entry; /* total number of entries in the central dir on this disk */ unsigned long size_comment; /* size of the global comment of the zipfile */ } unz_global_info64; typedef struct unz_global_info_s { unsigned long number_entry; /* total number of entries in the central dir on this disk */ unsigned long size_comment; /* size of the global comment of the zipfile */ } unz_global_info; /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info64_s { unsigned long version; /* version made by 2 bytes */ unsigned long version_needed; /* version needed to extract 2 bytes */ unsigned long flag; /* general purpose bit flag 2 bytes */ unsigned long compression_method; /* compression method 2 bytes */ unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */ unsigned long crc; /* crc-32 4 bytes */ ZPOS64_T compressed_size; /* compressed size 8 bytes */ ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ unsigned long size_filename; /* filename length 2 bytes */ unsigned long size_file_extra; /* extra field length 2 bytes */ unsigned long size_file_comment; /* file comment length 2 bytes */ unsigned long disk_num_start; /* disk number start 2 bytes */ unsigned long internal_fa; /* internal file attributes 2 bytes */ unsigned long external_fa; /* external file attributes 4 bytes */ tm_unz tmu_date; } unz_file_info64; typedef struct unz_file_info_s { unsigned long version; /* version made by 2 bytes */ unsigned long version_needed; /* version needed to extract 2 bytes */ unsigned long flag; /* general purpose bit flag 2 bytes */ unsigned long compression_method; /* compression method 2 bytes */ unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */ unsigned long crc; /* crc-32 4 bytes */ unsigned long compressed_size; /* compressed size 4 bytes */ unsigned long uncompressed_size; /* uncompressed size 4 bytes */ unsigned long size_filename; /* filename length 2 bytes */ unsigned long size_file_extra; /* extra field length 2 bytes */ unsigned long size_file_comment; /* file comment length 2 bytes */ unsigned long disk_num_start; /* disk number start 2 bytes */ unsigned long internal_fa; /* internal file attributes 2 bytes */ unsigned long external_fa; /* external file attributes 4 bytes */ tm_unz tmu_date; } unz_file_info; extern int unzStringFileNameCompare (const char* fileName1, const char* fileName2, int iCaseSensitivity); extern unzFile unzOpen (const char *path); extern unzFile unzOpen64 (const void *path); extern unzFile unzOpen2 (const char *path, zlib_filefunc_def* pzlib_filefunc_def); extern unzFile unzOpen2_64 (const void *path, zlib_filefunc64_def* pzlib_filefunc_def); extern int unzClose (unzFile file); extern int unzGetGlobalInfo (unzFile file, unz_global_info *pglobal_info); extern int unzGetGlobalInfo64 (unzFile file, unz_global_info64 *pglobal_info); extern int unzGetGlobalComment (unzFile file, char *szComment, unsigned long uSizeBuf); extern int unzGoToFirstFile (unzFile file); extern int unzGoToNextFile (unzFile file); extern int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity); typedef struct unz_file_pos_s { unsigned long pos_in_zip_directory; /* offset in zip file directory */ unsigned long num_of_file; /* # of file */ } unz_file_pos; extern int unzGetFilePos(unzFile file, unz_file_pos* file_pos); extern int unzGoToFilePos(unzFile file, unz_file_pos* file_pos); typedef struct unz64_file_pos_s { ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ ZPOS64_T num_of_file; /* # of file */ } unz64_file_pos; extern int unzGetFilePos64(unzFile file, unz64_file_pos* file_pos); extern int unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos); extern int unzGetCurrentFileInfo64 (unzFile file, unz_file_info64 *pfile_info, char *szFileName, unsigned long fileNameBufferSize, void *extraField, unsigned long extraFieldBufferSize, char *szComment, unsigned long commentBufferSize); extern int unzGetCurrentFileInfo (unzFile file, unz_file_info *pfile_info, char *szFileName, unsigned long fileNameBufferSize, void *extraField, unsigned long extraFieldBufferSize, char *szComment, unsigned long commentBufferSize); extern ZPOS64_T unzGetCurrentFileZStreamPos64 (unzFile file); extern int unzOpenCurrentFile (unzFile file); extern int unzOpenCurrentFilePassword (unzFile file, const char* password); extern int unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw); extern int unzOpenCurrentFile3 (unzFile file, int* method, int* level, int raw, const char* password); extern int unzCloseCurrentFile (unzFile file); extern int unzReadCurrentFile (unzFile file, voidp buf, unsigned len); extern z_off_t unztell (unzFile file); extern ZPOS64_T unztell64 (unzFile file); extern int unzeof (unzFile file); extern int unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len); /* Get the current file offset */ extern ZPOS64_T unzGetOffset64 (unzFile file); extern unsigned long unzGetOffset (unzFile file); /* Set the current file offset */ extern int unzSetOffset64 (unzFile file, ZPOS64_T pos); extern int unzSetOffset (unzFile file, unsigned long pos); #if defined(__cplusplus) } #endif #endif /* _SZLIB_H */