| 1 | /************** filamzip H Declares Source Code File (.H) **************/ |
| 2 | /* Name: filamzip.h Version 1.2 */ |
| 3 | /* */ |
| 4 | /* (C) Copyright to the author Olivier BERTRAND 2016-2017 */ |
| 5 | /* */ |
| 6 | /* This file contains the ZIP file access method classes declares. */ |
| 7 | /***********************************************************************/ |
| 8 | #ifndef __FILAMZIP_H |
| 9 | #define __FILAMZIP_H |
| 10 | |
| 11 | #include "block.h" |
| 12 | #include "filamap.h" |
| 13 | #include "filamfix.h" |
| 14 | #include "zip.h" |
| 15 | #include "unzip.h" |
| 16 | |
| 17 | #define DLLEXPORT extern "C" |
| 18 | |
| 19 | typedef class UNZFAM *PUNZFAM; |
| 20 | typedef class UZXFAM *PUZXFAM; |
| 21 | typedef class ZIPFAM *PZIPFAM; |
| 22 | typedef class ZPXFAM *PZPXFAM; |
| 23 | |
| 24 | /***********************************************************************/ |
| 25 | /* This is the ZIP utility fonctions class. */ |
| 26 | /***********************************************************************/ |
| 27 | class DllExport ZIPUTIL : public BLOCK { |
| 28 | public: |
| 29 | // Constructor |
| 30 | ZIPUTIL(PCSZ tgt); |
| 31 | //ZIPUTIL(ZIPUTIL *zutp); |
| 32 | |
| 33 | // Methods |
| 34 | bool OpenTable(PGLOBAL g, MODE mode, PCSZ fn, bool append); |
| 35 | bool open(PGLOBAL g, PCSZ fn, bool append); |
| 36 | bool addEntry(PGLOBAL g, PCSZ entry); |
| 37 | void close(void); |
| 38 | void closeEntry(void); |
| 39 | int writeEntry(PGLOBAL g, char *buf, int len); |
| 40 | void getTime(tm_zip& tmZip); |
| 41 | |
| 42 | // Members |
| 43 | zipFile zipfile; // The ZIP container file |
| 44 | PCSZ target; // The target file name |
| 45 | PCSZ pwd; // The ZIP file password |
| 46 | PFBLOCK fp; |
| 47 | bool entryopen; // True when open current entry |
| 48 | }; // end of ZIPUTIL |
| 49 | |
| 50 | /***********************************************************************/ |
| 51 | /* This is the unZIP utility fonctions class. */ |
| 52 | /***********************************************************************/ |
| 53 | class DllExport UNZIPUTL : public BLOCK { |
| 54 | public: |
| 55 | // Constructor |
| 56 | UNZIPUTL(PCSZ tgt, bool mul); |
| 57 | UNZIPUTL(PDOSDEF tdp); |
| 58 | |
| 59 | // Implementation |
| 60 | //PTXF Duplicate(PGLOBAL g) { return (PTXF) new(g)UNZFAM(this); } |
| 61 | |
| 62 | // Methods |
| 63 | bool OpenTable(PGLOBAL g, MODE mode, PCSZ fn); |
| 64 | bool open(PGLOBAL g, PCSZ fn); |
| 65 | bool openEntry(PGLOBAL g); |
| 66 | void close(void); |
| 67 | void closeEntry(void); |
| 68 | bool WildMatch(PCSZ pat, PCSZ str); |
| 69 | int findEntry(PGLOBAL g, bool next); |
| 70 | int nextEntry(PGLOBAL g); |
| 71 | bool IsInsertOk(PGLOBAL g, PCSZ fn); |
| 72 | |
| 73 | // Members |
| 74 | unzFile zipfile; // The ZIP container file |
| 75 | PCSZ target; // The target file name |
| 76 | PCSZ pwd; // The ZIP file password |
| 77 | unz_file_info finfo; // The current file info |
| 78 | PFBLOCK fp; |
| 79 | char *memory; |
| 80 | uint size; |
| 81 | int multiple; // Multiple targets |
| 82 | bool entryopen; // True when open current entry |
| 83 | char fn[FILENAME_MAX]; // The current entry file name |
| 84 | char mapCaseTable[256]; |
| 85 | }; // end of UNZIPUTL |
| 86 | |
| 87 | /***********************************************************************/ |
| 88 | /* This is the unzip file access method. */ |
| 89 | /***********************************************************************/ |
| 90 | class DllExport UNZFAM : public MAPFAM { |
| 91 | //friend class UZXFAM; |
| 92 | public: |
| 93 | // Constructors |
| 94 | UNZFAM(PDOSDEF tdp); |
| 95 | UNZFAM(PUNZFAM txfp); |
| 96 | |
| 97 | // Implementation |
| 98 | virtual AMT GetAmType(void) {return TYPE_AM_ZIP;} |
| 99 | virtual PTXF Duplicate(PGLOBAL g) {return (PTXF) new(g) UNZFAM(this);} |
| 100 | |
| 101 | // Methods |
| 102 | virtual int Cardinality(PGLOBAL g); |
| 103 | virtual int GetFileLength(PGLOBAL g); |
| 104 | //virtual int MaxBlkSize(PGLOBAL g, int s) {return s;} |
| 105 | virtual bool OpenTableFile(PGLOBAL g); |
| 106 | virtual bool DeferReading(void) { return false; } |
| 107 | virtual int GetNext(PGLOBAL g); |
| 108 | //virtual int ReadBuffer(PGLOBAL g); |
| 109 | //virtual int WriteBuffer(PGLOBAL g); |
| 110 | //virtual int DeleteRecords(PGLOBAL g, int irc); |
| 111 | //virtual void CloseTableFile(PGLOBAL g, bool abort); |
| 112 | |
| 113 | protected: |
| 114 | // Members |
| 115 | UNZIPUTL *zutp; |
| 116 | PDOSDEF tdfp; |
| 117 | }; // end of UNZFAM |
| 118 | |
| 119 | /***********************************************************************/ |
| 120 | /* This is the fixed unzip file access method. */ |
| 121 | /***********************************************************************/ |
| 122 | class DllExport UZXFAM : public MPXFAM { |
| 123 | //friend class UNZFAM; |
| 124 | public: |
| 125 | // Constructors |
| 126 | UZXFAM(PDOSDEF tdp); |
| 127 | UZXFAM(PUZXFAM txfp); |
| 128 | |
| 129 | // Implementation |
| 130 | virtual AMT GetAmType(void) { return TYPE_AM_ZIP; } |
| 131 | virtual PTXF Duplicate(PGLOBAL g) { return (PTXF) new(g)UZXFAM(this); } |
| 132 | |
| 133 | // Methods |
| 134 | virtual int GetFileLength(PGLOBAL g); |
| 135 | virtual int Cardinality(PGLOBAL g); |
| 136 | virtual bool OpenTableFile(PGLOBAL g); |
| 137 | virtual int GetNext(PGLOBAL g); |
| 138 | //virtual int ReadBuffer(PGLOBAL g); |
| 139 | |
| 140 | protected: |
| 141 | // Members |
| 142 | UNZIPUTL *zutp; |
| 143 | PDOSDEF tdfp; |
| 144 | }; // end of UZXFAM |
| 145 | |
| 146 | /***********************************************************************/ |
| 147 | /* This is the zip file access method. */ |
| 148 | /***********************************************************************/ |
| 149 | class DllExport ZIPFAM : public DOSFAM { |
| 150 | public: |
| 151 | // Constructors |
| 152 | ZIPFAM(PDOSDEF tdp); |
| 153 | |
| 154 | // Implementation |
| 155 | virtual AMT GetAmType(void) {return TYPE_AM_ZIP;} |
| 156 | |
| 157 | // Methods |
| 158 | virtual int Cardinality(PGLOBAL g) {return 0;} |
| 159 | virtual int GetFileLength(PGLOBAL g) {return g ? 0 : 1;} |
| 160 | //virtual int MaxBlkSize(PGLOBAL g, int s) {return s;} |
| 161 | virtual bool OpenTableFile(PGLOBAL g); |
| 162 | virtual int ReadBuffer(PGLOBAL g); |
| 163 | virtual int WriteBuffer(PGLOBAL g); |
| 164 | //virtual int DeleteRecords(PGLOBAL g, int irc); |
| 165 | virtual void CloseTableFile(PGLOBAL g, bool abort); |
| 166 | |
| 167 | protected: |
| 168 | // Members |
| 169 | ZIPUTIL *zutp; |
| 170 | PCSZ target; |
| 171 | bool append; |
| 172 | //bool replace; |
| 173 | }; // end of ZIPFAM |
| 174 | |
| 175 | /***********************************************************************/ |
| 176 | /* This is the fixed zip file access method. */ |
| 177 | /***********************************************************************/ |
| 178 | class DllExport ZPXFAM : public FIXFAM { |
| 179 | public: |
| 180 | // Constructors |
| 181 | ZPXFAM(PDOSDEF tdp); |
| 182 | |
| 183 | // Implementation |
| 184 | virtual AMT GetAmType(void) {return TYPE_AM_ZIP;} |
| 185 | |
| 186 | // Methods |
| 187 | virtual int Cardinality(PGLOBAL g) {return 0;} |
| 188 | virtual int GetFileLength(PGLOBAL g) {return g ? 0 : 1;} |
| 189 | virtual bool OpenTableFile(PGLOBAL g); |
| 190 | virtual int WriteBuffer(PGLOBAL g); |
| 191 | virtual void CloseTableFile(PGLOBAL g, bool abort); |
| 192 | |
| 193 | protected: |
| 194 | // Members |
| 195 | ZIPUTIL *zutp; |
| 196 | PCSZ target; |
| 197 | bool append; |
| 198 | }; // end of ZPXFAM |
| 199 | |
| 200 | #endif // __FILAMZIP_H |
| 201 | |