OSDN Git Service

CheckArchiveからnFileCountを削除。
[tpi/lychee.git] / src / plugin / calLibrary / calLibrary.cpp
index 4292a5e..9ee8207 100644 (file)
@@ -49,23 +49,11 @@ struct g_LibInfo
 }      g_LibInfo, g_LibInfoAlt;\r
 \r
 TPI_PROC g_prProc;\r
-bool g_fExistUnicodeMode;\r
 \r
 //******************************************************************************\r
-//    Entry\r
+//    Inside Functions\r
 //******************************************************************************\r
 \r
-BOOL __stdcall DllMain(HMODULE, DWORD fdwReason, void *)\r
-{\r
-       switch (fdwReason)\r
-       {\r
-       case DLL_PROCESS_DETACH:\r
-               ::FreeLibrary(g_LibInfo.hLib);\r
-               break;\r
-       }\r
-       return TRUE;\r
-}\r
-\r
 wxDateTime FileTimeToWxDateTime(FILETIME * pft)\r
 {\r
        FILETIME ftLocal;\r
@@ -92,7 +80,7 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
 \r
        // 構造体を初期化。\r
        TPI_PROCESSINFO piInfo;\r
-       piInfo.uMessage = TPI_MESSAGE_STATUS;\r
+       piInfo.eMessage = TPI_MESSAGE_STATUS;\r
 \r
        if (_lpEis != NULL)\r
        {\r
@@ -106,15 +94,15 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
                                // EXTRACTINGINFOEXW -> TPI_FILEINFO変換。\r
                                piInfo.fiInfo.dwCRC32           = ex->dwCRC;\r
                                piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
-                               piInfo.fiInfo.llPackedSize      = ex->dwCompressedSize;\r
-                               piInfo.fiInfo.llUnpackedSize    = ex->exinfo.dwFileSize;\r
-                               piInfo.fiInfo.uOSType           = ex->uOSType;\r
+                               piInfo.fiInfo.nPackedSize      = ex->dwCompressedSize;\r
+                               piInfo.fiInfo.nUnpackedSize    = ex->exinfo.dwFileSize;\r
+                               piInfo.fiInfo.eOSType           = ex->eOSType;\r
                                piInfo.fiInfo.wCompressRatio    = ex->wRatio;\r
                                piInfo.fiInfo.szStoredName      = WC2String(ex->exinfo.szSourceFileName);\r
                                piInfo.fiInfo.szMethod          = WC2String(ex->szMode);\r
 \r
                                // EXTRACTINGINFOEXW -> TPI_PROCESSINFO変換。\r
-                               piInfo.llProcessedSize          = ex->exinfo.dwWriteSize;\r
+                               piInfo.nProcessedSize           = ex->exinfo.dwWriteSize;\r
                                piInfo.fnDestination            = wxFileName(WC2String(ex->exinfo.szDestFileName));\r
                        }\r
                        else\r
@@ -125,15 +113,15 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
                                // EXTRACTINGINFOEX -> TPI_FILEINFO変換。\r
                                piInfo.fiInfo.dwCRC32           = ex->dwCRC;\r
                                piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
-                               piInfo.fiInfo.llPackedSize      = ex->dwCompressedSize;\r
-                               piInfo.fiInfo.llUnpackedSize    = ex->exinfo.dwFileSize;\r
-                               piInfo.fiInfo.uOSType           = ex->uOSType;\r
+                               piInfo.fiInfo.nPackedSize      = ex->dwCompressedSize;\r
+                               piInfo.fiInfo.nUnpackedSize    = ex->exinfo.dwFileSize;\r
+                               piInfo.fiInfo.eOSType           = ex->eOSType;\r
                                piInfo.fiInfo.wCompressRatio    = ex->wRatio;\r
                                piInfo.fiInfo.szStoredName      = UTF82String(ex->exinfo.szSourceFileName);\r
                                piInfo.fiInfo.szMethod          = UTF82String(ex->szMode);\r
 \r
                                // EXTRACTINGINFOEX -> TPI_PROCESSINFO変換。\r
-                               piInfo.llProcessedSize          = ex->exinfo.dwWriteSize;\r
+                               piInfo.nProcessedSize           = ex->exinfo.dwWriteSize;\r
                                piInfo.fnDestination            = wxFileName(UTF82String(ex->exinfo.szDestFileName));\r
                        }\r
                        piInfo.fiInfo.dwAttribute       = 0;\r
@@ -151,15 +139,15 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
                                piInfo.fiInfo.tmAccess          = FileTimeToWxDateTime(& ex->ftAccessTime);\r
                                piInfo.fiInfo.tmCreate          = FileTimeToWxDateTime(& ex->ftCreateTime);\r
                                piInfo.fiInfo.tmModified        = FileTimeToWxDateTime(& ex->ftWriteTime);\r
-                               piInfo.fiInfo.llPackedSize      = ex->llCompressedSize;\r
-                               piInfo.fiInfo.llUnpackedSize    = ex->llFileSize;\r
-                               piInfo.fiInfo.uOSType           = ex->uOSType;\r
+                               piInfo.fiInfo.nPackedSize       = ex->llCompressedSize;\r
+                               piInfo.fiInfo.nUnpackedSize     = ex->llFileSize;\r
+                               piInfo.fiInfo.eOSType           = ex->eOSType;\r
                                piInfo.fiInfo.wCompressRatio    = ex->wRatio;\r
                                piInfo.fiInfo.szStoredName      = WC2String(ex->exinfo.szSourceFileName);\r
                                piInfo.fiInfo.szMethod          = WC2String(ex->szMode);\r
 \r
                                // EXTRACTINGINFOEX64 -> TPI_PROCESSINFO変換。\r
-                               piInfo.llProcessedSize          = ex->llWriteSize;\r
+                               piInfo.nProcessedSize           = ex->llWriteSize;\r
                                piInfo.fnDestination            = wxFileName(WC2String(ex->exinfo.szDestFileName));\r
                        }\r
                        else\r
@@ -173,15 +161,15 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
                                piInfo.fiInfo.tmAccess          = FileTimeToWxDateTime(& ex->ftAccessTime);\r
                                piInfo.fiInfo.tmCreate          = FileTimeToWxDateTime(& ex->ftCreateTime);\r
                                piInfo.fiInfo.tmModified        = FileTimeToWxDateTime(& ex->ftWriteTime);\r
-                               piInfo.fiInfo.llPackedSize      = ex->llCompressedSize;\r
-                               piInfo.fiInfo.llUnpackedSize    = ex->llFileSize;\r
-                               piInfo.fiInfo.uOSType           = ex->uOSType;\r
+                               piInfo.fiInfo.nPackedSize       = ex->llCompressedSize;\r
+                               piInfo.fiInfo.nUnpackedSize     = ex->llFileSize;\r
+                               piInfo.fiInfo.eOSType           = ex->eOSType;\r
                                piInfo.fiInfo.wCompressRatio    = ex->wRatio;\r
                                piInfo.fiInfo.szStoredName      = UTF82String(ex->exinfo.szSourceFileName);\r
                                piInfo.fiInfo.szMethod          = UTF82String(ex->szMode);\r
 \r
                                // EXTRACTINGINFOEX64 -> TPI_PROCESSINFO変換。\r
-                               piInfo.llProcessedSize          = ex->llWriteSize;\r
+                               piInfo.nProcessedSize           = ex->llWriteSize;\r
                                piInfo.fnDestination            = wxFileName(UTF82String(ex->exinfo.szDestFileName));\r
                        }\r
                }\r
@@ -193,35 +181,35 @@ BOOL __stdcall CallbackProc(HWND, unsigned int _uMsg, unsigned int _uState, void
        {\r
        case ARCEXTRACT_OPEN:\r
                // 当該書庫の処理を開始。\r
-               piInfo.uStatus = TPI_STATUS_OPENARCHIVE;\r
+               piInfo.eStatus = TPI_STATUS_OPENARCHIVE;\r
                break;\r
        case 5:\r
                // 当該ファイルの検索中。\r
-               piInfo.uStatus = TPI_STATUS_SEEKFILE;\r
+               piInfo.eStatus = TPI_STATUS_SEEKFILE;\r
                break;\r
        case ARCEXTRACT_BEGIN:\r
                // 当該ファイルの処理を開始。\r
-               piInfo.uStatus = TPI_STATUS_BEGINPROCESS;\r
+               piInfo.eStatus = TPI_STATUS_BEGINPROCESS;\r
                break;\r
        case ARCEXTRACT_INPROCESS:\r
                // 当該ファイルの処理を実行中。\r
-               piInfo.uStatus = TPI_STATUS_INPROCESS;\r
+               piInfo.eStatus = TPI_STATUS_INPROCESS;\r
                break;\r
        case 6:\r
                // 当該ファイルの処理を終了。\r
-               piInfo.uStatus = TPI_STATUS_ENDPROCESS;\r
+               piInfo.eStatus = TPI_STATUS_ENDPROCESS;\r
                break;\r
        case 7:\r
                // 当該書庫の検査中。\r
-               piInfo.uStatus = TPI_STATUS_TESTARCHIVE;\r
+               piInfo.eStatus = TPI_STATUS_TESTARCHIVE;\r
                break;\r
        case ARCEXTRACT_COPY:\r
                // 当該書庫の書き戻し中。\r
-               piInfo.uStatus = TPI_STATUS_COPYARCHIVE;\r
+               piInfo.eStatus = TPI_STATUS_COPYARCHIVE;\r
                break;\r
        case ARCEXTRACT_END:\r
                // 当該書庫の処理を終了。\r
-               piInfo.uStatus = TPI_STATUS_CLOSEARCHIVE;\r
+               piInfo.eStatus = TPI_STATUS_CLOSEARCHIVE;\r
                break;\r
        }\r
 \r
@@ -393,7 +381,7 @@ extern "C"
 int __stdcall GetPluginInformation\r
 (\r
        unsigned int _uInfoId,\r
-       wxULongLong,\r
+       wxULongLong_t,\r
        void * _pPtr\r
 )\r
 {\r
@@ -418,7 +406,7 @@ int __stdcall GetPluginInformation
 \r
 int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)\r
 {\r
-       static unsigned int s_uFileId;\r
+       static wxULongLong_t s_nFileId;\r
        wxStandardPaths p;\r
        wxXmlDocument config(wxPathOnly(p.GetExecutablePath()) + wxT("/lib/calLibrary.xml"));\r
        // 一気に先頭のライブラリの情報を取得。\r
@@ -427,11 +415,11 @@ int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)
        if (_bFirst)\r
        {\r
                // xml解析開始。\r
-               s_uFileId = 0;\r
+               s_nFileId = 0;\r
        }\r
        else\r
        {\r
-               for (unsigned int i = 0; i < s_uFileId && xmlLibrary != NULL; i++)\r
+               for (wxULongLong_t i = 0; i < s_nFileId && xmlLibrary != NULL; i++)\r
                {\r
                        xmlLibrary = xmlLibrary->GetNext();\r
                }\r
@@ -443,7 +431,7 @@ int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)
                return TPI_ERROR_S_ENDOFDATA;\r
        }\r
 \r
-       MakeFormatInfo(wxT("calLibrary"), _fiInfo, xmlLibrary, s_uFileId++);\r
+       MakeFormatInfo(wxT("calLibrary"), _fiInfo, xmlLibrary, s_nFileId++);\r
 \r
        return TPI_ERROR_SUCCESS;\r
 }\r
@@ -451,7 +439,7 @@ int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)
 int __stdcall LoadPlugin\r
 (\r
        const wxString & _szArcName,\r
-       wxULongLong _llTypeId\r
+       wxULongLong_t _llTypeId\r
 )\r
 {\r
        // xml解析開始。\r
@@ -466,6 +454,7 @@ int __stdcall LoadPlugin
 \r
        // 対象が存在するならば対応するライブラリを調査、\r
        // 対象が存在しないならば指示されたライブラリをロード。\r
+       ::RemoveCwdFromSearchPath();\r
        if (! ::wxFileExists(_szArcName))\r
        {\r
                // 適当な位置まで移動。\r
@@ -478,21 +467,21 @@ int __stdcall LoadPlugin
                        // xml文法エラー。\r
                        return TPI_ERROR_UNDEFINED;\r
                }\r
-               g_LibInfo.node = * xmlLibrary;\r
 \r
                // ライブラリをロード。\r
-               g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name"), wxEmptyString).c_str());\r
+               g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).c_str());\r
                if (g_LibInfo.hLib == NULL)\r
                {\r
                        return TPI_ERROR_U_LOAD_LIBRARY;\r
                }\r
-               g_LibInfo.szPrefix = xmlLibrary->GetPropVal(wxT("prefix"), wxEmptyString);\r
-               g_LibInfo.fUnicode = xmlLibrary->GetPropVal(wxT("unicode"), wxT("0")) == wxT("1");\r
+               g_LibInfo.szPrefix = xmlLibrary->GetAttribute(wxT("prefix"), wxEmptyString);\r
+               g_LibInfo.fUnicode = xmlLibrary->GetAttribute(wxT("unicode"), wxT("0")) == wxT("1");\r
+               g_LibInfo.node = * xmlLibrary;\r
 \r
                // 代替ライブラリもロード。ロードできなくてもエラーにはしない。\r
-               g_LibInfoAlt.szPrefix = xmlLibrary->GetPropVal(wxT("prefix-alt"), wxEmptyString);\r
-               g_LibInfoAlt.fUnicode = xmlLibrary->GetPropVal(wxT("unicode-alt"), wxT("0")) == wxT("1");\r
-               g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name-alt"), wxEmptyString).c_str());\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
 \r
                return TPI_ERROR_SUCCESS;\r
        }\r
@@ -501,23 +490,23 @@ int __stdcall LoadPlugin
        for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
        {\r
                // ライブラリをロード。\r
-               g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name"), wxEmptyString).c_str());\r
+               g_LibInfo.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetAttribute(wxT("name"), wxEmptyString).c_str());\r
                if (g_LibInfo.hLib == NULL)\r
                {\r
                        xmlLibrary = xmlLibrary->GetNext();\r
                        continue;\r
                }\r
-               g_LibInfo.szPrefix = xmlLibrary->GetPropVal(wxT("prefix"), wxEmptyString);\r
-               g_LibInfo.fUnicode = xmlLibrary->GetPropVal(wxT("unicode"), wxT("0")) == wxT("1");\r
+               g_LibInfo.szPrefix = xmlLibrary->GetAttribute(wxT("prefix"), wxEmptyString);\r
+               g_LibInfo.fUnicode = xmlLibrary->GetAttribute(wxT("unicode"), wxT("0")) == wxT("1");\r
 \r
                // 代替ライブラリもロード。ロードできなくてもエラーにはしない。\r
-               g_LibInfoAlt.szPrefix = xmlLibrary->GetPropVal(wxT("prefix-alt"), wxEmptyString);\r
-               g_LibInfoAlt.fUnicode = xmlLibrary->GetPropVal(wxT("unicode-alt"), wxT("0")) == wxT("1");\r
-               g_LibInfoAlt.hLib = ::LoadLibrary((const WCHAR *) xmlLibrary->GetPropVal(wxT("name-alt"), wxEmptyString).c_str());\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_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
@@ -542,14 +531,12 @@ int __stdcall FreePlugin
 \r
 int __stdcall CheckArchive\r
 (\r
-       const wxString & _szArcName,\r
-       wxULongLong * _llFileCount\r
+       const wxString & _szArcName\r
 )\r
 {\r
        // Unicodeモードに設定。\r
        FARPROC fpProc = ::GetAPIAddress("SetUnicodeMode", false);\r
-       g_fExistUnicodeMode = fpProc != NULL;\r
-       if (g_fExistUnicodeMode)\r
+       if (fpProc != NULL)\r
        {\r
                ((BOOL (__stdcall *)(BOOL)) fpProc)(TRUE);\r
        }\r
@@ -568,7 +555,19 @@ int __stdcall CheckArchive
                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
@@ -576,26 +575,17 @@ int __stdcall CheckArchive
                        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
@@ -623,7 +613,7 @@ int __stdcall GetFileInformation
        bool _bFirst\r
 )\r
 {\r
-       static unsigned int s_uFileId;\r
+       static wxULongLong_t s_nFileId;\r
        static FARPROC fpNext, fpAttr;\r
        int nErrorCode;\r
        INDIVIDUALINFO iiInfo;\r
@@ -633,7 +623,7 @@ int __stdcall GetFileInformation
 \r
        if (_bFirst)\r
        {\r
-               s_uFileId = 0;\r
+               s_nFileId = 0;\r
                FARPROC fpProc = ::GetAPIAddress("FindFirst", true);\r
                fpNext = ::GetAPIAddress("FindNext", true);\r
                fpAttr = ::GetAPIAddress("GetAttribute", false);\r
@@ -662,7 +652,7 @@ int __stdcall GetFileInformation
        if (nErrorCode == TPI_ERROR_SUCCESS)\r
        {\r
                _fiInfo->dwAttribute = (fpAttr == NULL) ? 0 : ((int (__stdcall *)(void *)) fpAttr)(_hArchive);\r
-               if ((signed) _fiInfo->dwAttribute == -1)\r
+               if (_fiInfo->dwAttribute == (unsigned) -1)\r
                {\r
                        _fiInfo->dwAttribute = 0;\r
                }\r
@@ -670,9 +660,9 @@ int __stdcall GetFileInformation
                if (g_LibInfo.fUnicode)\r
                {\r
                        _fiInfo->dwCRC32        = iiInfoW.dwCRC;\r
-                       _fiInfo->uOSType        = iiInfoW.uOSType;\r
-                       _fiInfo->llPackedSize   = iiInfoW.dwCompressedSize;\r
-                       _fiInfo->llUnpackedSize = iiInfoW.dwOriginalSize;\r
+                       _fiInfo->eOSType        = iiInfoW.eOSType;\r
+                       _fiInfo->nPackedSize    = iiInfoW.dwCompressedSize;\r
+                       _fiInfo->nUnpackedSize  = iiInfoW.dwOriginalSize;\r
                        _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfoW.wTime, iiInfoW.wDate));\r
                        _fiInfo->szStoredName   = WC2String(iiInfoW.szFileName);\r
                        _fiInfo->szMethod       = WC2String(iiInfoW.szMode);\r
@@ -681,15 +671,15 @@ int __stdcall GetFileInformation
                else\r
                {\r
                        _fiInfo->dwCRC32        = iiInfo.dwCRC;\r
-                       _fiInfo->uOSType        = iiInfo.uOSType;\r
-                       _fiInfo->llPackedSize   = iiInfo.dwCompressedSize;\r
-                       _fiInfo->llUnpackedSize = iiInfo.dwOriginalSize;\r
+                       _fiInfo->eOSType        = iiInfo.eOSType;\r
+                       _fiInfo->nPackedSize    = iiInfo.dwCompressedSize;\r
+                       _fiInfo->nUnpackedSize  = iiInfo.dwOriginalSize;\r
                        _fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfo.wTime, iiInfo.wDate));\r
                        _fiInfo->szStoredName   = UTF82String(iiInfo.szFileName);\r
                        _fiInfo->szMethod       = UTF82String(iiInfo.szMode);\r
                        _fiInfo->wCompressRatio = iiInfo.wRatio;\r
                }\r
-               _fiInfo->llFileId       = s_uFileId++;\r
+               _fiInfo->nFileId        = s_nFileId++;\r
                _fiInfo->fnFileName     = wxFileName(_fiInfo->szStoredName);\r
 //             _fiInfo->ftAccessTime   = 0;\r
 //             _fiInfo->ftCreateTime   = 0;\r
@@ -712,12 +702,14 @@ int __stdcall GetArchiveInformation
                if (g_LibInfo.fUnicode)\r
                {\r
                        wchar_t sz[2049];\r
+                       memset(sz, 0, sizeof(sz));\r
                        ((int (__stdcall *)(void *, wchar_t *, const int)) fpProc)(_hArchive, sz, 2048);\r
                        s = WC2String(sz);\r
                }\r
                else\r
                {\r
                        char sz[2049];\r
+                       memset(sz, 0, sizeof(sz));\r
                        ((int (__stdcall *)(void *, char *, const int)) fpProc)(_hArchive, sz, 2048);\r
                        s = UTF82String(sz);\r
                }\r
@@ -727,56 +719,56 @@ int __stdcall GetArchiveInformation
        fpProc = ::GetAPIAddress("GetArcFileSizeEx", false);\r
        if (fpProc != NULL)\r
        {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llFileSize);\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nFileSize);\r
        }\r
        else\r
        {\r
                fpProc = ::GetAPIAddress("GetArcFileSize", false);\r
                if (fpProc != NULL)\r
                {\r
-                       _aiInfo->llFileSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
+                       _aiInfo->nFileSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
                }\r
        }\r
 \r
        fpProc = ::GetAPIAddress("GetArcOriginalSizeEx", false);\r
        if (fpProc != NULL)\r
        {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llUnpackedSize);\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nUnpackedSize);\r
        }\r
        else\r
        {\r
                fpProc = ::GetAPIAddress("GetArcOriginalSize", false);\r
                if (fpProc != NULL)\r
                {\r
-                       _aiInfo->llUnpackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
+                       _aiInfo->nUnpackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
                }\r
        }\r
 \r
        fpProc = ::GetAPIAddress("GetArcCompressedSizeEx", false);\r
        if (fpProc != NULL)\r
        {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llPackedSize);\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nPackedSize);\r
        }\r
        else\r
        {\r
                fpProc = ::GetAPIAddress("GetArcCompressedSize", false);\r
                if (fpProc != NULL)\r
                {\r
-                       _aiInfo->llPackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
+                       _aiInfo->nPackedSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
                }\r
        }\r
 \r
        fpProc = ::GetAPIAddress("GetArcReadSizeEx", false);\r
        if (fpProc != NULL)\r
        {\r
-               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->llReadSize);\r
+               ((BOOL (__stdcall *)(void *, LONGLONG *)) fpProc)(_hArchive, (LONGLONG *) & _aiInfo->nReadSize);\r
        }\r
        else\r
        {\r
                fpProc = ::GetAPIAddress("GetArcReadSize", false);\r
                if (fpProc != NULL)\r
                {\r
-                       _aiInfo->llReadSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
+                       _aiInfo->nReadSize = ((DWORD (__stdcall *)(void *)) fpProc)(_hArchive);\r
                }\r
        }\r
 \r
@@ -811,19 +803,11 @@ int __stdcall GetArchiveInformation
        fpProc = ::GetAPIAddress("GetArcOSType", false);\r
        if (fpProc != NULL)\r
        {\r
-               _aiInfo->uOSType = ((UINT (__stdcall *)(void *)) fpProc)(_hArchive);\r
+               _aiInfo->eOSType = ((UINT (__stdcall *)(void *)) fpProc)(_hArchive);\r
        }\r
 \r
        fpProc = ::GetAPIAddress("IsSFXFile", false);\r
-       if (fpProc != NULL)\r
-       {\r
-               _aiInfo->nSFXType = ((int (__stdcall *)(void *)) fpProc)(_hArchive);\r
-       }\r
-       if (fpProc == NULL || _aiInfo->nSFXType < 0)\r
-       {\r
-               // エラーの場合はとりあえず通常の書庫とみなす。\r
-               _aiInfo->nSFXType = 0;\r
-       }\r
+       _aiInfo->fSFX = fpProc != NULL && ((int (__stdcall *)(void *)) fpProc)(_hArchive) > 0;\r
 \r
        // 形式に関する情報を取得。\r
        MakeFormatInfo(wxT("calLibrary"), & _aiInfo->fiInfo, & g_LibInfo.node, 0);\r
@@ -833,40 +817,40 @@ int __stdcall GetArchiveInformation
 \r
 int __stdcall Command\r
 (\r
-       unsigned int _uCommand,\r
+       wxULongLong_t _eCommand,\r
        TPI_SWITCHES * _swInfo,\r
        const wxString & _szArcName,\r
        const wxArrayString & _szFiles\r
 )\r
 {\r
-       // Iniからコマンドラインを取得。\r
+       // xmlからコマンドラインを取得。\r
        wxString szPath, szCommandLine;\r
 \r
        // APIアドレス取得。\r
        g_LibInfoAlt.fRunning\r
-               = g_LibInfo.node.GetPropVal(\r
-                       _uCommand == TPI_COMMAND_CREATE  ? wxT("create-alt") :\r
-                       _uCommand == TPI_COMMAND_ADD     ? wxT("add-alt") :\r
-                       _uCommand == TPI_COMMAND_EXTRACT ? wxT("extract-alt") : \r
-                       _uCommand == TPI_COMMAND_DELETE  ? wxT("delete-alt") : \r
-                       _uCommand == TPI_COMMAND_UPDATE  ? wxT("update-alt") : \r
-                       _uCommand == TPI_COMMAND_TEST    ? wxT("test-alt") : \r
-                       _uCommand == TPI_COMMAND_REPAIR  ? wxT("repair-alt") : \r
-                       _uCommand == TPI_COMMAND_MOVE    ? wxT("move-alt") : \r
-                       _uCommand == TPI_COMMAND_SFX     ? wxT("sfx-alt") : \r
-                       _uCommand == TPI_COMMAND_UNSFX   ? wxT("unsfx-alt") : wxEmptyString, & szCommandLine);\r
+               = g_LibInfo.node.GetAttribute(\r
+                       _eCommand == TPI_COMMAND_CREATE  ? wxT("create-alt") :\r
+                       _eCommand == TPI_COMMAND_ADD     ? wxT("add-alt") :\r
+                       _eCommand == TPI_COMMAND_EXTRACT ? wxT("extract-alt") : \r
+                       _eCommand == TPI_COMMAND_DELETE  ? wxT("delete-alt") : \r
+                       _eCommand == TPI_COMMAND_UPDATE  ? wxT("update-alt") : \r
+                       _eCommand == TPI_COMMAND_TEST    ? wxT("test-alt") : \r
+                       _eCommand == TPI_COMMAND_REPAIR  ? wxT("repair-alt") : \r
+                       _eCommand == TPI_COMMAND_MOVE    ? wxT("move-alt") : \r
+                       _eCommand == TPI_COMMAND_SFX     ? wxT("sfx-alt") : \r
+                       _eCommand == TPI_COMMAND_UNSFX   ? wxT("unsfx-alt") : wxEmptyString, & szCommandLine);\r
        g_LibInfo.fRunning\r
-               = g_LibInfo.node.GetPropVal(\r
-                       _uCommand == TPI_COMMAND_CREATE  ? wxT("create") :\r
-                       _uCommand == TPI_COMMAND_ADD     ? wxT("add") :\r
-                       _uCommand == TPI_COMMAND_EXTRACT ? wxT("extract") : \r
-                       _uCommand == TPI_COMMAND_DELETE  ? wxT("delete") : \r
-                       _uCommand == TPI_COMMAND_UPDATE  ? wxT("update") : \r
-                       _uCommand == TPI_COMMAND_TEST    ? wxT("test") : \r
-                       _uCommand == TPI_COMMAND_REPAIR  ? wxT("repair") : \r
-                       _uCommand == TPI_COMMAND_MOVE    ? wxT("move") : \r
-                       _uCommand == TPI_COMMAND_SFX     ? wxT("sfx") : \r
-                       _uCommand == TPI_COMMAND_UNSFX   ? wxT("unsfx") : wxEmptyString, & szCommandLine);\r
+               = g_LibInfo.node.GetAttribute(\r
+                       _eCommand == TPI_COMMAND_CREATE  ? wxT("create") :\r
+                       _eCommand == TPI_COMMAND_ADD     ? wxT("add") :\r
+                       _eCommand == TPI_COMMAND_EXTRACT ? wxT("extract") : \r
+                       _eCommand == TPI_COMMAND_DELETE  ? wxT("delete") : \r
+                       _eCommand == TPI_COMMAND_UPDATE  ? wxT("update") : \r
+                       _eCommand == TPI_COMMAND_TEST    ? wxT("test") : \r
+                       _eCommand == TPI_COMMAND_REPAIR  ? wxT("repair") : \r
+                       _eCommand == TPI_COMMAND_MOVE    ? wxT("move") : \r
+                       _eCommand == TPI_COMMAND_SFX     ? wxT("sfx") : \r
+                       _eCommand == TPI_COMMAND_UNSFX   ? wxT("unsfx") : wxEmptyString, & szCommandLine);\r
 \r
        FARPROC fpProc =\r
                g_LibInfo.fRunning    ? ::GetAPIAddress(   "", true) :\r
@@ -878,7 +862,9 @@ int __stdcall Command
 \r
        // コマンドライン・レスポンスファイル作成。\r
        wxString\r
-               szResponceFileName = MakeResponceFile(_szFiles, g_LibInfo.node.GetPropVal(wxT("quote-resp"), wxT("1")) == wxT("1")),\r
+               szResponceFileName = g_LibInfo.fRunning ?\r
+                       MakeResponceFile(_szFiles, g_LibInfo.node.GetAttribute(   wxT("quote-resp"), wxT("1")) == wxT("1"), g_LibInfo.fUnicode) :\r
+                       MakeResponceFile(_szFiles, g_LibInfoAlt.node.GetAttribute(wxT("quote-resp"), wxT("1")) == wxT("1"), g_LibInfoAlt.fUnicode),\r
                szCommandLineSend  = MakeCommandLineSend(szCommandLine, _szArcName, _swInfo, _szFiles, szResponceFileName);\r
 \r
        // コマンドライン実行。\r
@@ -902,7 +888,7 @@ int __stdcall Command
 \r
        if (nErrorCode != 0)\r
        {\r
-               ::wxLogError(L"Error :\n%x\n\nCommandLine:\n%s\n\nOutput:\n%s", nErrorCode, szCommandLineSend.c_str(), szOutput.c_str());\r
+               wxLogError(L"Error :\n%x\n\nCommandLine:\n%s\n\nOutput:\n%s", nErrorCode, szCommandLineSend.c_str(), szOutput.c_str());\r
        }\r
        return ErrorCodeConvert(nErrorCode);\r
 }\r