OSDN Git Service

This version may be nearly stable.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 12 Sep 2011 12:49:27 +0000 (21:49 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 12 Sep 2011 12:49:27 +0000 (21:49 +0900)
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.

15 files changed:
FFFTP.exe
bookmark.c
config.h
connect.c
filelist.c
ftpproc.c
hostman.c
main.c
mbswrapper.c
mbswrapper.h
misc.c
option.c
regexp.c
socket.c
tool.c

index ea12a3a..1a2f576 100644 (file)
Binary files a/FFFTP.exe and b/FFFTP.exe differ
index e50ed74..725c218 100644 (file)
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r
index 8a92cfd..bcc95d7 100644 (file)
--- a/config.h
+++ b/config.h
@@ -13,4 +13,6 @@
 //#define DISABLE_TRANSFER_NETWORK_BUFFERS\r
 // \83R\83\93\83g\83\8d\81[\83\8b\97p\82Ì\83l\83b\83g\83\8f\81[\83N\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81i\83t\83\8a\81[\83Y\91Î\8dô\81j\r
 #define DISABLE_CONTROL_NETWORK_BUFFERS\r
+// JRE32.DLL\82ð\96³\8cø\82É\82·\82é\81iUTF-8\82É\94ñ\91Î\89\9e\82Ì\82½\82ß\81j\r
+#define DISABLE_JRE32DLL\r
 \r
index 23b4e95..a83ae57 100644 (file)
--- a/connect.c
+++ b/connect.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r
@@ -1227,6 +1231,7 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
                                Flg = 1;\r
                                if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
+                               // \83f\81[\83^\93]\91\97\97p\83\\83P\83b\83g\82ÌTCP\92x\89\84\93]\91\97\82ª\96³\8cø\82³\82ê\82Ä\82¢\82é\82Ì\82Å\94O\82Ì\82½\82ß\r
                                if(setsockopt(ContSock, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
 #pragma aaa\r
index 9644868..f1299c4 100644 (file)
 #include "OleDragDrop.h"\r
 #include "common.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 #define BUF_SIZE               256\r
 #define CF_CNT 2\r
 #define WM_DRAGDROP            (WM_APP + 100)\r
@@ -603,14 +607,19 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide)
        if(fWide == TRUE){\r
                /* \83\8f\83C\83h\83L\83\83\83\89 */\r
                for(i = 0;i < cnt;i++){\r
-                       MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
-                       flen += (wcslen(wbuf) + 1) * sizeof(wchar_t);\r
+                       // UTF-8\91Î\89\9e\r
+//                     MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
+//                     flen += (wcslen(wbuf) + 1) * sizeof(wchar_t);\r
+                       flen += sizeof(wchar_t) * MtoW(NULL, 0, FileName[i], -1);\r
                }\r
                flen++;\r
        }else{\r
                /* \83}\83\8b\83`\83o\83C\83g */\r
                for(i = 0;i < cnt;i++){\r
-                       flen += lstrlen(FileName[i]) + 1;\r
+                       // UTF-8\91Î\89\9e\r
+//                     flen += lstrlen(FileName[i]) + 1;\r
+                       MtoW(wbuf, BUF_SIZE, FileName[i], -1);\r
+                       flen += sizeof(char) * WtoA(NULL, 0, wbuf, -1);\r
                }\r
        }\r
 \r
@@ -633,9 +642,11 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide)
 \r
                buf = (wchar_t *)(&lpDropFile[1]);\r
                for(i = 0;i < cnt;i++){\r
-                       MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
-                       wcscpy(buf,wbuf);\r
-                       buf += wcslen(wbuf) + 1;\r
+                       // UTF-8\91Î\89\9e\r
+//                     MultiByteToWideChar(CP_ACP,0,FileName[i],-1,wbuf,BUF_SIZE);\r
+//                     wcscpy(buf,wbuf);\r
+//                     buf += wcslen(wbuf) + 1;\r
+                       buf += MtoW(buf, BUF_SIZE, FileName[i], -1);\r
                }\r
        }else{\r
                /* \83}\83\8b\83`\83o\83C\83g */\r
@@ -643,8 +654,11 @@ static HDROP APIPRIVATE CreateDropFileMem(char **FileName,int cnt,BOOL fWide)
 \r
                buf = (char *)(&lpDropFile[1]);\r
                for(i = 0;i < cnt;i++){\r
-                       lstrcpy(buf,FileName[i]);\r
-                       buf += lstrlen(FileName[i]) + 1;\r
+                       // UTF-8\91Î\89\9e\r
+//                     lstrcpy(buf,FileName[i]);\r
+//                     buf += lstrlen(FileName[i]) + 1;\r
+                       MtoW(wbuf, BUF_SIZE, FileName[i], -1);\r
+                       buf += WtoA(buf, BUF_SIZE, wbuf, -1);\r
                }\r
        }\r
 \r
@@ -829,6 +843,8 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA
                                        char LocDir[FMAX_PATH+1];\r
                                        char *PathDir;\r
  \r
+                                       // \95Ï\90\94\82ª\96¢\8f\89\8aú\89»\82Ì\83o\83O\8fC\90³\r
+                                       FileListBaseNoExpand = NULL;\r
                                        // \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
                                        if (hWndDragStart == hWndListLocal) {\r
                                                AskLocalCurDir(LocDir, FMAX_PATH);\r
@@ -868,6 +884,7 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA
                                        }\r
                                        \r
                                        /* \83t\83@\83C\83\8b\96¼\82Ì\94z\97ñ\82ð\8dì\90¬\82·\82é */\r
+                                       // TODO: GlobalAlloc\82ª\95Ô\82·\82Ì\82Í\83\81\83\82\83\8a\83|\83C\83\93\83^\82Å\82Í\82È\82­\83n\83\93\83h\83\8b\82¾\82ª\8eÀ\8dÛ\82Í\93¯\82\92l\r
                                        FileNameList = (char **)GlobalAlloc(GPTR,sizeof(char *) * filenum);\r
                                        if(FileNameList == NULL){\r
                                                abort();\r
@@ -4922,9 +4939,11 @@ static void GetMonth(char *Str, WORD *Month, WORD *Day)
                {\r
                        if(!IsDigit(*Pos))\r
                        {\r
-                               if((_mbsncmp(Pos, "\8c\8e", 1) == 0) ||\r
-                                  (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC\82Ì\81u\8c\8e\81v */\r
-                                  (memcmp(Pos, "\xD4\xC2", 2) == 0))   /* GB\83R\81[\83h\82Ì\81u\8c\8e\81v */\r
+                               // UTF-8\91Î\89\9e\r
+//                             if((_mbsncmp(Pos, "\8c\8e", 1) == 0) ||\r
+//                                (memcmp(Pos, "\xB7\xEE", 2) == 0) || /* EUC\82Ì\81u\8c\8e\81v */\r
+//                                (memcmp(Pos, "\xD4\xC2", 2) == 0))   /* GB\83R\81[\83h\82Ì\81u\8c\8e\81v */\r
+                               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)\r
                                {\r
                                        Pos += 2;\r
                                        *Month = atoi(Str);\r
@@ -5053,8 +5072,10 @@ static int GetHourAndMinute(char *Str, WORD *Hour, WORD *Minute)
                                {\r
                                        if(IsDigit(*Pos) == 0)\r
                                        {\r
-                                               if((_mbsncmp(Pos, "\8e\9e", 1) == 0) ||\r
-                                                  (memcmp(Pos, "\xBB\xFE", 2) == 0))   /* EUC\82Ì\81u\8e\9e\81v */\r
+                                               // UTF-8\91Î\89\9e\r
+//                                             if((_mbsncmp(Pos, "\8e\9e", 1) == 0) ||\r
+//                                                (memcmp(Pos, "\xBB\xFE", 2) == 0))   /* EUC\82Ì\81u\8e\9e\81v */\r
+                                               if(memcmp(Pos, "\xE6\x99\x82", 3) == 0 || memcmp(Pos, "\x8E\x9E", 2) == 0 || memcmp(Pos, "\xBB\xFE", 2) == 0)\r
                                                {\r
                                                        Pos += 2;\r
                                                        if(*Pos != NUL)\r
index 4ef3aa0..45d15f4 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r
index 4589389..0cfa02f 100644 (file)
--- a/hostman.c
+++ b/hostman.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r
diff --git a/main.c b/main.c
index 8432896..c50b535 100644 (file)
--- a/main.c
+++ b/main.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 #define RESIZE_OFF             0               /* \83E\83C\83\93\83h\83E\82Ì\8bæ\90Ø\82è\88Ê\92u\95Ï\8dX\82µ\82Ä\82¢\82È\82¢ */\r
 #define RESIZE_ON              1               /* \83E\83C\83\93\83h\83E\82Ì\8bæ\90Ø\82è\88Ê\92u\95Ï\8dX\92\86 */\r
@@ -152,7 +156,9 @@ int RecvMode = TRANS_DLG;
 int SendMode = TRANS_DLG;\r
 int MoveMode = MOVE_DLG;\r
 int ListType = LVS_REPORT;\r
-int CacheEntry = 10;\r
+// LIST\82Ì\83L\83\83\83b\83V\83\85\82ð\96³\8cø\82É\82·\82é\81i\83\8a\83\82\81[\83g\82Ì\83f\83B\83\8c\83N\83g\83\8a\82Ì\95\\8e¦\82ª\8dX\90V\82³\82ê\82È\82¢\83o\83O\91Î\8dô\81j\r
+//int CacheEntry = 10;\r
+int CacheEntry = -10;\r
 int CacheSave = NO;\r
 char DefaultLocalPath[FMAX_PATH+1] = { "" };\r
 int SaveTimeStamp = YES;\r
index fc4841a..d00c76e 100644 (file)
@@ -5,11 +5,13 @@
 // \91S\82Ä\82Ì\90§\8cä\97p\82Ì\95\8e\9a\82ÍASCII\82Ì\94Í\88Í\82Å\82 \82é\82½\82ß\81AShift_JIS\82ÆUTF-8\8aÔ\82Ì\95Ï\8a·\82Í\95s\97v
 
 #define UNICODE
+#define _UNICODE
 #define _WIN32_WINNT 0x0600
 #undef _WIN32_IE
 #define _WIN32_IE 0x0400
 
 #include <tchar.h>
+#include <direct.h>
 #include <windows.h>
 #include <commctrl.h>
 #include <shlobj.h>
@@ -21,8 +23,8 @@
 // \83}\83\8b\83`\83o\83C\83g\95\8e\9a\97ñ\82©\82ç\83\8f\83C\83h\95\8e\9a\97ñ\82Ö\95Ï\8a·
 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)
 // \83\8f\83C\83h\95\8e\9a\97ñ\82©\82ç\83}\83\8b\83`\83o\83C\83g\95\8e\9a\97ñ\82Ö\95Ï\8a·
 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)
 // \83\8f\83C\83h\95\8e\9a\97ñ\82©\82çShift_JIS\95\8e\9a\97ñ\82Ö\95Ï\8a·
 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\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95\8e\9a\95ª\92Ç\89Á
+       p = (char*)malloc(sizeof(char) * (size + 1));
+       // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95\8e\9a\82ð\91ã\93ü
        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\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95\8e\9a\95ª\92Ç\89Á
+       p = (wchar_t*)malloc(sizeof(wchar_t) * (size + 1));
+       // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95\8e\9a\82ð\91ã\93ü
        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\82ª\8ew\92è\82³\82ê\82é\8fê\8d\87\82ª\82 \82é\82½\82ß1\95\8e\9a\95ª\92Ç\89Á
+       p = (char*)malloc(sizeof(char) * (size + 1));
+       // \94O\82Ì\82½\82ß\90æ\93ª\82ÉNULL\95\8e\9a\82ð\91ã\93ü
        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)
 // \95\8e\9a\97ñ\97p\82É\8am\95Û\82µ\82½\83\81\83\82\83\8a\82ð\8aJ\95ú
 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: \96{\97\88\82Í\95Ï\8a·\82ª\95K\97v\82¾\82ª\94¼\8ap\89p\90\94\82Ì\82Ý\82Æ\8ev\82í\82ê\82é\82Ì\82Å\8fÈ\97ª
-       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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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\82Ì\8am\94F
                                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\82ªShift_JIS\97p\82Å\82 \82é\82½\82ß
+       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: \94ñASCII\95\8e\9a\82Ì\91Î\89\9e
+       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: \94ñASCII\95\8e\9a\82Ì\91Î\89\9e
+       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;
+}
+
index 474e36d..15221a5 100644 (file)
 #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
 #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 (file)
--- a/misc.c
+++ b/misc.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 \r
 /*===== \93ü\97Í\83_\83C\83A\83\8d\83O\83f\81[\83^\82Ì\83X\83g\83\89\83N\83`\83\83 =====*/\r
index e577d19..4775da8 100644 (file)
--- a/option.c
+++ b/option.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r
index 5bcb37e..736f234 100644 (file)
--- a/regexp.c
+++ b/regexp.c
@@ -64,6 +64,11 @@ int LoadJre(void)
 {\r
        int Sts;\r
 \r
+       // UTF-8\91Î\89\9e\r
+       // JRE32.DLL\82ÍUTF-8\82É\94ñ\91Î\89\9e\r
+#ifdef DISABLE_JRE32DLL\r
+       return FALSE;\r
+#endif\r
        Sts = FALSE;\r
        if((m_hDll = LoadLibrary("jre32.dll")) != NULL)\r
        {\r
index b823c40..605abaf 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -74,6 +74,7 @@ typedef struct {
 \r
 \r
 // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+// \94O\82Ì\82½\82ß\83e\81[\83u\83\8b\82ð\91\9d\97Ê\r
 //#define MAX_SIGNAL_ENTRY             10\r
 //#define MAX_SIGNAL_ENTRY_DBASE       5\r
 #define MAX_SIGNAL_ENTRY               100\r
diff --git a/tool.c b/tool.c
index 2f5fced..3dbc676 100644 (file)
--- a/tool.c
+++ b/tool.c
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
+// UTF-8\91Î\89\9e\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
+\r
 \r
 /*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
 \r