FARPROC fpProc = ::GetProcAddress(g_hLib, "GetPluginInfo");\r
char szPluginType[5]; // \8eí\97Þ4bytes + NULL\r
if (fpProc == NULL\r
- || ((int (PASCAL *)(int, char *, int)) fpProc)(0, szPluginType, sizeof(szPluginType)) < 0\r
+ || ((int (PASCAL *)(int, char *, int)) fpProc)(0, szPluginType, sizeof(szPluginType)) <= 0\r
|| szPluginType[2] != 'I' || szPluginType[3] != 'N')\r
{\r
::FreeLibrary(g_hLib);\r
bool _bFirst\r
)\r
{\r
- if (! _bFirst)\r
+ static wxString szXPIPath, szXPIName, szArcName = * (wxString *) _hArchive;\r
+ static int nColorDepth;\r
+ static wxDir fs;\r
+ bool b;\r
+ if (_bFirst)\r
{\r
- return TPI_ERROR_S_ENDOFDATA;\r
+ wxStandardPaths p;\r
+ szXPIPath = wxPathOnly(p.GetExecutablePath()) + wxT("/lib/");\r
+ fs.Open(szXPIPath);\r
+\r
+ // \89æ\91\9c\82Ì\8fî\95ñ\82ð\8eæ\93¾\81B\r
+ FARPROC fpProc = ::GetProcAddress(g_hLib, "GetPictureInfo");\r
+ if (fpProc == NULL)\r
+ {\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ PictureInfo picInfo;\r
+ int nErrorCode = ErrorCodeConvert(((int (PASCAL *)(const char *, long, unsigned int, PictureInfo *)) fpProc)(szArcName.ToUTF8(), 0, 0, & picInfo));\r
+ if (nErrorCode != TPI_ERROR_SUCCESS)\r
+ {\r
+ return nErrorCode;\r
+ }\r
+ nColorDepth = picInfo.colorDepth;\r
+ ::LocalUnlock(picInfo.hInfo);\r
+ ::LocalFree(picInfo.hInfo);\r
+\r
+ b = fs.GetFirst(& szXPIName, wxT("*.xpi"));\r
+ }\r
+ else\r
+ {\r
+ b = fs.GetNext(& szXPIName);\r
}\r
+ while (b)\r
+ {\r
+ // XPI\82ð\83\8d\81[\83h\81B\r
+ wxString szLibName = szXPIPath + szXPIName;\r
+ HMODULE hXPI = ::LoadLibrary(szLibName.wchar_str());\r
+ if (hXPI == NULL)\r
+ {\r
+ b = fs.GetNext(& szXPIName);\r
+ continue;\r
+ }\r
+\r
+ // GetPluginInfo\82ð\8eÀ\8ds\81B\r
+ FARPROC fpProc = ::GetProcAddress(hXPI, "GetPluginInfo");\r
+ char szTemp[20];\r
+ if (fpProc == NULL\r
+ || ((int (PASCAL *)(int, char *, int)) fpProc)(0, szTemp, sizeof(szTemp)) <= 0\r
+ || szTemp[2] != 'X' || szTemp[3] != 'N'\r
+ || ((int (PASCAL *)(int, char *, int)) fpProc)(2, szTemp, sizeof(szTemp)) <= 0)\r
+ {\r
+ ::FreeLibrary(hXPI);\r
+ b = fs.GetNext(& szXPIName);\r
+ continue;\r
+ }\r
\r
- _fiInfo->fnFileName = wxFileName(* (wxString *) _hArchive);\r
- _fiInfo->fnFileName.SetVolume(wxEmptyString);\r
- _fiInfo->fnFileName.SetPath(wxEmptyString);\r
- _fiInfo->fnFileName.SetExt(wxT("bmp"));\r
- _fiInfo->szStoredName = _fiInfo->fnFileName.GetFullPath();\r
+ // \91Î\89\9e\8am\94F\81B\r
+ fpProc = ::GetProcAddress(hXPI, "IsSupported");\r
+ if (fpProc == NULL || ! ((BOOL (PASCAL *)(int)) fpProc)(nColorDepth))\r
+ {\r
+ ::FreeLibrary(hXPI);\r
+ b = fs.GetNext(& szXPIName);\r
+ continue;\r
+ }\r
\r
- return TPI_ERROR_SUCCESS;\r
+ _fiInfo->fnFileName = wxFileName(szArcName);\r
+ _fiInfo->fnFileName.SetVolume(wxEmptyString);\r
+ _fiInfo->fnFileName.SetPath(szXPIName);\r
+ _fiInfo->fnFileName.SetExt(MB2String(szTemp));\r
+ _fiInfo->szStoredName = _fiInfo->fnFileName.GetFullPath();\r
+\r
+ return TPI_ERROR_SUCCESS;\r
+ }\r
+\r
+ return TPI_ERROR_S_ENDOFDATA;\r
}\r
\r
int __stdcall GetArchiveInformation\r
unsigned int _uCommand,\r
TPI_SWITCHES * _swInfo,\r
const wxString & _szArcName,\r
- const wxArrayString &\r
+ const wxArrayString & _asFiles\r
)\r
{\r
if (_uCommand != TPI_COMMAND_EXTRACT)\r
return nErrorCode;\r
}\r
\r
- // \93W\8aJ\8f\88\97\9d\82Ì\82Ý\82ð\8ds\82¤\81B\r
- fpProc = ::GetProcAddress(g_hLib, "GetPicture");\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
-\r
// \83R\81[\83\8b\83o\83b\83N\82ð\91\97\90M\81B\r
wxFileName _fnArcName(_szArcName);\r
TPI_PROCESSINFO piInfo;\r
return TPI_ERROR_D_SKIPPED;\r
}\r
\r
- // \83\81\83\82\83\8a\8fo\97Í\81B\r
+ // \83\81\83\82\83\8a\8fã\82É\93W\8aJ\81B\r
HANDLE hInfo, hMemory;\r
- // \8fo\97Í\96¼\8dì\90¬\81B\r
- piInfo.uStatus = TPI_STATUS_BEGINPROCESS;\r
- piInfo.fnDestination = _fnArcName;\r
- piInfo.fnDestination.SetPath(_swInfo->fnDestinationDirectory.GetPath());\r
- piInfo.fnDestination.SetExt(wxT("bmp"));\r
- piInfo.fiInfo.fnFileName = wxFileName(piInfo.fnDestination.GetFullName());\r
- if (CallbackProc(0, 0, (long) & piInfo))\r
+ fpProc = ::GetProcAddress(g_hLib, "GetPicture");\r
+ if (fpProc == NULL)\r
{\r
- return TPI_ERROR_D_SKIPPED;\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
}\r
- piInfo.uStatus = TPI_STATUS_INPROCESS;\r
nErrorCode = ErrorCodeConvert(((int (PASCAL *)(const char *, long, unsigned int, HANDLE *, HANDLE *, FARPROC, long)) fpProc)(_szArcName.ToUTF8(), 0, 0, & hInfo, & hMemory, (FARPROC) CallbackProc, (long) & piInfo));\r
if (nErrorCode == TPI_ERROR_SUCCESS && (hMemory == NULL || hInfo == NULL))\r
{\r
return nErrorCode;\r
}\r
\r
- // XPI\82ð\93Ç\82Ý\8d\9e\82Þ\81B\r
- wxStandardPaths p;\r
- wxString szXPIPath = wxPathOnly(p.GetExecutablePath()) + wxT("/lib/exbmp.xpi");\r
- HMODULE hXPI = ::LoadLibrary(szXPIPath.wchar_str());\r
- if (hXPI == NULL)\r
+ for (size_t i = 0; i < _asFiles.GetCount(); i++)\r
{\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
+ // XPI\82ð\83\8d\81[\83h\81B\r
+ HMODULE hXPI = ::LoadLibrary(wxFileName(_asFiles[i]).GetPath().wchar_str());\r
+ if (hXPI == NULL)\r
+ {\r
+ nErrorCode = TPI_ERROR_U_USE_LIBRARY;\r
+ break;\r
+ }\r
\r
- // \91Î\89\9e\8am\94F\81B\r
- fpProc = ::GetProcAddress(hXPI, "IsSupported");\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
- if (! ErrorCodeConvert(((BOOL (PASCAL *)(int)) fpProc)(picInfo.colorDepth)))\r
- {\r
- return TPI_ERROR_ARC_UNSUPPORTED;\r
- }\r
+ // GetPluginInfo\82ð\8eÀ\8ds\81B\r
+ FARPROC fpProc = ::GetProcAddress(hXPI, "GetPluginInfo");\r
+ char szTemp[20];\r
+ if (fpProc == NULL\r
+ || ((int (PASCAL *)(int, char *, int)) fpProc)(2, szTemp, sizeof(szTemp)) <= 0)\r
+ {\r
+ ::FreeLibrary(hXPI);\r
+ nErrorCode = TPI_ERROR_U_USE_LIBRARY;\r
+ break;\r
+ }\r
\r
- // \8f\91\82«\8d\9e\82Ý\81B\r
- fpProc = ::GetProcAddress(hXPI, "CreatePicture");\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
+ // \83R\81[\83\8b\83o\83b\83N\82ð\91\97\90M\81B\r
+ piInfo.uStatus = TPI_STATUS_BEGINPROCESS;\r
+ piInfo.fiInfo.fnFileName = wxFileName(_asFiles[i]);\r
+ piInfo.fnDestination = piInfo.fiInfo.fnFileName;\r
+ piInfo.fnDestination.SetPath(_swInfo->fnDestinationDirectory.GetPath());\r
+ if (CallbackProc(0, 0, (long) & piInfo))\r
+ {\r
+ ::FreeLibrary(hXPI);\r
+ nErrorCode = TPI_ERROR_D_SKIPPED;\r
+ break;\r
+ }\r
+\r
+ // \8f\91\82«\8d\9e\82Ý\81B\r
+ piInfo.uStatus = TPI_STATUS_INPROCESS;\r
+ fpProc = ::GetProcAddress(hXPI, "CreatePicture");\r
+ if (fpProc == NULL)\r
+ {\r
+ ::FreeLibrary(hXPI);\r
+ nErrorCode = TPI_ERROR_U_USE_LIBRARY;\r
+ break;\r
+ }\r
+ nErrorCode = ErrorCodeConvert(((int (PASCAL *)(const char *, long, HANDLE *, HANDLE *, PictureInfo *, FARPROC, long)) fpProc)(piInfo.fnDestination.GetFullPath().ToUTF8(), 0, & hInfo, & hMemory, & picInfo, (FARPROC) CallbackProc, (long) & piInfo));\r
+ ::FreeLibrary(hXPI);\r
+\r
+ // \8dÅ\8cã\82É\83R\81[\83\8b\83o\83b\83N\82ð\91\97\90M\81B\r
+ piInfo.uStatus = TPI_STATUS_ENDPROCESS;\r
+ if (CallbackProc(0, 0, (long) & piInfo))\r
+ {\r
+ nErrorCode = TPI_ERROR_D_SKIPPED;\r
+ break;\r
+ }\r
}\r
- nErrorCode = ErrorCodeConvert(((int (PASCAL *)(const char *, long, HANDLE *, HANDLE *, PictureInfo *, FARPROC, long)) fpProc)(piInfo.fnDestination.GetFullPath().ToUTF8(), 0, & hInfo, & hMemory, & picInfo, (FARPROC) CallbackProc, (long) & piInfo));\r
::LocalUnlock(hInfo);\r
::LocalUnlock(hMemory);\r
+ ::LocalUnlock(picInfo.hInfo);\r
::LocalFree(hInfo);\r
::LocalFree(hMemory);\r
- ::FreeLibrary(hXPI);\r
-\r
- // \8dÅ\8cã\82É\83R\81[\83\8b\83o\83b\83N\82ð\91\97\90M\81B\r
- piInfo.uStatus = TPI_STATUS_ENDPROCESS;\r
- if (CallbackProc(0, 0, (long) & piInfo))\r
+ ::LocalFree(picInfo.hInfo);\r
+ if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
- return TPI_ERROR_D_SKIPPED;\r
+ return nErrorCode;\r
}\r
+\r
+ // \8dÅ\8fI\82Ì\83R\81[\83\8b\83o\83b\83N\81B\r
piInfo.uStatus = TPI_STATUS_CLOSEARCHIVE;\r
piInfo.fiInfo.fnFileName = _fnArcName;\r
if (CallbackProc(0, 0, (long) & piInfo))\r
return TPI_ERROR_D_SKIPPED;\r
}\r
\r
- return nErrorCode;\r
+ return TPI_ERROR_SUCCESS;\r
}\r
\r
int __stdcall SetCallbackProc\r