OSDN Git Service

Fix bugs of text encoding routines.
[ffftp/ffftp.git] / getput.c
index 7cf67a2..cf28616 100644 (file)
--- 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)\r
        {\r
                // UTF-8\91Î\89\9e\r
+               char Buf3[(BUFSIZE + 3) * 4];\r
+               CODECONVINFO cInfo2;\r
                int ProcessedBOM = NO;\r
                if(CreateMode == OPEN_ALWAYS)\r
                        SetFilePointer(iFileHandle, 0, 0, FILE_END);\r
@@ -1192,6 +1194,9 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                InitCodeConvInfo(&cInfo);\r
                cInfo.KanaCnv = Pkt->KanaCnv;\r
 \r
+               InitCodeConvInfo(&cInfo2);\r
+               cInfo2.KanaCnv = Pkt->KanaCnv;\r
+\r
                /*===== \83t\83@\83C\83\8b\82ð\8eó\90M\82·\82é\83\8b\81[\83v =====*/\r
                while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO))\r
                {\r
@@ -1262,13 +1267,26 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                switch(Pkt->KanjiCodeDesired)\r
                                                {\r
                                                case KANJI_SJIS:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvSJIStoJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvJIStoSJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvSJIStoJIS(&cInfo);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                                       cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvSJIStoEUC(&cInfo);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                                       cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -1280,7 +1298,7 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                                break;\r
                                                        }\r
                                                        Continue = ConvSJIStoUTF8N(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                }\r
@@ -1290,15 +1308,28 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvJIStoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvJIStoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvJIStoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -1310,8 +1341,6 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                                break;\r
                                                        }\r
                                                        Continue = ConvJIStoSJIS(&cInfo);\r
-                                                       InitCodeConvInfo(&cInfo2);\r
-                                                       cInfo2.KanaCnv = NO;\r
                                                        cInfo2.Str = cInfo.Buf;\r
                                                        cInfo2.StrLen = cInfo.OutLen;\r
                                                        cInfo2.Buf = Buf3;\r
@@ -1325,15 +1354,28 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvEUCtoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvEUCtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvEUCtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -1345,8 +1387,6 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                                break;\r
                                                        }\r
                                                        Continue = ConvEUCtoSJIS(&cInfo);\r
-                                                       InitCodeConvInfo(&cInfo2);\r
-                                                       cInfo2.KanaCnv = NO;\r
                                                        cInfo2.Str = cInfo.Buf;\r
                                                        cInfo2.StrLen = cInfo.OutLen;\r
                                                        cInfo2.Buf = Buf3;\r
@@ -1379,12 +1419,24 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvUTF8NtoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvUTF8NtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvUTF8NtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
@@ -1425,7 +1477,130 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
                        cInfo.Buf = Buf2;\r
                        cInfo.BufSize = BUFSIZE+3;\r
                        FlushRestData(&cInfo);\r
-                       if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)\r
+                       switch(Pkt->KanjiCode)\r
+                       {\r
+                       case KANJI_SJIS:\r
+                               switch(Pkt->KanjiCodeDesired)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvJIStoSJIS(&cInfo2);\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               }\r
+                               break;\r
+                       case KANJI_JIS:\r
+                               switch(Pkt->KanjiCodeDesired)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoJIS(&cInfo2);\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoEUC(&cInfo2);\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoUTF8N(&cInfo2);\r
+                                       break;\r
+                               }\r
+                               break;\r
+                       case KANJI_EUC:\r
+                               switch(Pkt->KanjiCodeDesired)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoJIS(&cInfo2);\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoEUC(&cInfo2);\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoUTF8N(&cInfo2);\r
+                                       break;\r
+                               }\r
+                               break;\r
+                       case KANJI_UTF8N:\r
+                               switch(Pkt->KanjiCodeDesired)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoJIS(&cInfo2);\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       cInfo2.Str = cInfo.Buf;\r
+                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                       cInfo2.Buf = Buf3;\r
+                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                       ConvSJIStoEUC(&cInfo2);\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                       cInfo2.OutLen = cInfo.OutLen;\r
+                                       break;\r
+                               }\r
+                               break;\r
+                       }\r
+//                     if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)\r
+                       if(WriteFile(iFileHandle, Buf3, cInfo2.OutLen, &Writed, NULL) == FALSE)\r
+                               Pkt->Abort = ABORT_DISKFULL;\r
+                       cInfo2.Buf = Buf3;\r
+                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                       FlushRestData(&cInfo2);\r
+                       if(WriteFile(iFileHandle, Buf3, cInfo2.OutLen, &Writed, NULL) == FALSE)\r
                                Pkt->Abort = ABORT_DISKFULL;\r
                }\r
 \r
@@ -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)\r
        {\r
                // UTF-8\91Î\89\9e\r
+               char Buf3[(BUFSIZE + 3) * 4];\r
+               CODECONVINFO cInfo2;\r
                int ProcessedBOM = NO;\r
                if(Pkt->hWndTrans != NULL)\r
                {\r
@@ -2000,6 +2177,9 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                cInfo.KanaCnv = Pkt->KanaCnv;\r
                InitTermCodeConvInfo(&tInfo);\r
 \r
+               InitCodeConvInfo(&cInfo2);\r
+               cInfo2.KanaCnv = Pkt->KanaCnv;\r
+\r
                /*===== \83t\83@\83C\83\8b\82ð\91\97\90M\82·\82é\83\8b\81[\83v =====*/\r
                while((Pkt->Abort == ABORT_NONE) &&\r
                          (ForceAbort == NO) &&\r
@@ -2031,21 +2211,32 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
 //                                             Continue = ConvSJIStoJIS(&cInfo);\r
 //                                     else\r
 //                                             Continue = ConvSJIStoEUC(&cInfo);\r
-                                       char Buf3[(BUFSIZE + 3) * 4];\r
-                                       CODECONVINFO cInfo2;\r
                                        switch(Pkt->KanjiCodeDesired)\r
                                        {\r
                                        case KANJI_SJIS:\r
                                                switch(Pkt->KanjiCode)\r
                                                {\r
                                                case KANJI_SJIS:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvSJIStoJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvJIStoSJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvSJIStoJIS(&cInfo);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                                       cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvSJIStoEUC(&cInfo);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                                       cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -2057,7 +2248,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                                break;\r
                                                        }\r
                                                        Continue = ConvSJIStoUTF8N(&cInfo);\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                }\r
@@ -2067,15 +2258,28 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvJIStoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvJIStoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvJIStoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -2087,8 +2291,6 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                                break;\r
                                                        }\r
                                                        Continue = ConvJIStoSJIS(&cInfo);\r
-                                                       InitCodeConvInfo(&cInfo2);\r
-                                                       cInfo2.KanaCnv = NO;\r
                                                        cInfo2.Str = cInfo.Buf;\r
                                                        cInfo2.StrLen = cInfo.OutLen;\r
                                                        cInfo2.Buf = Buf3;\r
@@ -2102,15 +2304,28 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvEUCtoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvEUCtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
-                                                       memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
-                                                       cInfo2.OutLen = cInfo.StrLen;\r
-                                                       Continue = NO;\r
+//                                                     memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
+//                                                     cInfo2.OutLen = cInfo.StrLen;\r
+//                                                     Continue = NO;\r
+                                                       // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                                       Continue = ConvEUCtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        if(ProcessedBOM == NO)\r
@@ -2122,8 +2337,6 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                                break;\r
                                                        }\r
                                                        Continue = ConvEUCtoSJIS(&cInfo);\r
-                                                       InitCodeConvInfo(&cInfo2);\r
-                                                       cInfo2.KanaCnv = NO;\r
                                                        cInfo2.Str = cInfo.Buf;\r
                                                        cInfo2.StrLen = cInfo.OutLen;\r
                                                        cInfo2.Buf = Buf3;\r
@@ -2156,12 +2369,24 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                                {\r
                                                case KANJI_SJIS:\r
                                                        Continue = ConvUTF8NtoSJIS(&cInfo);\r
-                                                       memcpy(Buf3, Buf2, cInfo.OutLen);\r
+                                                       memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
                                                        cInfo2.OutLen = cInfo.OutLen;\r
                                                        break;\r
                                                case KANJI_JIS:\r
+                                                       Continue = ConvUTF8NtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoJIS(&cInfo2);\r
                                                        break;\r
                                                case KANJI_EUC:\r
+                                                       Continue = ConvUTF8NtoSJIS(&cInfo);\r
+                                                       cInfo2.Str = cInfo.Buf;\r
+                                                       cInfo2.StrLen = cInfo.OutLen;\r
+                                                       cInfo2.Buf = Buf3;\r
+                                                       cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                                       ConvSJIStoEUC(&cInfo2);\r
                                                        break;\r
                                                case KANJI_UTF8N:\r
                                                        memcpy(Buf3, cInfo.Str, cInfo.StrLen);\r
@@ -2206,8 +2431,131 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                                cInfo.Buf = Buf2;\r
                                cInfo.BufSize = BUFSIZE+3;\r
                                FlushRestData(&cInfo);\r
+                               switch(Pkt->KanjiCodeDesired)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       switch(Pkt->KanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvJIStoSJIS(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       }\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       switch(Pkt->KanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoJIS(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoEUC(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoUTF8N(&cInfo2);\r
+                                               break;\r
+                                       }\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       switch(Pkt->KanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoJIS(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               // \83J\83i\95Ï\8a·\82Ì\82½\82ß\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoEUC(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoUTF8N(&cInfo2);\r
+                                               break;\r
+                                       }\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       switch(Pkt->KanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoJIS(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               cInfo2.Str = cInfo.Buf;\r
+                                               cInfo2.StrLen = cInfo.OutLen;\r
+                                               cInfo2.Buf = Buf3;\r
+                                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                                               ConvSJIStoEUC(&cInfo2);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               memcpy(Buf3, cInfo.Buf, cInfo.OutLen);\r
+                                               cInfo2.OutLen = cInfo.OutLen;\r
+                                               break;\r
+                                       }\r
+                                       break;\r
+                               }\r
 \r
-                               if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)\r
+//                             if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)\r
+                               if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FAIL)\r
+                                       Pkt->Abort = ABORT_ERROR;\r
+                               cInfo2.Buf = Buf3;\r
+                               cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
+                               FlushRestData(&cInfo2);\r
+                               if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FAIL)\r
                                        Pkt->Abort = ABORT_ERROR;\r
                        }\r
 \r
@@ -2571,12 +2919,17 @@ static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int
                        else if(Pkt->Type == TYPE_A)\r
                                SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN120);\r
 \r
+                       // UTF-8\91Î\89\9e\r
                        if(Pkt->KanjiCode == KANJI_NOCNV)\r
                                SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN121);\r
+                       else if(Pkt->KanjiCode == KANJI_SJIS)\r
+                               SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN305);\r
                        else if(Pkt->KanjiCode == KANJI_JIS)\r
                                SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN122);\r
                        else if(Pkt->KanjiCode == KANJI_EUC)\r
                                SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN123);\r
+                       else if(Pkt->KanjiCode == KANJI_UTF8N)\r
+                               SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN306);\r
                }\r
                else\r
                {\r
@@ -2668,14 +3021,28 @@ static int IsSpecialDevice(char *Fname)
        int Sts;\r
 \r
        Sts = NO;\r
-       if((_stricmp(Fname, "CON") == 0) ||\r
-          (_stricmp(Fname, "PRN") == 0) ||\r
-          (_stricmp(Fname, "AUX") == 0) ||\r
-          (_strnicmp(Fname, "CON.", 4) == 0) ||\r
-          (_strnicmp(Fname, "PRN.", 4) == 0) ||\r
-          (_strnicmp(Fname, "AUX.", 4) == 0))\r
+       // \83o\83O\8fC\90³\r
+//     if((_stricmp(Fname, "CON") == 0) ||\r
+//        (_stricmp(Fname, "PRN") == 0) ||\r
+//        (_stricmp(Fname, "AUX") == 0) ||\r
+//        (_strnicmp(Fname, "CON.", 4) == 0) ||\r
+//        (_strnicmp(Fname, "PRN.", 4) == 0) ||\r
+//        (_strnicmp(Fname, "AUX.", 4) == 0))\r
+//     {\r
+//             Sts = YES;\r
+//     }\r
+       if(_strnicmp(Fname, "AUX", 3) == 0|| _strnicmp(Fname, "CON", 3) == 0 || _strnicmp(Fname, "NUL", 3) == 0 || _strnicmp(Fname, "PRN", 3) == 0)\r
+       {\r
+               if(*(Fname + 3) == '\0' || *(Fname + 3) == '.')\r
+                       Sts = YES;\r
+       }\r
+       else if(_strnicmp(Fname, "COM", 3) == 0 || _strnicmp(Fname, "LPT", 3) == 0)\r
        {\r
-               Sts = YES;\r
+               if(isdigit(*(Fname + 3)) != 0)\r
+               {\r
+                       if(*(Fname + 4) == '\0' || *(Fname + 4) == '.')\r
+                               Sts = YES;\r
+               }\r
        }\r
        return(Sts);\r
 }\r