]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/include/unzip.h
Virtual Jaguar 1.0.4 update (Shamus)
[virtualjaguar] / src / include / unzip.h
diff --git a/src/include/unzip.h b/src/include/unzip.h
new file mode 100644 (file)
index 0000000..16654ca
--- /dev/null
@@ -0,0 +1,135 @@
+#ifndef __UNZIP_H__
+#define __UNZIP_H__
+
+#include "types.h"
+#include <stdio.h>
+
+#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__