Subversion Repositories autosfx

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef DelZip_H
  2. #define DelZip_H
  3. /*
  4.  delzip.h -
  5.  
  6. ************************************************************************
  7.  Copyright (C) 2009, 2010  by Russell J. Peters, Roger Aelbrecht,
  8.       Eric W. Engler and Chris Vleghert.
  9.  
  10.    This file is part of TZipMaster Version 1.9.
  11.  
  12.     TZipMaster is free software: you can redistribute it and/or modify
  13.     it under the terms of the GNU Lesser General Public License as published by
  14.     the Free Software Foundation, either version 3 of the License, or
  15.     (at your option) any later version.
  16.  
  17.     TZipMaster is distributed in the hope that it will be useful,
  18.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.     GNU Lesser General Public License for more details.
  21.  
  22.     You should have received a copy of the GNU Lesser General Public License
  23.     along with TZipMaster.  If not, see <http://www.gnu.org/licenses/>.
  24.  
  25.     contact: problems@delphizip.org (include ZipMaster in the subject).
  26.     updates: http://www.delphizip.org
  27.     DelphiZip maillist subscribe at http://www.freelists.org/list/delphizip
  28. ************************************************************************/
  29.  
  30. // revised order
  31. enum ActionCodes
  32. {
  33.     zacTick, zacItem, zacProgress, zacEndOfBatch,
  34.     zacCount, zacSize, zacXItem, zacXProgress, zacMessage,
  35.     zacNewName, zacPassword, zacCRCError, zacOverwrite, zacSkipped,
  36.     zacComment, zacData, zacExtName, zacNone,
  37.     zacKey, zacArg, zacWinErr
  38. };
  39.            
  40. enum WinOps
  41. {   zwoCreate, zwoOpen, zwoRead, zwoWrite, zwoSeek, zwoClose,
  42.     zwoFind, zwoRename, zwoDelete, zwoGetAttrs, zwoSetAttrs, zwoGetDate,
  43.     zwoSetDate, zwoMakeDir, zwoRemoveDir, zwoChangeDir
  44. };    
  45.  
  46. enum StreamActions
  47. {
  48.     zsaIdentify, zsaCreate, zsaClose, zsaPosition, zsaRead, zsaWrite
  49. };
  50.  
  51.  
  52. enum  CBArgs
  53. {
  54.     zcbFilename, zcbPassword, zcbRootDir, zcbExtractDir, zcbComment,
  55.     zcbFSpecArgs, zcbFSpecArgsExcl, zcbSpecials, zcbTempPath
  56. };
  57.  
  58. #pragma pack(push, 1)
  59. struct ZSStats
  60. {
  61.     __int64 Size;
  62.     DWORD   Date;
  63.     DWORD   Attrs;
  64. };
  65. #pragma pack(pop)
  66.  
  67. /*
  68. the EncodeAs values (writing) -
  69.  seoUPATH - convert to 'safe' but have UTF8 proper name in data
  70.                                          [FAT 30 need 20 | NTFS 30 need 30]
  71.  zeoUTF  - convert to UTF8 [FAT 20 need 20 | FAT 30? need 30?]
  72.  zeoOEM  - convert to 'safe' (substitute '_' for undesirables) [FAT 20 need 20]
  73.  zeoNone - store 'as is' (Ansi on Windows) [FAT 20 need 20 | NTFS 20 need 20]
  74.  zeoAuto - zeoUTF
  75.  
  76. [without extended | with extended] version made, version need
  77.  
  78. 'Safe' is 0x20 to 0x7e without 'reserved'.
  79. Encoded (reading)
  80.  zeoUPATH - assume has UTF8 name in data
  81.  zeoUTF  - assume name is UTF8 - convert to Ansi/Unicode
  82.  zeoOEM  - assume name is OEM - convert to Ansi/Unicode
  83.  zeoNone - assume name is Ansi - convert to Ansi/Unicode
  84.  zeoAuto - unless flags/versions say otherwise, or it has UTF8 name in data,
  85.              treat it as OEM (FAT) / Ansi (NTFS)
  86. */
  87. enum Encodings
  88. {
  89.     zeoAuto, zeoNone, zeoOEM, zeoUTF8, zeoUPATH
  90. };
  91.  
  92. // yy::Extract=01, Add=02, either=03  zz::skip reason  yyzz
  93. #define SKIPPED_ON_FRESHEN                              0x0101
  94. #define SKIPPED_NO_OVERWRITE                            0x0102
  95. #define SKIPPED_FILE_EXISTS                             0x0103
  96. #define SKIPPED_BAD_PASSWORD                            0x0104
  97. //#define SKIPPED_NO_ENCRYPTION                           0x0105
  98. #define SKIPPED_BAD_NAME                                0x0105
  99. #define SKIPPED_COMPRESSION_UNKNOWN                     0x0106
  100. #define SKIPPED_UNKNOWN_ZIPHOST                         0x0107
  101. #define SKIPPED_FILEFORMAT_WRONG                        0x0108
  102. #define SKIPPED_EXTRACT_ERROR                           0x0109
  103. #define SKIPPED_USER                                    0x010A
  104. #define SKIPPED_CANNOTDO                                0x010B
  105. #define SKIPPED_NO_FILES                                0x030C
  106. #define SKIPPED_NO_SHARE                                0x020D
  107. #define SKIPPED_NO_ACCESS                               0x020E
  108. #define SKIPPED_NO_OPEN                                 0x020F
  109. #define SKIPPED_DUP_NAME                                                                0x0210
  110. #define SKIPPED_READ_ERROR                                                              0x0211
  111. #define SKIPPED_SIZE_CHANGE                                                             0x0212
  112.  
  113. //Callbackstructs-------------------------------------------------------------
  114.  
  115. /* All the items in the CallBackStruct are passed to the BCB
  116.  * program from the DLL.  Note that the "Caller" value returned
  117.  * here is the same one specified earlier in ZipParms by the
  118.  * BCB program. */
  119.  
  120. #define CALLBACK_CHECK  0x0707
  121. #define STREAM_CHECK 0x070B
  122. //ALL interface structures BYTE ALIGNED
  123. /* stream operation arg usage
  124.    zacStIdentify,
  125.       IN MsgP = name
  126.      OUT FileSize = size, Arg1 = Date, Arg2 = Attrs
  127.    zacStCreate,
  128.       IN MsgP = name
  129.      OUT StrmP = stream
  130.    zacStClose,
  131.       IN StrmP = stream
  132.      OUT StrmP = stream (= NULL)
  133.    zacStPosition,
  134.       IN StrmP = stream, FileSize = offset, Arg3 = from
  135.      OUT FileSize = position
  136.    zacStRead,
  137.       IN StrmP = stream, MsgP = buf, Arg3 = count
  138.      OUT Arg3 = bytes read
  139.    zacStWrite
  140.       IN StrmP = stream, MsgP = buf, Arg3 = count
  141.      OUT Arg3 = bytes written
  142. */
  143. #pragma pack(push, 1)
  144. struct ZCallBackStruct
  145. {
  146.     void  *Caller;          // 'this' reference of the ZipBuilder class
  147.     long   Version;         // version no. of DLL.
  148.     BOOL   IsOperationZip;  // true=zip, false=unzip
  149.     int    ActionCode;      // returns <0 if result valid
  150.     int    HaveWide;        // wide string passed
  151.     const void *MsgP;       // pointer to text/data
  152.     const void *MsgP2;      // additional text
  153.     __int64 FileSize;       // file size
  154.     __int64 Written;        // number of bytes written
  155.     long   Arg1;            // ErrorCode;
  156.     unsigned Arg2;          // additional arg
  157.     int Arg3;               // 'older'
  158.     unsigned check;
  159. };
  160. #pragma pack(pop)
  161.  
  162. typedef struct ZCallBackStruct CB_Rec;
  163.  
  164. typedef struct ZCallBackStruct *PZCallBackStruct;
  165. /* Declare a function pointer type for the BCB/Delphi callback function, to
  166.  * be called by the DLL to pass updated status info back to BCB/Delphi.*/
  167.  
  168. typedef int(__stdcall *ZFunctionPtrType)(PZCallBackStruct ZCallbackRec);
  169.  
  170. #pragma pack(push, 1)
  171. typedef struct
  172. {
  173.     DWORD  Method;   // low word = method, hi word nz=encrypt
  174.     DWORD CRC;       // IN init encrypt crc OUT crc
  175.     __int64 Size;
  176.     void  *fSSInput;
  177.     void  *fSSOutput;
  178. }ZSSArgs;      // used stream-stream
  179. #pragma pack(pop)
  180.  
  181. //ALL interface structures BYTE ALIGNED
  182. /* stream operation arg usage
  183.    zacStIdentify,
  184. //      IN BufP = name
  185.       IN Number = number
  186.      OUT ArgLL = size, ArgD = Date, ArgA = Attrs
  187.    zacStCreate,
  188. //      IN BufP = name
  189.       IN Number = number
  190.      OUT StrmP = stream
  191.    zacStClose,
  192.       IN Number = number
  193.       IN StrmP = stream
  194.      OUT StrmP = stream (= NULL)
  195.    zacStPosition,
  196.       IN Number = number
  197.       IN StrmP = stream, ArgLL = offset, ArgI = from
  198.      OUT ArgLL = position
  199.    zacStRead,
  200.       IN Number = number
  201.       IN StrmP = stream, BufP = buf, ArgI = count
  202.      OUT ArgI = bytes read
  203.    zacStWrite
  204.       IN Number = number
  205.       IN StrmP = stream, BufP = buf, ArgI = count
  206.      OUT ArgI = bytes written
  207. */
  208. #pragma pack(push, 1)
  209. struct ZStreamRec
  210. {
  211.     void *Caller;           // "self" reference of the Delphi form }
  212.     int Version;            // version no. of DLL }
  213.     void *StrmP;            // pointer to 'tstream'
  214.     int  Number;            // stream number
  215.     int  OpCode;            // TZStreamActions
  216.     unsigned char *BufP;    // pointer to stream src/dst
  217.     __int64  ArgLL;         // file size or stream position offset
  218.     int  ArgI;              // stream cnt or from
  219.     unsigned ArgD;          // date
  220.     unsigned ArgA;          // attribs
  221.     unsigned Check;         // ZStream_Check;
  222. };
  223. #pragma pack(pop)
  224.  
  225. typedef struct ZStreamRec ZS_Rec;
  226.  
  227. typedef struct ZStreamRec *PZStreamRec;
  228. /* Declare a function pointer type for the BCB/Delphi callback function, to
  229.  * be called by the DLL to pass updated status info back to BCB/Delphi.*/
  230.  
  231. typedef int(__stdcall *ZStreamFuncPtrType)(PZStreamRec StreamRec);
  232.  
  233. // callback error return values
  234. //#define  CALLBACK_FALSE      0
  235. #define  CALLBACK_UNHANDLED  0
  236. #define  CALLBACK_TRUE       1
  237. #define  CALLBACK_2    2
  238. #define  CALLBACK_3    3
  239. #define  CALLBACK_4    4
  240. #define  CALLBACK_IGNORED   -1  // unhandled ActionCode
  241. #define  CALLBACK_CANCEL    -2  // user cancel
  242. #define  CALLBACK_ABORT     -3
  243. #define  CALLBACK_EXCEPTION -4  // handled exception
  244. #define  CALLBACK_ERROR     -5  // unknown error
  245.  
  246. #define  ZPasswordFollows _T('<')
  247. #define  ZSwitchFollows _T('|')
  248. #define  ZForceNoRecurse _T('|')
  249. #define  ZForceRecurse _T('>')
  250.  
  251. const DLL_OPT_OpIsZip           = 0x0000001;
  252. const DLL_OPT_OpIsDelete        = 0x0000002; // delete - not used?
  253. const DLL_OPT_OpIsUnz           = 0x0000004;
  254. const DLL_OPT_OpIsTest          = 0x0000008;
  255. /*
  256. const DLL_OPT_CanWide           = 0x0000010;
  257. const DLL_OPT_Quiet             = 0x0000020;
  258. const DLL_OPT_NoSkip            = 0x0000040;
  259. const DLL_OPT_Update            = 0x0000080;
  260. const DLL_OPT_Freshen           = 0x0000100;
  261. const DLL_OPT_Directories       = 0x0000200; // extract directories
  262. const DLL_OPT_Overwrite         = 0x0000400; // overwrite all
  263. const DLL_OPT_NoDirEntries      = 0x0000800;
  264. const DLL_OPT_JunkDir           = 0x0001000;
  265. const DLL_OPT_Recurse           = 0x0002000;
  266. const DLL_OPT_Grow              = 0x0004000;
  267. const DLL_OPT_Force             = 0x0008000; // Force to DOS 8.3 *** not used
  268. const DLL_OPT_Move              = 0x0010000;
  269. const DLL_OPT_System            = 0x0020000;
  270. const DLL_OPT_JunkSFX           = 0x0040000; // remove sfx stub
  271. const DLL_OPT_LatestTime        = 0x0080000; // set zip to latest file
  272. const DLL_OPT_ArchiveFilesOnly  = 0x0100000; // zip when archive bit set
  273. const DLL_OPT_ResetArchiveBit   = 0x0200000; // reset the archive bit after successfull zip
  274. const DLL_OPT_Versioning        = 0x0400000; // rename old version instead of replace
  275. const DLL_OPT_HowToMove         = 0x0800000;
  276. const DLL_OPT_NoPrecalc         = 0x1000000; // don't precalc crc when encrypt
  277. const DLL_OPT_Encrypt           = 0x2000000; // General encrypt, if not superseded
  278. const DLL_OPT_Volume            = 0x4000000;
  279. const DLL_OPT_NTFSStamps        = 0x8000000; // Generate or use NTFS time stamps
  280. //const DLL_OPT_NoSkip            = 0x10000000; // Generate or use NTFS time stamps
  281. */
  282. struct DllOptions
  283. {
  284.   union
  285.   {
  286.       unsigned opts;
  287.       struct
  288.       {
  289.         unsigned OpIsZip          :1;
  290.         unsigned OpIsDelete       :1; // delete - not used?
  291.         unsigned OpIsUnz          :1;
  292.         unsigned OpIsTest         :1;
  293.         unsigned CanWide          :1;
  294.         unsigned Quiet            :1;
  295.         unsigned NotUsedNoSkip    :1;
  296.         unsigned Update           :1;
  297.         unsigned Freshen          :1;
  298.         unsigned Directories      :1; // extract directories
  299.         unsigned Overwrite        :1; // overwrite all
  300.         unsigned NoDirEntries     :1;
  301.         unsigned JunkDir          :1;
  302.         unsigned Recurse          :1;
  303.         unsigned Grow             :1;
  304.         unsigned Forcexx            :1; // Force to DOS 8.3
  305.         unsigned Move             :1;
  306.         unsigned System           :1;
  307.         unsigned JunkSFX          :1; // remove sfx stub
  308.         unsigned LatestTime       :1; // set zip to latest file
  309.         unsigned ArchiveFilesOnly :1; // zip when archive bit set
  310.         unsigned ResetArchiveBit  :1; // reset the archive bit after successfull zip
  311.         unsigned Versioning       :1; // rename old version instead of replace
  312.         unsigned HowToMove        :1;
  313.         unsigned NoPrecalc        :1; // don't precalc crc when encrypt
  314.         unsigned Encrypt          :1; // General encrypt, if not superseded
  315.         unsigned Volume           :1;
  316.         unsigned NTFSStamps       :1; // generate or use NTFS time stamps
  317.       };
  318.   };
  319. };
  320. #pragma pack(push, 1)
  321. typedef struct
  322. {
  323.     HWND                        fHandle;        // *
  324.     void                        *fCaller;       // *
  325.     long                        fVersion;       // *
  326.     ZFunctionPtrType            ZCallbackFunc;  // *
  327.     ZStreamFuncPtrType          ZStreamFunc;    // *
  328.     int                         fVerbosity;     // ?
  329.     unsigned                    fEncodedAs;     // Assume names encoded as
  330.     ZSSArgs                     *fSS;           // used stream-stream
  331.     unsigned long               fFromPage;      // country to use
  332.     DllOptions                              fOptions;   // DLL_OPT_?
  333.     // PasswordRequestCount, How many times a password will be asked per file
  334.     unsigned long               fPwdReqCount;
  335.     unsigned long               fEncodeAs;    // encode names as
  336.     int                         fLevel;
  337.     // General Date, if not superseded by FileData.fDate
  338.     unsigned long               fDate;
  339.     long                        fNotUsed[4];
  340.     long                        fCheck;
  341. }DllCommands;
  342. #pragma pack(pop)          
  343. #define DLLCOMMANDCHECK 0x03070505
  344.  
  345. #define OUR_VEM 30
  346. #define Def_VER 20
  347.  
  348. #ifdef __cplusplus
  349. extern "C"
  350. {
  351. #endif
  352.     extern BOOL WINAPI  DllEntryPoint(HINSTANCE hinstDll, DWORD fdwRreason,
  353.                                           LPVOID plvReserved);
  354.     long WINAPI DZ_Exec(const DllCommands * C);
  355.     long WINAPI DZ_Abort(void * C);
  356.     long WINAPI DZ_Version(void);        
  357.     long WINAPI DZ_PrivVersion(void);
  358.     long WINAPI DZ_Name(void* buf, int bufsiz, int wide);
  359.     const char* WINAPI DZ_Path(void);
  360.     const char* WINAPI DZ_Banner(void);
  361. #ifdef __cplusplus
  362. }
  363.  
  364. #endif
  365.  
  366. #endif
  367.  
  368.  
  369.  
  370.  
  371.  
  372.