From 8d62e74a6e697819606aa173eaa6ba303303bfa1 Mon Sep 17 00:00:00 2001 From: sirakaba Date: Sat, 3 Oct 2009 02:39:25 +0000 Subject: [PATCH] =?utf8?q?GetFileInformation=E3=81=A7XML=E3=81=8B=E3=82=89?= =?utf8?q?=E3=81=AE=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E5=9B=9E=E6=95=B0?= =?utf8?q?=E3=82=92=E6=B8=9B=E3=82=89=E3=81=97=E3=81=A6=E9=AB=98=E9=80=9F?= =?utf8?q?=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@10 9df91469-1e22-0410-86e7-ea8537beb833 --- src/plugin/cuiWrapper/cuiWrapper.cpp | 84 ++++++++++--------- src/plugin/cuiWrapper/cuiWrapper.h | 156 ++--------------------------------- 2 files changed, 50 insertions(+), 190 deletions(-) diff --git a/src/plugin/cuiWrapper/cuiWrapper.cpp b/src/plugin/cuiWrapper/cuiWrapper.cpp index 85b39d5..da0327d 100644 --- a/src/plugin/cuiWrapper/cuiWrapper.cpp +++ b/src/plugin/cuiWrapper/cuiWrapper.cpp @@ -170,6 +170,29 @@ DWORD myExecute(wxString szCommandLine, wxString * szOutput, wxString szCwd, boo #endif } +PosInfo MakePosInfo(wxString szPrefix) +{ + PosInfo pi; + g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-s"), wxEmptyString).ToULong(& pi.nStart); + g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-c"), wxEmptyString).ToULong(& pi.nCount); + g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-l"), wxT("0")).ToULong(& pi.nLine); + return pi; +} + +wxULongLong GetSize(PosInfo & pi, size_t uCurrent, wxArrayString & as) +{ + if (pi.nStart == 0 && pi.nCount == 0) + { + return 0; + } + + wxULongLong_t nTemp; + size_t nPos = uCurrent + pi.nLine; + wxString sz = pi.nCount == 0 ? as[nPos].Mid(pi.nStart) : as[nPos].Mid(pi.nStart, pi.nCount); + sz.ToULongLong(& nTemp); + return nTemp; +} + //****************************************************************************** // Functions //****************************************************************************** @@ -385,10 +408,14 @@ int __stdcall GetFileInformation } wxArrayString asOutput = * (wxArrayString *) _hArchive; - wxString szStartLine = g_LibInfo.node.GetPropVal(wxT("list-line-s"), wxEmptyString); + // XML‚©‚ç‚̓ǂݍž‚݂͏‰‰ñ‚ɍs‚¤B + static wxString szEndLine, szDateFormat; + static unsigned long nProcessPerLine; + static PosInfo piFName, piPSize, piUSize, piDate; if (_bFirst) { s_llFileID = 0; + wxString szStartLine = g_LibInfo.node.GetPropVal(wxT("list-line-s"), wxEmptyString); if (! szStartLine.IsEmpty()) { for (s_uCurrentLine = 0; s_uCurrentLine < asOutput.Count(); s_uCurrentLine++) @@ -401,6 +428,15 @@ int __stdcall GetFileInformation } } } + + // ‰ŠúÝ’èB + g_LibInfo.node.GetPropVal(wxT("list-line-c"), wxT("1")).ToULong(& nProcessPerLine); + szEndLine = g_LibInfo.node.GetPropVal(wxT("list-line-e"), szStartLine); + szDateFormat = g_LibInfo.node.GetPropVal(wxT("list-date-f"), wxDefaultDateTimeFormat); + piFName = MakePosInfo(wxT("fname")); + piPSize = MakePosInfo(wxT("psize")); + piUSize = MakePosInfo(wxT("usize")); + piDate = MakePosInfo(wxT("date")); } if (s_uCurrentLine >= asOutput.Count()) @@ -410,59 +446,29 @@ int __stdcall GetFileInformation } // ÅIs‚©‚Ç‚¤‚©Šm”FB - if (asOutput[s_uCurrentLine] == g_LibInfo.node.GetPropVal(wxT("list-line-e"), szStartLine)) + if (asOutput[s_uCurrentLine] == szEndLine) { return TPI_ERROR_UNDEFINED; } // ƒtƒ@ƒCƒ‹–¼‚ðŽæ“¾B - unsigned long nStartPos = 0, nEndPos = 0, nLine = 0; - g_LibInfo.node.GetPropVal(wxT("list-fname-s"), wxEmptyString).ToULong(& nStartPos); - g_LibInfo.node.GetPropVal(wxT("list-fname-c"), wxEmptyString).ToULong(& nEndPos); - g_LibInfo.node.GetPropVal(wxT("list-fname-l"), wxT("0")).ToULong(& nLine); - _fiInfo->szStoredName = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos); + _fiInfo->szStoredName = piFName.nCount == 0 ? asOutput[s_uCurrentLine + piFName.nLine].Mid(piFName.nStart) : asOutput[s_uCurrentLine + piFName.nLine].Mid(piFName.nStart, piFName.nCount); _fiInfo->szStoredName.Trim(); _fiInfo->fnFileName = wxFileName::wxFileName(_fiInfo->szStoredName); - // ˆ³kŒãƒTƒCƒYŽæ“¾B - wxULongLong_t nTemp; - nStartPos = 0, nEndPos = 0; - g_LibInfo.node.GetPropVal(wxT("list-psize-s"), wxEmptyString).ToULong(& nStartPos); - g_LibInfo.node.GetPropVal(wxT("list-psize-c"), wxEmptyString).ToULong(& nEndPos); - g_LibInfo.node.GetPropVal(wxT("list-psize-l"), wxT("0")).ToULong(& nLine); - if (nStartPos != 0 || nEndPos != 0) - { - wxString sz = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos); - sz.ToULongLong(& nTemp); - _fiInfo->llPackedSize = nTemp; - } - - // ˆ³k‘OƒTƒCƒYŽæ“¾B - nStartPos = 0, nEndPos = 0; - g_LibInfo.node.GetPropVal(wxT("list-usize-s"), wxEmptyString).ToULong(& nStartPos); - g_LibInfo.node.GetPropVal(wxT("list-usize-c"), wxEmptyString).ToULong(& nEndPos); - g_LibInfo.node.GetPropVal(wxT("list-usize-l"), wxT("0")).ToULong(& nLine); - if (nStartPos != 0 || nEndPos != 0) - { - wxString sz = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos); - sz.ToULongLong(& nTemp); - _fiInfo->llUnpackedSize = nTemp; - } + // ƒTƒCƒYŽæ“¾B + _fiInfo->llPackedSize = GetSize(piPSize, s_uCurrentLine, asOutput); + _fiInfo->llUnpackedSize = GetSize(piUSize, s_uCurrentLine, asOutput); // XVŽžŽæ“¾B - nStartPos = 0, nEndPos = 0; - g_LibInfo.node.GetPropVal(wxT("list-date-s"), wxEmptyString).ToULong(& nStartPos); - g_LibInfo.node.GetPropVal(wxT("list-date-c"), wxEmptyString).ToULong(& nEndPos); - g_LibInfo.node.GetPropVal(wxT("list-date-l"), wxT("0")).ToULong(& nLine); - if (nStartPos != 0 || nEndPos != 0) + if (piDate.nStart != 0 || piDate.nCount != 0) { - _fiInfo->tmModified.ParseFormat(nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos), g_LibInfo.node.GetPropVal(wxT("list-date-f"), wxDefaultDateTimeFormat)); + _fiInfo->tmModified.ParseFormat(piDate.nCount == 0 ? asOutput[s_uCurrentLine + piDate.nLine].Mid(piDate.nStart) : asOutput[s_uCurrentLine + piDate.nLine].Mid(piDate.nStart, piDate.nCount), szDateFormat); } // ÅŒã‚ÉŽŸ‚̍s‚֐i‚ß‚Ä‚¨‚­B _fiInfo->llFileID = s_llFileID++; - g_LibInfo.node.GetPropVal(wxT("list-line-c"), wxT("1")).ToULong(& nStartPos); - s_uCurrentLine += nStartPos; + s_uCurrentLine += nProcessPerLine; return TPI_ERROR_SUCCESS; } diff --git a/src/plugin/cuiWrapper/cuiWrapper.h b/src/plugin/cuiWrapper/cuiWrapper.h index 0e0a67a..4da3c4e 100644 --- a/src/plugin/cuiWrapper/cuiWrapper.h +++ b/src/plugin/cuiWrapper/cuiWrapper.h @@ -23,159 +23,13 @@ // Defines //****************************************************************************** -#ifndef FNAME_MAX32 -#define FNAME_MAX32 512 -#endif - -// Window Message -#define WM_ARCEXTRACT wxT("wm_arcextract") -#define ARCEXTRACT_BEGIN 0 -#define ARCEXTRACT_INPROCESS 1 -#define ARCEXTRACT_END 2 -#define ARCEXTRACT_OPEN 3 -#define ARCEXTRACT_COPY 4 - -// Warning Code -#ifndef ERROR_START -#define ERROR_START 0x8000 -#define ERROR_DISK_SPACE 0x8005 -#define ERROR_READ_ONLY 0x8006 -#define ERROR_USER_SKIP 0x8007 -#define ERROR_UNKNOWN_TYPE 0x8008 -#define ERROR_METHOD 0x8009 -#define ERROR_PASSWORD_FILE 0x800A -#define ERROR_VERSION 0x800B -#define ERROR_FILE_CRC 0x800C -#define ERROR_FILE_OPEN 0x800D -#define ERROR_MORE_FRESH 0x800E -#define ERROR_NOT_EXIST 0x800F -#define ERROR_ALREADY_EXIST 0x8010 -#define ERROR_TOO_MANY_FILES 0x8011 -// Error Code -#define ERROR_MAKEDIRECTORY 0x8012 -#define ERROR_CANNOT_WRITE 0x8013 -#define ERROR_HUFFMAN_CODE 0x8014 -#define ERROR_COMMENT_HEADER 0x8015 -#define ERROR_HEADER_CRC 0x8016 -#define ERROR_HEADER_BROKEN 0x8017 -#define ERROR_ARC_FILE_OPEN 0x8018 -#define ERROR_NOT_ARC_FILE 0x8019 -#define ERROR_CANNOT_READ 0x801A -#define ERROR_FILE_STYLE 0x801B -#define ERROR_COMMAND_NAME 0x801C -#define ERROR_MORE_HEAP_MEMORY 0x801D -#define ERROR_ENOUGH_MEMORY 0x801E -#define ERROR_ALREADY_RUNNING 0x801F -#define ERROR_USER_CANCEL 0x8020 -#define ERROR_HARC_ISNOT_OPENED 0x8021 -#define ERROR_NOT_SEARCH_MODE 0x8022 -#define ERROR_NOT_SUPPORT 0x8023 -#define ERROR_TIME_STAMP 0x8024 -#define ERROR_TMP_OPEN 0x8025 -#define ERROR_LONG_FILE_NAME 0x8026 -#define ERROR_ARC_READ_ONLY 0x8027 -#define ERROR_SAME_NAME_FILE 0x8028 -#define ERROR_NOT_FIND_ARC_FILE 0x8029 -#define ERROR_RESPONSE_READ 0x802A -#define ERROR_NOT_FILENAME 0x802B -#define ERROR_TMP_COPY 0x802C -#define ERROR_EOF 0x802D -#define ERROR_ADD_TO_LARC 0x802E -#define ERROR_TMP_BACK_SPACE 0x802F -#define ERROR_SHARING 0x8030 -#define ERROR_NOT_FIND_FILE 0x8031 -#define ERROR_LOG_FILE 0x8032 -#define ERROR_NO_DEVICE 0x8033 -#define ERROR_GET_ATTRIBUTES 0x8034 -#define ERROR_SET_ATTRIBUTES 0x8035 -#define ERROR_GET_INFORMATION 0x8036 -#define ERROR_GET_POINT 0x8037 -#define ERROR_SET_POINT 0x8038 -#define ERROR_CONVERT_TIME 0x8039 -#define ERROR_GET_TIME 0x803A -#define ERROR_SET_TIME 0x803B -#define ERROR_CLOSE_FILE 0x803C -#define ERROR_HEAP_MEMORY 0x803D -#define ERROR_HANDLE 0x803E -#define ERROR_TIME_STAMP_RANGE 0x803F -#define ERROR_MAKE_ARCHIVE 0x8040 -#define ERROR_NOT_CONFIRM_NAME 0x8041 -#define ERROR_UNEXPECTED_EOF 0x8042 -#define ERROR_INVALID_END_MARK 0x8043 -#define ERROR_INVOLVED_LZH 0x8044 -#define ERROR_NO_END_MARK 0x8045 -#define ERROR_HDR_INVALID_SIZE 0x8046 -#define ERROR_UNKNOWN_LEVEL 0x8047 -#define ERROR_BROKEN_DATA 0x8048 -#define ERROR_INVALID_PATH 0x8049 -#define ERROR_TOO_BIG 0x804A -#define ERROR_EXECUTABLE_FILE 0x804B -#define ERROR_INVALID_VALUE 0x804C -#define ERROR_END ERROR_INVALID_VALUE -#endif - #pragma pack(1) -typedef struct _tagINDIVIDUALINFO -{ - DWORD dwOriginalSize; - DWORD dwCompressedSize; - DWORD dwCRC; - UINT uFlag; - UINT uOSType; - WORD wRatio; - WORD wDate; - WORD wTime; - char szFileName[FNAME_MAX32 + 1]; - char dummy1[3]; - char szAttribute[8]; - char szMode[8]; -} INDIVIDUALINFO, * LPINDIVIDUALINFO; - -typedef struct EXTRACTINGINFO +typedef struct PosInfo { - DWORD dwFileSize; - DWORD dwWriteSize; - char szSourceFileName[FNAME_MAX32 + 1]; - char dummy1[3]; - char szDestFileName[FNAME_MAX32 + 1]; - char dummy[3]; -} EXTRACTINGINFO, * LPEXTRACTINGINFO; - -typedef struct EXTRACTINGINFOEX -{ - EXTRACTINGINFO exinfo; - DWORD dwCompressedSize; - DWORD dwCRC; - UINT uOSType; - WORD wRatio; - WORD wDate; - WORD wTime; - char szAttribute[8]; - char szMode[8]; -} EXTRACTINGINFOEX, * LPEXTRACTINGINFOEX; - -typedef struct EXTRACTINGINFOEX64 -{ - DWORD dwStructSize; - EXTRACTINGINFO exinfo; - UINT64 llFileSize; - UINT64 llCompressedSize; - UINT64 llWriteSize; - DWORD dwAttributes; - DWORD dwCRC; - UINT uOSType; - WORD wRatio; - FILETIME ftCreateTime; - FILETIME ftAccessTime; - FILETIME ftWriteTime; - char szMode[8]; - char szSourceFileName[FNAME_MAX32 + 1]; - char dummy1[3]; - char szDestFileName[FNAME_MAX32 + 1]; - char dummy2[3]; -} EXTRACTINGINFOEX64, * LPEXTRACTINGINFOEX64; - -typedef BOOL(CALLBACK * ARCHIVERPROC)(HWND, unsigned int, unsigned int, void *); + unsigned long nStart; + unsigned long nCount; + unsigned long nLine; +} PosInfo; #pragma pack() -- 2.11.0