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