OSDN Git Service

Update to b2ca3cbfefb9f644d74e81b6dbb28c759def7249 (1.99a-20171104).
[ffftp/ffftp.git] / ftpproc.c
index 648488a..fa48c9b 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
 /*===== プロトタイプ =====*/\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
+static int AskUploadFileAttr(char *Fname);\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
@@ -93,10 +108,21 @@ extern SIZE MirrorDlgSize;
 extern int VaxSemicolon;\r
 extern int DebugConsole;\r
 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
 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;           /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
@@ -118,11 +144,52 @@ static double FileSize;           /* ファイル総容量 */
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void DownLoadProc(int ChName, int ForceFile, int All)\r
+// ディレクトリ自動作成\r
+// ローカル側のパスから必要なフォルダを作成\r
+int MakeDirFromLocalPath(char* LocalFile, char* Old)\r
+{\r
+       TRANSPACKET Pkt;\r
+       char* pDelimiter;\r
+       char* pNext;\r
+       char* Cat;\r
+       int Len;\r
+       int Make;\r
+       pDelimiter = LocalFile;\r
+       Make = NO;\r
+       while(pNext = strchr(pDelimiter, '\\'))\r
+       {\r
+               Len = pNext - LocalFile;\r
+               strncpy(Pkt.LocalFile, LocalFile, Len);\r
+               Pkt.LocalFile[Len] = '\0';\r
+               if(strncmp(LocalFile, Old, Len + 1) != 0)\r
+               {\r
+                       Cat = Pkt.LocalFile + (pDelimiter - LocalFile);\r
+                       if(FnameCnv == FNAME_LOWER)\r
+                               _mbslwr(Cat);\r
+                       else if(FnameCnv == FNAME_UPPER)\r
+                               _mbsupr(Cat);\r
+                       ReplaceAll(Pkt.LocalFile, '/', '\\');\r
+\r
+                       strcpy(Pkt.Cmd, "MKD ");\r
+                       strcpy(Pkt.RemoteFile, "");\r
+                       AddTransFileList(&Pkt);\r
+\r
+                       Make = YES;\r
+               }\r
+               pDelimiter = pNext + 1;\r
+       }\r
+       return Make;\r
+}\r
+\r
+void DownloadProc(int ChName, int ForceFile, int All)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
        TRANSPACKET Pkt;\r
+       // ディレクトリ自動作成\r
+       char Tmp[FMAX_PATH+1];\r
+       // ファイル一覧バグ修正\r
+       int ListSts;\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -135,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
@@ -147,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
@@ -205,6 +277,19 @@ 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
@@ -213,11 +298,21 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                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)\r
                                        break;\r
                                else if(Pkt.Mode != EXIST_IGNORE)\r
+                               // ディレクトリ自動作成\r
+//                                     AddTransFileList(&Pkt);\r
+                               {\r
+                                       if(MakeAllDir == YES)\r
+                                               MakeDirFromLocalPath(Pkt.LocalFile, Tmp);\r
                                        AddTransFileList(&Pkt);\r
+                               }\r
                        }\r
                        Pos = Pos->Next;\r
                }\r
@@ -230,8 +325,12 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                }\r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
@@ -251,9 +350,11 @@ void DownLoadProc(int ChName, int ForceFile, int All)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void DirectDownLoadProc(char *Fname)\r
+void DirectDownloadProc(char *Fname)\r
 {\r
        TRANSPACKET Pkt;\r
+       // ディレクトリ自動作成\r
+       char Tmp[FMAX_PATH+1];\r
 \r
        // 同時接続対応\r
        CancelFlg = NO;\r
@@ -319,9 +420,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
@@ -332,8 +443,12 @@ void DirectDownLoadProc(char *Fname)
                        AddTransFileList(&Pkt);\r
                }\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 //             KeepTransferDialog(NO);\r
@@ -353,7 +468,7 @@ void DirectDownLoadProc(char *Fname)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void InputDownLoadProc(void)\r
+void InputDownloadProc(void)\r
 {\r
        char Path[FMAX_PATH+1];\r
        int Tmp;\r
@@ -363,7 +478,7 @@ void InputDownLoadProc(void)
        strcpy(Path, "");\r
        if(InputDialogBox(downname_dlg, GetMainHwnd(), NULL, Path, FMAX_PATH, &Tmp, IDH_HELP_TOPIC_0000001) == YES)\r
        {\r
-               DirectDownLoadProc(Path);\r
+               DirectDownloadProc(Path);\r
        }\r
 \r
 //     EnableUserOpe();\r
@@ -393,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
@@ -413,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
@@ -574,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
@@ -598,12 +725,16 @@ void MirrorDownloadProc(int Notify)
                                        AddTransFileList(&Pkt);\r
                                }\r
 \r
-                               strcpy(Pkt.Cmd, "GOQUIT");\r
-                               AddTransFileList(&Pkt);\r
+                               // 同時接続対応\r
+//                             strcpy(Pkt.Cmd, "GOQUIT");\r
+//                             AddTransFileList(&Pkt);\r
                        }\r
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -638,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
@@ -740,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
@@ -765,11 +908,29 @@ 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
                                        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
@@ -788,14 +949,24 @@ static int CheckLocalFile(TRANSPACKET *Pkt)
 *              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
+       // 同じ名前のファイルの処理方法追加\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
@@ -834,7 +1005,7 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
                                        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
@@ -854,7 +1025,70 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void UpLoadListProc(int ChName, int All)\r
+// ディレクトリ自動作成\r
+// リモート側のパスから必要なディレクトリを作成\r
+int MakeDirFromRemotePath(char* RemoteFile, char* Old, int FirstAdd)\r
+{\r
+       TRANSPACKET Pkt;\r
+       TRANSPACKET Pkt1;\r
+       char* pDelimiter;\r
+       char* pNext;\r
+       char* Cat;\r
+       int Len;\r
+       int Make;\r
+       pDelimiter = RemoteFile;\r
+       Make = NO;\r
+       while(pNext = strchr(pDelimiter, '/'))\r
+       {\r
+               Len = pNext - RemoteFile;\r
+               strncpy(Pkt.RemoteFile, RemoteFile, Len);\r
+               Pkt.RemoteFile[Len] = '\0';\r
+               if(strncmp(RemoteFile, Old, Len + 1) != 0)\r
+               {\r
+                       Cat = Pkt.RemoteFile + (pDelimiter - RemoteFile);\r
+                       if(FnameCnv == FNAME_LOWER)\r
+                               _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
+                       ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
+\r
+                       if(AskHostType() == HTYPE_ACOS)\r
+                       {\r
+                               strcpy(Pkt.RemoteFile, "'");\r
+                               strcat(Pkt.RemoteFile, AskHostLsName());\r
+                               strcat(Pkt.RemoteFile, "(");\r
+                               strcat(Pkt.RemoteFile, Cat);\r
+                               strcat(Pkt.RemoteFile, ")");\r
+                               strcat(Pkt.RemoteFile, "'");\r
+                       }\r
+                       else if(AskHostType() == HTYPE_ACOS_4)\r
+                               strcpy(Pkt.RemoteFile, Cat);\r
+\r
+                       if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
+                       {\r
+                               strcpy(Pkt1.Cmd, "SETCUR");\r
+                               AskRemoteCurDir(Pkt1.RemoteFile, FMAX_PATH);\r
+                               AddTransFileList(&Pkt1);\r
+                       }\r
+                       FirstAdd = NO;\r
+                       strcpy(Pkt.Cmd, "MKD ");\r
+                       strcpy(Pkt.LocalFile, "");\r
+                       AddTransFileList(&Pkt);\r
+\r
+                       Make = YES;\r
+               }\r
+               pDelimiter = pNext + 1;\r
+       }\r
+       return Make;\r
+}\r
+\r
+void UploadListProc(int ChName, int All)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
@@ -864,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
@@ -874,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
@@ -887,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
@@ -897,17 +1138,44 @@ 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
                                // 名前を変更する\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
                                        break;\r
                        }\r
+                       // バグ修正\r
+                       AskRemoteCurDir(Tmp, FMAX_PATH);\r
+                       SetSlashTail(Tmp);\r
+                       if(strncmp(Pkt.RemoteFile, Tmp, strlen(Tmp)) != 0)\r
+                       {\r
+                               if((Cat = strrchr(Pkt.RemoteFile, '/')) != NULL)\r
+                                       Cat++;\r
+                               else\r
+                                       Cat = Pkt.RemoteFile;\r
+                       }\r
                        ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
 \r
                        if(AskHostType() == HTYPE_ACOS)\r
@@ -964,18 +1232,35 @@ 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.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\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
+                               // ディレクトリ自動作成\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
                                {\r
+                                       // ディレクトリ自動作成\r
+                                       if(MakeAllDir == YES)\r
+                                       {\r
+                                               if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES)\r
+                                                       FirstAdd = NO;\r
+                                       }\r
                                        if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
                                        {\r
                                                strcpy(Pkt1.Cmd, "SETCUR");\r
@@ -1001,8 +1286,12 @@ void UpLoadListProc(int ChName, int All)
 \r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 \r
@@ -1021,7 +1310,7 @@ void UpLoadListProc(int ChName, int All)
 *              なし\r
 *----------------------------------------------------------------------------*/\r
 \r
-void UpLoadDragProc(WPARAM wParam)\r
+void UploadDragProc(WPARAM wParam)\r
 {\r
        FILELIST *FileListBase;\r
        FILELIST *Pos;\r
@@ -1065,6 +1354,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
@@ -1119,18 +1414,36 @@ 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.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\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
+                               // ディレクトリ自動作成\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
                                {\r
+                                       // ディレクトリ自動作成\r
+                                       if(MakeAllDir == YES)\r
+                                       {\r
+                                               if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES)\r
+                                                       FirstAdd = NO;\r
+                                       }\r
                                        if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
                                        {\r
                                                strcpy(Pkt1.Cmd, "SETCUR");\r
@@ -1156,8 +1469,12 @@ void UpLoadDragProc(WPARAM wParam)
 \r
                DeleteFileList(&FileListBase);\r
 \r
-               strcpy(Pkt.Cmd, "GOQUIT");\r
-               AddTransFileList(&Pkt);\r
+               // 同時接続対応\r
+//             strcpy(Pkt.Cmd, "GOQUIT");\r
+//             AddTransFileList(&Pkt);\r
+\r
+               // バグ対策\r
+               AddNullTransFileList();\r
 \r
                GoForwardTransWindow();\r
 \r
@@ -1191,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
@@ -1211,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
@@ -1290,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
@@ -1390,22 +1732,34 @@ 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.Attr = AskUploadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\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
+                                               // ミラーリング設定追加\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
@@ -1422,12 +1776,16 @@ void MirrorUploadProc(int Notify)
                                        AddTransFileList(&Pkt);\r
                                }\r
 \r
-                               strcpy(Pkt.Cmd, "GOQUIT");\r
-                               AddTransFileList(&Pkt);\r
+                               // 同時接続対応\r
+//                             strcpy(Pkt.Cmd, "GOQUIT");\r
+//                             AddTransFileList(&Pkt);\r
                        }\r
                        else\r
                                EraseTmpTransFileList(&Base);\r
 \r
+                       // バグ対策\r
+                       AddNullTransFileList();\r
+\r
                        DeleteFileList(&LocalListBase);\r
                        DeleteFileList(&RemoteListBase);\r
 \r
@@ -1489,7 +1847,9 @@ static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET *
 *              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
@@ -1520,7 +1880,7 @@ static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
                                        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
@@ -1538,11 +1898,15 @@ static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
 *              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
-               { 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
@@ -1553,9 +1917,18 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
        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
@@ -1584,6 +1957,8 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                        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
@@ -1628,14 +2003,25 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                                        }\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
@@ -1755,7 +2141,7 @@ static int AskMirrorNoTrn(char *Fname, int Mode)
 *              int 属性 (-1=設定なし)\r
 *----------------------------------------------------------------------------*/\r
 \r
-static int AskUpLoadFileAttr(char *Fname)\r
+static int AskUploadFileAttr(char *Fname)\r
 {\r
        int Ret;\r
        int Sts;\r
@@ -1797,13 +2183,26 @@ static int AskUpLoadFileAttr(char *Fname)
 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
@@ -1826,6 +2225,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
@@ -1844,15 +2251,26 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)
 *              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
+       // 同じ名前のファイルの処理方法追加\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
@@ -1892,12 +2310,60 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar
                                        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
+\r
+\r
+/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------\r
+*\r
+*      Parameter\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
+// 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
+               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
+                       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
+                                       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
 \r
 \r
+#if defined(HAVE_TANDEM)\r
 /*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------\r
 *\r
 *      Parameter\r
@@ -1910,7 +2376,7 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (iMessage)\r
        {\r
@@ -1923,6 +2389,9 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                        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
@@ -1930,6 +2399,7 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                        {\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
@@ -1937,10 +2407,11 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
+#endif\r
 \r
 \r
 /*----- ファイル一覧で指定されたファイルを削除する ----------------------------\r
@@ -1966,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
@@ -2024,10 +2510,8 @@ void DeleteProc(void)
                }\r
 \r
                // デッドロック対策\r
-//             EnableUserOpe();\r
+               EnableUserOpe();\r
        }\r
-       // デッドロック対策\r
-       EnableUserOpe();\r
        return;\r
 }\r
 \r
@@ -2153,7 +2637,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi
 *              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
@@ -2184,7 +2670,7 @@ static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2297,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
@@ -2405,7 +2896,9 @@ void MoveRemoteFileProc(int drop_index)
 *              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
@@ -2435,7 +2928,7 @@ static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara
                                        EndDialog(hDlg, NO_ALL);\r
                                        break;\r
                        }\r
-            return(TRUE);\r
+                       return(TRUE);\r
        }\r
        return(FALSE);\r
 }\r
@@ -2609,7 +3102,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
@@ -2759,7 +3257,9 @@ void ChmodProc(void)
 *              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
@@ -2804,7 +3304,7 @@ BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARA
                                        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
@@ -2923,7 +3423,9 @@ void SomeCmdProc(void)
 \r
                        if(InputDialogBox(somecmd_dlg, GetMainHwnd(), NULL, Cmd, 81, &Tmp, IDH_HELP_TOPIC_0000023) == YES)\r
                        {\r
-                               DoQUOTE(Cmd);\r
+                               // 同時接続対応\r
+                               //DoQUOTE(Cmd);\r
+                               DoQUOTE(AskCmdCtrlSkt(), Cmd, &CancelFlg);\r
                        }\r
                        EnableUserOpe();\r
                }\r
@@ -3025,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
@@ -3068,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
@@ -3361,3 +3863,55 @@ static int RenameUnuseableName(char *Fname)
 }\r
 \r
 \r
+// 自動切断対策\r
+// NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
+void NoopProc(int Force)\r
+{\r
+       if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
+       {\r
+               if(AskReuseCmdSkt() == NO || (AskShareProh() == YES && AskTransferNow() == NO))\r
+               {\r
+                       if(Force == NO)\r
+                               CancelFlg = NO;\r
+                       DisableUserOpe();\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