OSDN Git Service

Fix bugs of mirroring transfer.
[ffftp/ffftp.git] / ftpproc.c
index e13bc7d..f1fa2ea 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -110,6 +110,10 @@ extern int DebugConsole;
 extern int CancelFlg;\r
 // ディレクトリ自動作成\r
 extern int MakeAllDir;\r
+// ファイル一覧バグ修正\r
+extern int AbortOnListError;\r
+// ミラーリング設定追加\r
+extern int MirrorNoTransferContents; \r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -182,6 +186,8 @@ void DownloadProc(int ChName, int ForceFile, int All)
        TRANSPACKET Pkt;\r
        // ディレクトリ自動作成\r
        char Tmp[FMAX_PATH+1];\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -194,7 +200,9 @@ void DownloadProc(int ChName, int ForceFile, int All)
 //             KeepTransferDialog(YES);\r
 \r
                FileListBase = NULL;\r
-               MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
+               // ファイル一覧バグ修正\r
+//             MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
+               ListSts = MakeSelectedFileList(WIN_REMOTE, (ForceFile == YES ? NO : YES), All, &FileListBase, &CancelFlg);\r
 \r
                if(AskNoFullPathMode() == YES)\r
                {\r
@@ -206,6 +214,9 @@ void DownloadProc(int ChName, int ForceFile, int All)
                Pos = FileListBase;\r
                while(Pos != NULL)\r
                {\r
+                       // ファイル一覧バグ修正\r
+                       if((AbortOnListError == YES) && (ListSts == FFFTP_FAIL))\r
+                               break;\r
                        AskLocalCurDir(Pkt.LocalFile, FMAX_PATH);\r
                        SetYenTail(Pkt.LocalFile);\r
                        strcpy(TmpString, Pos->File);\r
@@ -288,6 +299,8 @@ void DownloadProc(int ChName, int ForceFile, int All)
                                // ディレクトリ自動作成\r
                                strcpy(Tmp, Pkt.LocalFile);\r
                                Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
@@ -314,6 +327,9 @@ void DownloadProc(int ChName, int ForceFile, int All)
 //             strcpy(Pkt.Cmd, "GOQUIT");\r
 //             AddTransFileList(&Pkt);\r
 \r
+               // バグ対策\r
+               AddNullTransFileList();\r
+\r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
 \r
@@ -335,6 +351,8 @@ void DownloadProc(int ChName, int ForceFile, int All)
 void DirectDownloadProc(char *Fname)\r
 {\r
        TRANSPACKET Pkt;\r
+       // ディレクトリ自動作成\r
+       char Tmp[FMAX_PATH+1];\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -400,9 +418,19 @@ void DirectDownloadProc(char *Fname)
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
+                               // ディレクトリ自動作成\r
+                               strcpy(Tmp, Pkt.LocalFile);\r
                                Pkt.Mode = CheckLocalFile(&Pkt);        /* Pkt.ExistSize がセットされる */\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if((Pkt.Mode != EXIST_ABORT) && (Pkt.Mode != EXIST_IGNORE))\r
+                               // ディレクトリ自動作成\r
+//                                     AddTransFileList(&Pkt);\r
+                               {\r
+                                       if(MakeAllDir == YES)\r
+                                               MakeDirFromLocalPath(Pkt.LocalFile, Tmp);\r
                                        AddTransFileList(&Pkt);\r
+                               }\r
                        }\r
                }\r
 \r
@@ -417,6 +445,9 @@ void DirectDownloadProc(char *Fname)
 //             strcpy(Pkt.Cmd, "GOQUIT");\r
 //             AddTransFileList(&Pkt);\r
 \r
+               // バグ対策\r
+               AddNullTransFileList();\r
+\r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
 \r
@@ -475,6 +506,8 @@ void MirrorDownloadProc(int Notify)
        char *Cat;\r
        int Level;\r
        int Mode;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -495,9 +528,14 @@ void MirrorDownloadProc(int Notify)
                        /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
-                       MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       ListSts = MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
                        RemoteListBase = NULL;\r
-                       MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       if(ListSts == FFFTP_SUCCESS)\r
+                               ListSts = MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
 \r
                        RemotePos = RemoteListBase;\r
                        while(RemotePos != NULL)\r
@@ -656,14 +694,19 @@ void MirrorDownloadProc(int Notify)
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
+                                               // ミラーリング設定追加\r
+                                               Pkt.NoTransfer = MirrorNoTransferContents;\r
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
                                }\r
                                RemotePos = RemotePos->Next;\r
                        }\r
 \r
-                       if((Notify == YES) ||\r
-                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       // ファイル一覧バグ修正\r
+//                     if((Notify == YES) ||\r
+//                        (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       if(((AbortOnListError == NO) || (ListSts == FFFTP_SUCCESS)) && ((Notify == YES) ||\r
+                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirrordown_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES)))\r
                        {\r
                                if(AskNoFullPathMode() == YES)\r
                                {\r
@@ -687,6 +730,9 @@ void MirrorDownloadProc(int Notify)
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -853,6 +899,14 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
                                else\r
                                        Ret = EXIST_IGNORE;\r
                        }\r
+                       // 同じ名前のファイルの処理方法追加\r
+                       if(Ret == EXIST_LARGE)\r
+                       {\r
+                               if(MakeLongLong(Find.nFileSizeHigh, Find.nFileSizeLow) < Pkt->Size)\r
+                                       Ret = EXIST_OVW;\r
+                               else\r
+                                       Ret = EXIST_IGNORE;\r
+                       }\r
                }\r
        }\r
        return(Ret);\r
@@ -876,11 +930,19 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
 static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
+       // 同じ名前のファイルの処理方法追加\r
+//     static const RADIOBUTTON DownExistButton[] = {\r
+//             { DOWN_EXIST_OVW, EXIST_OVW },\r
+//             { DOWN_EXIST_NEW, EXIST_NEW },\r
+//             { DOWN_EXIST_RESUME, EXIST_RESUME },\r
+//             { DOWN_EXIST_IGNORE, EXIST_IGNORE }\r
+//     };\r
        static const RADIOBUTTON DownExistButton[] = {\r
                { DOWN_EXIST_OVW, EXIST_OVW },\r
                { DOWN_EXIST_NEW, EXIST_NEW },\r
                { DOWN_EXIST_RESUME, EXIST_RESUME },\r
-               { DOWN_EXIST_IGNORE, EXIST_IGNORE }\r
+               { DOWN_EXIST_IGNORE, EXIST_IGNORE },\r
+               { DOWN_EXIST_LARGE, EXIST_LARGE }\r
        };\r
        #define DOWNEXISTBUTTONS        (sizeof(DownExistButton)/sizeof(RADIOBUTTON))\r
 \r
@@ -1012,6 +1074,8 @@ void UploadListProc(int ChName, int All)
        FILELIST *RemoteList;\r
        char Tmp[FMAX_PATH+1];\r
        int FirstAdd;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -1022,7 +1086,9 @@ void UploadListProc(int ChName, int All)
 \r
                // ローカル側で選ばれているファイルをFileListBaseに登録\r
                FileListBase = NULL;\r
-               MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+               // ファイル一覧バグ修正\r
+//             MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+               ListSts = MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
 \r
                // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
                // 同名ファイルチェック用\r
@@ -1035,6 +1101,9 @@ void UploadListProc(int ChName, int All)
                Pos = FileListBase;\r
                while(Pos != NULL)\r
                {\r
+                       // ファイル一覧バグ修正\r
+                       if((AbortOnListError == YES) && (ListSts == FFFTP_FAIL))\r
+                               break;\r
                        AskRemoteCurDir(Pkt.RemoteFile, FMAX_PATH);\r
                        SetSlashTail(Pkt.RemoteFile);\r
                        Cat = strchr(Pkt.RemoteFile, NUL);\r
@@ -1139,7 +1208,9 @@ void UploadListProc(int ChName, int All)
 \r
                                strcpy(Pkt.Cmd, "STOR ");\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                               Pkt.Size = 0;\r
+                               // バグ修正\r
+//                             Pkt.Size = 0;\r
+                               Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
@@ -1154,6 +1225,8 @@ void UploadListProc(int ChName, int All)
                                // ディレクトリ自動作成\r
                                strcpy(Tmp, Pkt.RemoteFile);\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
@@ -1193,6 +1266,9 @@ void UploadListProc(int ChName, int All)
 //             strcpy(Pkt.Cmd, "GOQUIT");\r
 //             AddTransFileList(&Pkt);\r
 \r
+               // バグ対策\r
+               AddNullTransFileList();\r
+\r
                GoForwardTransWindow();\r
 \r
                EnableUserOpe();\r
@@ -1314,7 +1390,9 @@ void UploadDragProc(WPARAM wParam)
 \r
                                strcpy(Pkt.Cmd, "STOR ");\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                               Pkt.Size = 0;\r
+                               // バグ修正\r
+//                             Pkt.Size = 0;\r
+                               Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
@@ -1330,6 +1408,8 @@ void UploadDragProc(WPARAM wParam)
                                // ディレクトリ自動作成\r
                                strcpy(Tmp, Pkt.RemoteFile);\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
+                               // ミラーリング設定追加\r
+                               Pkt.NoTransfer = NO;\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
@@ -1369,6 +1449,9 @@ void UploadDragProc(WPARAM wParam)
 //             strcpy(Pkt.Cmd, "GOQUIT");\r
 //             AddTransFileList(&Pkt);\r
 \r
+               // バグ対策\r
+               AddNullTransFileList();\r
+\r
                GoForwardTransWindow();\r
 \r
                EnableUserOpe();\r
@@ -1401,6 +1484,8 @@ void MirrorUploadProc(int Notify)
        SYSTEMTIME TmpStime;\r
        FILETIME TmpFtimeL;\r
        FILETIME TmpFtimeR;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -1421,9 +1506,14 @@ void MirrorUploadProc(int Notify)
                        /*===== ファイルリスト取得 =====*/\r
 \r
                        LocalListBase = NULL;\r
-                       MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+                       ListSts = MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
                        RemoteListBase = NULL;\r
-                       MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       // ファイル一覧バグ修正\r
+//                     MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
+                       if(ListSts == FFFTP_SUCCESS)\r
+                               ListSts = MakeSelectedFileList(WIN_REMOTE, YES, YES, &RemoteListBase, &CancelFlg);\r
 \r
                        LocalPos = LocalListBase;\r
                        while(LocalPos != NULL)\r
@@ -1600,7 +1690,9 @@ void MirrorUploadProc(int Notify)
 \r
                                                strcpy(Pkt.Cmd, "STOR ");\r
                                                Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType());\r
-                                               Pkt.Size = 0;\r
+                                               // バグ修正\r
+//                                             Pkt.Size = 0;\r
+                                               Pkt.Size = LocalPos->Size;\r
                                                Pkt.Time = LocalPos->Time;\r
                                                Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
@@ -1613,14 +1705,19 @@ void MirrorUploadProc(int Notify)
                                                }\r
 #endif\r
                                                Pkt.Mode = EXIST_OVW;\r
+                                               // ミラーリング設定追加\r
+                                               Pkt.NoTransfer = MirrorNoTransferContents;\r
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
                                }\r
                                LocalPos = LocalPos->Next;\r
                        }\r
 \r
-                       if((Notify == YES) ||\r
-                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       // ファイル一覧バグ修正\r
+//                     if((Notify == YES) ||\r
+//                        (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES))\r
+                       if(((AbortOnListError == NO) || (ListSts == FFFTP_SUCCESS)) && ((Notify == YES) ||\r
+                          (DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(mirror_notify_dlg), GetMainHwnd(), MirrorDispListCallBack, (LPARAM)&Base) == YES)))\r
                        {\r
                                if(AskNoFullPathMode() == YES)\r
                                {\r
@@ -1644,6 +1741,9 @@ void MirrorUploadProc(int Notify)
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -1804,6 +1904,8 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
                        CountMirrorFiles(hDlg, *Base);\r
                        DlgSizeInit(hDlg, &DlgSize, &MirrorDlgSize);\r
                        EnableWindow(GetDlgItem(hDlg, MIRROR_DEL), FALSE);\r
+                       // ミラーリング設定追加\r
+                       SendDlgItemMessage(hDlg, MIRROR_NO_TRANSFER, BM_SETCHECK, MirrorNoTransferContents, 0);\r
                        return(TRUE);\r
 \r
                case WM_COMMAND :\r
@@ -1848,6 +1950,17 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        }\r
                                        break;\r
 \r
+                               // ミラーリング設定追加\r
+                               case MIRROR_NO_TRANSFER :\r
+                                       Pos = *Base;\r
+                                       while(Pos != NULL)\r
+                                       {\r
+                                               if(strncmp(Pos->Cmd, "STOR", 4) == 0 || strncmp(Pos->Cmd, "RETR", 4) == 0)\r
+                                                       Pos->NoTransfer = SendDlgItemMessage(hDlg, MIRROR_NO_TRANSFER, BM_GETCHECK, 0, 0);\r
+                                               Pos = Pos->Next;\r
+                                       }\r
+                                       break;\r
+\r
                                case IDHELP :\r
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000012);\r
                        }\r
@@ -2059,6 +2172,14 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
                                else\r
                                        Ret = EXIST_IGNORE;\r
                        }\r
+                       // 同じ名前のファイルの処理方法追加\r
+                       if(Ret == EXIST_LARGE)\r
+                       {\r
+                               if(Exist->Size < Pkt->Size)\r
+                                       Ret = EXIST_OVW;\r
+                               else\r
+                                       Ret = EXIST_IGNORE;\r
+                       }\r
                }\r
        }\r
        return(Ret);\r
@@ -2082,12 +2203,21 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
 static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        static TRANSPACKET *Pkt;\r
+       // 同じ名前のファイルの処理方法追加\r
+//     static const RADIOBUTTON UpExistButton[] = {\r
+//             { UP_EXIST_OVW, EXIST_OVW },\r
+//             { UP_EXIST_NEW, EXIST_NEW },\r
+//             { UP_EXIST_RESUME, EXIST_RESUME },\r
+//             { UP_EXIST_UNIQUE, EXIST_UNIQUE },\r
+//             { UP_EXIST_IGNORE, EXIST_IGNORE }\r
+//     };\r
        static const RADIOBUTTON UpExistButton[] = {\r
                { UP_EXIST_OVW, EXIST_OVW },\r
                { UP_EXIST_NEW, EXIST_NEW },\r
                { UP_EXIST_RESUME, EXIST_RESUME },\r
                { UP_EXIST_UNIQUE, EXIST_UNIQUE },\r
-               { UP_EXIST_IGNORE, EXIST_IGNORE }\r
+               { UP_EXIST_IGNORE, EXIST_IGNORE },\r
+               { UP_EXIST_LARGE, EXIST_LARGE }\r
        };\r
        #define UPEXISTBUTTONS  (sizeof(UpExistButton)/sizeof(RADIOBUTTON))\r
 \r
@@ -2587,7 +2717,12 @@ void MoveRemoteFileProc(int drop_index)
        AskRemoteCurDir(HostDir, FMAX_PATH);\r
 \r
        // ドロップ先のフォルダ名を得る\r
-       GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       // 上位のディレクトリへ移動対応\r
+//     GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       if(drop_index >= 0)\r
+               GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+       else\r
+               strcpy(Pkt.File, "..");\r
 \r
        if(MoveMode == MOVE_DLG)\r
        {\r
@@ -2901,7 +3036,12 @@ void ChangeDirDirectProc(int Win)
 \r
        strcpy(Path, "");\r
        if(Win == WIN_LOCAL)\r
-               Sts = InputDialogBox(chdir_br_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
+       // フォルダ選択ダイアログを直接表示\r
+//             Sts = InputDialogBox(chdir_br_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
+       {\r
+               if(SelectDir(GetMainHwnd(), Path, FMAX_PATH) == TRUE)\r
+                       Sts = YES;\r
+       }\r
        else\r
                Sts = InputDialogBox(chdir_dlg, GetMainHwnd(), Title, Path, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001);\r
 \r
@@ -3659,13 +3799,13 @@ static int RenameUnuseableName(char *Fname)
 \r
 // 自動切断対策\r
 // NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
-void NoopProc(void)\r
+void NoopProc(int Force)\r
 {\r
        int CancelCheckWork;\r
        CancelCheckWork = NO;\r
-       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
        {\r
-               if(AskReuseCmdSkt() == NO || AskShareProh() == YES)\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
                {\r
                        DisableUserOpe();\r
                        DoDirListCmdSkt("", "", 999, &CancelCheckWork);\r
@@ -3674,3 +3814,25 @@ void NoopProc(void)
        }\r
 }\r
 \r
+// 同時接続対応\r
+void AbortRecoveryProc(void)\r
+{\r
+       CancelFlg = NO;\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+               {\r
+                       if(AskErrorReconnect() == YES)\r
+                       {\r
+                               DisableUserOpe();\r
+                                       ReConnectCmdSkt();\r
+                               GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
+                               EnableUserOpe();\r
+                       }\r
+                       else\r
+                               RemoveReceivedData(AskCmdCtrlSkt());\r
+               }\r
+       }\r
+       return;\r
+}\r
+\r