<ul>\r
<li class="chg">Windows上でVisual Studio 2008へ移行。</li>\r
<li class="chg">Windows上でwxWidgets2.9.1に移行。</li>\r
+ <li class="chg">CheckArchiveをOpenArchiveに統合。</li>\r
</ul>\r
</dd>\r
<dt>Lychee</dt>\r
return this->nErrorCode == TPI_ERROR_SUCCESS;\r
}\r
\r
-bool TPIHandle::CheckArchive(const wxString & _szArcName)\r
-{\r
- this->nErrorCode = TPI_ERROR_SUCCESS;\r
- GetAPIAddress("CheckArchive", p);\r
- this->nErrorCode = ((int (__stdcall *)(const wxString &)) p)(_szArcName);\r
- return this->nErrorCode == TPI_ERROR_SUCCESS;\r
-}\r
-\r
bool TPIHandle::OpenArchive(const wxString & _szArcName, wxULongLong_t * _llFileCount)\r
{\r
this->nErrorCode = TPI_ERROR_SUCCESS;\r
bool GetPluginInformation(unsigned int _uInfoId, wxULongLong_t _llSubOption, void * _pPtr);\r
bool GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst = false);\r
\r
- bool CheckArchive(const wxString & _szArcName);\r
bool OpenArchive(const wxString & _szArcName, wxULongLong_t * _llFileCount = NULL);\r
bool CloseArchive(void);\r
bool GetFileInformation(TPI_FILEINFO * _fiInfo, bool _bFirst = false);\r
GetFormatInformation @2
LoadPlugin @3
FreePlugin @4
- CheckArchive @10
OpenArchive @20
CloseArchive @21
GetFileInformation @22
void * _pReserved = NULL\r
);\r
\r
-/** プラグインが対応しているファイルかどうか確認する。\r
- * @param _szArcName 確認する対象となる書庫名。\r
- * @return エラーコード。\r
- */\r
-int __stdcall CheckArchive\r
-(\r
- const wxString & _szArcName\r
-);\r
-\r
/** 書庫のハンドルを取得する。\r
* @param _szArcName 操作する対象となる書庫名。\r
* @param _hArchive 取得したハンドルを格納するためのポインタ。\r
tpi.SetCallbackProc(TPICallbackProc);\r
\r
// 対応確認。\r
- if (! tpi.CheckArchive(szFileName) || ! tpi.OpenArchive(szFileName, llFileCount))\r
+ if (! tpi.OpenArchive(szFileName, llFileCount))\r
{\r
tpi.FreeLibrary();\r
* llFileCount = 0;\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString &\r
-)\r
-{\r
- return TPI_ERROR_SUCCESS;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
\r
BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void * _lpEis)\r
{\r
- if (_uMsg != ::RegisterWindowMessage((const wchar_t *) WM_ARCEXTRACT))\r
+ if (_uMsg != ::RegisterWindowMessage(WM_ARCEXTRACT))\r
{\r
// 独自仕様などに対する予備コード。\r
return TRUE;\r
}\r
\r
// ライブラリをロード。\r
- g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).c_str());\r
+ g_LibInfo.hLib = ::LoadLibrary(xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).wchar_str());\r
if (g_LibInfo.hLib == NULL)\r
{\r
return TPI_ERROR_U_LOAD_LIBRARY;\r
// 代替ライブラリもロード。ロードできなくてもエラーにはしない。\r
g_LibInfoAlt.szPrefix = xmlLibrary->GetAttribute(wxT("prefix-alt"), wxEmptyString);\r
g_LibInfoAlt.fUnicode = xmlLibrary->GetAttribute(wxT("unicode-alt"), wxT("0")) == wxT("1");\r
- g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString).c_str());\r
+ g_LibInfoAlt.hLib = ::LoadLibrary(xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString).wchar_str());\r
\r
return TPI_ERROR_SUCCESS;\r
}\r
for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
{\r
// ライブラリをロード。\r
- g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).c_str());\r
+ g_LibInfo.hLib = ::LoadLibrary(xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).wchar_str());\r
if (g_LibInfo.hLib == NULL)\r
{\r
xmlLibrary = xmlLibrary->GetNext();\r
// 代替ライブラリもロード。ロードできなくてもエラーにはしない。\r
g_LibInfoAlt.szPrefix = xmlLibrary->GetAttribute(wxT("prefix-alt"), wxEmptyString);\r
g_LibInfoAlt.fUnicode = xmlLibrary->GetAttribute(wxT("unicode-alt"), wxT("0")) == wxT("1");\r
- g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString).c_str());\r
+ g_LibInfoAlt.hLib = ::LoadLibrary(xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString).wchar_str());\r
g_LibInfo.node = * xmlLibrary;\r
\r
+ // Unicodeモードに設定。\r
+ FARPROC fpProc = ::GetAPIAddress("SetUnicodeMode", false);\r
+ if (fpProc != NULL)\r
+ {\r
+ ((BOOL (__stdcall *)(BOOL)) fpProc)(TRUE);\r
+ }\r
+\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
+ fpProc = ::GetAPIAddress("CheckArchive", true);\r
+ if (fpProc != NULL && (g_LibInfo.fUnicode\r
+ ? ((BOOL (__stdcall *)(const wchar_t *, const int)) fpProc)(_szArcName.wchar_str(), 0)\r
+ : ((BOOL (__stdcall *)(const char *, const int)) fpProc)(_szArcName.ToUTF8(), 0)))\r
{\r
- // 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString & _szArcName\r
-)\r
-{\r
- // Unicodeモードに設定。\r
- FARPROC fpProc = ::GetAPIAddress("SetUnicodeMode", false);\r
- if (fpProc != NULL)\r
- {\r
- ((BOOL (__stdcall *)(BOOL)) fpProc)(TRUE);\r
- }\r
-\r
- fpProc = ::GetAPIAddress("CheckArchive", true);\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
-\r
- if (! (g_LibInfo.fUnicode\r
- ? ((BOOL (__stdcall *)(const wchar_t *, const int)) fpProc)(_szArcName.wchar_str(), 0)\r
- : ((BOOL (__stdcall *)(const char *, const int)) fpProc)(_szArcName.ToUTF8(), 0)\r
- ))\r
- {\r
- return TPI_ERROR_D_UNSUPPORTED;\r
- }\r
-\r
- return TPI_ERROR_SUCCESS;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
g_LibInfo.node = * xmlLibrary;\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
+ wxFileName fnArchive(_szArcName);\r
+ wxArrayString asExt = ::wxStringTokenize(g_LibInfo.node.GetAttribute(wxT("suffix"), wxEmptyString), wxT(";"));\r
+ if (! g_LibInfo.node.HasAttribute(wxT("list")))\r
{\r
- // 対応していれば処理を終了。\r
- return TPI_ERROR_SUCCESS;\r
+ return TPI_ERROR_ARC_UNSUPPORTED;\r
+ }\r
+\r
+ for (size_t i = 0; i < asExt.GetCount(); i++)\r
+ {\r
+ // .tar.XXXなど二重判定への対応。\r
+// if (asExt[i].IsSameAs(fnArchive.GetExt(), false))\r
+ if (fnArchive.GetFullName().EndsWith(wxT('.') + asExt[i]))\r
+ {\r
+ return TPI_ERROR_SUCCESS;\r
+ }\r
}\r
\r
xmlLibrary = xmlLibrary->GetNext();\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString & _szArcName\r
-)\r
-{\r
- wxFileName fnArchive(_szArcName);\r
- wxArrayString asExt = ::wxStringTokenize(g_LibInfo.node.GetAttribute(wxT("suffix"), wxEmptyString), wxT(";"));\r
- if (! g_LibInfo.node.HasAttribute(wxT("list")))\r
- {\r
- return TPI_ERROR_ARC_UNSUPPORTED;\r
- }\r
-\r
- for (size_t i = 0; i < asExt.GetCount(); i++)\r
- {\r
- // .tar.XXXなど二重判定への対応。\r
-// if (asExt[i].IsSameAs(fnArchive.GetExt(), false))\r
- if (fnArchive.GetFullName().EndsWith(wxT('.') + asExt[i]))\r
- {\r
- return TPI_ERROR_SUCCESS;\r
- }\r
- }\r
-\r
- return TPI_ERROR_ARC_UNSUPPORTED;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
+int __stdcall OpenArchive\r
(\r
- const wxString & _szArcName\r
+ const wxString & _szArcName,\r
+ void * * _hArchive,\r
+ wxULongLong_t *\r
)\r
{\r
FARPROC fpProc = ::GetAPIAddress("IsValidArchive");\r
}\r
\r
egg_type eType;\r
- return ErrorCodeConvert(((UINT (__cdecl *)(const wchar_t *, egg_type *)) fpProc)(_szArcName.wchar_str(), & eType));\r
-}\r
+ int nErrorCode = ErrorCodeConvert(((UINT (__cdecl *)(const wchar_t *, egg_type *)) fpProc)(_szArcName.wchar_str(), & eType));\r
+ if (nErrorCode != TPI_ERROR_SUCCESS)\r
+ {\r
+ return nErrorCode;\r
+ }\r
\r
-int __stdcall OpenArchive\r
-(\r
- const wxString & _szArcName,\r
- void * * _hArchive,\r
- wxULongLong_t *\r
-)\r
-{\r
- FARPROC fpProc = ::GetAPIAddress("CreateEgg");\r
+ fpProc = ::GetAPIAddress("CreateEgg");\r
if (fpProc == NULL)\r
{\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
- int nErrorCode = ErrorCodeConvert(((UINT (__cdecl *)(void **, eggevent::Proc, void *)) fpProc)(_hArchive, CallbackProc, _hArchive));\r
+ nErrorCode = ErrorCodeConvert(((UINT (__cdecl *)(void **, eggevent::Proc, void *)) fpProc)(_hArchive, CallbackProc, _hArchive));\r
if (nErrorCode != TPI_ERROR_SUCCESS)\r
{\r
return nErrorCode;\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString &\r
-)\r
-{\r
- return TPI_ERROR_SUCCESS;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
wxULongLong_t\r
)\r
{\r
+ // ファイルを開く。\r
+ wxFile hFile;\r
+ if (! hFile.Exists(_szArcName) || ! hFile.Open(_szArcName, wxFile::read))\r
+ {\r
+ return TPI_ERROR_IO_ARC_OPEN;\r
+ }\r
+\r
+ // 最初の2KBを読み込み。\r
+ char buffer[2050];\r
+ ::ZeroMemory(buffer, sizeof(buffer));\r
+ if (hFile.Read(buffer, sizeof(buffer)) == wxInvalidOffset)\r
+ {\r
+ hFile.Close();\r
+ return TPI_ERROR_IO_ARC_READ;\r
+ }\r
+ hFile.Close();\r
+\r
wxStandardPaths p;\r
wxString szSPIPath = wxPathOnly(p.GetExecutablePath()) + wxT("/lib/"), szSPIName;\r
wxDir fs(szSPIPath);\r
}\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
+ fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
+ if (fpProc == NULL)\r
+ {\r
+ ::FreeLibrary(g_hLib);\r
+ continue;\r
+ }\r
+\r
+ if (((BOOL (PASCAL *)(const char *, unsigned long)) fpProc)(_szArcName.ToUTF8(), (unsigned long) buffer))\r
{\r
// 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString & _szArcName\r
-)\r
-{\r
- FARPROC fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
-\r
- wxFile hFile;\r
- if (! hFile.Exists(_szArcName) || ! hFile.Open(_szArcName, wxFile::read))\r
- {\r
- return TPI_ERROR_IO_ARC_OPEN;\r
- }\r
-\r
- char buffer[2050];\r
- ::ZeroMemory(buffer, sizeof(buffer));\r
- if (hFile.Read(buffer, sizeof(buffer)) == wxInvalidOffset)\r
- {\r
- hFile.Close();\r
- return TPI_ERROR_IO_ARC_READ;\r
- }\r
- hFile.Close();\r
- return ((BOOL (PASCAL *)(const char *, unsigned long)) fpProc)(_szArcName.ToUTF8(), (unsigned long) buffer) ? TPI_ERROR_SUCCESS : TPI_ERROR_D_UNSUPPORTED;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
wxULongLong_t\r
)\r
{\r
+ // ファイルを開く。\r
+ wxFile hFile;\r
+ if (! hFile.Exists(_szArcName) || ! hFile.Open(_szArcName, wxFile::read))\r
+ {\r
+ return TPI_ERROR_IO_ARC_OPEN;\r
+ }\r
+\r
+ // 最初の2KBを読み込み。\r
+ char buffer[2050];\r
+ ::ZeroMemory(buffer, sizeof(buffer));\r
+ if (hFile.Read(buffer, sizeof(buffer)) == wxInvalidOffset)\r
+ {\r
+ hFile.Close();\r
+ return TPI_ERROR_IO_ARC_READ;\r
+ }\r
+ hFile.Close();\r
+\r
wxStandardPaths p;\r
wxString szSPIPath = wxPathOnly(p.GetExecutablePath()) + wxT("/lib/"), szSPIName;\r
wxDir fs(szSPIPath);\r
- bool b = fs.GetFirst(& szSPIName, wxT("*.spi"));\r
- while (b)\r
+ if (fs.GetFirst(& szSPIName, wxT("*.spi")))\r
{\r
- // SPIをロード。\r
- g_hLib = ::LoadLibrary((szSPIPath + szSPIName).wchar_str());\r
- if (g_hLib == NULL)\r
+ do\r
{\r
- b = fs.GetNext(& szSPIName);\r
- continue;\r
- }\r
+ // SPIをロード。\r
+ g_hLib = ::LoadLibrary((szSPIPath + szSPIName).wchar_str());\r
+ if (g_hLib == NULL)\r
+ {\r
+ continue;\r
+ }\r
\r
- // GetPluginInfoを実行。\r
- FARPROC fpProc = ::GetProcAddress(g_hLib, "GetPluginInfo");\r
- char szPluginType[5]; // 種類4bytes + NULL\r
- if (fpProc == NULL\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
- b = fs.GetNext(& szSPIName);\r
- continue;\r
- }\r
+ // GetPluginInfoを実行。\r
+ FARPROC fpProc = ::GetProcAddress(g_hLib, "GetPluginInfo");\r
+ char szPluginType[5]; // 種類4bytes + NULL\r
+ if (fpProc == NULL\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
+ continue;\r
+ }\r
\r
- // 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
- {\r
- // 対応していれば処理を終了。\r
- return TPI_ERROR_SUCCESS;\r
- }\r
+ // 書庫に対応しているかチェック。\r
+ fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
+ if (fpProc == NULL)\r
+ {\r
+ ::FreeLibrary(g_hLib);\r
+ continue;\r
+ }\r
\r
- b = fs.GetNext(& szSPIName);\r
+ if (((BOOL (PASCAL *)(const char *, unsigned long)) fpProc)(_szArcName.ToUTF8(), (unsigned long) buffer))\r
+ {\r
+ // 対応していれば処理を終了。\r
+ return TPI_ERROR_SUCCESS;\r
+ }\r
+ }\r
+ while (fs.GetNext(& szSPIName));\r
}\r
return TPI_ERROR_U_LOAD_LIBRARY;\r
}\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
-int __stdcall CheckArchive\r
-(\r
- const wxString & _szArcName\r
-)\r
-{\r
- FARPROC fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
- if (fpProc == NULL)\r
- {\r
- return TPI_ERROR_U_USE_LIBRARY;\r
- }\r
-\r
- wxFile hFile;\r
- if (! hFile.Exists(_szArcName) || ! hFile.Open(_szArcName, wxFile::read))\r
- {\r
- return TPI_ERROR_IO_ARC_OPEN;\r
- }\r
-\r
- char buffer[2050];\r
- ::ZeroMemory(buffer, sizeof(buffer));\r
- if (hFile.Read(buffer, sizeof(buffer)) == wxInvalidOffset)\r
- {\r
- hFile.Close();\r
- return TPI_ERROR_IO_ARC_READ;\r
- }\r
- hFile.Close();\r
- return ((BOOL (PASCAL *)(const char *, unsigned long)) fpProc)(_szArcName.ToUTF8(), (unsigned long) buffer) ? TPI_ERROR_SUCCESS : TPI_ERROR_D_UNSUPPORTED;\r
-}\r
-\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r