#endif\r
}\r
\r
+PosInfo MakePosInfo(wxString szPrefix)\r
+{\r
+ PosInfo pi;\r
+ g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-s"), wxEmptyString).ToULong(& pi.nStart);\r
+ g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-c"), wxEmptyString).ToULong(& pi.nCount);\r
+ g_LibInfo.node.GetPropVal(wxT("list-") + szPrefix + wxT("-l"), wxT("0")).ToULong(& pi.nLine);\r
+ return pi;\r
+}\r
+\r
+wxULongLong GetSize(PosInfo & pi, size_t uCurrent, wxArrayString & as)\r
+{\r
+ if (pi.nStart == 0 && pi.nCount == 0)\r
+ {\r
+ return 0;\r
+ }\r
+\r
+ wxULongLong_t nTemp;\r
+ size_t nPos = uCurrent + pi.nLine;\r
+ wxString sz = pi.nCount == 0 ? as[nPos].Mid(pi.nStart) : as[nPos].Mid(pi.nStart, pi.nCount);\r
+ sz.ToULongLong(& nTemp);\r
+ return nTemp;\r
+}\r
+\r
//******************************************************************************\r
// Functions\r
//******************************************************************************\r
}\r
wxArrayString asOutput = * (wxArrayString *) _hArchive;\r
\r
- wxString szStartLine = g_LibInfo.node.GetPropVal(wxT("list-line-s"), wxEmptyString);\r
+ // XML\82©\82ç\82Ì\93Ç\82Ý\8d\9e\82Ý\82Í\8f\89\89ñ\82É\8ds\82¤\81B\r
+ static wxString szEndLine, szDateFormat;\r
+ static unsigned long nProcessPerLine;\r
+ static PosInfo piFName, piPSize, piUSize, piDate;\r
if (_bFirst)\r
{\r
s_llFileID = 0;\r
+ wxString szStartLine = g_LibInfo.node.GetPropVal(wxT("list-line-s"), wxEmptyString);\r
if (! szStartLine.IsEmpty())\r
{\r
for (s_uCurrentLine = 0; s_uCurrentLine < asOutput.Count(); s_uCurrentLine++)\r
}\r
}\r
}\r
+\r
+ // \8f\89\8aú\90Ý\92è\81B\r
+ g_LibInfo.node.GetPropVal(wxT("list-line-c"), wxT("1")).ToULong(& nProcessPerLine);\r
+ szEndLine = g_LibInfo.node.GetPropVal(wxT("list-line-e"), szStartLine);\r
+ szDateFormat = g_LibInfo.node.GetPropVal(wxT("list-date-f"), wxDefaultDateTimeFormat);\r
+ piFName = MakePosInfo(wxT("fname"));\r
+ piPSize = MakePosInfo(wxT("psize"));\r
+ piUSize = MakePosInfo(wxT("usize"));\r
+ piDate = MakePosInfo(wxT("date"));\r
}\r
\r
if (s_uCurrentLine >= asOutput.Count())\r
}\r
\r
// \8dÅ\8fI\8ds\82©\82Ç\82¤\82©\8am\94F\81B\r
- if (asOutput[s_uCurrentLine] == g_LibInfo.node.GetPropVal(wxT("list-line-e"), szStartLine))\r
+ if (asOutput[s_uCurrentLine] == szEndLine)\r
{\r
return TPI_ERROR_UNDEFINED;\r
}\r
\r
// \83t\83@\83C\83\8b\96¼\82ð\8eæ\93¾\81B\r
- unsigned long nStartPos = 0, nEndPos = 0, nLine = 0;\r
- g_LibInfo.node.GetPropVal(wxT("list-fname-s"), wxEmptyString).ToULong(& nStartPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-fname-c"), wxEmptyString).ToULong(& nEndPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-fname-l"), wxT("0")).ToULong(& nLine);\r
- _fiInfo->szStoredName = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos);\r
+ _fiInfo->szStoredName = piFName.nCount == 0 ? asOutput[s_uCurrentLine + piFName.nLine].Mid(piFName.nStart) : asOutput[s_uCurrentLine + piFName.nLine].Mid(piFName.nStart, piFName.nCount);\r
_fiInfo->szStoredName.Trim();\r
_fiInfo->fnFileName = wxFileName::wxFileName(_fiInfo->szStoredName);\r
\r
- // \88³\8fk\8cã\83T\83C\83Y\8eæ\93¾\81B\r
- wxULongLong_t nTemp;\r
- nStartPos = 0, nEndPos = 0;\r
- g_LibInfo.node.GetPropVal(wxT("list-psize-s"), wxEmptyString).ToULong(& nStartPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-psize-c"), wxEmptyString).ToULong(& nEndPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-psize-l"), wxT("0")).ToULong(& nLine);\r
- if (nStartPos != 0 || nEndPos != 0)\r
- {\r
- wxString sz = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos);\r
- sz.ToULongLong(& nTemp);\r
- _fiInfo->llPackedSize = nTemp;\r
- }\r
-\r
- // \88³\8fk\91O\83T\83C\83Y\8eæ\93¾\81B\r
- nStartPos = 0, nEndPos = 0;\r
- g_LibInfo.node.GetPropVal(wxT("list-usize-s"), wxEmptyString).ToULong(& nStartPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-usize-c"), wxEmptyString).ToULong(& nEndPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-usize-l"), wxT("0")).ToULong(& nLine);\r
- if (nStartPos != 0 || nEndPos != 0)\r
- {\r
- wxString sz = nEndPos == 0 ? asOutput[s_uCurrentLine + nLine].Mid(nStartPos) : asOutput[s_uCurrentLine + nLine].Mid(nStartPos, nEndPos);\r
- sz.ToULongLong(& nTemp);\r
- _fiInfo->llUnpackedSize = nTemp;\r
- }\r
+ // \83T\83C\83Y\8eæ\93¾\81B\r
+ _fiInfo->llPackedSize = GetSize(piPSize, s_uCurrentLine, asOutput);\r
+ _fiInfo->llUnpackedSize = GetSize(piUSize, s_uCurrentLine, asOutput);\r
\r
// \8dX\90V\8e\9e\8d\8f\8eæ\93¾\81B\r
- nStartPos = 0, nEndPos = 0;\r
- g_LibInfo.node.GetPropVal(wxT("list-date-s"), wxEmptyString).ToULong(& nStartPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-date-c"), wxEmptyString).ToULong(& nEndPos);\r
- g_LibInfo.node.GetPropVal(wxT("list-date-l"), wxT("0")).ToULong(& nLine);\r
- if (nStartPos != 0 || nEndPos != 0)\r
+ if (piDate.nStart != 0 || piDate.nCount != 0)\r
{\r
- _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));\r
+ _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);\r
}\r
\r
// \8dÅ\8cã\82É\8e\9f\82Ì\8ds\82Ö\90i\82ß\82Ä\82¨\82\81B\r
_fiInfo->llFileID = s_llFileID++;\r
- g_LibInfo.node.GetPropVal(wxT("list-line-c"), wxT("1")).ToULong(& nStartPos);\r
- s_uCurrentLine += nStartPos;\r
+ s_uCurrentLine += nProcessPerLine;\r
\r
return TPI_ERROR_SUCCESS;\r
}\r
// 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()