OSDN Git Service

Add support for MLSD responses from some broken hosts.
[ffftp/ffftp.git] / ftpproc.c
index 45d15f4..8963604 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -1,6 +1,6 @@
-/*=============================================================================\r
+/*=============================================================================\r
 *\r
-*                                                              \82e\82s\82o\83R\83}\83\93\83h\91\80\8dì\r
+*                                                              FTPコマンド操作\r
 *\r
 ===============================================================================\r
 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
@@ -28,6 +28,8 @@
 /============================================================================*/\r
 \r
 #define  STRICT\r
+// IPv6対応\r
+#include <winsock2.h>\r
 #include <windows.h>\r
 #include <stdio.h>\r
 #include <stdlib.h>\r
 #include <htmlhelp.h>\r
 #include "helpid.h"\r
 \r
-// UTF-8\91Î\89\9e\r
+// UTF-8対応\r
 #undef __MBSWRAPPER_H__\r
 #include "mbswrapper.h"\r
 \r
 \r
-/*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
+/*===== プロトタイプ =====*/\r
 \r
 static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList);\r
-static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 \r
 static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote);\r
 static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base);\r
 static int CheckLocalFile(TRANSPACKET *Pkt);\r
-static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static void RemoveAfterSemicolon(char *Path);\r
 static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base);\r
-static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
-static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt);\r
 static int AskMirrorNoTrn(char *Fname, int Mode);\r
 static int AskUpLoadFileAttr(char *Fname);\r
-static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+#if defined(HAVE_TANDEM)\r
+static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+#endif\r
 static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir);\r
 static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir);\r
-static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
-static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+//static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static void SetAttrToDialog(HWND hWnd, int Attr);\r
 static int GetAttrFromDialog(HWND hDlg);\r
 static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
 static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
 static int RenameUnuseableName(char *Fname);\r
 \r
-/*===== \8aO\95\94\8eQ\8fÆ ====*/\r
+/*===== 外部参照 ====*/\r
 \r
 extern HWND hHelpWin;\r
 \r
-/* \90Ý\92è\92l */\r
+/* 設定値 */\r
 extern int FnameCnv;\r
 extern int RecvMode;\r
 extern int SendMode;\r
@@ -92,28 +109,31 @@ extern int VaxSemicolon;
 extern int DebugConsole;\r
 extern int CancelFlg;\r
 \r
-/*===== \83\8d\81[\83J\83\8b\82È\83\8f\81[\83N =====*/\r
+/*===== ローカルなワーク =====*/\r
 \r
-static char TmpString[FMAX_PATH+80];           /* \83e\83\93\83|\83\89\83\8a */\r
-static int CurWin;                                             /* \83E\83C\83\93\83h\83E\94Ô\8d\86 */\r
+static char TmpString[FMAX_PATH+80];           /* テンポラリ */\r
+#if defined(HAVE_TANDEM)\r
+static char TmpFileCode[5];            /* テンポラリ */\r
+#endif\r
+static int CurWin;                                             /* ウインドウ番号 */\r
 \r
-int UpExistMode = EXIST_OVW;           /* \83A\83b\83v\83\8d\81[\83h\82Å\93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\88µ\82¢\95û EXIST_xxx */\r
-int ExistMode = EXIST_OVW;             /* \93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\88µ\82¢\95û EXIST_xxx */\r
-static int ExistNotify;                /* \8am\94F\83_\83C\83A\83\8d\83O\82ð\8fo\82·\82©\82Ç\82¤\82© YES/NO */\r
+int UpExistMode = EXIST_OVW;           /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
+int ExistMode = EXIST_OVW;             /* 同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
+static int ExistNotify;                /* 確認ダイアログを出すかどうか YES/NO */\r
 \r
-static double FileSize;                /* \83t\83@\83C\83\8b\91\8d\97e\97Ê */\r
+static double FileSize;                /* ファイル総容量 */\r
 \r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é --------------------\r
+/*----- ファイル一覧で指定されたファイルをダウンロードする --------------------\r
 *\r
 *      Parameter\r
-*              int ChName : \96¼\91O\82ð\95Ï\82¦\82é\82©\82Ç\82¤\82© (YES/NO)\r
-*              int ForceFile : \83f\83B\83\8c\83N\83g\83\8a\82ð\83t\83@\83C\83\8b\8c©\82È\82·\82©\82Ç\82¤\82© (YES/NO)\r
-*              int All : \91S\82Ä\82ª\91I\82Î\82ê\82Ä\82¢\82é\95¨\82Æ\82µ\82Ä\88µ\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+*              int ChName : 名前を変えるかどうか (YES/NO)\r
+*              int ForceFile : ディレクトリをファイル見なすかどうか (YES/NO)\r
+*              int All : 全てが選ばれている物として扱うかどうか (YES/NO)\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void DownLoadProc(int ChName, int ForceFile, int All)\r
@@ -122,7 +142,10 @@ void DownLoadProc(int ChName, int ForceFile, int All)
        FILELIST *Pos;\r
        TRANSPACKET Pkt;\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -152,7 +175,7 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                else if(FnameCnv == FNAME_UPPER)\r
                                        _mbsupr(TmpString);\r
                                RemoveAfterSemicolon(TmpString);\r
-                               if(RenameUnuseableName(TmpString) == FAIL)\r
+                               if(RenameUnuseableName(TmpString) == FFFTP_FAIL)\r
                                        break;\r
                        }\r
                        else\r
@@ -160,7 +183,7 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                CurWin = WIN_REMOTE;\r
                                if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES)\r
                                {\r
-                                       if(RenameUnuseableName(TmpString) == FAIL)\r
+                                       if(RenameUnuseableName(TmpString) == FFFTP_FAIL)\r
                                                break;\r
                                }\r
                                else\r
@@ -200,15 +223,28 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                }\r
 \r
                                strcpy(Pkt.Cmd, "RETR ");\r
+#if defined(HAVE_TANDEM)\r
+                               if(AskHostType() == HTYPE_TANDEM) {\r
+                                       if(AskTransferType() != TYPE_X) {\r
+                                               Pkt.Type = AskTransferType();\r
+                                       } else {\r
+                                               Pkt.Attr = Pos->Attr;\r
+                                               if (Pkt.Attr == 101)\r
+                                                       Pkt.Type = TYPE_A;\r
+                                               else\r
+                                                       Pkt.Type = TYPE_I;\r
+                                       }\r
+                               } else\r
+#endif\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType());\r
                                Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                               // UTF-8\91Î\89\9e\r
+                               // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
-                               Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize \82ª\83Z\83b\83g\82³\82ê\82é */\r
+                               Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
@@ -237,20 +273,23 @@ void DownLoadProc(int ChName, int ForceFile, int All)
 }\r
 \r
 \r
-/*----- \8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\88ê\82Â\83_\83E\83\93\83\8d\81[\83h\82·\82é ------------------------------\r
+/*----- 指定されたファイルを一つダウンロードする ------------------------------\r
 *\r
 *      Parameter\r
-*              char *Fname : \83t\83@\83C\83\8b\96¼\r
+*              char *Fname : ファイル名\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void DirectDownLoadProc(char *Fname)\r
 {\r
        TRANSPACKET Pkt;\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -275,7 +314,7 @@ void DirectDownLoadProc(char *Fname)
                                _mbsupr(TmpString);\r
                        RemoveAfterSemicolon(TmpString);\r
 \r
-                       if(RenameUnuseableName(TmpString) == SUCCESS)\r
+                       if(RenameUnuseableName(TmpString) == FFFTP_SUCCESS)\r
                        {\r
                                strcat(Pkt.LocalFile, TmpString);\r
                                ReplaceAll(Pkt.LocalFile, '/', '\\');\r
@@ -304,14 +343,14 @@ void DirectDownLoadProc(char *Fname)
                                strcpy(Pkt.Cmd, "RETR-S ");\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType());\r
 \r
-                               /* \83T\83C\83Y\82Æ\93ú\95t\82Í\93]\91\97\91¤\83X\83\8c\83b\83h\82Å\8eæ\93¾\82µ\81A\83Z\83b\83g\82·\82é */\r
+                               /* サイズと日付は転送側スレッドで取得し、セットする */\r
 \r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                               // UTF-8\91Î\89\9e\r
+                               // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
-                               Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize \82ª\83Z\83b\83g\82³\82ê\82é */\r
+                               Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
                                if((Pkt.Mode != EXIST_ABORT) && (Pkt.Mode != EXIST_IGNORE))\r
                                        AddTransFileList(&Pkt);\r
                        }\r
@@ -336,13 +375,13 @@ void DirectDownLoadProc(char *Fname)
 }\r
 \r
 \r
-/*----- \93ü\97Í\82³\82ê\82½\83t\83@\83C\83\8b\96¼\82Ì\83t\83@\83C\83\8b\82ð\88ê\82Â\83_\83E\83\93\83\8d\81[\83h\82·\82é ------------------\r
+/*----- 入力されたファイル名のファイルを一つダウンロードする ------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void InputDownLoadProc(void)\r
@@ -364,13 +403,13 @@ void InputDownLoadProc(void)
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83_\83E\83\93\83\8d\81[\83h\82ð\8ds\82¤ ----------------------------------------\r
+/*----- ミラーリングダウンロードを行う ----------------------------------------\r
 *\r
 *      Parameter\r
-*              int Notify : \8am\94F\82ð\8ds\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+*              int Notify : 確認を行うかどうか (YES/NO)\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void MirrorDownloadProc(int Notify)\r
@@ -386,7 +425,10 @@ void MirrorDownloadProc(int Notify)
        int Level;\r
        int Mode;\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -399,7 +441,7 @@ void MirrorDownloadProc(int Notify)
 \r
                if((Notify == YES) || (Notify == YES_LIST))\r
                {\r
-                       /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\8eæ\93¾ =====*/\r
+                       /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
                        MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
@@ -409,7 +451,7 @@ void MirrorDownloadProc(int Notify)
                        RemotePos = RemoteListBase;\r
                        while(RemotePos != NULL)\r
                        {\r
-                               RemotePos->Attr = YES;          /* RemotePos->Attr\82Í\93]\91\97\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+                               RemotePos->Attr = YES;          /* RemotePos->Attrは転送するかどうかのフラグに使用 (YES/NO) */\r
                                RemotePos = RemotePos->Next;\r
                        }\r
 \r
@@ -423,7 +465,7 @@ void MirrorDownloadProc(int Notify)
                                }\r
                                else\r
                                {\r
-                                       LocalPos->Attr = NO;    /* LocalPos->Attr\82Í\8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+                                       LocalPos->Attr = NO;    /* LocalPos->Attrは削除するかどうかのフラグに使用 (YES/NO) */\r
 \r
                                        if(LocalPos->Node == NODE_DIR)\r
                                        {\r
@@ -445,7 +487,7 @@ void MirrorDownloadProc(int Notify)
                                }\r
                        }\r
 \r
-                       /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\94ä\8ar =====*/\r
+                       /*===== ファイルリスト比較 =====*/\r
 \r
                        RemotePos = RemoteListBase;\r
                        while(RemotePos != NULL)\r
@@ -504,7 +546,7 @@ void MirrorDownloadProc(int Notify)
 \r
                        DispMirrorFiles(LocalListBase, RemoteListBase);\r
 \r
-                       /*===== \8dí\8f\9c\81^\83A\83b\83v\83\8d\81[\83h =====*/\r
+                       /*===== 削除/アップロード =====*/\r
 \r
                        LocalPos = LocalListBase;\r
                        while(LocalPos != NULL)\r
@@ -559,7 +601,7 @@ void MirrorDownloadProc(int Notify)
                                                Pkt.Time = RemotePos->Time;\r
 //                                             Pkt.Attr = 0;\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                                               // UTF-8\91Î\89\9e\r
+                                               // UTF-8対応\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
@@ -605,14 +647,14 @@ void MirrorDownloadProc(int Notify)
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ð\95\\8e¦ --------------------------------------\r
+/*----- ミラーリングのファイル一覧を表示 --------------------------------------\r
 *\r
 *      Parameter\r
-*              FILELIST *Local : \83\8d\81[\83J\83\8b\91¤\r
-*              FILELIST *Remote : \83\8a\83\82\81[\83g\91¤\r
+*              FILELIST *Local : ローカル側\r
+*              FILELIST *Remote : リモート側\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote)\r
@@ -648,15 +690,15 @@ static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote)
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\8e\9e\82Ì\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83H\83\8b\83_\8dí\8f\9c ------------------------------\r
+/*----- ミラーリング時のローカル側のフォルダ削除 ------------------------------\r
 *\r
 *      Parameter\r
-*              FILELIST *Local : \83t\83@\83C\83\8b\83\8a\83X\83g\r
+*              FILELIST *Local : ファイルリスト\r
 *              TRANSPACKET *Pkt : \r
 *              TRANSPACKET **Base : \r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base)\r
@@ -685,17 +727,17 @@ static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACK
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\96¼\82Ì\83Z\83~\83R\83\8d\83\93\88È\8d~\82ð\8eæ\82è\8f\9c\82­ ----------------------------------\r
+/*----- ファイル名のセミコロン以降を取り除く ----------------------------------\r
 *\r
 *      Parameter\r
-*              char *Path : \83t\83@\83C\83\8b\96¼\r
+*              char *Path : ファイル名\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Note\r
-*              Path\82Ì\93à\97e\82ª\8f\91\82«\8a·\82¦\82ç\82ê\82é\r
-*              \83I\83v\83V\83\87\83\93\90Ý\92è\82É\82æ\82Á\82Ä\8f\88\97\9d\82ð\90Ø\91Ö\82¦\82é\r
+*              Pathの内容が書き換えられる\r
+*              オプション設定によって処理を切替える\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void RemoveAfterSemicolon(char *Path)\r
@@ -711,17 +753,17 @@ static void RemoveAfterSemicolon(char *Path)
 }\r
 \r
 \r
-/*----- \83\8d\81[\83J\83\8b\82É\93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82È\82¢\82©\83`\83F\83b\83N --------------------------\r
+/*----- ローカルに同じ名前のファイルがないかチェック --------------------------\r
 *\r
 *      Parameter\r
-*              TRANSPACKET *Pkt : \93]\91\97\83t\83@\83C\83\8b\8fî\95ñ\r
+*              TRANSPACKET *Pkt : 転送ファイル情報\r
 *\r
 *      Return Value\r
-*              int \8f\88\97\9d\95û\96@\r
+*              int 処理方法\r
 *                      EXIST_OVW/EXIST_RESUME/EXIST_IGNORE\r
 *\r
 *      Note\r
-*              Pkt.ExistSize, ExistMode\81AExistNotify \82ª\95Ï\8dX\82³\82ê\82é\r
+*              Pkt.ExistSize, ExistMode、ExistNotify が変更される\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int CheckLocalFile(TRANSPACKET *Pkt)\r
@@ -753,7 +795,7 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
 \r
                        if(Ret == EXIST_NEW)\r
                        {\r
-                               /*\83t\83@\83C\83\8b\93ú\95t\83`\83F\83b\83N */\r
+                               /*ファイル日付チェック */\r
                                if(CompareFileTime(&Find.ftLastWriteTime, &Pkt->Time) < 0)\r
                                        Ret = EXIST_OVW;\r
                                else\r
@@ -765,19 +807,21 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
 }\r
 \r
 \r
-/*----- \83\8d\81[\83J\83\8b\82É\93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ----\r
+/*----- ローカルに同じ名前のファイルがある時の確認ダイアログのコールバック ----\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
        static const RADIOBUTTON DownExistButton[] = {\r
@@ -806,7 +850,7 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                        {\r
                                case IDOK_ALL :\r
                                        ExistNotify = NO;\r
-                                       /* \82±\82±\82É break \82Í\82È\82¢ */\r
+                                       /* ここに break はない */\r
 \r
                                case IDOK :\r
                                        ExistMode = AskRadioButtonValue(hDlg, DownExistButton, DOWNEXISTBUTTONS);\r
@@ -833,14 +877,14 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
 \r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é --------------------\r
+/*----- ファイル一覧で指定されたファイルをアップロードする --------------------\r
 *\r
 *      Parameter\r
-*              int ChName : \96¼\91O\82ð\95Ï\82¦\82é\82©\82Ç\82¤\82© (YES/NO)\r
-*              int All : \91S\82Ä\82ª\91I\82Î\82ê\82Ä\82¢\82é\95¨\82Æ\82µ\82Ä\88µ\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+*              int ChName : 名前を変えるかどうか (YES/NO)\r
+*              int All : 全てが選ばれている物として扱うかどうか (YES/NO)\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void UpLoadListProc(int ChName, int All)\r
@@ -854,16 +898,19 @@ void UpLoadListProc(int ChName, int All)
        char Tmp[FMAX_PATH+1];\r
        int FirstAdd;\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
-               // \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
+               // ローカル側で選ばれているファイルをFileListBaseに登録\r
                FileListBase = NULL;\r
                MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
 \r
-               // \8c»\8dÝ\83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82É\95\\8e¦\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ðRemoteList\82É\93o\98^\r
-               // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+               // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
+               // 同名ファイルチェック用\r
                RemoteList = NULL;\r
                AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList);\r
 \r
@@ -883,12 +930,29 @@ void UpLoadListProc(int ChName, int All)
                                        _mbslwr(Cat);\r
                                else if(FnameCnv == FNAME_UPPER)\r
                                        _mbsupr(Cat);\r
+#if defined(HAVE_TANDEM)\r
+                               Pkt.FileCode = 0;\r
+                               Pkt.PriExt = DEF_PRIEXT;\r
+                               Pkt.SecExt = DEF_SECEXT;\r
+                               Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
                        }\r
                        else\r
                        {\r
-                               // \96¼\91O\82ð\95Ï\8dX\82·\82é\r
+                               // 名前を変更する\r
                                strcpy(TmpString, Pos->File);\r
                                CurWin = WIN_LOCAL;\r
+#if defined(HAVE_TANDEM)\r
+                               strcpy(TmpFileCode, "0"); /* ASCII モードの場合は無視される */\r
+                               if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+                                       if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_with_ext_dlg), GetMainHwnd(), UpDownAsWithExtDialogCallBack) == YES) {\r
+                                               strcat(Pkt.RemoteFile, TmpString);\r
+                                               Pkt.FileCode = atoi(TmpFileCode);\r
+                                       } else {\r
+                                               break;\r
+                                       }\r
+                               } else\r
+#endif\r
                                if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES)\r
                                        strcat(Pkt.RemoteFile, TmpString);\r
                                else\r
@@ -910,10 +974,10 @@ void UpLoadListProc(int ChName, int All)
 \r
                        if(Pos->Node == NODE_DIR)\r
                        {\r
-                               // \83t\83H\83\8b\83_\82Ì\8fê\8d\87\r
+                               // フォルダの場合\r
 \r
-                               // \83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ðRemoteList\82É\93o\98^\r
-                               // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+                               // ホスト側のファイル一覧をRemoteListに登録\r
+                               // 同名ファイルチェック用\r
                                if(RemoteList != NULL)\r
                                        DeleteFileList(&RemoteList);\r
                                RemoteList = NULL;\r
@@ -927,7 +991,7 @@ void UpLoadListProc(int ChName, int All)
                                }\r
                                else\r
                                {\r
-                                       // \83t\83H\83\8b\83_\82ð\8dì\90¬\r
+                                       // フォルダを作成\r
                                        if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
                                        {\r
                                                strcpy(Pkt1.Cmd, "SETCUR");\r
@@ -942,7 +1006,7 @@ void UpLoadListProc(int ChName, int All)
                        }\r
                        else if(Pos->Node == NODE_FILE)\r
                        {\r
-                               // \83t\83@\83C\83\8b\82Ì\8fê\8d\87\r
+                               // ファイルの場合\r
                                AskLocalCurDir(Pkt.LocalFile, FMAX_PATH);\r
                                SetYenTail(Pkt.LocalFile);\r
                                strcat(Pkt.LocalFile, Pos->File);\r
@@ -954,9 +1018,14 @@ void UpLoadListProc(int ChName, int All)
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                               // UTF-8\91Î\89\9e\r
+                               // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+                               if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+                                       CalcExtentSize(&Pkt, Pos->Size);\r
+                               }\r
+#endif\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
@@ -998,13 +1067,13 @@ void UpLoadListProc(int ChName, int All)
 }\r
 \r
 \r
-/*----- \83h\83\89\83b\83O\81\95\83h\83\8d\83b\83v\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é --------------\r
+/*----- ドラッグ&ドロップで指定されたファイルをアップロードする --------------\r
 *\r
 *      Parameter\r
-*              WPARAM wParam : \83h\83\8d\83b\83v\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\8fî\95ñ\r
+*              WPARAM wParam : ドロップされたファイルの情報\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void UpLoadDragProc(WPARAM wParam)\r
@@ -1019,16 +1088,19 @@ void UpLoadDragProc(WPARAM wParam)
        int FirstAdd;\r
        char Cur[FMAX_PATH+1];\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
-               // \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
+               // ローカル側で選ばれているファイルをFileListBaseに登録\r
                FileListBase = NULL;\r
                MakeDroppedFileList(wParam, Cur, &FileListBase);\r
 \r
-               // \8c»\8dÝ\83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82É\95\\8e¦\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ðRemoteList\82É\93o\98^\r
-               // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+               // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
+               // 同名ファイルチェック用\r
                RemoteList = NULL;\r
                AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList);\r
 \r
@@ -1048,6 +1120,12 @@ void UpLoadDragProc(WPARAM wParam)
                        else if(FnameCnv == FNAME_UPPER)\r
                                _mbsupr(Cat);\r
                        ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
+#if defined(HAVE_TANDEM)\r
+                       Pkt.FileCode = 0;\r
+                       Pkt.PriExt = DEF_PRIEXT;\r
+                       Pkt.SecExt = DEF_SECEXT;\r
+                       Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
 \r
                        if(AskHostType() == HTYPE_ACOS)\r
                        {\r
@@ -1063,10 +1141,10 @@ void UpLoadDragProc(WPARAM wParam)
 \r
                        if(Pos->Node == NODE_DIR)\r
                        {\r
-                               // \83t\83H\83\8b\83_\82Ì\8fê\8d\87\r
+                               // フォルダの場合\r
 \r
-                               // \83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ðRemoteList\82É\93o\98^\r
-                               // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+                               // ホスト側のファイル一覧をRemoteListに登録\r
+                               // 同名ファイルチェック用\r
                                if(RemoteList != NULL)\r
                                        DeleteFileList(&RemoteList);\r
                                RemoteList = NULL;\r
@@ -1094,7 +1172,7 @@ void UpLoadDragProc(WPARAM wParam)
                        }\r
                        else if(Pos->Node == NODE_FILE)\r
                        {\r
-                               // \83t\83@\83C\83\8b\82Ì\8fê\8d\87\r
+                               // ファイルの場合\r
                                strcpy(Pkt.LocalFile, Cur);\r
                                SetYenTail(Pkt.LocalFile);\r
                                strcat(Pkt.LocalFile, Pos->File);\r
@@ -1106,9 +1184,15 @@ void UpLoadDragProc(WPARAM wParam)
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                               // UTF-8\91Î\89\9e\r
+                               // UTF-8対応\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+                               if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+                                       int a = Pos->InfoExist && FINFO_SIZE;\r
+                                       CalcExtentSize(&Pkt, Pos->Size);\r
+                               }\r
+#endif\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
@@ -1150,13 +1234,13 @@ void UpLoadDragProc(WPARAM wParam)
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\82ð\8ds\82¤ ----------------------------------------\r
+/*----- ミラーリングアップロードを行う ----------------------------------------\r
 *\r
 *      Parameter\r
-*              int Notify : \8am\94F\82ð\8ds\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+*              int Notify : 確認を行うかどうか (YES/NO)\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void MirrorUploadProc(int Notify)\r
@@ -1175,7 +1259,10 @@ void MirrorUploadProc(int Notify)
        FILETIME TmpFtimeL;\r
        FILETIME TmpFtimeR;\r
 \r
-       if(CheckClosedAndReconnect() == SUCCESS)\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -1188,7 +1275,7 @@ void MirrorUploadProc(int Notify)
 \r
                if((Notify == YES) || (Notify == YES_LIST))\r
                {\r
-                       /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\8eæ\93¾ =====*/\r
+                       /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
                        MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
@@ -1198,7 +1285,7 @@ void MirrorUploadProc(int Notify)
                        LocalPos = LocalListBase;\r
                        while(LocalPos != NULL)\r
                        {\r
-                               LocalPos->Attr = YES;           /* LocalPos->Attr\82Í\93]\91\97\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+                               LocalPos->Attr = YES;           /* LocalPos->Attrは転送するかどうかのフラグに使用 (YES/NO) */\r
                                LocalPos = LocalPos->Next;\r
                        }\r
 \r
@@ -1212,7 +1299,7 @@ void MirrorUploadProc(int Notify)
                                }\r
                                else\r
                                {\r
-                                       RemotePos->Attr = NO;   /* RemotePos->Attr\82Í\8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+                                       RemotePos->Attr = NO;   /* RemotePos->Attrは削除するかどうかのフラグに使用 (YES/NO) */\r
 \r
                                        if(RemotePos->Node == NODE_DIR)\r
                                        {\r
@@ -1234,7 +1321,7 @@ void MirrorUploadProc(int Notify)
                                }\r
                        }\r
 \r
-                       /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\94ä\8ar =====*/\r
+                       /*===== ファイルリスト比較 =====*/\r
 \r
                        LocalPos = LocalListBase;\r
                        while(LocalPos != NULL)\r
@@ -1321,7 +1408,7 @@ void MirrorUploadProc(int Notify)
 \r
                        DispMirrorFiles(LocalListBase, RemoteListBase);\r
 \r
-                       /*===== \8dí\8f\9c\81^\83A\83b\83v\83\8d\81[\83h =====*/\r
+                       /*===== 削除/アップロード =====*/\r
 \r
                        RemotePos = RemoteListBase;\r
                        while(RemotePos != NULL)\r
@@ -1374,9 +1461,14 @@ void MirrorUploadProc(int Notify)
                                                Pkt.Time = LocalPos->Time;\r
                                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
-                                               // UTF-8\91Î\89\9e\r
+                                               // UTF-8対応\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+                                               if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+                                                       CalcExtentSize(&Pkt, LocalPos->Size);\r
+                                               }\r
+#endif\r
                                                Pkt.Mode = EXIST_OVW;\r
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
@@ -1420,15 +1512,15 @@ void MirrorUploadProc(int Notify)
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\8e\9e\82Ì\83z\83X\83g\91¤\82Ì\83t\83H\83\8b\83_\8dí\8f\9c --------------------------------\r
+/*----- ミラーリング時のホスト側のフォルダ削除 --------------------------------\r
 *\r
 *      Parameter\r
-*              FILELIST *Base : \83t\83@\83C\83\8b\83\8a\83X\83g\r
+*              FILELIST *Base : ファイルリスト\r
 *              TRANSPACKET *Pkt : \r
 *              TRANSPACKET **Base : \r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base)\r
@@ -1457,19 +1549,21 @@ static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET *
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\8aJ\8en\8am\94F\83E\83C\83\93\83h\83E\82Ì\83R\81[\83\8b\83o\83b\83N --------------\r
+/*----- ミラーリングアップロード開始確認ウインドウのコールバック --------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static int Mode;\r
 \r
@@ -1506,19 +1600,21 @@ static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\8f\88\97\9d\93à\97e\8am\94F\83E\83C\83\93\83h\83E\82Ì\83R\81[\83\8b\83o\83b\83N ----------\r
+/*----- ミラーリングアップロード処理内容確認ウインドウのコールバック ----------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static DIALOGSIZE DlgSize = {\r
                { MIRROR_DEL, MIRROR_SIZEGRIP, -1 },\r
@@ -1586,7 +1682,7 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                                                Num = SendDlgItemMessage(hDlg, MIRROR_LIST, LB_GETSELITEMS, Num, (LPARAM)List);\r
                                                for(Num--; Num >= 0; Num--)\r
                                                {\r
-                                                       if(RemoveTmpTransFileListItem(Base, List[Num]) == SUCCESS)\r
+                                                       if(RemoveTmpTransFileListItem(Base, List[Num]) == FFFTP_SUCCESS)\r
                                                                SendDlgItemMessage(hDlg, MIRROR_LIST, LB_DELETESTRING, List[Num], 0);\r
                                                        else\r
                                                                MessageBeep(-1);\r
@@ -1621,14 +1717,14 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
 }\r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Å\93]\91\97\81^\8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\90\94\82ð\90\94\82¦\83_\83C\83A\83\8d\83O\82É\95\\8e¦---------\r
+/*----- ミラーリングで転送/削除するファイルの数を数えダイアログに表示---------\r
 *\r
 *      Parameter\r
 *              HWND hWnd : \r
 *              TRANSPACKET *Pkt : \r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt)\r
@@ -1687,16 +1783,16 @@ static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt)
 \r
 \r
 \r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Å\93]\91\97\81^\8dí\8f\9c\82µ\82È\82¢\83t\83@\83C\83\8b\82©\82Ç\82¤\82©\82ð\95Ô\82· ------------------\r
+/*----- ミラーリングで転送/削除しないファイルかどうかを返す ------------------\r
 *\r
 *      Parameter\r
-*              char Fname : \83t\83@\83C\83\8b\96¼\r
-*              int Mode : \83\82\81[\83h\r
-*                      0=\93]\91\97\82µ\82È\82¢\83t\83@\83C\83\8b, 1=\8dí\8f\9c\82µ\82È\82¢\83t\83@\83C\83\8b\r
+*              char Fname : ファイル名\r
+*              int Mode : モード\r
+*                      0=転送しないファイル, 1=削除しないファイル\r
 *\r
 *      Return Value\r
-*              int \83X\83e\81[\83^\83X\r
-*                      YES=\93]\91\97\81E\8dí\8f\9c\82µ\82È\82¢/NO\r
+*              int ステータス\r
+*                      YES=転送・削除しない/NO\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int AskMirrorNoTrn(char *Fname, int Mode)\r
@@ -1714,7 +1810,7 @@ static int AskMirrorNoTrn(char *Fname, int Mode)
                Fname = GetFileName(Fname);\r
                while(*Tbl != NUL)\r
                {\r
-                       if(CheckFname(Fname, Tbl) == SUCCESS)\r
+                       if(CheckFname(Fname, Tbl) == FFFTP_SUCCESS)\r
                        {\r
                                Ret = YES;\r
                                break;\r
@@ -1726,13 +1822,13 @@ static int AskMirrorNoTrn(char *Fname, int Mode)
 }\r
 \r
 \r
-/*----- \83A\83b\83v\83\8d\81[\83h\82·\82é\83t\83@\83C\83\8b\82Ì\91®\90«\82ð\95Ô\82· ----------------------------------\r
+/*----- アップロードするファイルの属性を返す ----------------------------------\r
 *\r
 *      Parameter\r
-*              char Fname : \83t\83@\83C\83\8b\96¼\r
+*              char Fname : ファイル名\r
 *\r
 *      Return Value\r
-*              int \91®\90« (-1=\90Ý\92è\82È\82µ)\r
+*              int 属性 (-1=設定なし)\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int AskUpLoadFileAttr(char *Fname)\r
@@ -1749,7 +1845,7 @@ static int AskUpLoadFileAttr(char *Fname)
                Sts = CheckFname(Fname, Tbl);\r
                Tbl += strlen(Tbl) + 1;\r
 \r
-               if((Sts == SUCCESS) && (*Tbl != NUL))\r
+               if((Sts == FFFTP_SUCCESS) && (*Tbl != NUL))\r
                {\r
                        Ret = xtoi(Tbl);\r
                        break;\r
@@ -1760,30 +1856,43 @@ static int AskUpLoadFileAttr(char *Fname)
 }\r
 \r
 \r
-/*----- \83z\83X\83g\82É\93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82È\82¢\82©\83`\83F\83b\83N- ---------------------------a\r
+/*----- ホストに同じ名前のファイルがないかチェック- ---------------------------a\r
 *\r
 *      Parameter\r
-*              TRANSPACKET *Pkt : \93]\91\97\83t\83@\83C\83\8b\8fî\95ñ\r
+*              TRANSPACKET *Pkt : 転送ファイル情報\r
 *              FILELIST *ListList : \r
 *\r
 *      Return Value\r
-*              int \8f\88\97\9d\95û\96@\r
+*              int 処理方法\r
 *                      EXIST_OVW/EXIST_UNIQUE/EXIST_IGNORE\r
 *\r
 *      Note\r
-*              Pkt.ExistSize, UpExistMode\81AExistNotify \82ª\95Ï\8dX\82³\82ê\82é\r
+*              Pkt.ExistSize, UpExistMode、ExistNotify が変更される\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)\r
 {\r
        int Ret;\r
+#if defined(HAVE_TANDEM)\r
+       int Mode;\r
+#endif\r
        FILELIST *Exist;\r
 \r
        Ret = EXIST_OVW;\r
        Pkt->ExistSize = 0;\r
        if(SendMode != TRANS_OVW)\r
        {\r
+#if defined(HAVE_TANDEM)\r
+               /* HP NonStop Server は大文字小文字の区別なし(すべて大文字) */\r
+               if(AskHostType() == HTYPE_TANDEM)\r
+                       Mode = COMP_IGNORE;\r
+               else\r
+                       Mode = COMP_STRICT;\r
+\r
+               if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, Mode)) != NULL)\r
+#else\r
                if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, COMP_STRICT)) != NULL)\r
+#endif\r
                {\r
                        Pkt->ExistSize = Exist->Size;\r
 \r
@@ -1800,7 +1909,7 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
 \r
                        if(Ret == EXIST_NEW)\r
                        {\r
-                               /*\83t\83@\83C\83\8b\93ú\95t\83`\83F\83b\83N */\r
+                               /*ファイル日付チェック */\r
                                if(CompareFileTime(&Exist->Time, &Pkt->Time) < 0)\r
                                        Ret = EXIST_OVW;\r
                                else\r
@@ -1812,19 +1921,21 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
 }\r
 \r
 \r
-/*----- \83z\83X\83g\82É\93¯\82\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------\r
+/*----- ホストに同じ名前のファイルがある時の確認ダイアログのコールバック ------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
        static const RADIOBUTTON UpExistButton[] = {\r
@@ -1854,7 +1965,7 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar
                        {\r
                                case IDOK_ALL :\r
                                        ExistNotify = NO;\r
-                                       /* \82±\82±\82É break \82Í\82È\82¢ */\r
+                                       /* ここに break はない */\r
 \r
                                case IDOK :\r
                                        UpExistMode = AskRadioButtonValue(hDlg, UpExistButton, UPEXISTBUTTONS);\r
@@ -1878,19 +1989,21 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar
 }\r
 \r
 \r
-/*----- \83A\83b\83v\83\8d\81[\83h\81^\83_\83E\83\93\83\8d\81[\83h\83t\83@\83C\83\8b\96¼\93ü\97Í\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------\r
+/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (iMessage)\r
        {\r
@@ -1923,13 +2036,64 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82·\82é ----------------------------\r
+#if defined(HAVE_TANDEM)\r
+/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              BOOL TRUE/FALSE\r
+*----------------------------------------------------------------------------*/\r
+\r
+static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+{\r
+       switch (iMessage)\r
+       {\r
+               case WM_INITDIALOG :\r
+                       if(CurWin == WIN_LOCAL)\r
+                               SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN064);\r
+                       else\r
+                               SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN065);\r
+\r
+                       SendDlgItemMessage(hDlg, UPDOWNAS_NEW, EM_LIMITTEXT, FMAX_PATH, 0);\r
+                       SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_SETTEXT, 0, (LPARAM)TmpString);\r
+                       SendDlgItemMessage(hDlg, UPDOWNAS_TEXT, WM_SETTEXT, 0, (LPARAM)TmpString);\r
+                       SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, EM_LIMITTEXT, 4, 0);\r
+                       SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, WM_SETTEXT, 0, (LPARAM)TmpFileCode);\r
+\r
+                       return(TRUE);\r
+\r
+               case WM_COMMAND :\r
+                       switch(GET_WM_COMMAND_ID(wParam, lParam))\r
+                       {\r
+                               case IDOK :\r
+                                       SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_GETTEXT, FMAX_PATH, (LPARAM)TmpString);\r
+                                       SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, WM_GETTEXT, FMAX_PATH, (LPARAM)TmpFileCode);\r
+                                       EndDialog(hDlg, YES);\r
+                                       break;\r
+\r
+                               case UPDOWNAS_STOP :\r
+                                       EndDialog(hDlg, NO_ALL);\r
+                                       break;\r
+                       }\r
+            return(TRUE);\r
+       }\r
+       return(FALSE);\r
+}\r
+#endif\r
+\r
+\r
+/*----- ファイル一覧で指定されたファイルを削除する ----------------------------\r
+*\r
+*      Parameter\r
+*              なし\r
+*\r
+*      Return Value\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void DeleteProc(void)\r
@@ -1942,6 +2106,11 @@ void DeleteProc(void)
        char CurDir[FMAX_PATH+1];\r
        char Tmp[FMAX_PATH+1];\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       // デッドロック対策\r
+       DisableUserOpe();\r
        Sts = YES;\r
        AskRemoteCurDir(CurDir, FMAX_PATH);\r
        FileListBase = NULL;\r
@@ -1953,7 +2122,7 @@ void DeleteProc(void)
        else\r
        {\r
                Win = WIN_REMOTE;\r
-               if(CheckClosedAndReconnect() == SUCCESS)\r
+               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                        MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
                else\r
                        Sts = NO;\r
@@ -1961,7 +2130,8 @@ void DeleteProc(void)
 \r
        if(Sts == YES)\r
        {\r
-               DisableUserOpe();\r
+               // デッドロック対策\r
+//             DisableUserOpe();\r
 \r
                DelFlg = NO;\r
                Sts = NO;\r
@@ -1997,23 +2167,26 @@ void DeleteProc(void)
                                GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
                }\r
 \r
-               EnableUserOpe();\r
+               // デッドロック対策\r
+//             EnableUserOpe();\r
        }\r
+       // デッドロック対策\r
+       EnableUserOpe();\r
        return;\r
 }\r
 \r
 \r
-/*----- \83T\83u\83f\83B\83\8c\83N\83g\83\8a\88È\89º\82ð\91S\82Ä\8dí\8f\9c\82·\82é ------------------------------------\r
+/*----- サブディレクトリ以下を全て削除する ------------------------------------\r
 *\r
 *      Parameter\r
-*              FILELIST *Dt : \8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\83\8a\83X\83g\r
-*              int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
-*              int *Sw : \91\80\8dì\95û\96@ (YES/NO/YES_ALL/NO_ALL)\r
-*              int *Flg : \83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82½\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O (YES/NO)\r
-*              char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
+*              FILELIST *Dt : 削除するファイルのリスト\r
+*              int Win : ウインドウ番号 (WIN_xxx)\r
+*              int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL)\r
+*              int *Flg : ファイルを削除したかどうかのフラグ (YES/NO)\r
+*              char *CurDir : カレントディレクトリ\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir)\r
@@ -2035,17 +2208,17 @@ static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir)
 }\r
 \r
 \r
-/*----- \8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\8am\94F\82Æ\8dí\8f\9c\8eÀ\8ds --------------------------------------\r
+/*----- 削除するかどうかの確認と削除実行 --------------------------------------\r
 *\r
 *      Parameter\r
-*              FILELIST *Dt : \8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\83\8a\83X\83g\r
-*              int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
-*              int *Sw : \91\80\8dì\95û\96@ (YES/NO/YES_ALL/NO_ALL)\r
-*              int *Flg : \83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82½\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O (YES/NO)\r
-*              char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
+*              FILELIST *Dt : 削除するファイルのリスト\r
+*              int Win : ウインドウ番号 (WIN_xxx)\r
+*              int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL)\r
+*              int *Flg : ファイルを削除したかどうかのフラグ (YES/NO)\r
+*              char *CurDir : カレントディレクトリ\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir)\r
@@ -2071,7 +2244,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi
        {\r
                sprintf(TmpString, "%s", Path);\r
 \r
-               if(AskHostType() == HTYPE_VMS)\r
+               // ローカルのファイルのパスの最後の'\\'が消えるバグ修正\r
+//             if(AskHostType() == HTYPE_VMS)\r
+               if(Win == WIN_REMOTE && AskHostType() == HTYPE_VMS)\r
                        ReformToVMSstylePathName(TmpString);\r
 \r
                CurWin = Win;\r
@@ -2090,8 +2265,10 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi
                }\r
                else\r
                {\r
-                       /* \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\8e\9e\82Ì\82½\82ß\82Ì\8f\88\97\9d */\r
-                       if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FAIL)\r
+                       /* フルパスを使わない時のための処理 */\r
+                       // 同時接続対応\r
+//                     if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)\r
+                       if(ProcForNonFullpath(AskCmdCtrlSkt(), Path, CurDir, GetMainHwnd(), &CancelFlg) == FFFTP_FAIL)\r
                                *Sw = NO_ALL;\r
 \r
                        if(*Sw != NO_ALL)\r
@@ -2108,19 +2285,21 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\8dí\8f\9c\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ----------------------------------\r
+/*----- ファイル削除ダイアログのコールバック ----------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (iMessage)\r
        {\r
@@ -2157,13 +2336,13 @@ static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\96¼\91O\82ð\95Ï\8dX\82·\82é ----------------------\r
+/*----- ファイル一覧で指定されたファイルの名前を変更する ----------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void RenameProc(void)\r
@@ -2175,7 +2354,10 @@ void RenameProc(void)
        int RenFlg;\r
        int Sts;\r
 \r
-       Sts = SUCCESS;\r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       Sts = FFFTP_SUCCESS;\r
        if(GetFocus() == GetLocalHwnd())\r
                Win = WIN_LOCAL;\r
        else\r
@@ -2184,7 +2366,7 @@ void RenameProc(void)
                Sts = CheckClosedAndReconnect();\r
        }\r
 \r
-       if(Sts == SUCCESS)\r
+       if(Sts == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -2234,9 +2416,9 @@ void RenameProc(void)
 \r
 \r
 //\r
-// \83\8a\83\82\81[\83g\91¤\82Å\82Ì\83t\83@\83C\83\8b\82Ì\88Ú\93®\81i\83\8a\83l\81[\83\80\81j\82ð\8ds\82¤\r
+// リモート側でのファイルの移動(リネーム)を行う\r
 //  \r
-// RenameProc()\82ð\83x\81[\83X\82É\89ü\91¢\81B(2007.9.5 yutaka)\r
+// RenameProc()をベースに改造。(2007.9.5 yutaka)\r
 //\r
 void MoveRemoteFileProc(int drop_index)\r
 {\r
@@ -2250,6 +2432,9 @@ void MoveRemoteFileProc(int drop_index)
        int RenFlg;\r
        int Sts;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if(MoveMode == MOVE_DISABLE)\r
        {\r
                return;\r
@@ -2257,7 +2442,7 @@ void MoveRemoteFileProc(int drop_index)
 \r
        AskRemoteCurDir(HostDir, FMAX_PATH);\r
 \r
-       // \83h\83\8d\83b\83v\90æ\82Ì\83t\83H\83\8b\83_\96¼\82ð\93¾\82é\r
+       // ドロップ先のフォルダ名を得る\r
        GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
 \r
        if(MoveMode == MOVE_DLG)\r
@@ -2268,7 +2453,7 @@ void MoveRemoteFileProc(int drop_index)
                }\r
        }\r
 \r
-       Sts = SUCCESS;\r
+       Sts = FFFTP_SUCCESS;\r
 #if 0\r
        if(GetFocus() == GetLocalHwnd())\r
                Win = WIN_LOCAL;\r
@@ -2282,7 +2467,7 @@ void MoveRemoteFileProc(int drop_index)
                Sts = CheckClosedAndReconnect();\r
 #endif\r
 \r
-       if(Sts == SUCCESS)\r
+       if(Sts == FFFTP_SUCCESS)\r
        {\r
                DisableUserOpe();\r
 \r
@@ -2309,12 +2494,12 @@ void MoveRemoteFileProc(int drop_index)
 \r
                                if((Sts == YES) && (strlen(TmpString) != 0))\r
                                {\r
-                                       // \83p\83X\82Ì\90Ý\92è(local)\r
+                                       // パスの設定(local)\r
                                        strncpy_s(Old, sizeof(Old), HostDir, _TRUNCATE);\r
                                        strncat_s(Old, sizeof(Old), "/", _TRUNCATE);\r
                                        strncat_s(Old, sizeof(Old), Pos->File, _TRUNCATE);\r
 \r
-                                       // \83p\83X\82Ì\90Ý\92è(remote)\r
+                                       // パスの設定(remote)\r
                                        strncpy_s(New, sizeof(New), HostDir, _TRUNCATE);\r
                                        strncat_s(New, sizeof(New), "/", _TRUNCATE);\r
                                        strncat_s(New, sizeof(New), Pkt.File, _TRUNCATE);\r
@@ -2354,19 +2539,21 @@ void MoveRemoteFileProc(int drop_index)
 \r
 \r
 \r
-/*----- \90V\83t\83@\83C\83\8b\96¼\93ü\97Í\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
+/*----- 新ファイル名入力ダイアログのコールバック ------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (iMessage)\r
        {\r
@@ -2402,13 +2589,13 @@ static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
 }\r
 \r
 \r
-/*----- \90V\82µ\82¢\83f\83B\83\8c\83N\83g\83\8a\82ð\8dì\90¬\82·\82é ------------------------------------------\r
+/*----- 新しいディレクトリを作成する ------------------------------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void MkdirProc(void)\r
@@ -2419,6 +2606,9 @@ void MkdirProc(void)
        char *Title;\r
        int Tmp;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if(GetFocus() == GetLocalHwnd())\r
        {\r
                Win = WIN_LOCAL;\r
@@ -2444,7 +2634,7 @@ void MkdirProc(void)
                }\r
                else\r
                {\r
-                       if(CheckClosedAndReconnect() == SUCCESS)\r
+                       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                        {\r
                                DisableUserOpe();\r
                                DoMKD(Path);\r
@@ -2457,13 +2647,13 @@ void MkdirProc(void)
 }\r
 \r
 \r
-/*----- \83q\83X\83g\83\8a\83\8a\83X\83g\82ð\8eg\82Á\82½\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ------------------------------\r
+/*----- ヒストリリストを使ったディレクトリの移動 ------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hWnd : \83R\83\93\83{\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+*              HWND hWnd : コンボボックスのウインドウハンドル\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ChangeDirComboProc(HWND hWnd)\r
@@ -2471,6 +2661,9 @@ void ChangeDirComboProc(HWND hWnd)
        char Tmp[FMAX_PATH+1];\r
        int i;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR)\r
        {\r
                SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp);\r
@@ -2484,7 +2677,7 @@ void ChangeDirComboProc(HWND hWnd)
                }\r
                else\r
                {\r
-                       if(CheckClosedAndReconnect() == SUCCESS)\r
+                       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                        {\r
                                DisableUserOpe();\r
                                if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
@@ -2497,13 +2690,13 @@ void ChangeDirComboProc(HWND hWnd)
 }\r
 \r
 \r
-/*----- \83u\83b\83N\83}\81[\83N\82ð\8eg\82Á\82½\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® --------------------------------\r
+/*----- ブックマークを使ったディレクトリの移動 --------------------------------\r
 *\r
 *      Parameter\r
-*              int MarkID : \83u\83b\83N\83}\81[\83N\82Ì\83\81\83j\83\85\81[ID\r
+*              int MarkID : ブックマークのメニューID\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ChangeDirBmarkProc(int MarkID)\r
@@ -2512,18 +2705,21 @@ void ChangeDirBmarkProc(int MarkID)
        char Remote[FMAX_PATH+1];\r
        int Sts;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1);\r
        if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH))\r
        {\r
                DisableUserOpe();\r
-               if(DoLocalCWD(Local) == SUCCESS)\r
+               if(DoLocalCWD(Local) == FFFTP_SUCCESS)\r
                        GetLocalDirForWnd();\r
                EnableUserOpe();\r
        }\r
 \r
        if((Sts == BMARK_TYPE_REMOTE) || (Sts == BMARK_TYPE_BOTH))\r
        {\r
-               if(CheckClosedAndReconnect() == SUCCESS)\r
+               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                {\r
                        DisableUserOpe();\r
                        if(DoCWD(Remote, YES, NO, YES) < FTP_RETRY)\r
@@ -2535,13 +2731,13 @@ void ChangeDirBmarkProc(int MarkID)
 }\r
 \r
 \r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\96¼\82ð\93ü\97Í\82µ\82Ä\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ----------------------------\r
+/*----- ディレクトリ名を入力してディレクトリの移動 ----------------------------\r
 *\r
 *      Parameter\r
-*              int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
+*              int Win : ウインドウ番号 (WIN_xxx)\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ChangeDirDirectProc(int Win)\r
@@ -2551,6 +2747,9 @@ void ChangeDirDirectProc(int Win)
        char *Title;\r
        int Tmp;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if(Win == WIN_LOCAL)\r
                Title = MSGJPN072;\r
        else\r
@@ -2573,7 +2772,7 @@ void ChangeDirDirectProc(int Win)
                }\r
                else\r
                {\r
-                       if(CheckClosedAndReconnect() == SUCCESS)\r
+                       if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                        {\r
                                DisableUserOpe();\r
                                if(DoCWD(Path, YES, NO, YES) < FTP_RETRY)\r
@@ -2586,13 +2785,13 @@ void ChangeDirDirectProc(int Win)
 }\r
 \r
 \r
-/*----- Drop\82³\82ê\82½\83t\83@\83C\83\8b\82É\82æ\82é\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ----------------------------\r
+/*----- Dropされたファイルによるディレクトリの移動 ----------------------------\r
 *\r
 *      Parameter\r
-*              WPARAM wParam : \83h\83\8d\83b\83v\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\8fî\95ñ\r
+*              WPARAM wParam : ドロップされたファイルの情報\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ChangeDirDropFileProc(WPARAM wParam)\r
@@ -2608,13 +2807,13 @@ void ChangeDirDropFileProc(WPARAM wParam)
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\82Ì\91®\90«\95Ï\8dX ----------------------------------------------------\r
+/*----- ファイルの属性変更 ----------------------------------------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ChmodProc(void)\r
@@ -2627,9 +2826,12 @@ void ChmodProc(void)
        char *BufTmp;\r
        int BufLen;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if(GetFocus() == GetRemoteHwnd())\r
        {\r
-               if(CheckClosedAndReconnect() == SUCCESS)\r
+               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                {\r
                        DisableUserOpe();\r
                        FileListBase = NULL;\r
@@ -2693,19 +2895,21 @@ void ChmodProc(void)
 }\r
 \r
 \r
-/*----- \91®\90«\95Ï\8dX\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N --------------------------------------\r
+/*----- 属性変更ダイアログのコールバック --------------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        char Str[5];\r
        static char *Buf;\r
@@ -2756,14 +2960,14 @@ BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARA
 }\r
 \r
 \r
-/*----- \91®\90«\82ð\83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82É\90Ý\92è ----------------------------------------\r
+/*----- 属性をダイアログボックスに設定 ----------------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hWnd : \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              int Attr : \91®\90«\r
+*              HWND hWnd : ダイアログボックスのウインドウハンドル\r
+*              int Attr : 属性\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 static void SetAttrToDialog(HWND hDlg, int Attr)\r
@@ -2793,13 +2997,13 @@ static void SetAttrToDialog(HWND hDlg, int Attr)
 }\r
 \r
 \r
-/*----- \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\93à\97e\82©\82ç\91®\90«\82ð\8eæ\93¾ --------------------------------\r
+/*----- ダイアログボックスの内容から属性を取得 --------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hWnd : \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+*              HWND hWnd : ダイアログボックスのウインドウハンドル\r
 *\r
 *      Return Value\r
-*              int \91®\90«\r
+*              int 属性\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int GetAttrFromDialog(HWND hDlg)\r
@@ -2835,13 +3039,13 @@ static int GetAttrFromDialog(HWND hDlg)
 \r
 \r
 \r
-/*----- \94C\88Ó\82Ì\83R\83}\83\93\83h\82ð\91\97\82é --------------------------------------------------\r
+/*----- 任意のコマンドを送る --------------------------------------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void SomeCmdProc(void)\r
@@ -2850,9 +3054,12 @@ void SomeCmdProc(void)
        int Tmp;\r
        FILELIST *FileListBase;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if(GetFocus() == GetRemoteHwnd())\r
        {\r
-               if(CheckClosedAndReconnect() == SUCCESS)\r
+               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
                {\r
                        DisableUserOpe();\r
                        FileListBase = NULL;\r
@@ -2877,13 +3084,13 @@ void SomeCmdProc(void)
 \r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\91\8d\97e\97Ê\82Ì\8cv\8eZ\82ð\8ds\82¤ --------------------------------------------\r
+/*----- ファイル総容量の計算を行う --------------------------------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void CalcFileSizeProc(void)\r
@@ -2894,9 +3101,12 @@ void CalcFileSizeProc(void)
        int All;\r
        int Sts;\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
        if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL)\r
        {\r
-               Sts = SUCCESS;\r
+               Sts = FFFTP_SUCCESS;\r
                if(GetFocus() == GetLocalHwnd())\r
                        Win = WIN_LOCAL;\r
                else\r
@@ -2905,7 +3115,7 @@ void CalcFileSizeProc(void)
                        Sts = CheckClosedAndReconnect();\r
                }\r
 \r
-               if(Sts == SUCCESS)\r
+               if(Sts == FFFTP_SUCCESS)\r
                {\r
                        ListBase = NULL;\r
                        MakeSelectedFileList(Win, YES, All, &ListBase, &CancelFlg);\r
@@ -2926,16 +3136,16 @@ void CalcFileSizeProc(void)
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\97e\97Ê\8c\9f\8dõ\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N --------------------------\r
+/*----- ファイル容量検索確認ダイアログのコールバック --------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message  : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message  : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
-*              \83\81\83b\83Z\81[\83W\82É\91Î\89\9e\82·\82é\96ß\82è\92l\r
+*              メッセージに対応する戻り値\r
 *----------------------------------------------------------------------------*/\r
 \r
 static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
@@ -2969,16 +3179,16 @@ static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wPa
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\97e\97Ê\8c\9f\8dõ\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
+/*----- ファイル容量検索ダイアログのコールバック ------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-*              UINT message  : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-*              WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-*              LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+*              HWND hDlg : ウインドウハンドル\r
+*              UINT message  : メッセージ番号\r
+*              WPARAM wParam : メッセージの WPARAM 引数\r
+*              LPARAM lParam : メッセージの LPARAM 引数\r
 *\r
 *      Return Value\r
-*              \83\81\83b\83Z\81[\83W\82É\91Î\89\9e\82·\82é\96ß\82è\92l\r
+*              メッセージに対応する戻り値\r
 *----------------------------------------------------------------------------*/\r
 \r
 static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
@@ -3012,13 +3222,13 @@ static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, L
 }\r
 \r
 \r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\88Ú\93®\8e¸\94s\8e\9e\82Ì\83G\83\89\81[\82ð\95\\8e¦ ----------------------------------\r
+/*----- ディレクトリ移動失敗時のエラーを表示 ----------------------------------\r
 *\r
 *      Parameter\r
-*              HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+*              HWND hDlg : ウインドウハンドル\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void DispCWDerror(HWND hWnd)\r
@@ -3028,13 +3238,13 @@ void DispCWDerror(HWND hWnd)
 }\r
 \r
 \r
-/*----- URL\82ð\83N\83\8a\83b\83v\83{\81[\83h\82É\83R\83s\81[ -------------------------------------------\r
+/*----- URLをクリップボードにコピー -------------------------------------------\r
 *\r
 *      Parameter\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
 void CopyURLtoClipBoard(void)\r
@@ -3072,7 +3282,7 @@ void CopyURLtoClipBoard(void)
                                        sprintf(Port, ":%d", AskHostPort());\r
 \r
                                Set = Total;\r
-                               Total += strlen(Path) + strlen(Host) + strlen(Port) + 8;        /* 8\82Í "ftp://\r\n" \82Ì\82Ô\82ñ */\r
+                               Total += strlen(Path) + strlen(Host) + strlen(Port) + 8;        /* 8は "ftp://\r\n" のぶん */\r
                                if(AskHostType() == HTYPE_VMS)\r
                                        Total++;\r
 \r
@@ -3099,31 +3309,33 @@ void CopyURLtoClipBoard(void)
 }\r
 \r
 \r
-/*----- \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\83t\83@\83C\83\8b\83A\83N\83Z\83X\82Ì\8f\80\94õ ------------------------------\r
+/*----- フルパスを使わないファイルアクセスの準備 ------------------------------\r
 *\r
 *      Parameter\r
-*              char *Path : \83p\83X\96¼\r
-*              char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
-*              HWND hWnd : \83G\83\89\81[\83E\83C\83\93\83h\83E\82ð\95\\8e¦\82·\82é\8dÛ\82Ì\90e\83E\83C\83\93\83h\83E\r
-*              int Type : \8eg\97p\82·\82é\83\\83P\83b\83g\82Ì\8eí\97Þ\r
-*                      0=\83R\83}\83\93\83h\83\\83P\83b\83g, 1=\93]\91\97\83\\83P\83b\83g\r
+*              char *Path : パス名\r
+*              char *CurDir : カレントディレクトリ\r
+*              HWND hWnd : エラーウインドウを表示する際の親ウインドウ\r
+*              int Type : 使用するソケットの種類\r
+*                      0=コマンドソケット, 1=転送ソケット\r
 *\r
 *      Return Value\r
-*              int \83X\83e\81[\83^\83X(SUCCESS/FAIL)\r
+*              int ステータス(FFFTP_SUCCESS/FFFTP_FAIL)\r
 *\r
 *      Note\r
-*              \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\8e\9e\82Í\81A\r
-*                      \82±\82Ì\83\82\83W\83\85\81[\83\8b\93à\82Å CWD \82ð\8ds\82È\82¢\81A\r
-*                      Path \82É\83t\83@\83C\83\8b\96¼\82Ì\82Ý\8ec\82·\81B\81i\83p\83X\96¼\82Í\8fÁ\82·\81j\r
+*              フルパスを使わない時は、\r
+*                      このモジュール内で CWD を行ない、\r
+*                      Path にファイル名のみ残す。(パス名は消す)\r
 *----------------------------------------------------------------------------*/\r
 \r
-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+// 同時接続対応\r
+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork)\r
 {\r
        int Sts;\r
        int Cmd;\r
        char Tmp[FMAX_PATH+1];\r
 \r
-       Sts = SUCCESS;\r
+       Sts = FFFTP_SUCCESS;\r
        if(AskNoFullPathMode() == YES)\r
        {\r
                strcpy(Tmp, Path);\r
@@ -3139,15 +3351,17 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)
 \r
                if(strcmp(Tmp, CurDir) != 0)\r
                {\r
-                       if(Type == 0)\r
-                               Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
-                       else\r
-                               Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);\r
+                       // 同時接続対応\r
+//                     if(Type == 0)\r
+//                             Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
+//                     else\r
+//                             Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);\r
+                       Cmd = CommandProcTrn(cSkt, NULL, CancelCheckWork, "CWD %s", Tmp);\r
 \r
                        if(Cmd/100 != FTP_COMPLETE)\r
                        {\r
                                DispCWDerror(hWnd);\r
-                               Sts = FAIL;\r
+                               Sts = FFFTP_FAIL;\r
                        }\r
                        else\r
                                strcpy(CurDir, Tmp);\r
@@ -3158,13 +3372,13 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)
 }\r
 \r
 \r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\96¼\82ðVAX VMS\83X\83^\83C\83\8b\82É\95Ï\8a·\82·\82é -----------------------------\r
+/*----- ディレクトリ名をVAX VMSスタイルに変換する -----------------------------\r
 *\r
 *      Parameter\r
-*              char *Path : \83p\83X\96¼\r
+*              char *Path : パス名\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Note\r
 *              ddd:[xxx.yyy]/rrr/ppp  --> ddd:[xxx.yyy.rrr.ppp]\r
@@ -3194,13 +3408,13 @@ void ReformToVMSstyleDirName(char *Path)
 }\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\96¼\82ðVAX VMS\83X\83^\83C\83\8b\82É\95Ï\8a·\82·\82é ---------------------------------\r
+/*----- ファイル名をVAX VMSスタイルに変換する ---------------------------------\r
 *\r
 *      Parameter\r
-*              char *Path : \83p\83X\96¼\r
+*              char *Path : パス名\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Note\r
 *              ddd:[xxx.yyy]/rrr/ppp  --> ddd:[xxx.yyy.rrr]ppp\r
@@ -3222,17 +3436,17 @@ void ReformToVMSstylePathName(char *Path)
 \r
 \r
 #if defined(HAVE_OPENVMS)\r
-/*----- VMS\82Ì"HOGE.DIR;?"\82Æ\82¢\82¤\83f\83B\83\8c\83N\83g\83\8a\96¼\82©\82ç"HOGE"\82ð\8eæ\82è\8fo\82· ---------------\r
+/*----- VMSの"HOGE.DIR;?"というディレクトリ名から"HOGE"を取り出す ---------------\r
 *\r
 *      Parameter\r
-*              char *DirName : "HOGE.DIR;?"\8c`\8e®\82Ì\83f\83B\83\8c\83N\83g\83\8a\96¼\r
-*              int Flg       : ";"\82Ì\83`\83F\83b\83N\82ð\82·\82é(TRUE)\82©\82µ\82È\82¢(FALSE)\82©\r
+*              char *DirName : "HOGE.DIR;?"形式のディレクトリ名\r
+*              int Flg       : ";"のチェックをする(TRUE)かしない(FALSE)か\r
 *\r
 *      Return Value\r
-*              \82È\82µ\r
+*              なし\r
 *\r
 *      Note\r
-*              DirName\82ð\92¼\90Ú\8f\91\82«\82©\82¦\82é\r
+*              DirNameを直接書きかえる\r
 *----------------------------------------------------------------------------*/\r
 \r
 void ReformVMSDirName(char *DirName, int Flg)\r
@@ -3240,12 +3454,12 @@ void ReformVMSDirName(char *DirName, int Flg)
        char *p;\r
 \r
        if (Flg == TRUE) {\r
-               /* ';'\82ª\82È\82¢\8fê\8d\87\82ÍVMS\8c`\8e®\82\82á\82È\82³\82»\82¤\82È\82Ì\82Å\89½\82à\82µ\82È\82¢ */\r
+               /* ';'がない場合はVMS形式じゃなさそうなので何もしない */\r
                if ((p = strrchr(DirName, ';')) == NULL)\r
                        return;\r
        }\r
 \r
-       /* ".DIR"\82ª\82 \82Á\82½\82ç\82Â\82Ô\82· */\r
+       /* ".DIR"があったらつぶす */\r
        if ((p = strrchr(DirName, '.'))) {\r
                if (memcmp(p + 1, "DIR", 3) == 0)\r
                        *p = '\0';\r
@@ -3254,17 +3468,17 @@ void ReformVMSDirName(char *DirName, int Flg)
 #endif\r
 \r
 \r
-/*----- \83t\83@\83C\83\8b\96¼\82É\8eg\82¦\82È\82¢\95\8e\9a\82ª\82È\82¢\82©\83`\83F\83b\83N\82µ\96¼\91O\82ð\95Ï\8dX\82·\82é --------------\r
+/*----- ファイル名に使えない文字がないかチェックし名前を変更する --------------\r
 *\r
 *      Parameter\r
-*              char *Fname : \83t\83@\83C\83\8b\96¼\r
+*              char *Fname : ファイル名\r
 *\r
 *      Return Value\r
-*              int \83X\83e\81[\83^\83X\r
-*                      SUCCESS/FAIL=\92\86\8e~\82·\82é\r
+*              int ステータス\r
+*                      FFFTP_SUCCESS/FFFTP_FAIL=中止する\r
 *\r
 *      Note\r
-*              Fname\82ð\92¼\90Ú\8f\91\82«\82©\82¦\82é\r
+*              Fnameを直接書きかえる\r
 *----------------------------------------------------------------------------*/\r
 \r
 static int RenameUnuseableName(char *Fname)\r
@@ -3272,7 +3486,7 @@ static int RenameUnuseableName(char *Fname)
        int Tmp;\r
        int Ret;\r
 \r
-       Ret = SUCCESS;\r
+       Ret = FFFTP_SUCCESS;\r
        while(1)\r
        {\r
                if((_mbschr(Fname, ':') != NULL) ||\r
@@ -3286,7 +3500,7 @@ static int RenameUnuseableName(char *Fname)
                {\r
                        if(InputDialogBox(forcerename_dlg, GetMainHwnd(), NULL, Fname, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001) == NO)\r
                        {\r
-                               Ret = FAIL;\r
+                               Ret = FFFTP_FAIL;\r
                                break;\r
                        }\r
                }\r
@@ -3297,3 +3511,20 @@ static int RenameUnuseableName(char *Fname)
 }\r
 \r
 \r
+// 自動切断対策\r
+// NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
+void NoopProc(void)\r
+{\r
+       int CancelCheckWork;\r
+       CancelCheckWork = NO;\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES)\r
+               {\r
+                       DisableUserOpe();\r
+                       DoDirListCmdSkt("", "", 999, &CancelCheckWork);\r
+                       EnableUserOpe();\r
+               }\r
+       }\r
+}\r
+\r