case TPI_INFO_VERSION_API:\r
* (int *) _pPtr = 2;\r
break;\r
+ case TPI_INFO_HANDLE_ON_COMMAND:\r
+ * (int *) _pPtr = 1;\r
+ break;\r
default:\r
return TPI_ERROR_D_UNSUPPORTED;\r
}\r
_fiInfo->szEngineName = wxT("sqx20u.dll");\r
_fiInfo->szTPIName = wxT("sqxArc");\r
_fiInfo->nTypeId = s_uFileId++;\r
- _fiInfo->eSupportedCommand = TPI_COMMAND_CREATE | TPI_COMMAND_ADD | TPI_COMMAND_EXTRACT | TPI_COMMAND_DELETE | TPI_COMMAND_TEST | TPI_COMMAND_REPAIR;\r
+ _fiInfo->eSupportedCommand = TPI_COMMAND_CREATE | TPI_COMMAND_EXTRACT | TPI_COMMAND_DELETE | TPI_COMMAND_TEST | TPI_COMMAND_REPAIR;\r
_fiInfo->fArchive = true;\r
_fiInfo->fComment = true;\r
_fiInfo->fSFX = true;\r
(\r
wxULongLong_t _eCommand,\r
TPI_SWITCHES * _swInfo,\r
- const wxString & _szArcName,\r
+ void * _hArchive,\r
const wxArrayString & _szFiles\r
)\r
{\r
- // 開きなおす。\r
- void * hArc;\r
- int nErrorCode = OpenArchive(_szArcName, & hArc);\r
- if (nErrorCode != TPI_ERROR_SUCCESS)\r
+ int nErrorCode = TPI_ERROR_SUCCESS;\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
{\r
- return nErrorCode;\r
+ nErrorCode = OpenArchive(_swInfo->szArcName, & _hArchive);\r
+ if (nErrorCode != TPI_ERROR_SUCCESS)\r
+ {\r
+ return nErrorCode;\r
+ }\r
}\r
\r
FARPROC fpProc;\r
fpProc = ::GetAPIAddress("InitFileList");\r
if (fpProc == NULL)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
- fl = ((void * (__stdcall *)(void *)) fpProc)(hArc);\r
+ fl = ((void * (__stdcall *)(void *)) fpProc)(_hArchive);\r
if (fl == NULL)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return TPI_ERROR_UNDEFINED;\r
}\r
\r
fpProc = ::GetAPIAddress("AppendFileList");\r
if (fpProc == NULL)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
for (size_t i = 0; i < _szFiles.Count(); i++)\r
{\r
- ((void (__stdcall *)(void *, void *, const wchar_t *)) fpProc)(hArc, fl, _szFiles[i].c_str());\r
+ ((void (__stdcall *)(void *, void *, const wchar_t *)) fpProc)(_hArchive, fl, _szFiles[i].c_str());\r
}\r
}\r
\r
// グローバル変数にポインタを保存。\r
fpProc =\r
_eCommand == TPI_COMMAND_CREATE ? ::GetAPIAddress("CompressFiles") :\r
- _eCommand == TPI_COMMAND_ADD ? ::GetAPIAddress("CompressFiles") :\r
+// _eCommand == TPI_COMMAND_ADD ? ::GetAPIAddress("CompressFiles") :\r
_eCommand == TPI_COMMAND_EXTRACT ? ::GetAPIAddress("ExtractFiles") :\r
_eCommand == TPI_COMMAND_DELETE ? ::GetAPIAddress("DeleteFiles") :\r
_eCommand == TPI_COMMAND_TEST ? ::GetAPIAddress("TestArchive") :\r
_eCommand == TPI_COMMAND_REPAIR ? ::GetAPIAddress("RepairArchive") : NULL;\r
if (fpProc == NULL)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
\r
switch (_eCommand)\r
{\r
case TPI_COMMAND_CREATE:\r
- case TPI_COMMAND_ADD:\r
+// case TPI_COMMAND_ADD:\r
{\r
SQX_COMPRESSOPTIONS co;\r
memset(& co, 0, sizeof(co));\r
{\r
wcsncpy(co.szPasswordHeader, _swInfo->szPassword.c_str(), sizeof(co.szPasswordHeader) / sizeof(wchar_t) - 1);\r
}\r
- nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *, SQX_COMPRESSOPTIONS *)) fpProc)(hArc, CallbackProc, NULL, fl, & co));\r
+ nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *, SQX_COMPRESSOPTIONS *)) fpProc)(_hArchive, CallbackProc, NULL, fl, & co));\r
break;\r
}\r
case TPI_COMMAND_EXTRACT:\r
wcsncpy(eo.szPassword, _swInfo->szPassword.c_str(), sizeof(eo.szPassword) / sizeof(wchar_t) - 1);\r
wcsncpy(eo.szPasswordHeader, _swInfo->szPassword.c_str(), sizeof(eo.szPasswordHeader) / sizeof(wchar_t) - 1);\r
wcsncpy(eo.szOutputPath, _swInfo->fnDestinationDirectory.GetFullPath().c_str(), sizeof(eo.szOutputPath) / sizeof(wchar_t) - 1);\r
- nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *, SQX_EXTRACTOPTIONS *)) fpProc)(hArc, CallbackProc, NULL, fl, & eo));\r
+ nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *, SQX_EXTRACTOPTIONS *)) fpProc)(_hArchive, CallbackProc, NULL, fl, & eo));\r
break;\r
}\r
case TPI_COMMAND_DELETE:\r
- nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *)) fpProc)(hArc, CallbackProc, NULL, fl));\r
+ nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *, void *)) fpProc)(_hArchive, CallbackProc, NULL, fl));\r
break;\r
case TPI_COMMAND_TEST:\r
- nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *)) fpProc)(hArc, CallbackProc, NULL));\r
+ nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, SQXCALLBACK, void *)) fpProc)(_hArchive, CallbackProc, NULL));\r
break;\r
case TPI_COMMAND_REPAIR:\r
{\r
- wxString sz = _szArcName + wxT("_repaired");\r
- nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, const wchar_t *, SQX_ARCLIST *, SQX_ARCLIST *)) fpProc)(hArc, sz.c_str(), NULL, NULL));\r
+ wxString sz = _swInfo->szArcName + wxT("_repaired");\r
+ nErrorCode = ErrorCodeConvert(((int (__stdcall *)(void *, const wchar_t *, SQX_ARCLIST *, SQX_ARCLIST *)) fpProc)(_hArchive, sz.c_str(), NULL, NULL));\r
break;\r
}\r
}\r
\r
if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return nErrorCode;\r
}\r
\r
fpProc = ::GetAPIAddress("DoneFileList");\r
if (fpProc == NULL)\r
{\r
- CloseArchive(hArc);\r
+ if (_eCommand == TPI_COMMAND_CREATE)\r
+ {\r
+ CloseArchive(_hArchive);\r
+ }\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
- ((void (__stdcall *)(void *, void *)) fpProc)(hArc, fl);\r
+ ((void (__stdcall *)(void *, void *)) fpProc)(_hArchive, fl);\r
}\r
- return CloseArchive(hArc);\r
+\r
+ return _eCommand == TPI_COMMAND_CREATE ? CloseArchive(_hArchive) : TPI_ERROR_SUCCESS;\r
}\r
\r
#ifdef __cplusplus\r