From: s_kawamoto Date: Mon, 12 Sep 2011 12:49:27 +0000 (+0900) Subject: This version may be nearly stable. X-Git-Url: http://git.osdn.net/view?p=ffftp%2Fffftp.git;a=commitdiff_plain;h=3efb66ad5ef6a7e965b9b8b23852e826b7302c5f This version may be nearly stable. Fix bugs of UTF-8 to UTF-16 API bridge. Fix bugs of behavior caused by uninitialized variables. Disable regular expression (JRE32.DLL does not support UTF-8). Fix bugs of remote file list view. Change default settings to discard file list cache. --- diff --git a/FFFTP.exe b/FFFTP.exe index ea12a3a..1a2f576 100644 Binary files a/FFFTP.exe and b/FFFTP.exe differ diff --git a/bookmark.c b/bookmark.c index e50ed74..725c218 100644 --- a/bookmark.c +++ b/bookmark.c @@ -45,6 +45,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/ diff --git a/config.h b/config.h index 8a92cfd..bcc95d7 100644 --- a/config.h +++ b/config.h @@ -13,4 +13,6 @@ //#define DISABLE_TRANSFER_NETWORK_BUFFERS // ƒRƒ“ƒgƒ[ƒ‹—p‚̃lƒbƒgƒ[ƒNƒoƒbƒtƒ@‚𖳌ø‚É‚·‚éiƒtƒŠ[ƒY‘΍ôj #define DISABLE_CONTROL_NETWORK_BUFFERS +// JRE32.DLL‚𖳌ø‚É‚·‚éiUTF-8‚É”ñ‘Ήž‚Ì‚½‚߁j +#define DISABLE_JRE32DLL diff --git a/connect.c b/connect.c index 23b4e95..a83ae57 100644 --- a/connect.c +++ b/connect.c @@ -45,6 +45,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/ @@ -1227,6 +1231,7 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port Flg = 1; if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR) ReportWSError("setsockopt", WSAGetLastError()); + // ƒf[ƒ^“]‘——pƒ\ƒPƒbƒg‚ÌTCP’x‰„“]‘—‚ª–³Œø‚³‚ê‚Ä‚¢‚é‚Ì‚Å”O‚Ì‚½‚ß if(setsockopt(ContSock, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR) ReportWSError("setsockopt", WSAGetLastError()); #pragma aaa diff --git a/filelist.c b/filelist.c index 9644868..f1299c4 100644 --- a/filelist.c +++ b/filelist.c @@ -54,6 +54,10 @@ #include "OleDragDrop.h" #include "common.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + #define BUF_SIZE 256 #define CF_CNT 2 #define WM_DRAGDROP (WM_APP + 100) @@ -603,14 +607,19 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide) if(fWide == TRUE){ /* ƒƒCƒhƒLƒƒƒ‰ */ for(i = 0;i < cnt;i++){ - MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE); - flen += (wcslen(wbuf) + 1) * sizeof(wchar_t); + // UTF-8‘Ήž +// MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE); +// flen += (wcslen(wbuf) + 1) * sizeof(wchar_t); + flen += sizeof(wchar_t) * MtoW(NULL, 0, FileName[i], -1); } flen++; }else{ /* ƒ}ƒ‹ƒ`ƒoƒCƒg */ for(i = 0;i < cnt;i++){ - flen += lstrlen(FileName[i]) + 1; + // UTF-8‘Ήž +// flen += lstrlen(FileName[i]) + 1; + MtoW(wbuf, BUF_SIZE, FileName[i], -1); + flen += sizeof(char) * WtoA(NULL, 0, wbuf, -1); } } @@ -633,9 +642,11 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide) buf = (wchar_t *)(&lpDropFile[1]); for(i = 0;i < cnt;i++){ - MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE); - wcscpy(buf,wbuf); - buf += wcslen(wbuf) + 1; + // UTF-8‘Ήž +// MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE); +// wcscpy(buf,wbuf); +// buf += wcslen(wbuf) + 1; + buf += MtoW(buf, BUF_SIZE, FileName[i], -1); } }else{ /* ƒ}ƒ‹ƒ`ƒoƒCƒg */ @@ -643,8 +654,11 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide) buf = (char *)(&lpDropFile[1]); for(i = 0;i < cnt;i++){ - lstrcpy(buf,FileName[i]); - buf += lstrlen(FileName[i]) + 1; + // UTF-8‘Ήž +// lstrcpy(buf,FileName[i]); +// buf += lstrlen(FileName[i]) + 1; + MtoW(wbuf, BUF_SIZE, FileName[i], -1); + buf += WtoA(buf, BUF_SIZE, wbuf, -1); } } @@ -829,6 +843,8 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA char LocDir[FMAX_PATH+1]; char *PathDir; + // •Ï”‚ª–¢‰Šú‰»‚̃oƒOC³ + FileListBaseNoExpand = NULL; // ƒ[ƒJƒ‹‘¤‚Å‘I‚΂ê‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðFileListBase‚É“o˜^ if (hWndDragStart == hWndListLocal) { AskLocalCurDir(LocDir, FMAX_PATH); @@ -868,6 +884,7 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA } /* ƒtƒ@ƒCƒ‹–¼‚Ì”z—ñ‚ðì¬‚·‚é */ + // TODO: GlobalAlloc‚ª•Ô‚·‚̂̓ƒ‚ƒŠƒ|ƒCƒ“ƒ^‚Å‚Í‚È‚­ƒnƒ“ƒhƒ‹‚¾‚ªŽÀÛ‚Í“¯‚¶’l FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum); if(FileNameList == NULL){ abort(); @@ -4922,9 +4939,11 @@ static void GetMonth(char *Str, WORD *Month, WORD *Day) { if(!IsDigit(*Pos)) { - if((_mbsncmp(Pos, "ŒŽ", 1) == 0) || - (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC‚́uŒŽv */ - (memcmp(Pos, "\xD4\xC2", 2) == 0)) /* GBƒR[ƒh‚́uŒŽv */ + // UTF-8‘Ήž +// if((_mbsncmp(Pos, "ŒŽ", 1) == 0) || +// (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC‚́uŒŽv */ +// (memcmp(Pos, "\xD4\xC2", 2) == 0)) /* GBƒR[ƒh‚́uŒŽv */ + if(memcmp(Pos, "\xE6\x9C\x88", 3) == 0 || memcmp(Pos, "\x8C\x8E", 2) == 0 || memcmp(Pos, "\xB7\xEE", 2) == 0 || memcmp(Pos, "\xD4\xC2", 2) == 0) { Pos += 2; *Month = atoi(Str); @@ -5053,8 +5072,10 @@ static int GetHourAndMinute(char *Str, WORD *Hour, WORD *Minute) { if(IsDigit(*Pos) == 0) { - if((_mbsncmp(Pos, "Žž", 1) == 0) || - (memcmp(Pos, "\xBB\xFE", 2) == 0)) /* EUC‚́uŽžv */ + // UTF-8‘Ήž +// if((_mbsncmp(Pos, "Žž", 1) == 0) || +// (memcmp(Pos, "\xBB\xFE", 2) == 0)) /* EUC‚́uŽžv */ + if(memcmp(Pos, "\xE6\x99\x82", 3) == 0 || memcmp(Pos, "\x8E\x9E", 2) == 0 || memcmp(Pos, "\xBB\xFE", 2) == 0) { Pos += 2; if(*Pos != NUL) diff --git a/ftpproc.c b/ftpproc.c index 4ef3aa0..45d15f4 100644 --- a/ftpproc.c +++ b/ftpproc.c @@ -42,6 +42,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/ diff --git a/hostman.c b/hostman.c index 4589389..0cfa02f 100644 --- a/hostman.c +++ b/hostman.c @@ -41,6 +41,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/ diff --git a/main.c b/main.c index 8432896..c50b535 100644 --- a/main.c +++ b/main.c @@ -46,6 +46,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + #define RESIZE_OFF 0 /* ƒEƒCƒ“ƒhƒE‚Ì‹æØ‚èˆÊ’u•ÏX‚µ‚Ä‚¢‚È‚¢ */ #define RESIZE_ON 1 /* ƒEƒCƒ“ƒhƒE‚Ì‹æØ‚èˆÊ’u•ÏX’† */ @@ -152,7 +156,9 @@ int RecvMode = TRANS_DLG; int SendMode = TRANS_DLG; int MoveMode = MOVE_DLG; int ListType = LVS_REPORT; -int CacheEntry = 10; +// LIST‚̃LƒƒƒbƒVƒ…‚𖳌ø‚É‚·‚éiƒŠƒ‚[ƒg‚̃fƒBƒŒƒNƒgƒŠ‚Ì•\Ž¦‚ªXV‚³‚ê‚È‚¢ƒoƒO‘΍ôj +//int CacheEntry = 10; +int CacheEntry = -10; int CacheSave = NO; char DefaultLocalPath[FMAX_PATH+1] = { "" }; int SaveTimeStamp = YES; diff --git a/mbswrapper.c b/mbswrapper.c index fc4841a..d00c76e 100644 --- a/mbswrapper.c +++ b/mbswrapper.c @@ -5,11 +5,13 @@ // ‘S‚Ă̐§Œä—p‚Ì•¶Žš‚ÍASCII‚͈̔͂ł ‚邽‚߁AShift_JIS‚ÆUTF-8ŠÔ‚Ì•ÏŠ·‚Í•s—v #define UNICODE +#define _UNICODE #define _WIN32_WINNT 0x0600 #undef _WIN32_IE #define _WIN32_IE 0x0400 #include +#include #include #include #include @@ -21,8 +23,8 @@ // ƒ}ƒ‹ƒ`ƒoƒCƒg•¶Žš—ñ‚©‚烏ƒCƒh•¶Žš—ñ‚Ö•ÏŠ· int MtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count) { - if(pSrc < (LPCSTR)0x00010000 || !((char*)pSrc + 1)) - return 0; + if(pSrc < (LPCSTR)0x00010000 || pSrc == (LPCSTR)~0) + return pSrc; if(pDst) return MultiByteToWideChar(CP_UTF8, 0, pSrc, count, pDst, size); return MultiByteToWideChar(CP_UTF8, 0, pSrc, count, NULL, 0); @@ -31,8 +33,8 @@ int MtoW(LPWSTR pDst, int size, LPCSTR pSrc, int count) // ƒƒCƒh•¶Žš—ñ‚©‚çƒ}ƒ‹ƒ`ƒoƒCƒg•¶Žš—ñ‚Ö•ÏŠ· int WtoM(LPSTR pDst, int size, LPCWSTR pSrc, int count) { - if(pSrc < (LPCWSTR)0x00010000 || !((char*)pSrc + 1)) - return 0; + if(pSrc < (LPCWSTR)0x00010000 || pSrc == (LPCWSTR)~0) + return pSrc; if(pDst) return WideCharToMultiByte(CP_UTF8, 0, pSrc, count, pDst, size, NULL, NULL); return WideCharToMultiByte(CP_UTF8, 0, pSrc, count, NULL, 0, NULL, NULL); @@ -41,8 +43,8 @@ int WtoM(LPSTR pDst, int size, LPCWSTR pSrc, int count) // ƒƒCƒh•¶Žš—ñ‚©‚çShift_JIS•¶Žš—ñ‚Ö•ÏŠ· int WtoA(LPSTR pDst, int size, LPCWSTR pSrc, int count) { - if(pSrc < (LPCWSTR)0x00010000 || !((char*)pSrc + 1)) - return 0; + if(pSrc < (LPCWSTR)0x00010000 || pSrc == (LPCWSTR)~0) + return pSrc; if(pDst) return WideCharToMultiByte(CP_ACP, 0, pSrc, count, pDst, size, NULL, NULL); return WideCharToMultiByte(CP_ACP, 0, pSrc, count, NULL, 0, NULL, NULL); @@ -52,7 +54,7 @@ int WtoA(LPSTR pDst, int size, LPCWSTR pSrc, int count) int TerminateStringM(LPSTR lpString, int size) { int i; - if(lpString < (LPSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPSTR)0x00010000 || lpString == (LPSTR)~0) return 0; for(i = 0; i < size; i++) { @@ -68,7 +70,7 @@ int TerminateStringM(LPSTR lpString, int size) int TerminateStringW(LPWSTR lpString, int size) { int i; - if(lpString < (LPWSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPWSTR)0x00010000 || lpString == (LPWSTR)~0) return 0; for(i = 0; i < size; i++) { @@ -84,7 +86,7 @@ int TerminateStringW(LPWSTR lpString, int size) size_t GetMultiStringLengthM(LPCSTR lpString) { size_t i; - if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0) return 0; i = 0; while(lpString[i] != '\0' || lpString[i + 1] != '\0') @@ -99,7 +101,7 @@ size_t GetMultiStringLengthM(LPCSTR lpString) size_t GetMultiStringLengthW(LPCWSTR lpString) { size_t i; - if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0) return 0; i = 0; while(lpString[i] != L'\0' || lpString[i + 1] != L'\0') @@ -114,7 +116,9 @@ size_t GetMultiStringLengthW(LPCWSTR lpString) char* AllocateStringM(int size) { char* p; - p = (char*)malloc(sizeof(char) * size); + // 0‚ªŽw’肳‚ê‚éê‡‚ª‚ ‚邽‚ß1•¶Žš•ª’ljÁ + p = (char*)malloc(sizeof(char) * (size + 1)); + // ”O‚Ì‚½‚ߐ擪‚ÉNULL•¶Žš‚ð‘ã“ü if(p) *p = '\0'; return p; @@ -124,7 +128,9 @@ char* AllocateStringM(int size) wchar_t* AllocateStringW(int size) { wchar_t* p; - p = (wchar_t*)malloc(sizeof(wchar_t) * size); + // 0‚ªŽw’肳‚ê‚éê‡‚ª‚ ‚邽‚ß1•¶Žš•ª’ljÁ + p = (wchar_t*)malloc(sizeof(wchar_t) * (size + 1)); + // ”O‚Ì‚½‚ߐ擪‚ÉNULL•¶Žš‚ð‘ã“ü if(p) *p = L'\0'; return p; @@ -134,7 +140,9 @@ wchar_t* AllocateStringW(int size) char* AllocateStringA(int size) { char* p; - p = (char*)malloc(sizeof(char) * size); + // 0‚ªŽw’肳‚ê‚éê‡‚ª‚ ‚邽‚ß1•¶Žš•ª’ljÁ + p = (char*)malloc(sizeof(char) * (size + 1)); + // ”O‚Ì‚½‚ߐ擪‚ÉNULL•¶Žš‚ð‘ã“ü if(p) *p = '\0'; return p; @@ -145,7 +153,7 @@ wchar_t* DuplicateMtoW(LPCSTR lpString, int c) { wchar_t* p; int i; - if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0) return (wchar_t*)lpString; if(c < 0) c = strlen(lpString); @@ -163,7 +171,7 @@ wchar_t* DuplicateMtoWBuffer(LPCSTR lpString, int c, int size) { wchar_t* p; int i; - if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0) return (wchar_t*)lpString; if(c < 0) c = strlen(lpString); @@ -181,7 +189,7 @@ wchar_t* DuplicateMtoWMultiString(LPCSTR lpString) { int count; wchar_t* p; - if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0) return (wchar_t*)lpString; count = GetMultiStringLengthM(lpString) + 1; p = AllocateStringW(count); @@ -195,7 +203,7 @@ wchar_t* DuplicateMtoWMultiStringBuffer(LPCSTR lpString, int size) { int count; wchar_t* p; - if(lpString < (LPCSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCSTR)0x00010000 || lpString == (LPCSTR)~0) return (wchar_t*)lpString; count = GetMultiStringLengthM(lpString) + 1; p = AllocateStringW(size); @@ -213,7 +221,7 @@ char* DuplicateWtoM(LPCWSTR lpString, int c) { char* p; int i; - if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0) return (char*)lpString; if(c < 0) c = wcslen(lpString); @@ -231,7 +239,7 @@ char* DuplicateWtoA(LPCWSTR lpString, int c) { char* p; int i; - if(lpString < (LPCWSTR)0x00010000 || !((char*)lpString + 1)) + if(lpString < (LPCWSTR)0x00010000 || lpString == (LPCWSTR)~0) return (char*)lpString; if(c < 0) c = wcslen(lpString); @@ -247,7 +255,7 @@ char* DuplicateWtoA(LPCWSTR lpString, int c) // •¶Žš—ñ—p‚ÉŠm•Û‚µ‚½ƒƒ‚ƒŠ‚ðŠJ•ú void FreeDuplicatedString(void* p) { - if(p < (void*)0x00010000 || !((char*)p + 1)) + if(p < (void*)0x00010000 || p == (void*)~0) return; free(p); } @@ -340,8 +348,26 @@ END_ROUTINE DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer) { - // TODO: –{—ˆ‚Í•ÏŠ·‚ª•K—v‚¾‚ª”¼Šp‰p”‚Ì‚Ý‚ÆŽv‚í‚ê‚é‚̂ŏȗª - return GetLogicalDriveStringsA(nBufferLength, lpBuffer); + DWORD r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = AllocateStringW(nBufferLength * 4); + GetLogicalDriveStringsW(nBufferLength * 4, pw0); + WtoM(lpBuffer, nBufferLength, pw0, -1); + r = TerminateStringM(lpBuffer, nBufferLength); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +ATOM RegisterClassExM(CONST WNDCLASSEXA * v0) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + r = RegisterClassExA(v0); +END_ROUTINE + return r; } HWND CreateWindowExM(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) @@ -359,6 +385,58 @@ END_ROUTINE return r; } +LONG GetWindowLongM(HWND hWnd, int nIndex) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + if(IsWindowUnicode(hWnd)) + r = GetWindowLongW(hWnd, nIndex); + else + r = GetWindowLongA(hWnd, nIndex); +END_ROUTINE + return r; +} + +LONG SetWindowLongM(HWND hWnd, int nIndex, LONG dwNewLong) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + if(IsWindowUnicode(hWnd)) + r = SetWindowLongW(hWnd, nIndex, dwNewLong); + else + r = SetWindowLongA(hWnd, nIndex, dwNewLong); +END_ROUTINE + return r; +} + +LRESULT DefWindowProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + if(IsWindowUnicode(hWnd)) + r = DefWindowProcW(hWnd, Msg, wParam, lParam); + else + r = DefWindowProcA(hWnd, Msg, wParam, lParam); +END_ROUTINE + return r; +} + +LRESULT CallWindowProcM(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + if(IsWindowUnicode(hWnd)) + r = CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam); + else + r = CallWindowProcA(lpPrevWndFunc, hWnd, Msg, wParam, lParam); +END_ROUTINE + return r; +} + LRESULT SendMessageM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT r = 0; @@ -544,6 +622,28 @@ START_ROUTINE wLVFindInfo.vkDirection = pmLVFindInfo->vkDirection; r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVItem); break; + case LVM_GETCOLUMNA: + pmLVColumn = (LVCOLUMNA*)lParam; + wLVColumn.mask = pmLVColumn->mask; + wLVColumn.fmt = pmLVColumn->fmt; + wLVColumn.cx = pmLVColumn->cx; + Size = pmLVColumn->cchTextMax * 4; + pw0 = AllocateStringW(Size); + wLVColumn.pszText = pw0; + wLVColumn.cchTextMax = Size; + wLVColumn.iSubItem = pmLVColumn->iSubItem; + wLVColumn.iImage = pmLVColumn->iImage; + wLVColumn.iOrder = pmLVColumn->iOrder; + r = SendMessageW(hWnd, LVM_GETCOLUMNW, wParam, (LPARAM)&wLVColumn); + pmLVColumn->mask = wLVColumn.mask; + pmLVColumn->fmt = wLVColumn.fmt; + pmLVColumn->cx = wLVColumn.cx; + WtoM(pmLVColumn->pszText, pmLVColumn->cchTextMax, wLVColumn.pszText, -1); + TerminateStringM(pmLVColumn->pszText, pmLVColumn->cchTextMax); + pmLVColumn->iSubItem = wLVColumn.iSubItem; + pmLVColumn->iImage = wLVColumn.iImage; + pmLVColumn->iOrder = wLVColumn.iOrder; + break; case LVM_INSERTCOLUMNA: pmLVColumn = (LVCOLUMNA*)lParam; wLVColumn.mask = pmLVColumn->mask; @@ -551,6 +651,7 @@ START_ROUTINE wLVColumn.cx = pmLVColumn->cx; pw0 = DuplicateMtoW(pmLVColumn->pszText, -1); wLVColumn.pszText = pw0; + // TODO: cchTextMax‚ÌŠm”F wLVColumn.cchTextMax = pmLVColumn->cchTextMax; wLVColumn.iSubItem = pmLVColumn->iSubItem; wLVColumn.iImage = pmLVColumn->iImage; @@ -611,6 +712,19 @@ END_ROUTINE return r; } +LRESULT DefDlgProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + LRESULT r = 0; +START_ROUTINE + // WNDPROC‚ªShift_JIS—p‚Å‚ ‚邽‚ß + if(IsWindowUnicode(hWnd)) + r = DefDlgProcW(hWnd, Msg, wParam, lParam); + else + r = DefDlgProcA(hWnd, Msg, wParam, lParam); +END_ROUTINE + return r; +} + LRESULT SendDlgItemMessageM(HWND hDlg, int nIDDlgItem, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT r = 0; @@ -637,10 +751,15 @@ UINT DragQueryFileM(HDROP hDrop, UINT iFile, LPSTR lpszFile, UINT cch) UINT r = 0; wchar_t* pw0 = NULL; START_ROUTINE - pw0 = AllocateStringW(cch * 4); - DragQueryFileW(hDrop, iFile, pw0, cch * 4); - WtoM(lpszFile, cch, pw0, -1); - r = TerminateStringM(lpszFile, cch); + if(iFile == (UINT)-1) + r = DragQueryFileW(hDrop, iFile, lpszFile, cch); + else + { + pw0 = AllocateStringW(cch * 4); + DragQueryFileW(hDrop, iFile, pw0, cch * 4); + WtoM(lpszFile, cch, pw0, -1); + r = TerminateStringM(lpszFile, cch); + } END_ROUTINE FreeDuplicatedString(pw0); return r; @@ -684,6 +803,20 @@ END_ROUTINE return r; } +DWORD GetTempPathM(DWORD nBufferLength, LPSTR lpBuffer) +{ + DWORD r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = AllocateStringW(nBufferLength * 4); + GetTempPathW(nBufferLength * 4, pw0); + WtoM(lpBuffer, nBufferLength, pw0, -1); + r = TerminateStringM(lpBuffer, nBufferLength); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + DWORD GetFileAttributesM(LPCSTR lpFileName) { DWORD r = FALSE; @@ -1363,3 +1496,226 @@ END_ROUTINE return r; } +HWND CreateDialogParamM(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) +{ + HWND r = NULL; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(lpTemplateName, -1); + r = CreateDialogParamW(hInstance, pw0, hWndParent, lpDialogFunc, dwInitParam); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +int mkdirM(const char * _Path) +{ + int r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Path, -1); + r = _wmkdir(pw0); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +int _mkdirM(const char * _Path) +{ + int r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Path, -1); + r = _wmkdir(pw0); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +int rmdirM(const char * _Path) +{ + int r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Path, -1); + r = _wrmdir(pw0); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +int _rmdirM(const char * _Path) +{ + int r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Path, -1); + r = _wrmdir(pw0); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +size_t _mbslenM(const unsigned char * _Str) +{ + size_t r = 0; + wchar_t* pw0 = NULL; + wchar_t* wr; +START_ROUTINE + pw0 = DuplicateMtoW(_Str, -1); + r = wcslen(pw0); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +unsigned char * _mbschrM(const unsigned char * _Str, unsigned int _Ch) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; + wchar_t* wr; +START_ROUTINE + pw0 = DuplicateMtoW(_Str, -1); + // TODO: ”ñASCII•¶Žš‚̑Ήž + wr = wcschr(pw0, _Ch); + if(wr) + { + *wr = L'\0'; + r = _Str + WtoM(NULL, 0, pw0, -1) - 1; + } +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +unsigned char * _mbsrchrM(const unsigned char * _Str, unsigned int _Ch) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; + wchar_t* wr; +START_ROUTINE + pw0 = DuplicateMtoW(_Str, -1); + // TODO: ”ñASCII•¶Žš‚̑Ήž + wr = wcsrchr(pw0, _Ch); + if(wr) + { + *wr = L'\0'; + r = _Str + WtoM(NULL, 0, pw0, -1) - 1; + } +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +unsigned char * _mbsstrM(const unsigned char * _Str, const unsigned char * _Substr) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; + wchar_t* wr; +START_ROUTINE + pw0 = DuplicateMtoW(_Str, -1); + pw1 = DuplicateMtoW(_Substr, -1); + wr = wcsstr(pw0, pw1); + if(wr) + { + *wr = L'\0'; + r = _Str + WtoM(NULL, 0, pw0, -1) - 1; + } +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + return r; +} + +int _mbscmpM(const unsigned char * _Str1, const unsigned char * _Str2) +{ + int r = 0; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Str1, -1); + pw1 = DuplicateMtoW(_Str2, -1); + r = wcscmp(pw0, pw1); +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + return r; +} + +int _mbsicmpM(const unsigned char * _Str1, const unsigned char * _Str2) +{ + int r = 0; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Str1, -1); + pw1 = DuplicateMtoW(_Str2, -1); + r = _wcsicmp(pw0, pw1); +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + return r; +} + +int _mbsncmpM(const unsigned char * _Str1, const unsigned char * _Str2, size_t _MaxCount) +{ + int r = 0; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_Str1, -1); + pw1 = DuplicateMtoW(_Str2, -1); + r = wcsncmp(pw0, pw1, _MaxCount); +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + return r; +} + +unsigned char * _mbslwrM(unsigned char * _String) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_String, -1); + _wcslwr(pw0); + r = _String; + WtoM(_String, strlen(_String) + 1, pw0, -1); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +unsigned char * _mbsuprM(unsigned char * _String) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(_String, -1); + _wcsupr(pw0); + r = _String; + WtoM(_String, strlen(_String) + 1, pw0, -1); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + +unsigned char * _mbsnincM(const unsigned char * _Str, size_t _Count) +{ + unsigned char* r = NULL; + wchar_t* pw0 = NULL; + wchar_t* wr; +START_ROUTINE + pw0 = DuplicateMtoW(_Str, -1); + wr = _wcsninc(pw0, _Count); + if(wr) + { + *wr = L'\0'; + r = _Str + WtoM(NULL, 0, pw0, -1) - 1; + } +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} + diff --git a/mbswrapper.h b/mbswrapper.h index 474e36d..15221a5 100644 --- a/mbswrapper.h +++ b/mbswrapper.h @@ -17,8 +17,18 @@ #define FindNextFile FindNextFileM #undef GetLogicalDriveStrings #define GetLogicalDriveStrings GetLogicalDriveStringsM +#undef RegisterClassEx +#define RegisterClassEx RegisterClassExM #undef CreateWindowEx #define CreateWindowEx CreateWindowExM +#undef GetWindowLong +#define GetWindowLong GetWindowLongM +#undef SetWindowLong +#define SetWindowLong SetWindowLongM +#undef DefWindowProc +#define DefWindowProc DefWindowProcM +#undef CallWindowProc +#define CallWindowProc CallWindowProcM #undef SendMessage #define SendMessage SendMessageM #undef SendDlgItemMessage @@ -33,6 +43,8 @@ #define SetCurrentDirectory SetCurrentDirectoryM #undef SetDllDirectory #define SetDllDirectory SetDllDirectoryM +#undef GetTempPath +#define GetTempPath GetTempPathM #undef GetFileAttributes #define GetFileAttributes GetFileAttributesM #undef GetModuleFileName @@ -81,9 +93,41 @@ #define ChooseFont ChooseFontM #undef DialogBoxParam #define DialogBoxParam DialogBoxParamM +#undef CreateDialogParam +#define CreateDialogParam CreateDialogParamM +#undef mkdir +#define mkdir _mkdirM +#undef _mkdir +#define _mkdir _mkdirM +#undef rmdir +#define rmdir rmdirM +#undef _rmdir +#define _rmdir _rmdirM +#undef _mbslen +#define _mbslen _mbslenM +#undef _mbschr +#define _mbschr _mbschrM +#undef _mbsrchr +#define _mbsrchr _mbsrchrM +#undef _mbsstr +#define _mbsstr _mbsstrM +#undef _mbscmp +#define _mbscmp _mbscmpM +#undef _mbsicmp +#define _mbsicmp _mbsicmpM +#undef _mbsncmp +#define _mbsncmp _mbsncmpM +#undef _mbslwr +#define _mbslwr _mbslwrM +#undef _mbsupr +#define _mbsupr _mbsuprM +#undef _mbsninc +#define _mbsninc _mbsnincM #undef CreateWindow #define CreateWindow(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam) CreateWindowEx(0L, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam) +#undef DialogBox +#define DialogBox(hInstance, lpTemplate, hWndParent, lpDialogFunc) DialogBoxParam(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) #endif diff --git a/misc.c b/misc.c index 9cce7dd..7704463 100644 --- a/misc.c +++ b/misc.c @@ -45,6 +45,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== “ü—̓_ƒCƒAƒƒOƒf[ƒ^‚̃Xƒgƒ‰ƒNƒ`ƒƒ =====*/ diff --git a/option.c b/option.c index e577d19..4775da8 100644 --- a/option.c +++ b/option.c @@ -41,6 +41,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/ diff --git a/regexp.c b/regexp.c index 5bcb37e..736f234 100644 --- a/regexp.c +++ b/regexp.c @@ -64,6 +64,11 @@ int LoadJre(void) { int Sts; + // UTF-8‘Ήž + // JRE32.DLL‚ÍUTF-8‚É”ñ‘Ήž +#ifdef DISABLE_JRE32DLL + return FALSE; +#endif Sts = FALSE; if((m_hDll = LoadLibrary("jre32.dll")) != NULL) { diff --git a/socket.c b/socket.c index b823c40..605abaf 100644 --- a/socket.c +++ b/socket.c @@ -74,6 +74,7 @@ typedef struct { // ƒXƒŒƒbƒhÕ“˂̃oƒOC³ +// ”O‚Ì‚½‚߃e[ƒuƒ‹‚ð‘—Ê //#define MAX_SIGNAL_ENTRY 10 //#define MAX_SIGNAL_ENTRY_DBASE 5 #define MAX_SIGNAL_ENTRY 100 diff --git a/tool.c b/tool.c index 2f5fced..3dbc676 100644 --- a/tool.c +++ b/tool.c @@ -41,6 +41,10 @@ #include #include "helpid.h" +// UTF-8‘Ήž +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" + /*===== ƒvƒƒgƒ^ƒCƒv =====*/