// EXTRACTINGINFOEXW -> TPI_FILEINFO変換。\r
piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
- piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
- piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
- piInfo.fiInfo.eOSType = ex->eOSType;\r
+ piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
piInfo.fiInfo.szStoredName = WC2String(ex->exinfo.szSourceFileName);\r
piInfo.fiInfo.szMethod = WC2String(ex->szMode);\r
// EXTRACTINGINFOEX -> TPI_FILEINFO変換。\r
piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
piInfo.fiInfo.tmModified.SetFromDOS(ex->wTime | (ex->wDate << 16));\r
- piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
- piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
- piInfo.fiInfo.eOSType = ex->eOSType;\r
+ piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->exinfo.dwFileSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
piInfo.fiInfo.szStoredName = UTF82String(ex->exinfo.szSourceFileName);\r
piInfo.fiInfo.szMethod = UTF82String(ex->szMode);\r
piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
piInfo.fiInfo.nPackedSize = ex->llCompressedSize;\r
piInfo.fiInfo.nUnpackedSize = ex->llFileSize;\r
- piInfo.fiInfo.eOSType = ex->eOSType;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
piInfo.fiInfo.szStoredName = WC2String(ex->exinfo.szSourceFileName);\r
piInfo.fiInfo.szMethod = WC2String(ex->szMode);\r
piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
piInfo.fiInfo.nPackedSize = ex->llCompressedSize;\r
piInfo.fiInfo.nUnpackedSize = ex->llFileSize;\r
- piInfo.fiInfo.eOSType = ex->eOSType;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
piInfo.fiInfo.szStoredName = UTF82String(ex->exinfo.szSourceFileName);\r
piInfo.fiInfo.szMethod = UTF82String(ex->szMode);\r
return g_prProc(TPI_NOTIFY_COMMON, & piInfo) != TPI_CALLBACK_CANCEL;\r
}\r
\r
+BOOL __stdcall EnumMembersProc(void * _lpEis)\r
+{\r
+ // 構造体を初期化。\r
+ TPI_PROCESSINFO piInfo;\r
+ piInfo.eMessage = TPI_MESSAGE_ASK;\r
+ piInfo.eStatus = TPI_PARAM_DEST;\r
+ if (g_prProc == NULL)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ if (_lpEis != NULL)\r
+ {\r
+ if ((g_LibInfo.fRunning && g_LibInfo.fCallback32bit) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fCallback32bit))\r
+ {\r
+ if ((g_LibInfo.fRunning && g_LibInfo.fUnicode) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fUnicode))\r
+ {\r
+ // 初期化。\r
+ ENUM_MEMBER_INFOW * ex = (ENUM_MEMBER_INFOW *) _lpEis;\r
+ if (ex->uCommand != COMMAND_EXTRACT)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ // ENUM_MEMBER_INFOW -> TPI_FILEINFO変換。\r
+ piInfo.fiInfo.dwAttribute = ex->dwAttributes;\r
+ piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
+ piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);\r
+ piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);\r
+ piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
+ piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->dwOriginalSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
+ piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
+ piInfo.fiInfo.szStoredName = WC2String(ex->szFileName);\r
+ piInfo.fiInfo.fnFileName = wxFileName(piInfo.fiInfo.szStoredName);\r
+\r
+ // ENUM_MEMBER_INFOW -> TPI_PROCESSINFO変換。\r
+ piInfo.fnDestination = wxFileName(WC2String(ex->szAddFileName));\r
+\r
+ // コールバック関数に送信。\r
+ g_prProc(TPI_NOTIFY_COMMON, & piInfo);\r
+ wcsncpy(ex->szAddFileName, piInfo.fnDestination.GetFullPath().c_str(), FNAME_MAX32);\r
+ }\r
+ else\r
+ {\r
+ // 初期化。\r
+ ENUM_MEMBER_INFO * ex = (ENUM_MEMBER_INFO *) _lpEis;\r
+ if (ex->uCommand != COMMAND_EXTRACT)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ // ENUM_MEMBER_INFO -> TPI_FILEINFO変換。\r
+ piInfo.fiInfo.dwAttribute = ex->dwAttributes;\r
+ piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
+ piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);\r
+ piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);\r
+ piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
+ piInfo.fiInfo.nPackedSize = ex->dwCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->dwOriginalSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
+ piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
+ piInfo.fiInfo.szStoredName = UTF82String(ex->szFileName);\r
+ piInfo.fiInfo.fnFileName = wxFileName(piInfo.fiInfo.szStoredName);\r
+\r
+ // ENUM_MEMBER_INFO -> TPI_PROCESSINFO変換。\r
+ piInfo.fnDestination = wxFileName(UTF82String(ex->szAddFileName));\r
+\r
+ // コールバック関数に送信。\r
+ g_prProc(TPI_NOTIFY_COMMON, & piInfo);\r
+ strncpy(ex->szAddFileName, piInfo.fnDestination.GetFullPath().ToUTF8(), FNAME_MAX32);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if ((g_LibInfo.fRunning && g_LibInfo.fUnicode) || (g_LibInfoAlt.fRunning && g_LibInfoAlt.fUnicode))\r
+ {\r
+ // 初期化。\r
+ ENUM_MEMBER_INFO64W * ex = (ENUM_MEMBER_INFO64W *) _lpEis;\r
+ if (ex->uCommand != COMMAND_EXTRACT)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ // ENUM_MEMBER_INFO64W -> TPI_FILEINFO変換。\r
+ piInfo.fiInfo.dwAttribute = ex->dwAttributes;\r
+ piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
+ piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);\r
+ piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);\r
+ piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
+ piInfo.fiInfo.nPackedSize = ex->llCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->llOriginalSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
+ piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
+ piInfo.fiInfo.szStoredName = WC2String(ex->szFileName);\r
+ piInfo.fiInfo.fnFileName = wxFileName(piInfo.fiInfo.szStoredName);\r
+\r
+ // ENUM_MEMBER_INFO64W -> TPI_PROCESSINFO変換。\r
+ piInfo.fnDestination = wxFileName(WC2String(ex->szAddFileName));\r
+\r
+ // コールバック関数に送信。\r
+ g_prProc(TPI_NOTIFY_COMMON, & piInfo);\r
+ wcsncpy(ex->szAddFileName, piInfo.fnDestination.GetFullPath().c_str(), FNAME_MAX32);\r
+ }\r
+ else\r
+ {\r
+ // 初期化。\r
+ ENUM_MEMBER_INFO64 * ex = (ENUM_MEMBER_INFO64 *) _lpEis;\r
+ if (ex->uCommand != COMMAND_EXTRACT)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ // ENUM_MEMBER_INFO64 -> TPI_FILEINFO変換。\r
+ piInfo.fiInfo.dwAttribute = ex->dwAttributes;\r
+ piInfo.fiInfo.dwCRC32 = ex->dwCRC;\r
+ piInfo.fiInfo.tmAccess = FileTimeToWxDateTime(& ex->ftAccessTime);\r
+ piInfo.fiInfo.tmCreate = FileTimeToWxDateTime(& ex->ftCreateTime);\r
+ piInfo.fiInfo.tmModified = FileTimeToWxDateTime(& ex->ftWriteTime);\r
+ piInfo.fiInfo.nPackedSize = ex->llCompressedSize;\r
+ piInfo.fiInfo.nUnpackedSize = ex->llOriginalSize;\r
+ piInfo.fiInfo.eOSType = ex->uOSType;\r
+ piInfo.fiInfo.wCompressRatio = ex->wRatio;\r
+ piInfo.fiInfo.szStoredName = UTF82String(ex->szFileName);\r
+ piInfo.fiInfo.fnFileName = wxFileName(piInfo.fiInfo.szStoredName);\r
+\r
+ // ENUM_MEMBER_INFO64 -> TPI_PROCESSINFO変換。\r
+ piInfo.fnDestination = wxFileName(UTF82String(ex->szAddFileName));\r
+\r
+ // コールバック関数に送信。\r
+ g_prProc(TPI_NOTIFY_COMMON, & piInfo);\r
+ strncpy(ex->szAddFileName, piInfo.fnDestination.GetFullPath().ToUTF8(), FNAME_MAX32);\r
+ }\r
+ }\r
+ }\r
+\r
+ return piInfo.fnDestination.IsOk();\r
+}\r
+\r
//******************************************************************************\r
// Inside Functions\r
//******************************************************************************\r
}\r
}\r
\r
- return (fpProc == NULL || ! ((fAlt ? g_LibInfoAlt.fCallback32bit : g_LibInfo.fCallback32bit)\r
+ if (fpProc == NULL || ! ((fAlt ? g_LibInfoAlt.fCallback32bit : g_LibInfo.fCallback32bit)\r
? ((BOOL (__stdcall *)(HWND, ARCHIVERPROC * )) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc)\r
: ((BOOL (__stdcall *)(HWND, ARCHIVERPROC *, DWORD)) fpProc)(NULL, (ARCHIVERPROC *) CallbackProc, (fAlt ? g_LibInfoAlt.fUnicode : g_LibInfo.fUnicode) ? sizeof(EXTRACTINGINFOEX64W) : sizeof(EXTRACTINGINFOEX64))))\r
+ {\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+\r
+ // EnumMembersProc系。\r
+ if (fAlt)\r
+ {\r
+ fpProc = ::GetAPIAddressAlt("ClearEnumMembersProc64", false);\r
+ g_LibInfoAlt.fCallback32bit = fpProc == NULL;\r
+ if (g_LibInfoAlt.fCallback32bit)\r
+ {\r
+ fpProc = ::GetAPIAddressAlt("ClearEnumMembersProc", false);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ fpProc = ::GetAPIAddress("ClearEnumMembersProc64", false);\r
+ g_LibInfo.fCallback32bit = fpProc == NULL;\r
+ if (g_LibInfo.fCallback32bit)\r
+ {\r
+ fpProc = ::GetAPIAddress("ClearEnumMembersProc", false);\r
+ }\r
+ }\r
+ if (fpProc == NULL)\r
+ {\r
+ return TPI_ERROR_U_USE_LIBRARY;\r
+ }\r
+ // エラーでも無視する。\r
+// ((BOOL (__stdcall *)(void)) fpProc)();\r
+\r
+ // 続いて設定。\r
+ if (fAlt)\r
+ {\r
+ fpProc = ::GetAPIAddressAlt("SetEnumMembersProc64", false);\r
+ g_LibInfoAlt.fCallback32bit = fpProc == NULL;\r
+ if (g_LibInfoAlt.fCallback32bit)\r
+ {\r
+ fpProc = ::GetAPIAddressAlt("SetEnumMembersProc", true);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ fpProc = ::GetAPIAddress("SetEnumMembersProc64", false);\r
+ g_LibInfo.fCallback32bit = fpProc == NULL;\r
+ if (g_LibInfo.fCallback32bit)\r
+ {\r
+ fpProc = ::GetAPIAddress("SetEnumMembersProc", true);\r
+ }\r
+ }\r
+\r
+ return (fpProc == NULL || ! ((fAlt ? g_LibInfoAlt.fCallback32bit : g_LibInfo.fCallback32bit)\r
+ ? ((BOOL (__stdcall *)(WND_ENUMMEMBPROC * )) fpProc)((WND_ENUMMEMBPROC *) EnumMembersProc)\r
+ : ((BOOL (__stdcall *)(WND_ENUMMEMBPROC *, DWORD)) fpProc)((WND_ENUMMEMBPROC *) EnumMembersProc, (fAlt ? g_LibInfoAlt.fUnicode : g_LibInfo.fUnicode) ? sizeof(ENUM_MEMBER_INFO64W) : sizeof(ENUM_MEMBER_INFO))))\r
? TPI_ERROR_U_USE_LIBRARY : TPI_ERROR_SUCCESS;\r
}\r
\r
if (g_LibInfo.fUnicode)\r
{\r
_fiInfo->dwCRC32 = iiInfoW.dwCRC;\r
- _fiInfo->eOSType = iiInfoW.eOSType;\r
+ _fiInfo->eOSType = iiInfoW.uOSType;\r
_fiInfo->nPackedSize = iiInfoW.dwCompressedSize;\r
_fiInfo->nUnpackedSize = iiInfoW.dwOriginalSize;\r
_fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfoW.wTime, iiInfoW.wDate));\r
else\r
{\r
_fiInfo->dwCRC32 = iiInfo.dwCRC;\r
- _fiInfo->eOSType = iiInfo.eOSType;\r
+ _fiInfo->eOSType = iiInfo.uOSType;\r
_fiInfo->nPackedSize = iiInfo.dwCompressedSize;\r
_fiInfo->nUnpackedSize = iiInfo.dwOriginalSize;\r
_fiInfo->tmModified.SetFromDOS(MAKELONG(iiInfo.wTime, iiInfo.wDate));\r
#define ERROR_HDR_NO_NAME 0X804F\r
#endif\r
\r
+#define COMMAND_LIST 1\r
+#define COMMAND_ADD 2\r
+#define COMMAND_FRESH 3\r
+#define COMMAND_DELETE 4\r
+#define COMMAND_EXTRACT 5\r
+#define COMMAND_PRINT 6\r
+#define COMMAND_TEST 7\r
+#define COMMAND_MAKESFX 8\r
+#define COMMAND_JOINT 9\r
+#define COMMAND_CONVERT 10\r
+#define COMMAND_RENAME 11\r
+\r
#pragma pack(1)\r
\r
typedef struct _tagINDIVIDUALINFO\r
DWORD dwOriginalSize;\r
DWORD dwCompressedSize;\r
DWORD dwCRC;\r
- UINT uFlag;\r
- UINT eOSType;\r
+ unsigned int uFlag;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
WORD wDate;\r
WORD wTime;\r
DWORD dwOriginalSize;\r
DWORD dwCompressedSize;\r
DWORD dwCRC;\r
- UINT uFlag;\r
- UINT eOSType;\r
+ unsigned int uFlag;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
WORD wDate;\r
WORD wTime;\r
EXTRACTINGINFO exinfo;\r
DWORD dwCompressedSize;\r
DWORD dwCRC;\r
- UINT eOSType;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
WORD wDate;\r
WORD wTime;\r
EXTRACTINGINFOW exinfo;\r
DWORD dwCompressedSize;\r
DWORD dwCRC;\r
- UINT eOSType;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
WORD wDate;\r
WORD wTime;\r
{\r
DWORD dwStructSize;\r
EXTRACTINGINFO exinfo;\r
- UINT64 llFileSize;\r
- UINT64 llCompressedSize;\r
- UINT64 llWriteSize;\r
+ LONGLONG llFileSize;\r
+ LONGLONG llCompressedSize;\r
+ LONGLONG llWriteSize;\r
DWORD dwAttributes;\r
DWORD dwCRC;\r
- UINT eOSType;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
FILETIME ftCreateTime;\r
FILETIME ftAccessTime;\r
{\r
DWORD dwStructSize;\r
EXTRACTINGINFOW exinfo;\r
- UINT64 llFileSize;\r
- UINT64 llCompressedSize;\r
- UINT64 llWriteSize;\r
+ LONGLONG llFileSize;\r
+ LONGLONG llCompressedSize;\r
+ LONGLONG llWriteSize;\r
DWORD dwAttributes;\r
DWORD dwCRC;\r
- UINT eOSType;\r
+ unsigned int uOSType;\r
WORD wRatio;\r
FILETIME ftCreateTime;\r
FILETIME ftAccessTime;\r
\r
typedef BOOL(CALLBACK * ARCHIVERPROC)(HWND, unsigned int, unsigned int, void *);\r
\r
+typedef struct ENUM_MEMBER_INFO\r
+{\r
+ DWORD dwStructSize;\r
+ unsigned int uCommand;\r
+ DWORD dwOriginalSize;\r
+ DWORD dwCompressedSize;\r
+ DWORD dwAttributes;\r
+ DWORD dwCRC;\r
+ unsigned int uOSType;\r
+ WORD wRatio;\r
+ FILETIME ftCreateTime;\r
+ FILETIME ftAccessTime;\r
+ FILETIME ftWriteTime;\r
+ char szFileName[FNAME_MAX32 + 1];\r
+ char dummy1[3];\r
+ char szAddFileName[FNAME_MAX32 + 1];\r
+ char dummy2[3];\r
+} ENUM_MEMBER_INFO, *LPENUM_MEMBER_INFO;\r
+\r
+typedef struct\r
+{\r
+ DWORD dwStructSize;\r
+ unsigned int uCommand;\r
+ DWORD dwOriginalSize;\r
+ DWORD dwCompressedSize;\r
+ DWORD dwAttributes;\r
+ DWORD dwCRC;\r
+ unsigned int uOSType;\r
+ WORD wRatio;\r
+ FILETIME ftCreateTime;\r
+ FILETIME ftAccessTime;\r
+ FILETIME ftWriteTime;\r
+ wchar_t szFileName[FNAME_MAX32 + 1];\r
+ wchar_t dummy1[3];\r
+ wchar_t szAddFileName[FNAME_MAX32 + 1];\r
+ wchar_t dummy2[3];\r
+} ENUM_MEMBER_INFOW, *LPENUM_MEMBER_INFOW;\r
+\r
+typedef struct\r
+{\r
+ DWORD dwStructSize;\r
+ unsigned int uCommand;\r
+ LONGLONG llOriginalSize;\r
+ LONGLONG llCompressedSize;\r
+ DWORD dwAttributes;\r
+ DWORD dwCRC;\r
+ unsigned int uOSType;\r
+ WORD wRatio;\r
+ FILETIME ftCreateTime;\r
+ FILETIME ftAccessTime;\r
+ FILETIME ftWriteTime;\r
+ char szFileName[FNAME_MAX32 + 1];\r
+ char dummy1[3];\r
+ char szAddFileName[FNAME_MAX32 + 1];\r
+ char dummy2[3];\r
+} ENUM_MEMBER_INFO64, *LPENUM_MEMBER_INFO64;\r
+\r
+typedef struct\r
+{\r
+ DWORD dwStructSize;\r
+ unsigned int uCommand;\r
+ LONGLONG llOriginalSize;\r
+ LONGLONG llCompressedSize;\r
+ DWORD dwAttributes;\r
+ DWORD dwCRC;\r
+ unsigned int uOSType;\r
+ WORD wRatio;\r
+ FILETIME ftCreateTime;\r
+ FILETIME ftAccessTime;\r
+ FILETIME ftWriteTime;\r
+ wchar_t szFileName[FNAME_MAX32 + 1];\r
+ wchar_t dummy1[3];\r
+ wchar_t szAddFileName[FNAME_MAX32 + 1];\r
+ wchar_t dummy2[3];\r
+} ENUM_MEMBER_INFO64W, *LPENUM_MEMBER_INFO64W;\r
+\r
+typedef BOOL(CALLBACK * WND_ENUMMEMBPROC)(void *);\r
+\r
#pragma pack()\r