OSDN Git Service

Update to b2ca3cbfefb9f644d74e81b6dbb28c759def7249 (1.99a-20171104).
[ffftp/ffftp.git] / ftpproc.c
index b3a99c5..fa48c9b 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -110,6 +110,12 @@ extern int DebugConsole;
 extern int CancelFlg;\r
 // ディレクトリ自動作成\r
 extern int MakeAllDir;\r
+// ファイル一覧バグ修正\r
+extern int AbortOnListError;\r
+// ミラーリング設定追加\r
+extern int MirrorNoTransferContents; \r
+// タイムスタンプのバグ修正\r
+extern int DispTimeSeconds;\r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -182,6 +188,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 +202,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 +216,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 +301,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
@@ -408,6 +423,8 @@ void DirectDownloadProc(char *Fname)
                                // ディレクトリ自動作成\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
@@ -491,6 +508,8 @@ void MirrorDownloadProc(int Notify)
        char *Cat;\r
        int Level;\r
        int Mode;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -511,9 +530,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
@@ -672,14 +696,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
@@ -740,18 +769,28 @@ static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote)
                while(Local != NULL)\r
                {\r
                        FileTimeToLocalFileTime(&Local->Time, &fTime);\r
-                       FileTimeToSystemTime(&fTime, &sTime);\r
-                       sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
-                               sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       // タイムスタンプのバグ修正\r
+//                     FileTimeToSystemTime(&fTime, &sTime);\r
+//                     sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
+//                             sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       if(FileTimeToSystemTime(&fTime, &sTime))\r
+                               sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       else\r
+                               strcpy(Date, "");\r
                        DoPrintf("LOCAL  : %s %s [%s] %s", Local->Attr==1?"YES":"NO ", Local->Node==NODE_DIR?"DIR ":"FILE", Date, Local->File);\r
                        Local = Local->Next;\r
                }\r
                while(Remote != NULL)\r
                {\r
                        FileTimeToLocalFileTime(&Remote->Time, &fTime);\r
-                       FileTimeToSystemTime(&fTime, &sTime);\r
-                       sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
-                               sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       // タイムスタンプのバグ修正\r
+//                     FileTimeToSystemTime(&fTime, &sTime);\r
+//                     sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", \r
+//                             sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       if(FileTimeToSystemTime(&fTime, &sTime))\r
+                               sprintf(Date, "%04d/%02d/%02d %02d:%02d:%02d.%04d", sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);\r
+                       else\r
+                               strcpy(Date, "");\r
                        DoPrintf("REMOTE : %s %s [%s] %s", Remote->Attr==1?"YES":"NO ", Remote->Node==NODE_DIR?"DIR ":"FILE", Date, Remote->File);\r
                        Remote = Remote->Next;\r
                }\r
@@ -842,6 +881,8 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
        HANDLE fHnd;\r
        WIN32_FIND_DATA Find;\r
        int Ret;\r
+       // タイムスタンプのバグ修正\r
+       SYSTEMTIME TmpStime;\r
 \r
        Ret = EXIST_OVW;\r
        Pkt->ExistSize = 0;\r
@@ -867,6 +908,16 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
                        if(Ret == EXIST_NEW)\r
                        {\r
                                /*ファイル日付チェック */\r
+                               // タイムスタンプのバグ修正\r
+                               if(FileTimeToSystemTime(&Find.ftLastWriteTime, &TmpStime))\r
+                               {\r
+                                       if(DispTimeSeconds == NO)\r
+                                               TmpStime.wSecond = 0;\r
+                                       TmpStime.wMilliseconds = 0;\r
+                                       SystemTimeToFileTime(&TmpStime, &Find.ftLastWriteTime);\r
+                               }\r
+                               else\r
+                                       memset(&Find.ftLastWriteTime, 0, sizeof(FILETIME));\r
                                if(CompareFileTime(&Find.ftLastWriteTime, &Pkt->Time) < 0)\r
                                        Ret = EXIST_OVW;\r
                                else\r
@@ -954,7 +1005,7 @@ static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000009);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -1047,6 +1098,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
@@ -1057,7 +1110,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
@@ -1070,6 +1125,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
@@ -1191,6 +1249,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
@@ -1372,6 +1432,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
@@ -1446,6 +1508,8 @@ void MirrorUploadProc(int Notify)
        SYSTEMTIME TmpStime;\r
        FILETIME TmpFtimeL;\r
        FILETIME TmpFtimeR;\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -1466,9 +1530,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
@@ -1545,19 +1614,37 @@ void MirrorUploadProc(int Notify)
                                                                FileTimeToLocalFileTime(&RemotePos->Time, &TmpFtimeR);\r
                                                                if((RemotePos->InfoExist & FINFO_TIME) == 0)\r
                                                                {\r
-                                                                       FileTimeToSystemTime(&TmpFtimeL, &TmpStime);\r
-                                                                       TmpStime.wHour = 0;\r
-                                                                       TmpStime.wMinute = 0;\r
-                                                                       TmpStime.wSecond = 0;\r
-                                                                       TmpStime.wMilliseconds = 0;\r
-                                                                       SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
-\r
-                                                                       FileTimeToSystemTime(&TmpFtimeR, &TmpStime);\r
-                                                                       TmpStime.wHour = 0;\r
-                                                                       TmpStime.wMinute = 0;\r
-                                                                       TmpStime.wSecond = 0;\r
-                                                                       TmpStime.wMilliseconds = 0;\r
-                                                                       SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       // タイムスタンプのバグ修正\r
+//                                                                     FileTimeToSystemTime(&TmpFtimeL, &TmpStime);\r
+//                                                                     TmpStime.wHour = 0;\r
+//                                                                     TmpStime.wMinute = 0;\r
+//                                                                     TmpStime.wSecond = 0;\r
+//                                                                     TmpStime.wMilliseconds = 0;\r
+//                                                                     SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
+                                                                       if(FileTimeToSystemTime(&TmpFtimeL, &TmpStime))\r
+                                                                       {\r
+                                                                               TmpStime.wHour = 0;\r
+                                                                               TmpStime.wMinute = 0;\r
+                                                                               TmpStime.wSecond = 0;\r
+                                                                               TmpStime.wMilliseconds = 0;\r
+                                                                               SystemTimeToFileTime(&TmpStime, &TmpFtimeL);\r
+                                                                       }\r
+\r
+                                                                       // タイムスタンプのバグ修正\r
+//                                                                     FileTimeToSystemTime(&TmpFtimeR, &TmpStime);\r
+//                                                                     TmpStime.wHour = 0;\r
+//                                                                     TmpStime.wMinute = 0;\r
+//                                                                     TmpStime.wSecond = 0;\r
+//                                                                     TmpStime.wMilliseconds = 0;\r
+//                                                                     SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       if(FileTimeToSystemTime(&TmpFtimeR, &TmpStime))\r
+                                                                       {\r
+                                                                               TmpStime.wHour = 0;\r
+                                                                               TmpStime.wMinute = 0;\r
+                                                                               TmpStime.wSecond = 0;\r
+                                                                               TmpStime.wMilliseconds = 0;\r
+                                                                               SystemTimeToFileTime(&TmpStime, &TmpFtimeR);\r
+                                                                       }\r
                                                                }\r
                                                                RemotePos->Attr = NO;\r
                                                                if(CompareFileTime(&TmpFtimeL, &TmpFtimeR) <= 0)\r
@@ -1660,14 +1747,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
@@ -1788,7 +1880,7 @@ static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        else\r
                                                hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000012);\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -1812,7 +1904,9 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
 {\r
        static DIALOGSIZE DlgSize = {\r
                { MIRROR_DEL, MIRROR_SIZEGRIP, -1 },\r
-               { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, -1 },\r
+               // ミラーリング設定追加\r
+//             { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, -1 },\r
+               { IDOK, IDCANCEL, IDHELP, MIRROR_DEL, MIRROR_COPYNUM, MIRROR_MAKENUM, MIRROR_DELNUM, MIRROR_SIZEGRIP, MIRROR_NO_TRANSFER, -1 },\r
                { MIRROR_LIST, -1 },\r
                { 0, 0 },\r
                { 0, 0 }\r
@@ -1823,9 +1917,18 @@ static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM
        char Tmp[FMAX_PATH+1+6];\r
        int Num;\r
        int *List;\r
+       // バグ修正\r
+       RECT Rect;\r
 \r
        switch (iMessage)\r
        {\r
+               // バグ修正\r
+               case WM_SIZE :\r
+                       GetWindowRect(hDlg, &Rect);\r
+                       DlgSizeChange(hDlg, &DlgSize, &Rect, 0);\r
+                       RedrawWindow(hDlg, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);\r
+                       break;\r
+\r
                case WM_INITDIALOG :\r
                        Base = (TRANSPACKET **)lParam;\r
                        Pos = *Base;\r
@@ -1854,6 +1957,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
@@ -1898,14 +2003,25 @@ 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
-            return(TRUE);\r
+                       return(TRUE);\r
 \r
                case WM_SIZING :\r
                        DlgSizeChange(hDlg, &DlgSize, (RECT *)lParam, (int)wParam);\r
-                   return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2194,7 +2310,7 @@ static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM w
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000011);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2241,7 +2357,7 @@ static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2291,7 +2407,7 @@ static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage,
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2321,28 +2437,43 @@ void DeleteProc(void)
        CancelFlg = NO;\r
 \r
        // デッドロック対策\r
-       DisableUserOpe();\r
-       Sts = YES;\r
-       AskRemoteCurDir(CurDir, FMAX_PATH);\r
-       FileListBase = NULL;\r
+//     Sts = YES;\r
+//     AskRemoteCurDir(CurDir, FMAX_PATH);\r
+//     FileListBase = NULL;\r
+//     if(GetFocus() == GetLocalHwnd())\r
+//     {\r
+//             Win = WIN_LOCAL;\r
+//             MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
+//     }\r
+//     else\r
+//     {\r
+//             Win = WIN_REMOTE;\r
+//             if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
+//                     MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
+//             else\r
+//                     Sts = NO;\r
+//     }\r
+       Sts = FFFTP_SUCCESS;\r
        if(GetFocus() == GetLocalHwnd())\r
-       {\r
                Win = WIN_LOCAL;\r
-               MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
-       }\r
        else\r
        {\r
                Win = WIN_REMOTE;\r
-               if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
-                       MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
-               else\r
-                       Sts = NO;\r
+               Sts = CheckClosedAndReconnect();\r
        }\r
 \r
-       if(Sts == YES)\r
+       // デッドロック対策\r
+//     if(Sts == YES)\r
+       if(Sts == FFFTP_SUCCESS)\r
        {\r
                // デッドロック対策\r
-//             DisableUserOpe();\r
+               DisableUserOpe();\r
+               AskRemoteCurDir(CurDir, FMAX_PATH);\r
+               FileListBase = NULL;\r
+               if(Win == WIN_LOCAL)\r
+                       MakeSelectedFileList(Win, NO, NO, &FileListBase, &CancelFlg);\r
+               else\r
+                       MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
 \r
                DelFlg = NO;\r
                Sts = NO;\r
@@ -2379,10 +2510,8 @@ void DeleteProc(void)
                }\r
 \r
                // デッドロック対策\r
-//             EnableUserOpe();\r
+               EnableUserOpe();\r
        }\r
-       // デッドロック対策\r
-       EnableUserOpe();\r
        return;\r
 }\r
 \r
@@ -2541,7 +2670,7 @@ static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2654,7 +2783,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
@@ -2794,7 +2928,7 @@ static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -3170,7 +3304,7 @@ INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                                        hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000017);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -3393,7 +3527,7 @@ static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wPa
                        }\r
                        return(TRUE);\r
        }\r
-    return(FALSE);\r
+       return(FALSE);\r
 }\r
 \r
 \r
@@ -3436,7 +3570,7 @@ static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, L
                        }\r
                        return(TRUE);\r
        }\r
-    return(FALSE);\r
+       return(FALSE);\r
 }\r
 \r
 \r
@@ -3733,16 +3867,51 @@ static int RenameUnuseableName(char *Fname)
 // NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
 void NoopProc(int Force)\r
 {\r
-       int CancelCheckWork;\r
-       CancelCheckWork = NO;\r
        if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
        {\r
-               if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+               if(AskReuseCmdSkt() == NO || (AskShareProh() == YES && AskTransferNow() == NO))\r
                {\r
+                       if(Force == NO)\r
+                               CancelFlg = NO;\r
                        DisableUserOpe();\r
-                       DoDirListCmdSkt("", "", 999, &CancelCheckWork);\r
+                       DoDirListCmdSkt("", "", 999, &CancelFlg);\r
                        EnableUserOpe();\r
                }\r
        }\r
 }\r
 \r
+// 同時接続対応\r
+void AbortRecoveryProc(void)\r
+{\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+               {\r
+                       CancelFlg = NO;\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
+void ReconnectProc(void)\r
+{\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               CancelFlg = NO;\r
+               DisableUserOpe();\r
+               ReConnectCmdSkt();\r
+               GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
+               EnableUserOpe();\r
+       }\r
+       return;\r
+}\r
+\r