CrystalSpace

Public API Reference

csutil/zip.h

Go to the documentation of this file.
00001 /*
00002     ZIP archive support for Crystal Space 3D library
00003     Copyright (C) 1998,1999 by Andrew Zabolotny <[email protected]>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public
00016     License along with this library; if not, write to the Free
00017     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00018 */
00019 
00020 #ifndef __CS_ZIP_H__
00021 #define __CS_ZIP_H__
00022 
00027 #if defined(__cplusplus) && !defined(CS_COMPILER_BCC)
00028 extern "C" {
00029 #endif
00030 
00031 #define Byte z_Byte     /* Kludge to avoid conflicting typedef in zconf.h */
00032 #include <zlib.h>
00033 #undef Byte
00034 
00035 #if defined(__cplusplus) && !defined(CS_COMPILER_BCC)
00036 }
00037 #endif
00038 
00039 #define CENTRAL_HDR_SIG '\001','\002'   /* the infamous "PK" signature bytes, */
00040 #define LOCAL_HDR_SIG   '\003','\004'   /*  sans "PK" (so unzip executable not */
00041 #define END_CENTRAL_SIG '\005','\006'   /*  mistaken for zipfile itself) */
00042 #define EXTD_LOCAL_SIG  '\007','\010'   /* [ASCII "\113" == EBCDIC "\080" ??] */
00043 
00044 #define DEF_WBITS       15              /* Default LZ77 window size */
00045 #define ZIP_STORE       0               /* 'STORED' method id */
00046 #define ZIP_DEFLATE     8               /* 'DEFLATE' method id */
00047 
00048 typedef uint8  uch;
00049 typedef uint16 ush;
00050 typedef uint32 u32;
00051 
00052 #if 0            /* Optimization: use the (const) result of crc32(0L,0,0) */
00053 #  define CRCVAL_INITIAL  crc32(0L, 0, 0)
00054 #else
00055 #  define CRCVAL_INITIAL  0L
00056 #endif
00057 
00058 typedef struct
00059 {
00060   uch version_needed_to_extract[2];
00061   ush general_purpose_bit_flag;
00062   ush compression_method;
00063   ush last_mod_file_time;
00064   ush last_mod_file_date;
00065   u32 crc32;
00066   u32 csize;
00067   u32 ucsize;
00068   ush filename_length;
00069   ush extra_field_length;
00070 } ZIP_local_file_header;
00071 
00072 typedef struct
00073 {
00074   uch version_made_by[2];
00075   uch version_needed_to_extract[2];
00076   ush general_purpose_bit_flag;
00077   ush compression_method;
00078   ush last_mod_file_time;
00079   ush last_mod_file_date;
00080   u32 crc32;
00081   u32 csize;
00082   u32 ucsize;
00083   ush filename_length;
00084   ush extra_field_length;
00085   ush file_comment_length;
00086   ush disk_number_start;
00087   ush internal_file_attributes;
00088   u32 external_file_attributes;
00089   u32 relative_offset_local_header;
00090 } ZIP_central_directory_file_header;
00091 
00092 typedef struct
00093 {
00094   ush number_this_disk;
00095   ush num_disk_start_cdir;
00096   ush num_entries_centrl_dir_ths_disk;
00097   ush total_entries_central_dir;
00098   u32 size_central_directory;
00099   u32 offset_start_central_directory;
00100   ush zipfile_comment_length;
00101 } ZIP_end_central_dir_record;
00102 
00103 //--- ZIP_local_file_header layout ---------------------------------------------
00104 #define ZIP_LOCAL_FILE_HEADER_SIZE              26
00105 #      define L_VERSION_NEEDED_TO_EXTRACT_0     0
00106 #      define L_VERSION_NEEDED_TO_EXTRACT_1     1
00107 #      define L_GENERAL_PURPOSE_BIT_FLAG        2
00108 #      define L_COMPRESSION_METHOD              4
00109 #      define L_LAST_MOD_FILE_TIME              6
00110 #      define L_LAST_MOD_FILE_DATE              8
00111 #      define L_CRC32                           10
00112 #      define L_COMPRESSED_SIZE                 14
00113 #      define L_UNCOMPRESSED_SIZE               18
00114 #      define L_FILENAME_LENGTH                 22
00115 #      define L_EXTRA_FIELD_LENGTH              24
00116 
00117 //--- ZIP_central_directory_file_header layout ---------------------------------
00118 #define ZIP_CENTRAL_DIRECTORY_FILE_HEADER_SIZE  42
00119 #      define C_VERSION_MADE_BY_0               0
00120 #      define C_VERSION_MADE_BY_1               1
00121 #      define C_VERSION_NEEDED_TO_EXTRACT_0     2
00122 #      define C_VERSION_NEEDED_TO_EXTRACT_1     3
00123 #      define C_GENERAL_PURPOSE_BIT_FLAG        4
00124 #      define C_COMPRESSION_METHOD              6
00125 #      define C_LAST_MOD_FILE_TIME              8
00126 #      define C_LAST_MOD_FILE_DATE              10
00127 #      define C_CRC32                           12
00128 #      define C_COMPRESSED_SIZE                 16
00129 #      define C_UNCOMPRESSED_SIZE               20
00130 #      define C_FILENAME_LENGTH                 24
00131 #      define C_EXTRA_FIELD_LENGTH              26
00132 #      define C_FILE_COMMENT_LENGTH             28
00133 #      define C_DISK_NUMBER_START               30
00134 #      define C_INTERNAL_FILE_ATTRIBUTES        32
00135 #      define C_EXTERNAL_FILE_ATTRIBUTES        34
00136 #      define C_RELATIVE_OFFSET_LOCAL_HEADER    38
00137 
00138 //--- ZIP_end_central_dir_record layout ----------------------------------------
00139 #define ZIP_END_CENTRAL_DIR_RECORD_SIZE         18
00140 #      define E_NUMBER_THIS_DISK                0
00141 #      define E_NUM_DISK_WITH_START_CENTRAL_DIR 2
00142 #      define E_NUM_ENTRIES_CENTRL_DIR_THS_DISK 4
00143 #      define E_TOTAL_ENTRIES_CENTRAL_DIR       6
00144 #      define E_SIZE_CENTRAL_DIRECTORY          8
00145 #      define E_OFFSET_START_CENTRAL_DIRECTORY  12
00146 #      define E_ZIPFILE_COMMENT_LENGTH          16
00147 
00148 #endif // __CS_ZIP_H__

Generated for Crystal Space by doxygen 1.4.7