1 /*************** tabzip H Declares Source Code File (.H) ***************/
2 /*  Name: tabzip.h   Version 1.0                                       */
3 /*                                                                     */
4 /*  (C) Copyright to the author Olivier BERTRAND          2016         */
5 /*                                                                     */
6 /*  This file contains the ZIP classe declares.                        */
7 /***********************************************************************/
8 #include "osutil.h"
9 #include "block.h"
10 #include "colblk.h"
11 #include "xtable.h"
12 #include "unzip.h"
13 
14 typedef class ZIPDEF *PZIPDEF;
15 typedef class TDBZIP *PTDBZIP;
16 typedef class ZIPCOL *PZIPCOL;
17 
18 /***********************************************************************/
19 /*  ZIP table: display info about a ZIP file.                          */
20 /***********************************************************************/
21 class DllExport ZIPDEF : public DOSDEF {          /* Table description */
22 	friend class TDBZIP;
23 	friend class UNZFAM;
24 public:
25 	// Constructor
ZIPDEF(void)26 	ZIPDEF(void) {}
27 
28 	// Implementation
GetType(void)29 	virtual const char *GetType(void) {return "ZIP";}
30 
31 	// Methods
32 	virtual bool DefineAM(PGLOBAL g, LPCSTR am, int poff);
33 	virtual PTDB GetTable(PGLOBAL g, MODE m);
34 
35 protected:
36 	// Members
37 	PCSZ        target;								 // The inside file to query
38 }; // end of ZIPDEF
39 
40 /***********************************************************************/
41 /*  This is the ZIP Access Method class declaration.                   */
42 /***********************************************************************/
43 class DllExport TDBZIP : public TDBASE {
44 	friend class ZIPCOL;
45 public:
46 	// Constructor
47 	TDBZIP(PZIPDEF tdp);
48 
49 	// Implementation
GetAmType(void)50 	virtual AMT  GetAmType(void) {return TYPE_AM_ZIP;}
GetFile(PGLOBAL)51 	virtual PCSZ GetFile(PGLOBAL) {return zfn;}
SetFile(PGLOBAL,PCSZ fn)52 	virtual void SetFile(PGLOBAL, PCSZ fn) {zfn = fn;}
53 
54 	// Methods
55 	virtual PCOL MakeCol(PGLOBAL g, PCOLDEF cdp, PCOL cprec, int n);
56 	virtual int  Cardinality(PGLOBAL g);
57 	virtual int  GetMaxSize(PGLOBAL g);
GetRecpos(void)58 	virtual int  GetRecpos(void) {return 0;}
59 
60 	// Database routines
61 	virtual bool OpenDB(PGLOBAL g);
62 	virtual int  ReadDB(PGLOBAL g);
63 	virtual int  WriteDB(PGLOBAL g);
64 	virtual int  DeleteDB(PGLOBAL g, int irc);
65 	virtual void CloseDB(PGLOBAL g);
66 
67 protected:
68 	bool open(PGLOBAL g, const char *filename);
69 	void close(void);
70 
71 	// Members
72 	unzFile         zipfile;							   // The ZIP container file
73 	PCSZ            zfn;									   // The ZIP file name
74 //PSZ             target;
75 	unz_file_info64 finfo;									 // The current file info
76 	char            fn[FILENAME_MAX];     	 // The current file name
77 	int             nexterr;								 // Next file error
78 }; // end of class TDBZIP
79 
80 /***********************************************************************/
81 /*  Class ZIPCOL: ZIP access method column descriptor.                 */
82 /***********************************************************************/
83 class DllExport ZIPCOL : public COLBLK {
84 	friend class TDBZIP;
85 public:
86 	// Constructors
87 	ZIPCOL(PCOLDEF cdp, PTDB tdbp, PCOL cprec, int i, PCSZ am = "ZIP");
88 
89 	// Implementation
GetAmType(void)90 	virtual int  GetAmType(void) { return TYPE_AM_ZIP; }
91 
92 	// Methods
93 	virtual void ReadColumn(PGLOBAL g);
94 
95 protected:
96 	// Default constructor not to be used
ZIPCOL(void)97 	ZIPCOL(void) {}
98 
99 	// Members
100 	TDBZIP *Tdbz;
101 	int     flag;
102 }; // end of class ZIPCOL
103