return this->nErrorCode == TPI_ERROR_SUCCESS;\r
}\r
\r
-bool TPIHandle::CheckArchive(const wxString & _szArcName, wxULongLong_t * _llFileCount)\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 &, wxULongLong_t *)) p)(_szArcName, _llFileCount);\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)\r
+bool TPIHandle::OpenArchive(const wxString & _szArcName, wxULongLong_t * _llFileCount)\r
{\r
this->nErrorCode = TPI_ERROR_SUCCESS;\r
GetAPIAddress("OpenArchive", p);\r
- this->nErrorCode = ((int (__stdcall *)(const wxString &, void * *)) p)(_szArcName, & this->archive);\r
+ this->nErrorCode = ((int (__stdcall *)(const wxString &, void * *, wxULongLong_t *)) p)(_szArcName, & this->archive, _llFileCount);\r
return this->nErrorCode == TPI_ERROR_SUCCESS;\r
}\r
\r
public:\r
TPIHandle(void);\r
~TPIHandle(void);\r
- bool InitLibrary(const wxString &, const wxString &, wxULongLong_t);\r
+ bool InitLibrary(const wxString & _szLibName, const wxString & _szArcName, wxULongLong_t _llTypeId = 0);\r
bool FreeLibrary(void);\r
\r
- bool GetPluginInformation(unsigned int, wxULongLong_t, void *);\r
- bool GetFormatInformation(TPI_FORMATINFO *, bool);\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 &, wxULongLong_t *);\r
- bool OpenArchive(const wxString &);\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 *, bool);\r
- bool GetArchiveInformation(TPI_ARCHIVEINFO *);\r
+ bool GetFileInformation(TPI_FILEINFO * _fiInfo, bool _bFirst = false);\r
+ bool GetArchiveInformation(TPI_ARCHIVEINFO * _aiInfo);\r
\r
- bool Command(wxULongLong_t, TPI_SWITCHES *, const wxString &, const wxArrayString &);\r
+ bool Command(wxULongLong_t _eCommand, TPI_SWITCHES * _swInfo, const wxString & _szArcName, const wxArrayString & _szFiles);\r
\r
- bool SetCallbackProc(TPI_PROC);\r
+ bool SetCallbackProc(TPI_PROC _prProc);\r
\r
int nErrorCode;\r
\r
int __stdcall GetFormatInformation\r
(\r
TPI_FORMATINFO * _fiInfo,\r
- bool _bFirst\r
+ bool _bFirst = false\r
);\r
\r
/** プラグインを使用するための初期化を行う。\r
int __stdcall LoadPlugin\r
(\r
const wxString & _szArcName,\r
- wxULongLong_t _nTypeId\r
+ wxULongLong_t _nTypeId = 0\r
);\r
\r
/** プラグインを解放する。\r
*/\r
int __stdcall FreePlugin\r
(\r
- void * _pReserved\r
+ void * _pReserved = NULL\r
);\r
\r
/** プラグインが対応しているファイルかどうか確認する。\r
* @param _szArcName 確認する対象となる書庫名。\r
- * @param _nFileCount 書庫に格納されているファイル数を格納するためのポインタ。情報が不要ならばNULLを指定。\r
* @return エラーコード。\r
*/\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t * _nFileCount\r
+ const wxString & _szArcName\r
);\r
\r
/** 書庫のハンドルを取得する。\r
* @param _szArcName 操作する対象となる書庫名。\r
* @param _hArchive 取得したハンドルを格納するためのポインタ。\r
+ * @param _nFileCount 書庫に格納されているファイル数を格納するためのポインタ。情報が不要ならばNULLを指定。\r
* @return エラーコード。\r
*/\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t * _nFileCount = NULL\r
);\r
\r
/** 書庫のハンドルを解放する。\r
(\r
void * _hArchive,\r
TPI_FILEINFO * _fiInfo,\r
- bool _bFirst\r
+ bool _bFirst = false\r
);\r
\r
/** 書庫の情報を取得する。\r
{\r
// ロード。\r
wxString szLibName = L_DIR_B_LIB + szTPIName;\r
- if (tpi.InitLibrary(szLibName, wxEmptyString, 0))\r
+ if (tpi.InitLibrary(szLibName, wxEmptyString))\r
{\r
// 対応する形式名を取得。\r
TPI_FORMATINFO fiInfo;\r
this->chType->Append(fiInfo.szTypeName);\r
}\r
}\r
- while (tpi.GetFormatInformation(& fiInfo, false));\r
+ while (tpi.GetFormatInformation(& fiInfo));\r
}\r
tpi.FreeLibrary();\r
}\r
// 情報を保存してカウントアップ。\r
this->fileinfo.Add(piInfo.fiInfo);\r
}\r
- while (tpi.GetFileInformation(& piInfo.fiInfo, false));\r
+ while (tpi.GetFileInformation(& piInfo.fiInfo));\r
}\r
\r
// GetFileInformationがエラー終了した場合。\r
do\r
{\r
// 初期化。\r
- if (! tpi.InitLibrary(L_DIR_B_LIB + szTPIName, szFileName, 0))\r
+ if (! tpi.InitLibrary(L_DIR_B_LIB + szTPIName, szFileName))\r
{\r
tpi.FreeLibrary();\r
continue;\r
tpi.SetCallbackProc(TPICallbackProc);\r
\r
// 対応確認。\r
- if (! tpi.CheckArchive(szFileName, llFileCount) || ! tpi.OpenArchive(szFileName))\r
+ if (! tpi.CheckArchive(szFileName) || ! tpi.OpenArchive(szFileName, llFileCount))\r
{\r
tpi.FreeLibrary();\r
* llFileCount = 0;\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString &,\r
- wxULongLong_t *\r
+ const wxString &\r
)\r
{\r
return TPI_ERROR_SUCCESS;\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t * _nFileCount\r
)\r
{\r
// ***.tar.xxxは不便なので弾く。\r
}\r
if (hArc->Open(file, & nMax, openCallback) == S_OK)\r
{\r
+ if (_nFileCount != NULL)\r
+ {\r
+ unsigned int n;\r
+ hArc->GetNumberOfItems(& n);\r
+ * _nFileCount = n;\r
+ }\r
* _hArchive = hArc;\r
return TPI_ERROR_SUCCESS;\r
}\r
nIndexes.Add(fiInfo.nFileId);\r
}\r
}\r
- while (GetFileInformation(hArc, & fiInfo, false) == TPI_ERROR_SUCCESS);\r
+ while (GetFileInformation(hArc, & fiInfo) == TPI_ERROR_SUCCESS);\r
}\r
\r
CArchiveExtractCallback * extractCallbackSpec = new CArchiveExtractCallback(hArc,_swInfo);\r
g_LibInfo.node = * xmlLibrary;\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName, NULL) == TPI_ERROR_SUCCESS)\r
+ if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
{\r
// 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t * _llFileCount\r
+ const wxString & _szArcName\r
)\r
{\r
// Unicodeモードに設定。\r
return TPI_ERROR_D_UNSUPPORTED;\r
}\r
\r
- if (_llFileCount != NULL)\r
+ return TPI_ERROR_SUCCESS;\r
+}\r
+\r
+int __stdcall OpenArchive\r
+(\r
+ const wxString & _szArcName,\r
+ void * * _hArchive,\r
+ wxULongLong_t * _nFileCount\r
+)\r
+{\r
+ // ファイル数を取得。\r
+ FARPROC fpProc;\r
+ if (_nFileCount != NULL)\r
{\r
fpProc = ::GetAPIAddress("GetFileCount", true);\r
if (fpProc == NULL)\r
return TPI_ERROR_U_USE_LIBRARY;\r
}\r
\r
- int nFileCount = g_LibInfo.fUnicode\r
+ int n = g_LibInfo.fUnicode\r
? ((int (__stdcall *)(const wchar_t *)) fpProc)(_szArcName.wchar_str())\r
: ((int (__stdcall *)(const char *)) fpProc)(_szArcName.ToUTF8());\r
- if (nFileCount == -1)\r
+ if (n == -1)\r
{\r
return TPI_ERROR_ARC_UNSUPPORTED;\r
}\r
- * _llFileCount = nFileCount;\r
+ * _nFileCount = n;\r
}\r
\r
- return TPI_ERROR_SUCCESS;\r
-}\r
-\r
-int __stdcall OpenArchive\r
-(\r
- const wxString & _szArcName,\r
- void * * _hArchive\r
-)\r
-{\r
- FARPROC fpProc = ::GetAPIAddress("OpenArchive", true);\r
+ fpProc = ::GetAPIAddress("OpenArchive", true);\r
if (fpProc == NULL)\r
{\r
return TPI_ERROR_U_USE_LIBRARY;\r
g_LibInfo.node = * xmlLibrary;\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName, NULL) == TPI_ERROR_SUCCESS)\r
+ if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
{\r
// 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t *\r
+ const wxString & _szArcName\r
)\r
{\r
wxFileName fnArchive(_szArcName);\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t * _nFileCount\r
)\r
{\r
wxString szOutput;\r
wxArrayString * as = new wxArrayString(::wxStringTokenize(szOutput, wxT("\r\n")));\r
* _hArchive = (void *) as;\r
as->Shrink();\r
+ if (_nFileCount != NULL)\r
+ {\r
+ * _nFileCount = as->GetCount();\r
+ }\r
return as->IsEmpty() ? TPI_ERROR_UNDEFINED : TPI_ERROR_SUCCESS;\r
}\r
\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t *\r
+ const wxString & _szArcName\r
)\r
{\r
FARPROC fpProc = ::GetAPIAddress("IsValidArchive");\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t *\r
)\r
{\r
FARPROC fpProc = ::GetAPIAddress("CreateEgg");\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString &,\r
- wxULongLong_t *\r
+ const wxString &\r
)\r
{\r
return TPI_ERROR_SUCCESS;\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t *\r
)\r
{\r
if (! g_hLib.HasSymbol(wxT("RAROpenArchiveEx")))\r
}\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName, NULL) == TPI_ERROR_SUCCESS)\r
+ if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
{\r
// 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t *\r
+ const wxString & _szArcName\r
)\r
{\r
FARPROC fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t * _nFileCount\r
)\r
{\r
FARPROC fpProc = ::GetProcAddress(g_hLib, "GetArchiveInfo");\r
{\r
return nReturnCode;\r
}\r
-\r
+ if (_nFileCount != NULL)\r
+ {\r
+ * _nFileCount = ::LocalSize(* _hArchive) / sizeof(fileInfo);\r
+ }\r
return * _hArchive == NULL ? TPI_ERROR_IO_ARC_OPEN : nReturnCode;\r
}\r
\r
}\r
\r
// 書庫に対応しているかチェック。\r
- if (CheckArchive(_szArcName, NULL) == TPI_ERROR_SUCCESS)\r
+ if (CheckArchive(_szArcName) == TPI_ERROR_SUCCESS)\r
{\r
// 対応していれば処理を終了。\r
return TPI_ERROR_SUCCESS;\r
\r
int __stdcall CheckArchive\r
(\r
- const wxString & _szArcName,\r
- wxULongLong_t *\r
+ const wxString & _szArcName\r
)\r
{\r
FARPROC fpProc = ::GetProcAddress(g_hLib, "IsSupported");\r
int __stdcall OpenArchive\r
(\r
const wxString & _szArcName,\r
- void * * _hArchive\r
+ void * * _hArchive,\r
+ wxULongLong_t *\r
)\r
{\r
* _hArchive = new wxString(_szArcName);\r