From: s_kawamoto Date: Fri, 9 Sep 2011 09:07:23 +0000 (+0900) Subject: Fix bugs of text encoding routines. X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=commitdiff_plain;h=ace5228a5909b084161345b10e712b7937bb00c5;hp=791b047f2c0c10f5d5cc09db8d642191c5c23a83 Fix bugs of text encoding routines. Fix bugs of UTF-8 to UTF-16 API bridge. Recover compatibility of registry settings. Fix bugs of behavior of toolbar buttons. Add support for JIS and EUC text mode transfer. --- diff --git a/FFFTP.exe b/FFFTP.exe index 2214070..b17506b 100644 Binary files a/FFFTP.exe and b/FFFTP.exe differ diff --git a/codecnv.c b/codecnv.c index 006e843..13d6b91 100644 --- a/codecnv.c +++ b/codecnv.c @@ -366,6 +366,8 @@ void InitCodeConvInfo(CODECONVINFO *cInfo) cInfo->KanjiFst = 0; cInfo->KanaPrev = 0; cInfo->KanaProc = NULL; + // UTF-8‘Ήž + cInfo->EscUTF8Len = 0; return; } @@ -397,6 +399,9 @@ int FlushRestData(CODECONVINFO *cInfo) *Put++ = cInfo->EscCode[0]; if(cInfo->EscProc == 2) *Put++ = cInfo->EscCode[1]; + // UTF-8‘Ήž + memcpy(Put, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); + Put += cInfo->EscUTF8Len; cInfo->OutLen = Put - cInfo->Buf; @@ -1478,75 +1483,133 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) { int Continue; - char temp_string[2048]; +// char temp_string[2048]; int string_length; + // ‘å‚«‚¢ƒTƒCƒY‚ɑΉž + // I’[‚ÌNULL‚ðŠÜ‚ÞƒoƒO‚ðC³ + int SrcLength; + char* pSrc; + wchar_t* pUTF16; + int UTF16Length; + int Count; + Continue = NO; // ¶¬‚³‚ê‚é’†ŠÔƒR[ƒh‚̃TƒCƒY‚𒲂ׂé - string_length = MultiByteToWideChar( - CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 0 // Ši”[æƒTƒCƒY - ); +// string_length = MultiByteToWideChar( +// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 0 // Ši”[æƒTƒCƒY +// ); + // ‘O‰ñ‚Ì•ÏŠ·•s”\‚ÈŽc‚è‚Ì•¶Žš—ñ‚ð“ü—͂̐擪‚ÉŒ‹‡ + SrcLength = cInfo->StrLen + cInfo->EscUTF8Len; + if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1)))) + { + *(cInfo->Buf) = '\0'; + cInfo->BufSize = 0; + return Continue; + } + memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); + memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen); + *(pSrc + SrcLength) = '\0'; + // UTF-8‚̏ꍇA•sŠ®‘S‚È•¶Žš‚͏í‚É•ÏŠ·‚³‚ê‚È‚¢ + UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, NULL, 0); // ƒTƒCƒY0 or ƒoƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚Í // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B - if( string_length == 0 || - string_length >= 1024 ){ +// if( string_length == 0 || +// string_length >= 1024 ){ +// *(cInfo->Buf) = '\0'; +// cInfo->BufSize = 0; +// return(Continue); +// } + if(!(pUTF16 = (wchar_t*)malloc(sizeof(wchar_t) * UTF16Length))) + { + free(pSrc); *(cInfo->Buf) = '\0'; cInfo->BufSize = 0; - return(Continue); + return Continue; } // ’†ŠÔƒR[ƒh(unicode)‚É•ÏŠ· - MultiByteToWideChar( - CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 1024 // Ši”[æƒTƒCƒY - ); +// MultiByteToWideChar( +// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 1024 // Ši”[æƒTƒCƒY +// ); + MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, pUTF16, UTF16Length); // ¶¬‚³‚ê‚éUTF-8ƒR[ƒh‚̃TƒCƒY‚𒲂ׂé - string_length = WideCharToMultiByte( - CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 0, // Ši”[æƒTƒCƒY - NULL,NULL - ); +// string_length = WideCharToMultiByte( +// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 0, // Ši”[æƒTƒCƒY +// NULL,NULL +// ); + string_length = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); // ƒTƒCƒY0 or o—̓oƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B - if( string_length == 0 || - string_length >= cInfo->BufSize ){ - *(cInfo->Buf) = '\0'; - cInfo->BufSize = 0; - return(Continue); - } +// if( string_length == 0 || +// string_length >= cInfo->BufSize ){ +// *(cInfo->Buf) = '\0'; +// cInfo->BufSize = 0; +// return(Continue); +// } // o—̓TƒCƒY‚ðÝ’è - cInfo->OutLen = string_length; +// cInfo->OutLen = string_length; // UTF-8ƒR[ƒh‚É•ÏŠ· - WideCharToMultiByte( - CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) - cInfo->BufSize, // Ši”[æƒTƒCƒY - NULL,NULL - ); +// WideCharToMultiByte( +// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) +// cInfo->BufSize, // Ši”[æƒTƒCƒY +// NULL,NULL +// ); + cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); + // ƒoƒbƒtƒ@‚ÉŽû‚Ü‚ç‚È‚¢‚½‚ß•ÏŠ·•¶Žš”‚𔼌¸ + while(cInfo->OutLen == 0 && UTF16Length > 0) + { + UTF16Length = UTF16Length / 2; + cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); + } + // •ÏŠ·‚³‚ꂽŒ³‚Ì•¶Žš—ñ‚Å‚Ì•¶Žš”‚ðŽæ“¾ + Count = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); + // •ÏŠ·‰Â”\‚ÈŽc‚è‚Ì•¶Žš”‚ðŽæ“¾ + UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc + Count, SrcLength - Count, NULL, 0); + cInfo->Str += Count - cInfo->EscUTF8Len; + cInfo->StrLen -= Count - cInfo->EscUTF8Len; + cInfo->EscUTF8Len = 0; + if(UTF16Length > 0) + Continue = YES; + else + { + // •ÏŠ·•s”\‚È‚½‚ߎŸ‚Ì“ü—͂̐擪‚ÉŒ‹‡ + memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen); + cInfo->EscUTF8Len = cInfo->StrLen; + cInfo->Str += cInfo->StrLen; + cInfo->StrLen = 0; + Continue = NO; + } + + free(pSrc); + free(pUTF16); return(Continue); } @@ -1566,64 +1629,112 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) { int Continue; - char temp_string[2048]; +// char temp_string[2048]; int string_length; + // ‘å‚«‚¢ƒTƒCƒY‚ɑΉž + // I’[‚ÌNULL‚ðŠÜ‚ÞƒoƒO‚ðC³ + int SrcLength; + char* pSrc; + wchar_t* pUTF16; + int UTF16Length; + int Count; + Continue = NO; // ¶¬‚³‚ê‚é’†ŠÔƒR[ƒh‚̃TƒCƒY‚𒲂ׂé - string_length = MultiByteToWideChar( - CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 0 // Ši”[æƒTƒCƒY - ); +// string_length = MultiByteToWideChar( +// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 0 // Ši”[æƒTƒCƒY +// ); + // ‘O‰ñ‚Ì•ÏŠ·•s”\‚ÈŽc‚è‚Ì•¶Žš—ñ‚ð“ü—͂̐擪‚ÉŒ‹‡ + SrcLength = cInfo->StrLen + cInfo->EscUTF8Len; + if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1)))) + { + *(cInfo->Buf) = '\0'; + cInfo->BufSize = 0; + return Continue; + } + memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); + memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen); + *(pSrc + SrcLength) = '\0'; + // Shift_JIS‚̏ꍇA•sŠ®‘S‚È•¶Žš‚Å‚à•ÏŠ·‚³‚ê‚邱‚Æ‚ª‚ ‚邽‚߁A––”ö‚Ì•sŠ®‘S‚È•”•ª‚ðí‚é + Count = 0; + while(Count < SrcLength) + { + if(((unsigned char)*(pSrc + Count) >= 0x81 && (unsigned char)*(pSrc + Count) <= 0x9f) || (unsigned char)*(pSrc + Count) >= 0xe0) + { + if((unsigned char)*(pSrc + Count + 1) >= 0x40) + Count += 2; + else + { + if(Count + 2 > SrcLength) + break; + Count += 1; + } + } + else + Count += 1; + } + SrcLength = Count; + UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, NULL, 0); // ƒTƒCƒY0 or ƒoƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B - if( string_length == 0 || - string_length >= 1024 ){ +// if( string_length == 0 || +// string_length >= 1024 ){ +// *(cInfo->Buf) = '\0'; +// cInfo->BufSize = 0; +// return(Continue); +// } + if(!(pUTF16 = (wchar_t*)malloc(sizeof(wchar_t) * UTF16Length))) + { + free(pSrc); *(cInfo->Buf) = '\0'; cInfo->BufSize = 0; - return(Continue); + return Continue; } // ’†ŠÔƒR[ƒh(unicode)‚É•ÏŠ· - MultiByteToWideChar( - CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 1024 // Ši”[æƒTƒCƒY - ); +// MultiByteToWideChar( +// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 1024 // Ši”[æƒTƒCƒY +// ); + MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, pUTF16, UTF16Length); // ¶¬‚³‚ê‚éUTF-8ƒR[ƒh‚̃TƒCƒY‚𒲂ׂé - string_length = WideCharToMultiByte( - CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ - 0, // Ši”[æƒTƒCƒY - NULL,NULL - ); +// string_length = WideCharToMultiByte( +// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ +// 0, // Ši”[æƒTƒCƒY +// NULL,NULL +// ); + string_length = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); // ƒTƒCƒY0 or o—̓oƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B - if( string_length == 0 || - string_length >= cInfo->BufSize ){ - *(cInfo->Buf) = '\0'; - cInfo->BufSize = 0; - return(Continue); - } +// if( string_length == 0 || +// string_length >= cInfo->BufSize ){ +// *(cInfo->Buf) = '\0'; +// cInfo->BufSize = 0; +// return(Continue); +// } // o—̓TƒCƒY‚ðÝ’è - cInfo->OutLen = string_length; +// cInfo->OutLen = string_length; /* // «•t‚¯‚¿‚Ⴞ‚ß ƒRƒ}ƒ“ƒh‚É‚à’ljÁ‚³‚ê‚Ä‚µ‚Ü‚¤ @@ -1634,15 +1745,43 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) */ // UTF-8ƒR[ƒh‚É•ÏŠ· - WideCharToMultiByte( - CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh - 0, // ƒtƒ‰ƒO(0:‚È‚µ) - (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ - -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) - cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) - cInfo->BufSize, // Ši”[æƒTƒCƒY - NULL,NULL - ); +// WideCharToMultiByte( +// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh +// 0, // ƒtƒ‰ƒO(0:‚È‚µ) +// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ +// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) +// cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) +// cInfo->BufSize, // Ši”[æƒTƒCƒY +// NULL,NULL +// ); + cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); + // ƒoƒbƒtƒ@‚ÉŽû‚Ü‚ç‚È‚¢‚½‚ß•ÏŠ·•¶Žš”‚𔼌¸ + while(cInfo->OutLen == 0 && UTF16Length > 0) + { + UTF16Length = UTF16Length / 2; + cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); + } + // •ÏŠ·‚³‚ꂽŒ³‚Ì•¶Žš—ñ‚Å‚Ì•¶Žš”‚ðŽæ“¾ + Count = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); + // •ÏŠ·‰Â”\‚ÈŽc‚è‚Ì•¶Žš”‚ðŽæ“¾ + UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc + Count, SrcLength - Count, NULL, 0); + cInfo->Str += Count - cInfo->EscUTF8Len; + cInfo->StrLen -= Count - cInfo->EscUTF8Len; + cInfo->EscUTF8Len = 0; + if(UTF16Length > 0) + Continue = YES; + else + { + // •ÏŠ·•s”\‚È‚½‚ߎŸ‚Ì“ü—͂̐擪‚ÉŒ‹‡ + memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen); + cInfo->EscUTF8Len = cInfo->StrLen; + cInfo->Str += cInfo->StrLen; + cInfo->StrLen = 0; + Continue = NO; + } + + free(pSrc); + free(pUTF16); return(Continue); } diff --git a/common.h b/common.h index 2f76bb6..c661dad 100644 --- a/common.h +++ b/common.h @@ -669,16 +669,16 @@ LIST_UNIX_70 /*===== Š¿ŽšƒR[ƒh•ÏŠ· =====*/ -#define KANJI_SJIS 1 /* SJIS */ -#define KANJI_JIS 2 /* JIS */ -#define KANJI_EUC 3 /* EUC */ -#define KANJI_SMB_HEX 4 /* Samba-HEX */ -#define KANJI_SMB_CAP 5 /* Samba-CAP */ -#define KANJI_UTF8N 6 /* UTF-8N */ +#define KANJI_SJIS 0 /* SJIS */ +#define KANJI_JIS 1 /* JIS */ +#define KANJI_EUC 2 /* EUC */ +#define KANJI_SMB_HEX 3 /* Samba-HEX */ +#define KANJI_SMB_CAP 4 /* Samba-CAP */ +#define KANJI_UTF8N 5 /* UTF-8N */ -#define KANJI_NOCNV 0 /* Š¿ŽšƒR[ƒh•ÏŠ·‚È‚µ */ +#define KANJI_NOCNV -1 /* Š¿ŽšƒR[ƒh•ÏŠ·‚È‚µ */ -#define KANJI_AUTO 0 +#define KANJI_AUTO -1 /*===== ƒTƒEƒ“ƒh =====*/ @@ -1003,6 +1003,8 @@ typedef struct codeconvinfo { char KanjiFst; /* Š¿ŽšƒR[ƒh‚PƒoƒCƒg–Ú•Û‘¶—p (“à•”ˆ——pƒ[ƒN) */ char KanaPrev; /* ”¼ŠpƒJƒ^ƒJƒi•Û‘¶—p (“à•”ˆ——pƒ[ƒN) */ funcptr KanaProc; /* ”¼ŠpƒJƒ^ƒJƒiˆ—ƒ‹[ƒ`ƒ“ (“à•”ˆ——pƒ[ƒN) */ + char EscUTF8[8]; + int EscUTF8Len; } CODECONVINFO; @@ -1234,10 +1236,6 @@ void SetHostKanjiCode(int Type); void DispHostKanjiCode(void); int AskHostKanjiCode(void); void HideHostKanjiButton(void); -void SetHostKanaCnvImm(int Mode); -void SetHostKanaCnv(void); -void DispHostKanaCnv(void); -int AskHostKanaCnv(void); // ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh void SetLocalKanjiCodeImm(int Mode); void SetLocalKanjiCode(int Type); @@ -1245,6 +1243,10 @@ void DispLocalKanjiCode(void); int AskLocalKanjiCode(void); void HideLocalKanjiButton(void); // ‚±‚±‚Ü‚Å +void SetHostKanaCnvImm(int Mode); +void SetHostKanaCnv(void); +void DispHostKanaCnv(void); +int AskHostKanaCnv(void); void SetSortTypeImm(int LFsort, int LDsort, int RFsort, int RDsort); void SetSortTypeByColumn(int Win, int Tab); int AskSortType(int Name); diff --git a/getput.c b/getput.c index 7cf67a2..cf28616 100644 --- a/getput.c +++ b/getput.c @@ -1179,6 +1179,8 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc if((iFileHandle = CreateFile(Pkt->LocalFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &Sec, CreateMode, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { // UTF-8‘Ήž + char Buf3[(BUFSIZE + 3) * 4]; + CODECONVINFO cInfo2; int ProcessedBOM = NO; if(CreateMode == OPEN_ALWAYS) SetFilePointer(iFileHandle, 0, 0, FILE_END); @@ -1192,6 +1194,9 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc InitCodeConvInfo(&cInfo); cInfo.KanaCnv = Pkt->KanaCnv; + InitCodeConvInfo(&cInfo2); + cInfo2.KanaCnv = Pkt->KanaCnv; + /*===== ƒtƒ@ƒCƒ‹‚ðŽóM‚·‚郋[ƒv =====*/ while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO)) { @@ -1262,13 +1267,26 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc switch(Pkt->KanjiCodeDesired) { case KANJI_SJIS: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvSJIStoJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvJIStoSJIS(&cInfo2); break; case KANJI_JIS: + Continue = ConvSJIStoJIS(&cInfo); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; break; case KANJI_EUC: + Continue = ConvSJIStoEUC(&cInfo); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -1280,7 +1298,7 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc break; } Continue = ConvSJIStoUTF8N(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; } @@ -1290,15 +1308,28 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc { case KANJI_SJIS: Continue = ConvJIStoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvJIStoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: + Continue = ConvJIStoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -1310,8 +1341,6 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc break; } Continue = ConvJIStoSJIS(&cInfo); - InitCodeConvInfo(&cInfo2); - cInfo2.KanaCnv = NO; cInfo2.Str = cInfo.Buf; cInfo2.StrLen = cInfo.OutLen; cInfo2.Buf = Buf3; @@ -1325,15 +1354,28 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc { case KANJI_SJIS: Continue = ConvEUCtoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: + Continue = ConvEUCtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvEUCtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -1345,8 +1387,6 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc break; } Continue = ConvEUCtoSJIS(&cInfo); - InitCodeConvInfo(&cInfo2); - cInfo2.KanaCnv = NO; cInfo2.Str = cInfo.Buf; cInfo2.StrLen = cInfo.OutLen; cInfo2.Buf = Buf3; @@ -1379,12 +1419,24 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc { case KANJI_SJIS: Continue = ConvUTF8NtoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: + Continue = ConvUTF8NtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: + Continue = ConvUTF8NtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: memcpy(Buf3, cInfo.Str, cInfo.StrLen); @@ -1425,7 +1477,130 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc cInfo.Buf = Buf2; cInfo.BufSize = BUFSIZE+3; FlushRestData(&cInfo); - if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE) + switch(Pkt->KanjiCode) + { + case KANJI_SJIS: + switch(Pkt->KanjiCodeDesired) + { + case KANJI_SJIS: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvJIStoSJIS(&cInfo2); + break; + case KANJI_JIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_EUC: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_UTF8N: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + } + break; + case KANJI_JIS: + switch(Pkt->KanjiCodeDesired) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoUTF8N(&cInfo2); + break; + } + break; + case KANJI_EUC: + switch(Pkt->KanjiCodeDesired) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoUTF8N(&cInfo2); + break; + } + break; + case KANJI_UTF8N: + switch(Pkt->KanjiCodeDesired) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + } + break; + } +// if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE) + if(WriteFile(iFileHandle, Buf3, cInfo2.OutLen, &Writed, NULL) == FALSE) + Pkt->Abort = ABORT_DISKFULL; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + FlushRestData(&cInfo2); + if(WriteFile(iFileHandle, Buf3, cInfo2.OutLen, &Writed, NULL) == FALSE) Pkt->Abort = ABORT_DISKFULL; } @@ -1981,6 +2156,8 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) FILE_SHARE_READ|FILE_SHARE_WRITE, &Sec, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE) { // UTF-8‘Ήž + char Buf3[(BUFSIZE + 3) * 4]; + CODECONVINFO cInfo2; int ProcessedBOM = NO; if(Pkt->hWndTrans != NULL) { @@ -2000,6 +2177,9 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) cInfo.KanaCnv = Pkt->KanaCnv; InitTermCodeConvInfo(&tInfo); + InitCodeConvInfo(&cInfo2); + cInfo2.KanaCnv = Pkt->KanaCnv; + /*===== ƒtƒ@ƒCƒ‹‚𑗐M‚·‚郋[ƒv =====*/ while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO) && @@ -2031,21 +2211,32 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) // Continue = ConvSJIStoJIS(&cInfo); // else // Continue = ConvSJIStoEUC(&cInfo); - char Buf3[(BUFSIZE + 3) * 4]; - CODECONVINFO cInfo2; switch(Pkt->KanjiCodeDesired) { case KANJI_SJIS: switch(Pkt->KanjiCode) { case KANJI_SJIS: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvSJIStoJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvJIStoSJIS(&cInfo2); break; case KANJI_JIS: + Continue = ConvSJIStoJIS(&cInfo); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; break; case KANJI_EUC: + Continue = ConvSJIStoEUC(&cInfo); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -2057,7 +2248,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) break; } Continue = ConvSJIStoUTF8N(&cInfo); - memcpy(Buf3, cInfo.Str, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; } @@ -2067,15 +2258,28 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) { case KANJI_SJIS: Continue = ConvJIStoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvJIStoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: + Continue = ConvJIStoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -2087,8 +2291,6 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) break; } Continue = ConvJIStoSJIS(&cInfo); - InitCodeConvInfo(&cInfo2); - cInfo2.KanaCnv = NO; cInfo2.Str = cInfo.Buf; cInfo2.StrLen = cInfo.OutLen; cInfo2.Buf = Buf3; @@ -2102,15 +2304,28 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) { case KANJI_SJIS: Continue = ConvEUCtoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: + Continue = ConvEUCtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: - memcpy(Buf3, cInfo.Str, cInfo.StrLen); - cInfo2.OutLen = cInfo.StrLen; - Continue = NO; +// memcpy(Buf3, cInfo.Str, cInfo.StrLen); +// cInfo2.OutLen = cInfo.StrLen; +// Continue = NO; + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + Continue = ConvEUCtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: if(ProcessedBOM == NO) @@ -2122,8 +2337,6 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) break; } Continue = ConvEUCtoSJIS(&cInfo); - InitCodeConvInfo(&cInfo2); - cInfo2.KanaCnv = NO; cInfo2.Str = cInfo.Buf; cInfo2.StrLen = cInfo.OutLen; cInfo2.Buf = Buf3; @@ -2156,12 +2369,24 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) { case KANJI_SJIS: Continue = ConvUTF8NtoSJIS(&cInfo); - memcpy(Buf3, Buf2, cInfo.OutLen); + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); cInfo2.OutLen = cInfo.OutLen; break; case KANJI_JIS: + Continue = ConvUTF8NtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); break; case KANJI_EUC: + Continue = ConvUTF8NtoSJIS(&cInfo); + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); break; case KANJI_UTF8N: memcpy(Buf3, cInfo.Str, cInfo.StrLen); @@ -2206,8 +2431,131 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) cInfo.Buf = Buf2; cInfo.BufSize = BUFSIZE+3; FlushRestData(&cInfo); + switch(Pkt->KanjiCodeDesired) + { + case KANJI_SJIS: + switch(Pkt->KanjiCode) + { + case KANJI_SJIS: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvJIStoSJIS(&cInfo2); + break; + case KANJI_JIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_EUC: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_UTF8N: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + } + break; + case KANJI_JIS: + switch(Pkt->KanjiCode) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoUTF8N(&cInfo2); + break; + } + break; + case KANJI_EUC: + switch(Pkt->KanjiCode) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + // ƒJƒi•ÏŠ·‚Ì‚½‚ß + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoUTF8N(&cInfo2); + break; + } + break; + case KANJI_UTF8N: + switch(Pkt->KanjiCode) + { + case KANJI_SJIS: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + case KANJI_JIS: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoJIS(&cInfo2); + break; + case KANJI_EUC: + cInfo2.Str = cInfo.Buf; + cInfo2.StrLen = cInfo.OutLen; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + ConvSJIStoEUC(&cInfo2); + break; + case KANJI_UTF8N: + memcpy(Buf3, cInfo.Buf, cInfo.OutLen); + cInfo2.OutLen = cInfo.OutLen; + break; + } + break; + } - if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL) +// if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL) + if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FAIL) + Pkt->Abort = ABORT_ERROR; + cInfo2.Buf = Buf3; + cInfo2.BufSize = (BUFSIZE + 3) * 4; + FlushRestData(&cInfo2); + if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FAIL) Pkt->Abort = ABORT_ERROR; } @@ -2571,12 +2919,17 @@ static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int else if(Pkt->Type == TYPE_A) SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN120); + // UTF-8‘Ήž if(Pkt->KanjiCode == KANJI_NOCNV) SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN121); + else if(Pkt->KanjiCode == KANJI_SJIS) + SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN305); else if(Pkt->KanjiCode == KANJI_JIS) SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN122); else if(Pkt->KanjiCode == KANJI_EUC) SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN123); + else if(Pkt->KanjiCode == KANJI_UTF8N) + SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN306); } else { @@ -2668,14 +3021,28 @@ static int IsSpecialDevice(char *Fname) int Sts; Sts = NO; - if((_stricmp(Fname, "CON") == 0) || - (_stricmp(Fname, "PRN") == 0) || - (_stricmp(Fname, "AUX") == 0) || - (_strnicmp(Fname, "CON.", 4) == 0) || - (_strnicmp(Fname, "PRN.", 4) == 0) || - (_strnicmp(Fname, "AUX.", 4) == 0)) + // ƒoƒOC³ +// if((_stricmp(Fname, "CON") == 0) || +// (_stricmp(Fname, "PRN") == 0) || +// (_stricmp(Fname, "AUX") == 0) || +// (_strnicmp(Fname, "CON.", 4) == 0) || +// (_strnicmp(Fname, "PRN.", 4) == 0) || +// (_strnicmp(Fname, "AUX.", 4) == 0)) +// { +// Sts = YES; +// } + if(_strnicmp(Fname, "AUX", 3) == 0|| _strnicmp(Fname, "CON", 3) == 0 || _strnicmp(Fname, "NUL", 3) == 0 || _strnicmp(Fname, "PRN", 3) == 0) + { + if(*(Fname + 3) == '\0' || *(Fname + 3) == '.') + Sts = YES; + } + else if(_strnicmp(Fname, "COM", 3) == 0 || _strnicmp(Fname, "LPT", 3) == 0) { - Sts = YES; + if(isdigit(*(Fname + 3)) != 0) + { + if(*(Fname + 4) == '\0' || *(Fname + 4) == '.') + Sts = YES; + } } return(Sts); } diff --git a/main.c b/main.c index eaef74f..8aebef3 100644 --- a/main.c +++ b/main.c @@ -1308,7 +1308,7 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_KNJ_SJIS : - lpttt->lpszText = MSGJPN305; + lpttt->lpszText = MSGJPN307; break; case MENU_KNJ_EUC : @@ -1320,7 +1320,7 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_KNJ_UTF8N : - lpttt->lpszText = MSGJPN306; + lpttt->lpszText = MSGJPN308; break; case MENU_KNJ_NONE : @@ -1328,19 +1328,19 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_L_KNJ_SJIS : - lpttt->lpszText = MSGJPN307; + lpttt->lpszText = MSGJPN309; break; case MENU_L_KNJ_EUC : - lpttt->lpszText = MSGJPN308; + lpttt->lpszText = MSGJPN310; break; case MENU_L_KNJ_JIS : - lpttt->lpszText = MSGJPN309; + lpttt->lpszText = MSGJPN311; break; case MENU_L_KNJ_UTF8N : - lpttt->lpszText = MSGJPN310; + lpttt->lpszText = MSGJPN312; break; case MENU_KANACNV : @@ -1937,6 +1937,7 @@ void DoubleClickProc(int Win, int Mode, int App) MainTransPkt.Type = AskTransferTypeAssoc(MainTransPkt.RemoteFile, AskTransferType()); MainTransPkt.Size = 1; MainTransPkt.KanjiCode = AskHostKanjiCode(); + MainTransPkt.KanjiCodeDesired = AskLocalKanjiCode(); MainTransPkt.KanaCnv = AskHostKanaCnv(); MainTransPkt.Mode = EXIST_OVW; MainTransPkt.ExistSize = 0; diff --git a/mbswrapper.c b/mbswrapper.c index 2b7e2cf..8cb6257 100644 --- a/mbswrapper.c +++ b/mbswrapper.c @@ -393,7 +393,7 @@ START_ROUTINE break; default: GetClassNameW(hWnd, ClassName, sizeof(ClassName) / sizeof(wchar_t)); - if(wcsicmp(ClassName, WC_EDITW) == 0) + if(_wcsicmp(ClassName, WC_EDITW) == 0) { switch(Msg) { @@ -406,7 +406,7 @@ START_ROUTINE break; } } - else if(wcsicmp(ClassName, WC_COMBOBOXW) == 0) + else if(_wcsicmp(ClassName, WC_COMBOBOXW) == 0) { switch(Msg) { @@ -427,7 +427,7 @@ START_ROUTINE break; } } - else if(wcsicmp(ClassName, WC_LISTBOXW) == 0) + else if(_wcsicmp(ClassName, WC_LISTBOXW) == 0) { switch(Msg) { @@ -452,7 +452,7 @@ START_ROUTINE break; } } - else if(wcsicmp(ClassName, WC_LISTVIEWW) == 0) + else if(_wcsicmp(ClassName, WC_LISTVIEWW) == 0) { switch(Msg) { @@ -568,7 +568,7 @@ START_ROUTINE break; } } - else if(wcsicmp(ClassName, STATUSCLASSNAMEW) == 0) + else if(_wcsicmp(ClassName, STATUSCLASSNAMEW) == 0) { switch(Msg) { @@ -733,13 +733,36 @@ LSTATUS RegQueryValueExM(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDW { LSTATUS r = 0; wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; + DWORD dwType; + DWORD wcbData; START_ROUTINE pw0 = DuplicateMtoW(lpValueName, -1); - // TODO: ƒŒƒWƒXƒgƒŠ‚ÍUTF-8‚Å•Û‘¶‚³‚ê‚Ä‚µ‚Ü‚¤iˆÈ‘O‚̃o[ƒWƒ‡ƒ“‚ƌ݊·«‚È‚µj - // UTF-16‚Å•Û‘¶‚·‚é‚ׂ« - r = RegQueryValueExW(hKey, pw0, lpReserved, lpType, lpData, lpcbData); + if(RegQueryValueExW(hKey, pw0, NULL, &dwType, NULL, 0) == ERROR_SUCCESS) + { + switch(dwType) + { + case REG_SZ: + case REG_EXPAND_SZ: + case REG_MULTI_SZ: + if(lpData && lpcbData) + { + pw1 = AllocateStringW(*lpcbData / sizeof(char) * 4); + wcbData = *lpcbData / sizeof(char) * 4; + r = RegQueryValueExW(hKey, pw0, lpReserved, lpType, (LPBYTE)pw1, &wcbData); + *lpcbData = sizeof(char) * WtoM((char*)lpData, *lpcbData / sizeof(char), pw1, wcbData / sizeof(wchar_t)); + } + break; + default: + r = RegQueryValueExW(hKey, pw0, lpReserved, lpType, lpData, lpcbData); + break; + } + } + else + r = RegQueryValueExW(hKey, pw0, lpReserved, lpType, lpData, lpcbData); END_ROUTINE FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); return r; } @@ -747,13 +770,27 @@ LSTATUS RegSetValueExM(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwTy { LSTATUS r = 0; wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; + DWORD wcbData; START_ROUTINE pw0 = DuplicateMtoW(lpValueName, -1); - // TODO: ƒŒƒWƒXƒgƒŠ‚ÍUTF-8‚Å•Û‘¶‚³‚ê‚Ä‚µ‚Ü‚¤iˆÈ‘O‚̃o[ƒWƒ‡ƒ“‚ƌ݊·«‚È‚µj - // UTF-16‚Å•Û‘¶‚·‚é‚ׂ« + switch(dwType) + { + case REG_SZ: + case REG_EXPAND_SZ: + case REG_MULTI_SZ: + wcbData = MtoW(NULL, 0, (char*)lpData, cbData / sizeof(char)); + pw1 = AllocateStringW(wcbData); + MtoW(pw1, wcbData, (char*)lpData, cbData / sizeof(char)); + wcbData = sizeof(wchar_t) * wcbData; + lpData = (BYTE*)pw1; + cbData = wcbData; + break; + } r = RegSetValueExW(hKey, pw0, Reserved, dwType, lpData, cbData); END_ROUTINE FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); return r; } @@ -974,7 +1011,7 @@ END_ROUTINE HWND HtmlHelpM(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData) { - HINSTANCE r = NULL; + HWND r = NULL; wchar_t* pw0 = NULL; START_ROUTINE pw0 = DuplicateMtoW(pszFile, -1); @@ -984,6 +1021,76 @@ END_ROUTINE return r; } +BOOL CreateProcessM(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation) +{ + BOOL r = FALSE; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; + wchar_t* pw2 = NULL; + wchar_t* pw3 = NULL; + wchar_t* pw4 = NULL; + wchar_t* pw5 = NULL; + STARTUPINFOW wStartupInfo; +START_ROUTINE + pw0 = DuplicateMtoW(lpApplicationName, -1); + pw1 = DuplicateMtoWBuffer(lpCommandLine, -1, (strlen(lpCommandLine) + 1) * 4); + pw2 = DuplicateMtoW(lpCurrentDirectory, -1); + wStartupInfo.cb = sizeof(LPSTARTUPINFOW); + pw3 = DuplicateMtoW(lpStartupInfo->lpReserved, -1); + wStartupInfo.lpReserved = pw3; + pw4 = DuplicateMtoW(lpStartupInfo->lpDesktop, -1); + wStartupInfo.lpDesktop = pw4; + pw5 = DuplicateMtoW(lpStartupInfo->lpTitle, -1); + wStartupInfo.lpTitle = pw5; + wStartupInfo.dwX = lpStartupInfo->dwX; + wStartupInfo.dwY = lpStartupInfo->dwY; + wStartupInfo.dwXSize = lpStartupInfo->dwXSize; + wStartupInfo.dwYSize = lpStartupInfo->dwYSize; + wStartupInfo.dwXCountChars = lpStartupInfo->dwXCountChars; + wStartupInfo.dwYCountChars = lpStartupInfo->dwYCountChars; + wStartupInfo.dwFillAttribute = lpStartupInfo->dwFillAttribute; + wStartupInfo.dwFlags = lpStartupInfo->dwFlags; + wStartupInfo.wShowWindow = lpStartupInfo->wShowWindow; + wStartupInfo.cbReserved2 = lpStartupInfo->cbReserved2; + wStartupInfo.lpReserved2 = lpStartupInfo->lpReserved2; + wStartupInfo.hStdInput = lpStartupInfo->hStdInput; + wStartupInfo.hStdOutput = lpStartupInfo->hStdOutput; + wStartupInfo.hStdError = lpStartupInfo->hStdError; + r = CreateProcessW(pw0, pw1, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, pw2, &wStartupInfo, lpProcessInformation); + WtoM(lpCommandLine, strlen(lpCommandLine) + 1, pw1, -1); +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + FreeDuplicatedString(pw2); + FreeDuplicatedString(pw3); + FreeDuplicatedString(pw4); + FreeDuplicatedString(pw5); + return r; +} + +HINSTANCE FindExecutableM(LPCSTR lpFile, LPCSTR lpDirectory, LPSTR lpResult) +{ + HINSTANCE r = NULL; + wchar_t* pw0 = NULL; + wchar_t* pw1 = NULL; + wchar_t* pw2 = NULL; + wchar_t* pw3 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(lpFile, -1); + pw1 = DuplicateMtoW(lpDirectory, -1); + pw2 = AllocateStringW(MAX_PATH * 4); + r = FindExecutableW(pw0, pw1, pw2); + // ƒoƒbƒtƒ@’·•s–¾‚Ì‚½‚߃I[ƒo[ƒ‰ƒ“‚̉”\«‚ ‚è + WtoM(lpResult, MAX_PATH, pw2, -1); + TerminateStringM(lpResult, MAX_PATH); +END_ROUTINE + FreeDuplicatedString(pw0); + FreeDuplicatedString(pw1); + FreeDuplicatedString(pw2); + FreeDuplicatedString(pw3); + return r; +} + HINSTANCE ShellExecuteM(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd) { HINSTANCE r = NULL; @@ -1224,7 +1331,17 @@ END_ROUTINE return r; } - +INT_PTR DialogBoxParamM(HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam) +{ + INT_PTR r = 0; + wchar_t* pw0 = NULL; +START_ROUTINE + pw0 = DuplicateMtoW(lpTemplateName, -1); + r = DialogBoxParamW(hInstance, pw0, hWndParent, lpDialogFunc, dwInitParam); +END_ROUTINE + FreeDuplicatedString(pw0); + return r; +} diff --git a/mbswrapper.h b/mbswrapper.h index 45d25cb..474e36d 100644 --- a/mbswrapper.h +++ b/mbswrapper.h @@ -59,6 +59,10 @@ #define GetSaveFileName GetSaveFileNameM #undef HtmlHelp #define HtmlHelp HtmlHelpM +#undef CreateProcess +#define CreateProcess CreateProcessM +#undef FindExecutable +#define FindExecutable FindExecutableM #undef ShellExecute #define ShellExecute ShellExecuteM #undef SHBrowseForFolder @@ -75,6 +79,8 @@ #define CreateFontIndirect CreateFontIndirectM #undef ChooseFont #define ChooseFont ChooseFontM +#undef DialogBoxParam +#define DialogBoxParam DialogBoxParamM #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) diff --git a/mesg-eng.h b/mesg-eng.h index 29b6dff..554aa2b 100644 --- a/mesg-eng.h +++ b/mesg-eng.h @@ -302,9 +302,11 @@ #define MSGJPN302 "Master password checker looks broken." #define MSGJPN303 "Master password has been changed." #define MSGJPN304 "Speecified master password is not correct.\r\nAre you sure you want to re-enter?\r\nNo memorized FTP password is available if you choose 'NO'" -#define MSGJPN305 "Shift_JIS Kanji Code" -#define MSGJPN306 "UTF-8 Kanji Code" -#define MSGJPN307 "Shift_JIS Kanji Code (Local)" -#define MSGJPN308 "EUC Kanji Code (Local)" -#define MSGJPN309 "JIS Kanji Code (Local)" -#define MSGJPN310 "UTF-8 Kanji Code (Local)" +#define MSGJPN305 "Shift_JIS" +#define MSGJPN306 "UTF-8N" +#define MSGJPN307 "Shift_JIS Kanji Code" +#define MSGJPN308 "UTF-8N Kanji Code" +#define MSGJPN309 "Shift_JIS Kanji Code (Local)" +#define MSGJPN310 "EUC Kanji Code (Local)" +#define MSGJPN311 "JIS Kanji Code (Local)" +#define MSGJPN312 "UTF-8N Kanji Code (Local)" diff --git a/mesg-eng.old.h b/mesg-eng.old.h index 3bb87ee..ce44780 100644 --- a/mesg-eng.old.h +++ b/mesg-eng.old.h @@ -302,9 +302,11 @@ #define MSGJPN302 "Master password checker looks broken." #define MSGJPN303 "Master password has been changed." #define MSGJPN304 "Speecified master password is not correct.\r\nAre you sure you want to re-enter?\r\nNo memorized FTP password is available if you choose 'NO'" -#define MSGJPN305 "Shift_JIS Kanji Code" -#define MSGJPN306 "UTF-8 Kanji Code" -#define MSGJPN307 "Shift_JIS Kanji Code (Local)" -#define MSGJPN308 "EUC Kanji Code (Local)" -#define MSGJPN309 "JIS Kanji Code (Local)" -#define MSGJPN310 "UTF-8 Kanji Code (Local)" +#define MSGJPN305 "Shift_JIS" +#define MSGJPN306 "UTF-8N" +#define MSGJPN307 "Shift_JIS Kanji Code" +#define MSGJPN308 "UTF-8N Kanji Code" +#define MSGJPN309 "Shift_JIS Kanji Code (Local)" +#define MSGJPN310 "EUC Kanji Code (Local)" +#define MSGJPN311 "JIS Kanji Code (Local)" +#define MSGJPN312 "UTF-8N Kanji Code (Local)" diff --git a/mesg-jpn.h b/mesg-jpn.h index 9bd93dd..395d8dd 100644 --- a/mesg-jpn.h +++ b/mesg-jpn.h @@ -302,9 +302,11 @@ #define MSGJPN302 "\xE7\xA2\xBA\xE8\xAA\x8D\xE7\x94\xA8\xE3\x83\x87\xE3\x83\xBC\xE3\x82\xBF\xE3\x81\x8C\xE5\xA3\x8A\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x82\x8B\xE3\x81\x9F\xE3\x82\x81\xEF\xBC\x8C\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAE\xE6\xAD\xA3\xE5\xBD\x93\xE6\x80\xA7\xE3\x82\x92\xE7\xA2\xBA\xE8\xAA\x8D\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93\xE3\x81\xA7\xE3\x81\x97\xE3\x81\x9F\xEF\xBC\x8E" #define MSGJPN303 "\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x82\x92\xE5\xA4\x89\xE6\x9B\xB4\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F" #define MSGJPN304 "\xE6\x8C\x87\xE5\xAE\x9A\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\xE3\x83\x9E\xE3\x82\xB9\xE3\x82\xBF\xE3\x83\xBC\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8C\xE7\x99\xBB\xE9\x8C\xB2\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\xE3\x82\x82\xE3\x81\xAE\xE3\x81\xA8\xE4\xB8\x80\xE8\x87\xB4\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93\xEF\xBC\x8E\r\n\xE5\x86\x8D\xE5\xBA\xA6\xE5\x85\xA5\xE5\x8A\x9B\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99\xE3\x81\x8B\xEF\xBC\x9F\r\n\xE3\x80\x8C\xE3\x81\x84\xE3\x81\x84\xE3\x81\x88\xE3\x80\x8D\xE3\x82\x92\xE9\x81\xB8\xE3\x81\xB6\xE3\x81\xA8\xE8\xA8\x98\xE6\x86\xB6\xE3\x81\x95\xE3\x82\x8C\xE3\x81\x9F\x46TP\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\xE5\x88\xA9\xE7\x94\xA8\xE3\x81\xA7\xE3\x81\x8D\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93\xEF\xBC\x8E" -#define MSGJPN305 "\xE3\x83\x9B\xE3\x82\xB9\xE3\x83\x88\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFShift_JIS" -#define MSGJPN306 "\xE3\x83\x9B\xE3\x82\xB9\xE3\x83\x88\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8" -#define MSGJPN307 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFShift_JIS" -#define MSGJPN308 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\x45UC" -#define MSGJPN309 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFJIS" -#define MSGJPN310 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8" +#define MSGJPN305 "Shift_JIS" +#define MSGJPN306 "UTF-8N" +#define MSGJPN307 "\xE3\x83\x9B\xE3\x82\xB9\xE3\x83\x88\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFShift_JIS" +#define MSGJPN308 "\xE3\x83\x9B\xE3\x82\xB9\xE3\x83\x88\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8N" +#define MSGJPN309 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFShift_JIS" +#define MSGJPN310 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\x45UC" +#define MSGJPN311 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFJIS" +#define MSGJPN312 "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8N" diff --git a/mesg-jpn.old.h b/mesg-jpn.old.h index 9b5e037..1677022 100644 --- a/mesg-jpn.old.h +++ b/mesg-jpn.old.h @@ -302,9 +302,11 @@ #define MSGJPN302 "Šm”F—pƒf[ƒ^‚ª‰ó‚ê‚Ä‚¢‚邽‚߁Cƒ}ƒXƒ^[ƒpƒXƒ[ƒh‚̐³“–«‚ðŠm”F‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½D" #define MSGJPN303 "ƒ}ƒXƒ^[ƒpƒXƒ[ƒh‚ð•ÏX‚µ‚Ü‚µ‚½" #define MSGJPN304 "Žw’肳‚ꂽƒ}ƒXƒ^[ƒpƒXƒ[ƒh‚ª“o˜^‚³‚ꂽ‚à‚̂ƈê’v‚µ‚Ü‚¹‚ñD\r\nÄ“x“ü—Í‚µ‚Ü‚·‚©H\r\nu‚¢‚¢‚¦v‚ð‘I‚Ô‚Æ‹L‰¯‚³‚ꂽFTPƒpƒXƒ[ƒh‚Í—˜—p‚Å‚«‚Ü‚¹‚ñD" -#define MSGJPN305 "ƒzƒXƒg‚ÌŠ¿ŽšƒR[ƒh‚ÍShift_JIS" -#define MSGJPN306 "ƒzƒXƒg‚ÌŠ¿ŽšƒR[ƒh‚ÍUTF-8" -#define MSGJPN307 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍShift_JIS" -#define MSGJPN308 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍEUC" -#define MSGJPN309 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍJIS" -#define MSGJPN310 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍUTF-8" +#define MSGJPN305 "Shift_JIS" +#define MSGJPN306 "UTF-8N" +#define MSGJPN307 "ƒzƒXƒg‚ÌŠ¿ŽšƒR[ƒh‚ÍShift_JIS" +#define MSGJPN308 "ƒzƒXƒg‚ÌŠ¿ŽšƒR[ƒh‚ÍUTF-8N" +#define MSGJPN309 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍShift_JIS" +#define MSGJPN310 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍEUC" +#define MSGJPN311 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍJIS" +#define MSGJPN312 "ƒ[ƒJƒ‹‚ÌŠ¿ŽšƒR[ƒh‚ÍUTF-8N" diff --git a/toolmenu.c b/toolmenu.c index b216a40..5949215 100644 --- a/toolmenu.c +++ b/toolmenu.c @@ -791,6 +791,10 @@ void EnableUserOpe(void) EnableWindow(hWndDirLocal, TRUE); EnableWindow(hWndDirRemote, TRUE); + // ‘I‘ð•s‰Â‚ÈŠ¿ŽšƒR[ƒh‚̃{ƒ^ƒ“‚ª•\Ž¦‚³‚ê‚éƒoƒO‚ðC³ + HideHostKanjiButton(); + HideLocalKanjiButton(); + HideUI = NO; MakeButtonsFocus(); @@ -1114,11 +1118,28 @@ void HideHostKanjiButton(void) SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_JIS, MAKELONG(TRUE, 0)); SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_UTF8N, MAKELONG(TRUE, 0)); SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KNJ_NONE, MAKELONG(TRUE, 0)); - if(TmpHostKanjiCode != KANJI_NOCNV) - SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0)); - else - SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0)); - break; +// if(TmpHostKanjiCode != KANJI_NOCNV) +// SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0)); +// else +// SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0)); +// break; + // Œ»ÝƒJƒi•ÏŠ·‚ÍShift_JISAJISAEUCŠÔ‚Å‚Ì‚Ý‹@”\‚·‚é + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0)); + switch(TmpHostKanjiCode) + { + case KANJI_SJIS: + case KANJI_JIS: + case KANJI_EUC: + switch(TmpLocalKanjiCode) + { + case KANJI_SJIS: + case KANJI_JIS: + case KANJI_EUC: + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0)); + break; + } + break; + } } return; } @@ -1146,11 +1167,11 @@ void SetLocalKanjiCode(int Type) break; case MENU_L_KNJ_EUC : -// TmpLocalKanjiCode = KANJI_EUC; + TmpLocalKanjiCode = KANJI_EUC; break; case MENU_L_KNJ_JIS : -// TmpLocalKanjiCode = KANJI_JIS; + TmpLocalKanjiCode = KANJI_JIS; break; case MENU_L_KNJ_UTF8N : @@ -1172,11 +1193,11 @@ void DispLocalKanjiCode(void) break; case KANJI_EUC : -// SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0)); + SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0)); break; case KANJI_JIS : -// SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0)); + SendMessage(hWndTbarMain, TB_CHECKBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0)); break; case KANJI_UTF8N : @@ -1205,12 +1226,26 @@ void HideLocalKanjiButton(void) default : SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_SJIS, MAKELONG(TRUE, 0)); -// SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0)); -// SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0)); + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(TRUE, 0)); + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(TRUE, 0)); SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_UTF8N, MAKELONG(TRUE, 0)); - // TODO: Œ»ÝEUC‚ÆJIS‚Í”ñ‘Ήž - SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_EUC, MAKELONG(FALSE, 0)); - SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_L_KNJ_JIS, MAKELONG(FALSE, 0)); + // Œ»ÝƒJƒi•ÏŠ·‚ÍShift_JISAJISAEUCŠÔ‚Å‚Ì‚Ý‹@”\‚·‚é + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(FALSE, 0)); + switch(TmpHostKanjiCode) + { + case KANJI_SJIS: + case KANJI_JIS: + case KANJI_EUC: + switch(TmpLocalKanjiCode) + { + case KANJI_SJIS: + case KANJI_JIS: + case KANJI_EUC: + SendMessage(hWndTbarMain, TB_ENABLEBUTTON, MENU_KANACNV, MAKELONG(TRUE, 0)); + break; + } + break; + } break; } return;