X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=ftpproc.c;h=01f2303d3e26b7a8d0c06ca5fda73e9b14765046;hp=45d15f4b1ecb99079239796883ab627f6dfec747;hb=607cd5899fe0ff3692e440cc5fd27e1b21a6cd77;hpb=3efb66ad5ef6a7e965b9b8b23852e826b7302c5f diff --git a/ftpproc.c b/ftpproc.c index 45d15f4..01f2303 100644 --- a/ftpproc.c +++ b/ftpproc.c @@ -1,6 +1,6 @@ -/*============================================================================= +/*============================================================================= * -* ‚e‚s‚oƒRƒ}ƒ“ƒh‘€ì +* FTPコマンド操作 * =============================================================================== / Copyright (C) 1997-2007 Sota. All rights reserved. @@ -28,6 +28,8 @@ /============================================================================*/ #define STRICT +// IPv6対応 +#include #include #include #include @@ -42,43 +44,58 @@ #include #include "helpid.h" -// UTF-8‘Ήž +// UTF-8対応 #undef __MBSWRAPPER_H__ #include "mbswrapper.h" -/*===== ƒvƒƒgƒ^ƒCƒv =====*/ +/*===== プロトタイプ =====*/ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList); -static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote); static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base); static int CheckLocalFile(TRANSPACKET *Pkt); -static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static void RemoveAfterSemicolon(char *Path); static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base); -static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); -static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt); static int AskMirrorNoTrn(char *Fname, int Mode); -static int AskUpLoadFileAttr(char *Fname); -static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static int AskUploadFileAttr(char *Fname); +// 64ビット対応 +//static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +#if defined(HAVE_TANDEM) +static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +#endif static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir); static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir); -static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); -static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +//static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static void SetAttrToDialog(HWND hWnd, int Attr); static int GetAttrFromDialog(HWND hDlg); static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static int RenameUnuseableName(char *Fname); -/*===== ŠO•”ŽQÆ ====*/ +/*===== 外部参照 ====*/ extern HWND hHelpWin; -/* Ý’è’l */ +/* 設定値 */ extern int FnameCnv; extern int RecvMode; extern int SendMode; @@ -91,38 +108,85 @@ extern SIZE MirrorDlgSize; extern int VaxSemicolon; extern int DebugConsole; extern int CancelFlg; +// ディレクトリ自動作成 +extern int MakeAllDir; -/*===== ƒ[ƒJƒ‹‚ȃ[ƒN =====*/ +/*===== ローカルなワーク =====*/ -static char TmpString[FMAX_PATH+80]; /* ƒeƒ“ƒ|ƒ‰ƒŠ */ -static int CurWin; /* ƒEƒCƒ“ƒhƒE”ԍ† */ +static char TmpString[FMAX_PATH+80]; /* テンポラリ */ +#if defined(HAVE_TANDEM) +static char TmpFileCode[5]; /* テンポラリ */ +#endif +static int CurWin; /* ウインドウ番号 */ -int UpExistMode = EXIST_OVW; /* ƒAƒbƒvƒ[ƒh‚Å“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚ ‚鎞‚̈µ‚¢•û EXIST_xxx */ -int ExistMode = EXIST_OVW; /* “¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚ ‚鎞‚̈µ‚¢•û EXIST_xxx */ -static int ExistNotify; /* Šm”Fƒ_ƒCƒAƒƒO‚ðo‚·‚©‚Ç‚¤‚© YES/NO */ +int UpExistMode = EXIST_OVW; /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */ +int ExistMode = EXIST_OVW; /* 同じ名前のファイルがある時の扱い方 EXIST_xxx */ +static int ExistNotify; /* 確認ダイアログを出すかどうか YES/NO */ -static double FileSize; /* ƒtƒ@ƒCƒ‹‘—e—Ê */ +static double FileSize; /* ファイル総容量 */ -/*----- ƒtƒ@ƒCƒ‹ˆê——‚ÅŽw’肳‚ꂽƒtƒ@ƒCƒ‹‚ðƒ_ƒEƒ“ƒ[ƒh‚·‚é -------------------- +/*----- ファイル一覧で指定されたファイルをダウンロードする -------------------- * * Parameter -* int ChName : –¼‘O‚ð•Ï‚¦‚é‚©‚Ç‚¤‚© (YES/NO) -* int ForceFile : ƒfƒBƒŒƒNƒgƒŠ‚ðƒtƒ@ƒCƒ‹Œ©‚È‚·‚©‚Ç‚¤‚© (YES/NO) -* int All : ‘S‚Ä‚ª‘I‚΂ê‚Ä‚¢‚镨‚Æ‚µ‚Ĉµ‚¤‚©‚Ç‚¤‚© (YES/NO) +* int ChName : 名前を変えるかどうか (YES/NO) +* int ForceFile : ディレクトリをファイル見なすかどうか (YES/NO) +* int All : 全てが選ばれている物として扱うかどうか (YES/NO) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ -void DownLoadProc(int ChName, int ForceFile, int All) +// ディレクトリ自動作成 +// ローカル側のパスから必要なフォルダを作成 +int MakeDirFromLocalPath(char* LocalFile, char* Old) +{ + TRANSPACKET Pkt; + char* pDelimiter; + char* pNext; + char* Cat; + int Len; + int Make; + pDelimiter = LocalFile; + Make = NO; + while(pNext = strchr(pDelimiter, '\\')) + { + Len = pNext - LocalFile; + strncpy(Pkt.LocalFile, LocalFile, Len); + Pkt.LocalFile[Len] = '\0'; + if(strncmp(LocalFile, Old, Len + 1) != 0) + { + Cat = Pkt.LocalFile + (pDelimiter - LocalFile); + if(FnameCnv == FNAME_LOWER) + _mbslwr(Cat); + else if(FnameCnv == FNAME_UPPER) + _mbsupr(Cat); + ReplaceAll(Pkt.LocalFile, '/', '\\'); + + strcpy(Pkt.Cmd, "MKD "); + strcpy(Pkt.RemoteFile, ""); + AddTransFileList(&Pkt); + + Make = YES; + } + pDelimiter = pNext + 1; + } + return Make; +} + +void DownloadProc(int ChName, int ForceFile, int All) { FILELIST *FileListBase; FILELIST *Pos; TRANSPACKET Pkt; + // ディレクトリ自動作成 + char Tmp[FMAX_PATH+1]; - if(CheckClosedAndReconnect() == SUCCESS) + // 同時接続対応 + CancelFlg = NO; + + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); @@ -152,7 +216,7 @@ void DownLoadProc(int ChName, int ForceFile, int All) else if(FnameCnv == FNAME_UPPER) _mbsupr(TmpString); RemoveAfterSemicolon(TmpString); - if(RenameUnuseableName(TmpString) == FAIL) + if(RenameUnuseableName(TmpString) == FFFTP_FAIL) break; } else @@ -160,7 +224,7 @@ void DownLoadProc(int ChName, int ForceFile, int All) CurWin = WIN_REMOTE; if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES) { - if(RenameUnuseableName(TmpString) == FAIL) + if(RenameUnuseableName(TmpString) == FFFTP_FAIL) break; } else @@ -200,19 +264,40 @@ void DownLoadProc(int ChName, int ForceFile, int All) } strcpy(Pkt.Cmd, "RETR "); +#if defined(HAVE_TANDEM) + if(AskHostType() == HTYPE_TANDEM) { + if(AskTransferType() != TYPE_X) { + Pkt.Type = AskTransferType(); + } else { + Pkt.Attr = Pos->Attr; + if (Pkt.Attr == 101) + Pkt.Type = TYPE_A; + else + Pkt.Type = TYPE_I; + } + } else +#endif Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType()); Pkt.Size = Pos->Size; Pkt.Time = Pos->Time; Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); - Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize ‚ªƒZƒbƒg‚³‚ê‚é */ + // ディレクトリ自動作成 + strcpy(Tmp, Pkt.LocalFile); + Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize がセットされる */ if(Pkt.Mode == EXIST_ABORT) break; else if(Pkt.Mode != EXIST_IGNORE) + // ディレクトリ自動作成 +// AddTransFileList(&Pkt); + { + if(MakeAllDir == YES) + MakeDirFromLocalPath(Pkt.LocalFile, Tmp); AddTransFileList(&Pkt); + } } Pos = Pos->Next; } @@ -225,8 +310,9 @@ void DownLoadProc(int ChName, int ForceFile, int All) } DeleteFileList(&FileListBase); - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); // KeepTransferDialog(NO); @@ -237,20 +323,25 @@ void DownLoadProc(int ChName, int ForceFile, int All) } -/*----- Žw’肳‚ꂽƒtƒ@ƒCƒ‹‚ðˆê‚ƒ_ƒEƒ“ƒ[ƒh‚·‚é ------------------------------ +/*----- 指定されたファイルを一つダウンロードする ------------------------------ * * Parameter -* char *Fname : ƒtƒ@ƒCƒ‹–¼ +* char *Fname : ファイル名 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ -void DirectDownLoadProc(char *Fname) +void DirectDownloadProc(char *Fname) { TRANSPACKET Pkt; + // ディレクトリ自動作成 + char Tmp[FMAX_PATH+1]; + + // 同時接続対応 + CancelFlg = NO; - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); @@ -275,7 +366,7 @@ void DirectDownLoadProc(char *Fname) _mbsupr(TmpString); RemoveAfterSemicolon(TmpString); - if(RenameUnuseableName(TmpString) == SUCCESS) + if(RenameUnuseableName(TmpString) == FFFTP_SUCCESS) { strcat(Pkt.LocalFile, TmpString); ReplaceAll(Pkt.LocalFile, '/', '\\'); @@ -304,16 +395,24 @@ void DirectDownLoadProc(char *Fname) strcpy(Pkt.Cmd, "RETR-S "); Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType()); - /* ƒTƒCƒY‚Æ“ú•t‚Í“]‘—‘¤ƒXƒŒƒbƒh‚Ŏ擾‚µAƒZƒbƒg‚·‚é */ + /* サイズと日付は転送側スレッドで取得し、セットする */ Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); - Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize ‚ªƒZƒbƒg‚³‚ê‚é */ + // ディレクトリ自動作成 + strcpy(Tmp, Pkt.LocalFile); + Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize がセットされる */ if((Pkt.Mode != EXIST_ABORT) && (Pkt.Mode != EXIST_IGNORE)) + // ディレクトリ自動作成 +// AddTransFileList(&Pkt); + { + if(MakeAllDir == YES) + MakeDirFromLocalPath(Pkt.LocalFile, Tmp); AddTransFileList(&Pkt); + } } } @@ -324,8 +423,9 @@ void DirectDownLoadProc(char *Fname) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); // KeepTransferDialog(NO); @@ -336,16 +436,16 @@ void DirectDownLoadProc(char *Fname) } -/*----- “ü—Í‚³‚ꂽƒtƒ@ƒCƒ‹–¼‚̃tƒ@ƒCƒ‹‚ðˆê‚ƒ_ƒEƒ“ƒ[ƒh‚·‚é ------------------ +/*----- 入力されたファイル名のファイルを一つダウンロードする ------------------ * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ -void InputDownLoadProc(void) +void InputDownloadProc(void) { char Path[FMAX_PATH+1]; int Tmp; @@ -355,7 +455,7 @@ void InputDownLoadProc(void) strcpy(Path, ""); if(InputDialogBox(downname_dlg, GetMainHwnd(), NULL, Path, FMAX_PATH, &Tmp, IDH_HELP_TOPIC_0000001) == YES) { - DirectDownLoadProc(Path); + DirectDownloadProc(Path); } // EnableUserOpe(); @@ -364,13 +464,13 @@ void InputDownLoadProc(void) } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOƒ_ƒEƒ“ƒ[ƒh‚ðs‚¤ ---------------------------------------- +/*----- ミラーリングダウンロードを行う ---------------------------------------- * * Parameter -* int Notify : Šm”F‚ðs‚¤‚©‚Ç‚¤‚© (YES/NO) +* int Notify : 確認を行うかどうか (YES/NO) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void MirrorDownloadProc(int Notify) @@ -386,7 +486,10 @@ void MirrorDownloadProc(int Notify) int Level; int Mode; - if(CheckClosedAndReconnect() == SUCCESS) + // 同時接続対応 + CancelFlg = NO; + + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); @@ -399,7 +502,7 @@ void MirrorDownloadProc(int Notify) if((Notify == YES) || (Notify == YES_LIST)) { - /*===== ƒtƒ@ƒCƒ‹ƒŠƒXƒgŽæ“¾ =====*/ + /*===== ファイルリスト取得 =====*/ LocalListBase = NULL; MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg); @@ -409,7 +512,7 @@ void MirrorDownloadProc(int Notify) RemotePos = RemoteListBase; while(RemotePos != NULL) { - RemotePos->Attr = YES; /* RemotePos->Attr‚Í“]‘—‚·‚é‚©‚Ç‚¤‚©‚̃tƒ‰ƒO‚ÉŽg—p (YES/NO) */ + RemotePos->Attr = YES; /* RemotePos->Attrは転送するかどうかのフラグに使用 (YES/NO) */ RemotePos = RemotePos->Next; } @@ -423,7 +526,7 @@ void MirrorDownloadProc(int Notify) } else { - LocalPos->Attr = NO; /* LocalPos->Attr‚͍폜‚·‚é‚©‚Ç‚¤‚©‚̃tƒ‰ƒO‚ÉŽg—p (YES/NO) */ + LocalPos->Attr = NO; /* LocalPos->Attrは削除するかどうかのフラグに使用 (YES/NO) */ if(LocalPos->Node == NODE_DIR) { @@ -445,7 +548,7 @@ void MirrorDownloadProc(int Notify) } } - /*===== ƒtƒ@ƒCƒ‹ƒŠƒXƒg”äŠr =====*/ + /*===== ファイルリスト比較 =====*/ RemotePos = RemoteListBase; while(RemotePos != NULL) @@ -504,7 +607,7 @@ void MirrorDownloadProc(int Notify) DispMirrorFiles(LocalListBase, RemoteListBase); - /*===== íœ^ƒAƒbƒvƒ[ƒh =====*/ + /*===== 削除/アップロード =====*/ LocalPos = LocalListBase; while(LocalPos != NULL) @@ -559,7 +662,7 @@ void MirrorDownloadProc(int Notify) Pkt.Time = RemotePos->Time; // Pkt.Attr = 0; Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); Pkt.Mode = EXIST_OVW; @@ -587,8 +690,9 @@ void MirrorDownloadProc(int Notify) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); } else EraseTmpTransFileList(&Base); @@ -605,14 +709,14 @@ void MirrorDownloadProc(int Notify) } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒO‚̃tƒ@ƒCƒ‹ˆê——‚ð•\Ž¦ -------------------------------------- +/*----- ミラーリングのファイル一覧を表示 -------------------------------------- * * Parameter -* FILELIST *Local : ƒ[ƒJƒ‹‘¤ -* FILELIST *Remote : ƒŠƒ‚[ƒg‘¤ +* FILELIST *Local : ローカル側 +* FILELIST *Remote : リモート側 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote) @@ -648,15 +752,15 @@ static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote) } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOŽž‚̃[ƒJƒ‹‘¤‚̃tƒHƒ‹ƒ_íœ ------------------------------ +/*----- ミラーリング時のローカル側のフォルダ削除 ------------------------------ * * Parameter -* FILELIST *Local : ƒtƒ@ƒCƒ‹ƒŠƒXƒg +* FILELIST *Local : ファイルリスト * TRANSPACKET *Pkt : * TRANSPACKET **Base : * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base) @@ -685,17 +789,17 @@ static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACK } -/*----- ƒtƒ@ƒCƒ‹–¼‚̃Zƒ~ƒRƒƒ“ˆÈ~‚ðŽæ‚菜‚­ ---------------------------------- +/*----- ファイル名のセミコロン以降を取り除く ---------------------------------- * * Parameter -* char *Path : ƒtƒ@ƒCƒ‹–¼ +* char *Path : ファイル名 * * Return Value -* ‚È‚µ +* なし * * Note -* Path‚Ì“à—e‚ª‘‚«Š·‚¦‚ç‚ê‚é -* ƒIƒvƒVƒ‡ƒ“Ý’è‚É‚æ‚Á‚ďˆ—‚ðØ‘Ö‚¦‚é +* Pathの内容が書き換えられる +* オプション設定によって処理を切替える *----------------------------------------------------------------------------*/ static void RemoveAfterSemicolon(char *Path) @@ -711,17 +815,17 @@ static void RemoveAfterSemicolon(char *Path) } -/*----- ƒ[ƒJƒ‹‚É“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚È‚¢‚©ƒ`ƒFƒbƒN -------------------------- +/*----- ローカルに同じ名前のファイルがないかチェック -------------------------- * * Parameter -* TRANSPACKET *Pkt : “]‘—ƒtƒ@ƒCƒ‹î•ñ +* TRANSPACKET *Pkt : 転送ファイル情報 * * Return Value -* int ˆ—•û–@ +* int 処理方法 * EXIST_OVW/EXIST_RESUME/EXIST_IGNORE * * Note -* Pkt.ExistSize, ExistModeAExistNotify ‚ª•ÏX‚³‚ê‚é +* Pkt.ExistSize, ExistMode、ExistNotify が変更される *----------------------------------------------------------------------------*/ static int CheckLocalFile(TRANSPACKET *Pkt) @@ -753,7 +857,7 @@ static int CheckLocalFile(TRANSPACKET *Pkt) if(Ret == EXIST_NEW) { - /*ƒtƒ@ƒCƒ‹“ú•tƒ`ƒFƒbƒN */ + /*ファイル日付チェック */ if(CompareFileTime(&Find.ftLastWriteTime, &Pkt->Time) < 0) Ret = EXIST_OVW; else @@ -765,19 +869,21 @@ static int CheckLocalFile(TRANSPACKET *Pkt) } -/*----- ƒ[ƒJƒ‹‚É“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚ ‚鎞‚ÌŠm”Fƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ---- +/*----- ローカルに同じ名前のファイルがある時の確認ダイアログのコールバック ---- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { static TRANSPACKET *Pkt; static const RADIOBUTTON DownExistButton[] = { @@ -806,7 +912,7 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP { case IDOK_ALL : ExistNotify = NO; - /* ‚±‚±‚É break ‚Í‚È‚¢ */ + /* ここに break はない */ case IDOK : ExistMode = AskRadioButtonValue(hDlg, DownExistButton, DOWNEXISTBUTTONS); @@ -833,17 +939,80 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP -/*----- ƒtƒ@ƒCƒ‹ˆê——‚ÅŽw’肳‚ꂽƒtƒ@ƒCƒ‹‚ðƒAƒbƒvƒ[ƒh‚·‚é -------------------- +/*----- ファイル一覧で指定されたファイルをアップロードする -------------------- * * Parameter -* int ChName : –¼‘O‚ð•Ï‚¦‚é‚©‚Ç‚¤‚© (YES/NO) -* int All : ‘S‚Ä‚ª‘I‚΂ê‚Ä‚¢‚镨‚Æ‚µ‚Ĉµ‚¤‚©‚Ç‚¤‚© (YES/NO) +* int ChName : 名前を変えるかどうか (YES/NO) +* int All : 全てが選ばれている物として扱うかどうか (YES/NO) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ -void UpLoadListProc(int ChName, int All) +// ディレクトリ自動作成 +// リモート側のパスから必要なディレクトリを作成 +int MakeDirFromRemotePath(char* RemoteFile, char* Old, int FirstAdd) +{ + TRANSPACKET Pkt; + TRANSPACKET Pkt1; + char* pDelimiter; + char* pNext; + char* Cat; + int Len; + int Make; + pDelimiter = RemoteFile; + Make = NO; + while(pNext = strchr(pDelimiter, '/')) + { + Len = pNext - RemoteFile; + strncpy(Pkt.RemoteFile, RemoteFile, Len); + Pkt.RemoteFile[Len] = '\0'; + if(strncmp(RemoteFile, Old, Len + 1) != 0) + { + Cat = Pkt.RemoteFile + (pDelimiter - RemoteFile); + if(FnameCnv == FNAME_LOWER) + _mbslwr(Cat); + else if(FnameCnv == FNAME_UPPER) + _mbsupr(Cat); +#if defined(HAVE_TANDEM) + Pkt.FileCode = 0; + Pkt.PriExt = DEF_PRIEXT; + Pkt.SecExt = DEF_SECEXT; + Pkt.MaxExt = DEF_MAXEXT; +#endif + ReplaceAll(Pkt.RemoteFile, '\\', '/'); + + if(AskHostType() == HTYPE_ACOS) + { + strcpy(Pkt.RemoteFile, "'"); + strcat(Pkt.RemoteFile, AskHostLsName()); + strcat(Pkt.RemoteFile, "("); + strcat(Pkt.RemoteFile, Cat); + strcat(Pkt.RemoteFile, ")"); + strcat(Pkt.RemoteFile, "'"); + } + else if(AskHostType() == HTYPE_ACOS_4) + strcpy(Pkt.RemoteFile, Cat); + + if((FirstAdd == YES) && (AskNoFullPathMode() == YES)) + { + strcpy(Pkt1.Cmd, "SETCUR"); + AskRemoteCurDir(Pkt1.RemoteFile, FMAX_PATH); + AddTransFileList(&Pkt1); + } + FirstAdd = NO; + strcpy(Pkt.Cmd, "MKD "); + strcpy(Pkt.LocalFile, ""); + AddTransFileList(&Pkt); + + Make = YES; + } + pDelimiter = pNext + 1; + } + return Make; +} + +void UploadListProc(int ChName, int All) { FILELIST *FileListBase; FILELIST *Pos; @@ -854,16 +1023,19 @@ void UpLoadListProc(int ChName, int All) char Tmp[FMAX_PATH+1]; int FirstAdd; - if(CheckClosedAndReconnect() == SUCCESS) + // 同時接続対応 + CancelFlg = NO; + + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); - // ƒ[ƒJƒ‹‘¤‚Å‘I‚΂ê‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðFileListBase‚É“o˜^ + // ローカル側で選ばれているファイルをFileListBaseに登録 FileListBase = NULL; MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg); - // Œ»ÝƒzƒXƒg‘¤‚̃tƒ@ƒCƒ‹ˆê——‚É•\Ž¦‚³‚ê‚Ä‚¢‚é‚à‚Ì‚ðRemoteList‚É“o˜^ - // “¯–¼ƒtƒ@ƒCƒ‹ƒ`ƒFƒbƒN—p + // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録 + // 同名ファイルチェック用 RemoteList = NULL; AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList); @@ -883,17 +1055,44 @@ void UpLoadListProc(int ChName, int All) _mbslwr(Cat); else if(FnameCnv == FNAME_UPPER) _mbsupr(Cat); +#if defined(HAVE_TANDEM) + Pkt.FileCode = 0; + Pkt.PriExt = DEF_PRIEXT; + Pkt.SecExt = DEF_SECEXT; + Pkt.MaxExt = DEF_MAXEXT; +#endif } else { - // –¼‘O‚ð•ÏX‚·‚é + // 名前を変更する strcpy(TmpString, Pos->File); CurWin = WIN_LOCAL; +#if defined(HAVE_TANDEM) + strcpy(TmpFileCode, "0"); /* ASCII モードの場合は無視される */ + if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) { + if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_with_ext_dlg), GetMainHwnd(), UpDownAsWithExtDialogCallBack) == YES) { + strcat(Pkt.RemoteFile, TmpString); + Pkt.FileCode = atoi(TmpFileCode); + } else { + break; + } + } else +#endif if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES) strcat(Pkt.RemoteFile, TmpString); else break; } + // バグ修正 + AskRemoteCurDir(Tmp, FMAX_PATH); + SetSlashTail(Tmp); + if(strncmp(Pkt.RemoteFile, Tmp, strlen(Tmp)) != 0) + { + if((Cat = strrchr(Pkt.RemoteFile, '/')) != NULL) + Cat++; + else + Cat = Pkt.RemoteFile; + } ReplaceAll(Pkt.RemoteFile, '\\', '/'); if(AskHostType() == HTYPE_ACOS) @@ -910,10 +1109,10 @@ void UpLoadListProc(int ChName, int All) if(Pos->Node == NODE_DIR) { - // ƒtƒHƒ‹ƒ_‚̏ꍇ + // フォルダの場合 - // ƒzƒXƒg‘¤‚̃tƒ@ƒCƒ‹ˆê——‚ðRemoteList‚É“o˜^ - // “¯–¼ƒtƒ@ƒCƒ‹ƒ`ƒFƒbƒN—p + // ホスト側のファイル一覧をRemoteListに登録 + // 同名ファイルチェック用 if(RemoteList != NULL) DeleteFileList(&RemoteList); RemoteList = NULL; @@ -927,7 +1126,7 @@ void UpLoadListProc(int ChName, int All) } else { - // ƒtƒHƒ‹ƒ_‚ðì¬ + // フォルダを作成 if((FirstAdd == YES) && (AskNoFullPathMode() == YES)) { strcpy(Pkt1.Cmd, "SETCUR"); @@ -942,7 +1141,7 @@ void UpLoadListProc(int ChName, int All) } else if(Pos->Node == NODE_FILE) { - // ƒtƒ@ƒCƒ‹‚̏ꍇ + // ファイルの場合 AskLocalCurDir(Pkt.LocalFile, FMAX_PATH); SetYenTail(Pkt.LocalFile); strcat(Pkt.LocalFile, Pos->File); @@ -952,16 +1151,29 @@ void UpLoadListProc(int ChName, int All) Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType()); Pkt.Size = 0; Pkt.Time = Pos->Time; - Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile); + Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile); Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); +#if defined(HAVE_TANDEM) + if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) { + CalcExtentSize(&Pkt, Pos->Size); + } +#endif + // ディレクトリ自動作成 + strcpy(Tmp, Pkt.RemoteFile); Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList); if(Pkt.Mode == EXIST_ABORT) break; else if(Pkt.Mode != EXIST_IGNORE) { + // ディレクトリ自動作成 + if(MakeAllDir == YES) + { + if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES) + FirstAdd = NO; + } if((FirstAdd == YES) && (AskNoFullPathMode() == YES)) { strcpy(Pkt1.Cmd, "SETCUR"); @@ -987,8 +1199,9 @@ void UpLoadListProc(int ChName, int All) DeleteFileList(&FileListBase); - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); @@ -998,16 +1211,16 @@ void UpLoadListProc(int ChName, int All) } -/*----- ƒhƒ‰ƒbƒO•ƒhƒƒbƒv‚ÅŽw’肳‚ꂽƒtƒ@ƒCƒ‹‚ðƒAƒbƒvƒ[ƒh‚·‚é -------------- +/*----- ドラッグ&ドロップで指定されたファイルをアップロードする -------------- * * Parameter -* WPARAM wParam : ƒhƒƒbƒv‚³‚ꂽƒtƒ@ƒCƒ‹‚̏î•ñ +* WPARAM wParam : ドロップされたファイルの情報 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ -void UpLoadDragProc(WPARAM wParam) +void UploadDragProc(WPARAM wParam) { FILELIST *FileListBase; FILELIST *Pos; @@ -1019,16 +1232,19 @@ void UpLoadDragProc(WPARAM wParam) int FirstAdd; char Cur[FMAX_PATH+1]; - if(CheckClosedAndReconnect() == SUCCESS) + // 同時接続対応 + CancelFlg = NO; + + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); - // ƒ[ƒJƒ‹‘¤‚Å‘I‚΂ê‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ðFileListBase‚É“o˜^ + // ローカル側で選ばれているファイルをFileListBaseに登録 FileListBase = NULL; MakeDroppedFileList(wParam, Cur, &FileListBase); - // Œ»ÝƒzƒXƒg‘¤‚̃tƒ@ƒCƒ‹ˆê——‚É•\Ž¦‚³‚ê‚Ä‚¢‚é‚à‚Ì‚ðRemoteList‚É“o˜^ - // “¯–¼ƒtƒ@ƒCƒ‹ƒ`ƒFƒbƒN—p + // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録 + // 同名ファイルチェック用 RemoteList = NULL; AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList); @@ -1048,6 +1264,12 @@ void UpLoadDragProc(WPARAM wParam) else if(FnameCnv == FNAME_UPPER) _mbsupr(Cat); ReplaceAll(Pkt.RemoteFile, '\\', '/'); +#if defined(HAVE_TANDEM) + Pkt.FileCode = 0; + Pkt.PriExt = DEF_PRIEXT; + Pkt.SecExt = DEF_SECEXT; + Pkt.MaxExt = DEF_MAXEXT; +#endif if(AskHostType() == HTYPE_ACOS) { @@ -1063,10 +1285,10 @@ void UpLoadDragProc(WPARAM wParam) if(Pos->Node == NODE_DIR) { - // ƒtƒHƒ‹ƒ_‚̏ꍇ + // フォルダの場合 - // ƒzƒXƒg‘¤‚̃tƒ@ƒCƒ‹ˆê——‚ðRemoteList‚É“o˜^ - // “¯–¼ƒtƒ@ƒCƒ‹ƒ`ƒFƒbƒN—p + // ホスト側のファイル一覧をRemoteListに登録 + // 同名ファイルチェック用 if(RemoteList != NULL) DeleteFileList(&RemoteList); RemoteList = NULL; @@ -1094,7 +1316,7 @@ void UpLoadDragProc(WPARAM wParam) } else if(Pos->Node == NODE_FILE) { - // ƒtƒ@ƒCƒ‹‚̏ꍇ + // ファイルの場合 strcpy(Pkt.LocalFile, Cur); SetYenTail(Pkt.LocalFile); strcat(Pkt.LocalFile, Pos->File); @@ -1104,16 +1326,30 @@ void UpLoadDragProc(WPARAM wParam) Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType()); Pkt.Size = 0; Pkt.Time = Pos->Time; - Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile); + Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile); Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); +#if defined(HAVE_TANDEM) + if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) { + int a = Pos->InfoExist && FINFO_SIZE; + CalcExtentSize(&Pkt, Pos->Size); + } +#endif + // ディレクトリ自動作成 + strcpy(Tmp, Pkt.RemoteFile); Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList); if(Pkt.Mode == EXIST_ABORT) break; else if(Pkt.Mode != EXIST_IGNORE) { + // ディレクトリ自動作成 + if(MakeAllDir == YES) + { + if(MakeDirFromRemotePath(Pkt.RemoteFile, Tmp, FirstAdd) == YES) + FirstAdd = NO; + } if((FirstAdd == YES) && (AskNoFullPathMode() == YES)) { strcpy(Pkt1.Cmd, "SETCUR"); @@ -1139,8 +1375,9 @@ void UpLoadDragProc(WPARAM wParam) DeleteFileList(&FileListBase); - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); @@ -1150,13 +1387,13 @@ void UpLoadDragProc(WPARAM wParam) } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOƒAƒbƒvƒ[ƒh‚ðs‚¤ ---------------------------------------- +/*----- ミラーリングアップロードを行う ---------------------------------------- * * Parameter -* int Notify : Šm”F‚ðs‚¤‚©‚Ç‚¤‚© (YES/NO) +* int Notify : 確認を行うかどうか (YES/NO) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void MirrorUploadProc(int Notify) @@ -1175,7 +1412,10 @@ void MirrorUploadProc(int Notify) FILETIME TmpFtimeL; FILETIME TmpFtimeR; - if(CheckClosedAndReconnect() == SUCCESS) + // 同時接続対応 + CancelFlg = NO; + + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); @@ -1188,7 +1428,7 @@ void MirrorUploadProc(int Notify) if((Notify == YES) || (Notify == YES_LIST)) { - /*===== ƒtƒ@ƒCƒ‹ƒŠƒXƒgŽæ“¾ =====*/ + /*===== ファイルリスト取得 =====*/ LocalListBase = NULL; MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg); @@ -1198,7 +1438,7 @@ void MirrorUploadProc(int Notify) LocalPos = LocalListBase; while(LocalPos != NULL) { - LocalPos->Attr = YES; /* LocalPos->Attr‚Í“]‘—‚·‚é‚©‚Ç‚¤‚©‚̃tƒ‰ƒO‚ÉŽg—p (YES/NO) */ + LocalPos->Attr = YES; /* LocalPos->Attrは転送するかどうかのフラグに使用 (YES/NO) */ LocalPos = LocalPos->Next; } @@ -1212,7 +1452,7 @@ void MirrorUploadProc(int Notify) } else { - RemotePos->Attr = NO; /* RemotePos->Attr‚͍폜‚·‚é‚©‚Ç‚¤‚©‚̃tƒ‰ƒO‚ÉŽg—p (YES/NO) */ + RemotePos->Attr = NO; /* RemotePos->Attrは削除するかどうかのフラグに使用 (YES/NO) */ if(RemotePos->Node == NODE_DIR) { @@ -1234,7 +1474,7 @@ void MirrorUploadProc(int Notify) } } - /*===== ƒtƒ@ƒCƒ‹ƒŠƒXƒg”äŠr =====*/ + /*===== ファイルリスト比較 =====*/ LocalPos = LocalListBase; while(LocalPos != NULL) @@ -1321,7 +1561,7 @@ void MirrorUploadProc(int Notify) DispMirrorFiles(LocalListBase, RemoteListBase); - /*===== íœ^ƒAƒbƒvƒ[ƒh =====*/ + /*===== 削除/アップロード =====*/ RemotePos = RemoteListBase; while(RemotePos != NULL) @@ -1372,11 +1612,16 @@ void MirrorUploadProc(int Notify) Pkt.Type = AskTransferTypeAssoc(Pkt.LocalFile, AskTransferType()); Pkt.Size = 0; Pkt.Time = LocalPos->Time; - Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile); + Pkt.Attr = AskUploadFileAttr(Pkt.RemoteFile); Pkt.KanjiCode = AskHostKanjiCode(); - // UTF-8‘Ήž + // UTF-8対応 Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); +#if defined(HAVE_TANDEM) + if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) { + CalcExtentSize(&Pkt, LocalPos->Size); + } +#endif Pkt.Mode = EXIST_OVW; AddTmpTransFileList(&Pkt, &Base); } @@ -1402,8 +1647,9 @@ void MirrorUploadProc(int Notify) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); } else EraseTmpTransFileList(&Base); @@ -1420,15 +1666,15 @@ void MirrorUploadProc(int Notify) } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOŽž‚̃zƒXƒg‘¤‚̃tƒHƒ‹ƒ_íœ -------------------------------- +/*----- ミラーリング時のホスト側のフォルダ削除 -------------------------------- * * Parameter -* FILELIST *Base : ƒtƒ@ƒCƒ‹ƒŠƒXƒg +* FILELIST *Base : ファイルリスト * TRANSPACKET *Pkt : * TRANSPACKET **Base : * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base) @@ -1457,19 +1703,21 @@ static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET * } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOƒAƒbƒvƒ[ƒhŠJŽnŠm”FƒEƒCƒ“ƒhƒE‚̃R[ƒ‹ƒoƒbƒN -------------- +/*----- ミラーリングアップロード開始確認ウインドウのコールバック -------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { static int Mode; @@ -1506,19 +1754,21 @@ static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wPara } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒOƒAƒbƒvƒ[ƒhˆ—“à—eŠm”FƒEƒCƒ“ƒhƒE‚̃R[ƒ‹ƒoƒbƒN ---------- +/*----- ミラーリングアップロード処理内容確認ウインドウのコールバック ---------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { static DIALOGSIZE DlgSize = { { MIRROR_DEL, MIRROR_SIZEGRIP, -1 }, @@ -1586,7 +1836,7 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa Num = SendDlgItemMessage(hDlg, MIRROR_LIST, LB_GETSELITEMS, Num, (LPARAM)List); for(Num--; Num >= 0; Num--) { - if(RemoveTmpTransFileListItem(Base, List[Num]) == SUCCESS) + if(RemoveTmpTransFileListItem(Base, List[Num]) == FFFTP_SUCCESS) SendDlgItemMessage(hDlg, MIRROR_LIST, LB_DELETESTRING, List[Num], 0); else MessageBeep(-1); @@ -1621,14 +1871,14 @@ static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wPa } -/*----- ƒ~ƒ‰[ƒŠƒ“ƒO‚Å“]‘—^íœ‚·‚éƒtƒ@ƒCƒ‹‚̐”‚𐔂¦ƒ_ƒCƒAƒƒO‚É•\Ž¦--------- +/*----- ミラーリングで転送/削除するファイルの数を数えダイアログに表示--------- * * Parameter * HWND hWnd : * TRANSPACKET *Pkt : * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt) @@ -1687,16 +1937,16 @@ static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt) -/*----- ƒ~ƒ‰[ƒŠƒ“ƒO‚Å“]‘—^íœ‚µ‚È‚¢ƒtƒ@ƒCƒ‹‚©‚Ç‚¤‚©‚ð•Ô‚· ------------------ +/*----- ミラーリングで転送/削除しないファイルかどうかを返す ------------------ * * Parameter -* char Fname : ƒtƒ@ƒCƒ‹–¼ -* int Mode : ƒ‚[ƒh -* 0=“]‘—‚µ‚È‚¢ƒtƒ@ƒCƒ‹, 1=íœ‚µ‚È‚¢ƒtƒ@ƒCƒ‹ +* char Fname : ファイル名 +* int Mode : モード +* 0=転送しないファイル, 1=削除しないファイル * * Return Value -* int ƒXƒe[ƒ^ƒX -* YES=“]‘—Eíœ‚µ‚È‚¢/NO +* int ステータス +* YES=転送・削除しない/NO *----------------------------------------------------------------------------*/ static int AskMirrorNoTrn(char *Fname, int Mode) @@ -1714,7 +1964,7 @@ static int AskMirrorNoTrn(char *Fname, int Mode) Fname = GetFileName(Fname); while(*Tbl != NUL) { - if(CheckFname(Fname, Tbl) == SUCCESS) + if(CheckFname(Fname, Tbl) == FFFTP_SUCCESS) { Ret = YES; break; @@ -1726,16 +1976,16 @@ static int AskMirrorNoTrn(char *Fname, int Mode) } -/*----- ƒAƒbƒvƒ[ƒh‚·‚éƒtƒ@ƒCƒ‹‚Ì‘®«‚ð•Ô‚· ---------------------------------- +/*----- アップロードするファイルの属性を返す ---------------------------------- * * Parameter -* char Fname : ƒtƒ@ƒCƒ‹–¼ +* char Fname : ファイル名 * * Return Value -* int ‘®« (-1=Ý’è‚È‚µ) +* int 属性 (-1=設定なし) *----------------------------------------------------------------------------*/ -static int AskUpLoadFileAttr(char *Fname) +static int AskUploadFileAttr(char *Fname) { int Ret; int Sts; @@ -1749,7 +1999,7 @@ static int AskUpLoadFileAttr(char *Fname) Sts = CheckFname(Fname, Tbl); Tbl += strlen(Tbl) + 1; - if((Sts == SUCCESS) && (*Tbl != NUL)) + if((Sts == FFFTP_SUCCESS) && (*Tbl != NUL)) { Ret = xtoi(Tbl); break; @@ -1760,30 +2010,43 @@ static int AskUpLoadFileAttr(char *Fname) } -/*----- ƒzƒXƒg‚É“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚È‚¢‚©ƒ`ƒFƒbƒN- ---------------------------a +/*----- ホストに同じ名前のファイルがないかチェック- ---------------------------a * * Parameter -* TRANSPACKET *Pkt : “]‘—ƒtƒ@ƒCƒ‹î•ñ +* TRANSPACKET *Pkt : 転送ファイル情報 * FILELIST *ListList : * * Return Value -* int ˆ—•û–@ +* int 処理方法 * EXIST_OVW/EXIST_UNIQUE/EXIST_IGNORE * * Note -* Pkt.ExistSize, UpExistModeAExistNotify ‚ª•ÏX‚³‚ê‚é +* Pkt.ExistSize, UpExistMode、ExistNotify が変更される *----------------------------------------------------------------------------*/ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList) { int Ret; +#if defined(HAVE_TANDEM) + int Mode; +#endif FILELIST *Exist; Ret = EXIST_OVW; Pkt->ExistSize = 0; if(SendMode != TRANS_OVW) { +#if defined(HAVE_TANDEM) + /* HP NonStop Server は大文字小文字の区別なし(すべて大文字) */ + if(AskHostType() == HTYPE_TANDEM) + Mode = COMP_IGNORE; + else + Mode = COMP_STRICT; + + if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, Mode)) != NULL) +#else if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, COMP_STRICT)) != NULL) +#endif { Pkt->ExistSize = Exist->Size; @@ -1800,7 +2063,7 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList) if(Ret == EXIST_NEW) { - /*ƒtƒ@ƒCƒ‹“ú•tƒ`ƒFƒbƒN */ + /*ファイル日付チェック */ if(CompareFileTime(&Exist->Time, &Pkt->Time) < 0) Ret = EXIST_OVW; else @@ -1812,19 +2075,21 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList) } -/*----- ƒzƒXƒg‚É“¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‚ ‚鎞‚ÌŠm”Fƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ------ +/*----- ホストに同じ名前のファイルがある時の確認ダイアログのコールバック ------ * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { static TRANSPACKET *Pkt; static const RADIOBUTTON UpExistButton[] = { @@ -1854,7 +2119,7 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar { case IDOK_ALL : ExistNotify = NO; - /* ‚±‚±‚É break ‚Í‚È‚¢ */ + /* ここに break はない */ case IDOK : UpExistMode = AskRadioButtonValue(hDlg, UpExistButton, UPEXISTBUTTONS); @@ -1878,19 +2143,21 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar } -/*----- ƒAƒbƒvƒ[ƒh^ƒ_ƒEƒ“ƒ[ƒhƒtƒ@ƒCƒ‹–¼“ü—̓_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ------ +/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------ * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { @@ -1923,13 +2190,64 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa } -/*----- ƒtƒ@ƒCƒ‹ˆê——‚ÅŽw’肳‚ꂽƒtƒ@ƒCƒ‹‚ðíœ‚·‚é ---------------------------- +#if defined(HAVE_TANDEM) +/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------ * * Parameter -* ‚È‚µ +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value -* ‚È‚µ +* BOOL TRUE/FALSE +*----------------------------------------------------------------------------*/ + +static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +{ + switch (iMessage) + { + case WM_INITDIALOG : + if(CurWin == WIN_LOCAL) + SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN064); + else + SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN065); + + SendDlgItemMessage(hDlg, UPDOWNAS_NEW, EM_LIMITTEXT, FMAX_PATH, 0); + SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_SETTEXT, 0, (LPARAM)TmpString); + SendDlgItemMessage(hDlg, UPDOWNAS_TEXT, WM_SETTEXT, 0, (LPARAM)TmpString); + SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, EM_LIMITTEXT, 4, 0); + SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, WM_SETTEXT, 0, (LPARAM)TmpFileCode); + + return(TRUE); + + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam, lParam)) + { + case IDOK : + SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_GETTEXT, FMAX_PATH, (LPARAM)TmpString); + SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, WM_GETTEXT, FMAX_PATH, (LPARAM)TmpFileCode); + EndDialog(hDlg, YES); + break; + + case UPDOWNAS_STOP : + EndDialog(hDlg, NO_ALL); + break; + } + return(TRUE); + } + return(FALSE); +} +#endif + + +/*----- ファイル一覧で指定されたファイルを削除する ---------------------------- +* +* Parameter +* なし +* +* Return Value +* なし *----------------------------------------------------------------------------*/ void DeleteProc(void) @@ -1942,6 +2260,11 @@ void DeleteProc(void) char CurDir[FMAX_PATH+1]; char Tmp[FMAX_PATH+1]; + // 同時接続対応 + CancelFlg = NO; + + // デッドロック対策 + DisableUserOpe(); Sts = YES; AskRemoteCurDir(CurDir, FMAX_PATH); FileListBase = NULL; @@ -1953,7 +2276,7 @@ void DeleteProc(void) else { Win = WIN_REMOTE; - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg); else Sts = NO; @@ -1961,7 +2284,8 @@ void DeleteProc(void) if(Sts == YES) { - DisableUserOpe(); + // デッドロック対策 +// DisableUserOpe(); DelFlg = NO; Sts = NO; @@ -1997,23 +2321,26 @@ void DeleteProc(void) GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg); } - EnableUserOpe(); + // デッドロック対策 +// EnableUserOpe(); } + // デッドロック対策 + EnableUserOpe(); return; } -/*----- ƒTƒuƒfƒBƒŒƒNƒgƒŠˆÈ‰º‚ð‘S‚č폜‚·‚é ------------------------------------ +/*----- サブディレクトリ以下を全て削除する ------------------------------------ * * Parameter -* FILELIST *Dt : íœ‚·‚éƒtƒ@ƒCƒ‹‚̃ŠƒXƒg -* int Win : ƒEƒCƒ“ƒhƒE”ԍ† (WIN_xxx) -* int *Sw : ‘€ì•û–@ (YES/NO/YES_ALL/NO_ALL) -* int *Flg : ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚½‚©‚Ç‚¤‚©‚̃tƒ‰ƒO (YES/NO) -* char *CurDir : ƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ +* FILELIST *Dt : 削除するファイルのリスト +* int Win : ウインドウ番号 (WIN_xxx) +* int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL) +* int *Flg : ファイルを削除したかどうかのフラグ (YES/NO) +* char *CurDir : カレントディレクトリ * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir) @@ -2035,17 +2362,17 @@ static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir) } -/*----- íœ‚·‚é‚©‚Ç‚¤‚©‚ÌŠm”F‚ƍ폜ŽÀs -------------------------------------- +/*----- 削除するかどうかの確認と削除実行 -------------------------------------- * * Parameter -* FILELIST *Dt : íœ‚·‚éƒtƒ@ƒCƒ‹‚̃ŠƒXƒg -* int Win : ƒEƒCƒ“ƒhƒE”ԍ† (WIN_xxx) -* int *Sw : ‘€ì•û–@ (YES/NO/YES_ALL/NO_ALL) -* int *Flg : ƒtƒ@ƒCƒ‹‚ðíœ‚µ‚½‚©‚Ç‚¤‚©‚̃tƒ‰ƒO (YES/NO) -* char *CurDir : ƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ +* FILELIST *Dt : 削除するファイルのリスト +* int Win : ウインドウ番号 (WIN_xxx) +* int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL) +* int *Flg : ファイルを削除したかどうかのフラグ (YES/NO) +* char *CurDir : カレントディレクトリ * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir) @@ -2071,7 +2398,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi { sprintf(TmpString, "%s", Path); - if(AskHostType() == HTYPE_VMS) + // ローカルのファイルのパスの最後の'\\'が消えるバグ修正 +// if(AskHostType() == HTYPE_VMS) + if(Win == WIN_REMOTE && AskHostType() == HTYPE_VMS) ReformToVMSstylePathName(TmpString); CurWin = Win; @@ -2090,8 +2419,10 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi } else { - /* ƒtƒ‹ƒpƒX‚ðŽg‚í‚È‚¢Žž‚Ì‚½‚߂̏ˆ— */ - if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FAIL) + /* フルパスを使わない時のための処理 */ + // 同時接続対応 +// if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL) + if(ProcForNonFullpath(AskCmdCtrlSkt(), Path, CurDir, GetMainHwnd(), &CancelFlg) == FFFTP_FAIL) *Sw = NO_ALL; if(*Sw != NO_ALL) @@ -2108,19 +2439,21 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi } -/*----- ƒtƒ@ƒCƒ‹íœƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ---------------------------------- +/*----- ファイル削除ダイアログのコールバック ---------------------------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { @@ -2157,13 +2490,13 @@ static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara } -/*----- ƒtƒ@ƒCƒ‹ˆê——‚ÅŽw’肳‚ꂽƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ð•ÏX‚·‚é ---------------------- +/*----- ファイル一覧で指定されたファイルの名前を変更する ---------------------- * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void RenameProc(void) @@ -2175,7 +2508,10 @@ void RenameProc(void) int RenFlg; int Sts; - Sts = SUCCESS; + // 同時接続対応 + CancelFlg = NO; + + Sts = FFFTP_SUCCESS; if(GetFocus() == GetLocalHwnd()) Win = WIN_LOCAL; else @@ -2184,7 +2520,7 @@ void RenameProc(void) Sts = CheckClosedAndReconnect(); } - if(Sts == SUCCESS) + if(Sts == FFFTP_SUCCESS) { DisableUserOpe(); @@ -2234,9 +2570,9 @@ void RenameProc(void) // -// ƒŠƒ‚[ƒg‘¤‚ł̃tƒ@ƒCƒ‹‚̈ړ®iƒŠƒl[ƒ€j‚ðs‚¤ +// リモート側でのファイルの移動(リネーム)を行う // -// RenameProc()‚ðƒx[ƒX‚ɉü‘¢B(2007.9.5 yutaka) +// RenameProc()をベースに改造。(2007.9.5 yutaka) // void MoveRemoteFileProc(int drop_index) { @@ -2250,6 +2586,9 @@ void MoveRemoteFileProc(int drop_index) int RenFlg; int Sts; + // 同時接続対応 + CancelFlg = NO; + if(MoveMode == MOVE_DISABLE) { return; @@ -2257,7 +2596,7 @@ void MoveRemoteFileProc(int drop_index) AskRemoteCurDir(HostDir, FMAX_PATH); - // ƒhƒƒbƒvæ‚̃tƒHƒ‹ƒ_–¼‚𓾂é + // ドロップ先のフォルダ名を得る GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH); if(MoveMode == MOVE_DLG) @@ -2268,7 +2607,7 @@ void MoveRemoteFileProc(int drop_index) } } - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; #if 0 if(GetFocus() == GetLocalHwnd()) Win = WIN_LOCAL; @@ -2282,7 +2621,7 @@ void MoveRemoteFileProc(int drop_index) Sts = CheckClosedAndReconnect(); #endif - if(Sts == SUCCESS) + if(Sts == FFFTP_SUCCESS) { DisableUserOpe(); @@ -2309,12 +2648,12 @@ void MoveRemoteFileProc(int drop_index) if((Sts == YES) && (strlen(TmpString) != 0)) { - // ƒpƒX‚̐ݒè(local) + // パスの設定(local) strncpy_s(Old, sizeof(Old), HostDir, _TRUNCATE); strncat_s(Old, sizeof(Old), "/", _TRUNCATE); strncat_s(Old, sizeof(Old), Pos->File, _TRUNCATE); - // ƒpƒX‚̐ݒè(remote) + // パスの設定(remote) strncpy_s(New, sizeof(New), HostDir, _TRUNCATE); strncat_s(New, sizeof(New), "/", _TRUNCATE); strncat_s(New, sizeof(New), Pkt.File, _TRUNCATE); @@ -2354,19 +2693,21 @@ void MoveRemoteFileProc(int drop_index) -/*----- Vƒtƒ@ƒCƒ‹–¼“ü—̓_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ------------------------------ +/*----- 新ファイル名入力ダイアログのコールバック ------------------------------ * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { @@ -2402,13 +2743,13 @@ static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPara } -/*----- V‚µ‚¢ƒfƒBƒŒƒNƒgƒŠ‚ðì¬‚·‚é ------------------------------------------ +/*----- 新しいディレクトリを作成する ------------------------------------------ * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void MkdirProc(void) @@ -2419,6 +2760,9 @@ void MkdirProc(void) char *Title; int Tmp; + // 同時接続対応 + CancelFlg = NO; + if(GetFocus() == GetLocalHwnd()) { Win = WIN_LOCAL; @@ -2444,7 +2788,7 @@ void MkdirProc(void) } else { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); DoMKD(Path); @@ -2457,13 +2801,13 @@ void MkdirProc(void) } -/*----- ƒqƒXƒgƒŠƒŠƒXƒg‚ðŽg‚Á‚½ƒfƒBƒŒƒNƒgƒŠ‚̈ړ® ------------------------------ +/*----- ヒストリリストを使ったディレクトリの移動 ------------------------------ * * Parameter -* HWND hWnd : ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ +* HWND hWnd : コンボボックスのウインドウハンドル * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ChangeDirComboProc(HWND hWnd) @@ -2471,6 +2815,9 @@ void ChangeDirComboProc(HWND hWnd) char Tmp[FMAX_PATH+1]; int i; + // 同時接続対応 + CancelFlg = NO; + if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR) { SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp); @@ -2484,7 +2831,7 @@ void ChangeDirComboProc(HWND hWnd) } else { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY) @@ -2497,13 +2844,13 @@ void ChangeDirComboProc(HWND hWnd) } -/*----- ƒuƒbƒNƒ}[ƒN‚ðŽg‚Á‚½ƒfƒBƒŒƒNƒgƒŠ‚̈ړ® -------------------------------- +/*----- ブックマークを使ったディレクトリの移動 -------------------------------- * * Parameter -* int MarkID : ƒuƒbƒNƒ}[ƒN‚̃ƒjƒ…[ID +* int MarkID : ブックマークのメニューID * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ChangeDirBmarkProc(int MarkID) @@ -2512,18 +2859,21 @@ void ChangeDirBmarkProc(int MarkID) char Remote[FMAX_PATH+1]; int Sts; + // 同時接続対応 + CancelFlg = NO; + Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1); if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH)) { DisableUserOpe(); - if(DoLocalCWD(Local) == SUCCESS) + if(DoLocalCWD(Local) == FFFTP_SUCCESS) GetLocalDirForWnd(); EnableUserOpe(); } if((Sts == BMARK_TYPE_REMOTE) || (Sts == BMARK_TYPE_BOTH)) { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); if(DoCWD(Remote, YES, NO, YES) < FTP_RETRY) @@ -2535,13 +2885,13 @@ void ChangeDirBmarkProc(int MarkID) } -/*----- ƒfƒBƒŒƒNƒgƒŠ–¼‚ð“ü—Í‚µ‚ăfƒBƒŒƒNƒgƒŠ‚̈ړ® ---------------------------- +/*----- ディレクトリ名を入力してディレクトリの移動 ---------------------------- * * Parameter -* int Win : ƒEƒCƒ“ƒhƒE”ԍ† (WIN_xxx) +* int Win : ウインドウ番号 (WIN_xxx) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ChangeDirDirectProc(int Win) @@ -2551,6 +2901,9 @@ void ChangeDirDirectProc(int Win) char *Title; int Tmp; + // 同時接続対応 + CancelFlg = NO; + if(Win == WIN_LOCAL) Title = MSGJPN072; else @@ -2573,7 +2926,7 @@ void ChangeDirDirectProc(int Win) } else { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); if(DoCWD(Path, YES, NO, YES) < FTP_RETRY) @@ -2586,13 +2939,13 @@ void ChangeDirDirectProc(int Win) } -/*----- Drop‚³‚ꂽƒtƒ@ƒCƒ‹‚É‚æ‚éƒfƒBƒŒƒNƒgƒŠ‚̈ړ® ---------------------------- +/*----- Dropされたファイルによるディレクトリの移動 ---------------------------- * * Parameter -* WPARAM wParam : ƒhƒƒbƒv‚³‚ꂽƒtƒ@ƒCƒ‹‚̏î•ñ +* WPARAM wParam : ドロップされたファイルの情報 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ChangeDirDropFileProc(WPARAM wParam) @@ -2608,13 +2961,13 @@ void ChangeDirDropFileProc(WPARAM wParam) } -/*----- ƒtƒ@ƒCƒ‹‚Ì‘®«•ÏX ---------------------------------------------------- +/*----- ファイルの属性変更 ---------------------------------------------------- * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ChmodProc(void) @@ -2627,9 +2980,12 @@ void ChmodProc(void) char *BufTmp; int BufLen; + // 同時接続対応 + CancelFlg = NO; + if(GetFocus() == GetRemoteHwnd()) { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); FileListBase = NULL; @@ -2693,19 +3049,21 @@ void ChmodProc(void) } -/*----- ‘®«•ÏXƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN -------------------------------------- +/*----- 属性変更ダイアログのコールバック -------------------------------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { char Str[5]; static char *Buf; @@ -2756,14 +3114,14 @@ BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARA } -/*----- ‘®«‚ðƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚ɐݒè ---------------------------------------- +/*----- 属性をダイアログボックスに設定 ---------------------------------------- * * Parameter -* HWND hWnd : ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* int Attr : ‘®« +* HWND hWnd : ダイアログボックスのウインドウハンドル +* int Attr : 属性 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ static void SetAttrToDialog(HWND hDlg, int Attr) @@ -2793,13 +3151,13 @@ static void SetAttrToDialog(HWND hDlg, int Attr) } -/*----- ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚Ì“à—e‚©‚ç‘®«‚ðŽæ“¾ -------------------------------- +/*----- ダイアログボックスの内容から属性を取得 -------------------------------- * * Parameter -* HWND hWnd : ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ +* HWND hWnd : ダイアログボックスのウインドウハンドル * * Return Value -* int ‘®« +* int 属性 *----------------------------------------------------------------------------*/ static int GetAttrFromDialog(HWND hDlg) @@ -2835,13 +3193,13 @@ static int GetAttrFromDialog(HWND hDlg) -/*----- ”CˆÓ‚̃Rƒ}ƒ“ƒh‚ð‘—‚é -------------------------------------------------- +/*----- 任意のコマンドを送る -------------------------------------------------- * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void SomeCmdProc(void) @@ -2850,9 +3208,12 @@ void SomeCmdProc(void) int Tmp; FILELIST *FileListBase; + // 同時接続対応 + CancelFlg = NO; + if(GetFocus() == GetRemoteHwnd()) { - if(CheckClosedAndReconnect() == SUCCESS) + if(CheckClosedAndReconnect() == FFFTP_SUCCESS) { DisableUserOpe(); FileListBase = NULL; @@ -2866,7 +3227,9 @@ void SomeCmdProc(void) if(InputDialogBox(somecmd_dlg, GetMainHwnd(), NULL, Cmd, 81, &Tmp, IDH_HELP_TOPIC_0000023) == YES) { - DoQUOTE(Cmd); + // 同時接続対応 + //DoQUOTE(Cmd); + DoQUOTE(AskCmdCtrlSkt(), Cmd, &CancelFlg); } EnableUserOpe(); } @@ -2877,13 +3240,13 @@ void SomeCmdProc(void) -/*----- ƒtƒ@ƒCƒ‹‘—e—Ê‚ÌŒvŽZ‚ðs‚¤ -------------------------------------------- +/*----- ファイル総容量の計算を行う -------------------------------------------- * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void CalcFileSizeProc(void) @@ -2894,9 +3257,12 @@ void CalcFileSizeProc(void) int All; int Sts; + // 同時接続対応 + CancelFlg = NO; + if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL) { - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; if(GetFocus() == GetLocalHwnd()) Win = WIN_LOCAL; else @@ -2905,7 +3271,7 @@ void CalcFileSizeProc(void) Sts = CheckClosedAndReconnect(); } - if(Sts == SUCCESS) + if(Sts == FFFTP_SUCCESS) { ListBase = NULL; MakeSelectedFileList(Win, YES, All, &ListBase, &CancelFlg); @@ -2926,16 +3292,16 @@ void CalcFileSizeProc(void) } -/*----- ƒtƒ@ƒCƒ‹—e—ÊŒŸõŠm”Fƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN -------------------------- +/*----- ファイル容量検索確認ダイアログのコールバック -------------------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value -* ƒƒbƒZ[ƒW‚ɑΉž‚·‚é–ß‚è’l +* メッセージに対応する戻り値 *----------------------------------------------------------------------------*/ static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) @@ -2969,16 +3335,16 @@ static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wPa } -/*----- ƒtƒ@ƒCƒ‹—e—ÊŒŸõƒ_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ------------------------------ +/*----- ファイル容量検索ダイアログのコールバック ------------------------------ * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value -* ƒƒbƒZ[ƒW‚ɑΉž‚·‚é–ß‚è’l +* メッセージに対応する戻り値 *----------------------------------------------------------------------------*/ static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) @@ -3012,13 +3378,13 @@ static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, L } -/*----- ƒfƒBƒŒƒNƒgƒŠˆÚ“®Ž¸”sŽž‚̃Gƒ‰[‚ð•\Ž¦ ---------------------------------- +/*----- ディレクトリ移動失敗時のエラーを表示 ---------------------------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ +* HWND hDlg : ウインドウハンドル * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void DispCWDerror(HWND hWnd) @@ -3028,13 +3394,13 @@ void DispCWDerror(HWND hWnd) } -/*----- URL‚ðƒNƒŠƒbƒvƒ{[ƒh‚ɃRƒs[ ------------------------------------------- +/*----- URLをクリップボードにコピー ------------------------------------------- * * Parameter -* ‚È‚µ +* なし * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void CopyURLtoClipBoard(void) @@ -3072,7 +3438,7 @@ void CopyURLtoClipBoard(void) sprintf(Port, ":%d", AskHostPort()); Set = Total; - Total += strlen(Path) + strlen(Host) + strlen(Port) + 8; /* 8‚Í "ftp://\r\n" ‚Ì‚Ô‚ñ */ + Total += strlen(Path) + strlen(Host) + strlen(Port) + 8; /* 8は "ftp://\r\n" のぶん */ if(AskHostType() == HTYPE_VMS) Total++; @@ -3099,31 +3465,33 @@ void CopyURLtoClipBoard(void) } -/*----- ƒtƒ‹ƒpƒX‚ðŽg‚í‚È‚¢ƒtƒ@ƒCƒ‹ƒAƒNƒZƒX‚̏€”õ ------------------------------ +/*----- フルパスを使わないファイルアクセスの準備 ------------------------------ * * Parameter -* char *Path : ƒpƒX–¼ -* char *CurDir : ƒJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ -* HWND hWnd : ƒGƒ‰[ƒEƒCƒ“ƒhƒE‚ð•\Ž¦‚·‚éÛ‚̐eƒEƒCƒ“ƒhƒE -* int Type : Žg—p‚·‚éƒ\ƒPƒbƒg‚ÌŽí—Þ -* 0=ƒRƒ}ƒ“ƒhƒ\ƒPƒbƒg, 1=“]‘—ƒ\ƒPƒbƒg +* char *Path : パス名 +* char *CurDir : カレントディレクトリ +* HWND hWnd : エラーウインドウを表示する際の親ウインドウ +* int Type : 使用するソケットの種類 +* 0=コマンドソケット, 1=転送ソケット * * Return Value -* int ƒXƒe[ƒ^ƒX(SUCCESS/FAIL) +* int ステータス(FFFTP_SUCCESS/FFFTP_FAIL) * * Note -* ƒtƒ‹ƒpƒX‚ðŽg‚í‚È‚¢Žž‚́A -* ‚±‚̃‚ƒWƒ…[ƒ‹“à‚Å CWD ‚ðs‚È‚¢A -* Path ‚Ƀtƒ@ƒCƒ‹–¼‚Ì‚ÝŽc‚·BiƒpƒX–¼‚͏Á‚·j +* フルパスを使わない時は、 +* このモジュール内で CWD を行ない、 +* Path にファイル名のみ残す。(パス名は消す) *----------------------------------------------------------------------------*/ -int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type) +// 同時接続対応 +//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type) +int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork) { int Sts; int Cmd; char Tmp[FMAX_PATH+1]; - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; if(AskNoFullPathMode() == YES) { strcpy(Tmp, Path); @@ -3139,15 +3507,17 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type) if(strcmp(Tmp, CurDir) != 0) { - if(Type == 0) - Cmd = CommandProcCmd(NULL, "CWD %s", Tmp); - else - Cmd = CommandProcTrn(NULL, "CWD %s", Tmp); + // 同時接続対応 +// if(Type == 0) +// Cmd = CommandProcCmd(NULL, "CWD %s", Tmp); +// else +// Cmd = CommandProcTrn(NULL, "CWD %s", Tmp); + Cmd = CommandProcTrn(cSkt, NULL, CancelCheckWork, "CWD %s", Tmp); if(Cmd/100 != FTP_COMPLETE) { DispCWDerror(hWnd); - Sts = FAIL; + Sts = FFFTP_FAIL; } else strcpy(CurDir, Tmp); @@ -3158,13 +3528,13 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type) } -/*----- ƒfƒBƒŒƒNƒgƒŠ–¼‚ðVAX VMSƒXƒ^ƒCƒ‹‚É•ÏŠ·‚·‚é ----------------------------- +/*----- ディレクトリ名をVAX VMSスタイルに変換する ----------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* ‚È‚µ +* なし * * Note * ddd:[xxx.yyy]/rrr/ppp --> ddd:[xxx.yyy.rrr.ppp] @@ -3194,13 +3564,13 @@ void ReformToVMSstyleDirName(char *Path) } -/*----- ƒtƒ@ƒCƒ‹–¼‚ðVAX VMSƒXƒ^ƒCƒ‹‚É•ÏŠ·‚·‚é --------------------------------- +/*----- ファイル名をVAX VMSスタイルに変換する --------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* ‚È‚µ +* なし * * Note * ddd:[xxx.yyy]/rrr/ppp --> ddd:[xxx.yyy.rrr]ppp @@ -3222,17 +3592,17 @@ void ReformToVMSstylePathName(char *Path) #if defined(HAVE_OPENVMS) -/*----- VMS‚Ì"HOGE.DIR;?"‚Æ‚¢‚¤ƒfƒBƒŒƒNƒgƒŠ–¼‚©‚ç"HOGE"‚ðŽæ‚èo‚· --------------- +/*----- VMSの"HOGE.DIR;?"というディレクトリ名から"HOGE"を取り出す --------------- * * Parameter -* char *DirName : "HOGE.DIR;?"Œ`Ž®‚̃fƒBƒŒƒNƒgƒŠ–¼ -* int Flg : ";"‚̃`ƒFƒbƒN‚ð‚·‚é(TRUE)‚©‚µ‚È‚¢(FALSE)‚© +* char *DirName : "HOGE.DIR;?"形式のディレクトリ名 +* int Flg : ";"のチェックをする(TRUE)かしない(FALSE)か * * Return Value -* ‚È‚µ +* なし * * Note -* DirName‚𒼐ڏ‘‚«‚©‚¦‚é +* DirNameを直接書きかえる *----------------------------------------------------------------------------*/ void ReformVMSDirName(char *DirName, int Flg) @@ -3240,12 +3610,12 @@ void ReformVMSDirName(char *DirName, int Flg) char *p; if (Flg == TRUE) { - /* ';'‚ª‚È‚¢ê‡‚ÍVMSŒ`Ž®‚¶‚á‚È‚³‚»‚¤‚Ȃ̂ʼn½‚à‚µ‚È‚¢ */ + /* ';'がない場合はVMS形式じゃなさそうなので何もしない */ if ((p = strrchr(DirName, ';')) == NULL) return; } - /* ".DIR"‚ª‚ ‚Á‚½‚ç‚‚Ԃ· */ + /* ".DIR"があったらつぶす */ if ((p = strrchr(DirName, '.'))) { if (memcmp(p + 1, "DIR", 3) == 0) *p = '\0'; @@ -3254,17 +3624,17 @@ void ReformVMSDirName(char *DirName, int Flg) #endif -/*----- ƒtƒ@ƒCƒ‹–¼‚ÉŽg‚¦‚È‚¢•¶Žš‚ª‚È‚¢‚©ƒ`ƒFƒbƒN‚µ–¼‘O‚ð•ÏX‚·‚é -------------- +/*----- ファイル名に使えない文字がないかチェックし名前を変更する -------------- * * Parameter -* char *Fname : ƒtƒ@ƒCƒ‹–¼ +* char *Fname : ファイル名 * * Return Value -* int ƒXƒe[ƒ^ƒX -* SUCCESS/FAIL=’†Ž~‚·‚é +* int ステータス +* FFFTP_SUCCESS/FFFTP_FAIL=中止する * * Note -* Fname‚𒼐ڏ‘‚«‚©‚¦‚é +* Fnameを直接書きかえる *----------------------------------------------------------------------------*/ static int RenameUnuseableName(char *Fname) @@ -3272,7 +3642,7 @@ static int RenameUnuseableName(char *Fname) int Tmp; int Ret; - Ret = SUCCESS; + Ret = FFFTP_SUCCESS; while(1) { if((_mbschr(Fname, ':') != NULL) || @@ -3286,7 +3656,7 @@ static int RenameUnuseableName(char *Fname) { if(InputDialogBox(forcerename_dlg, GetMainHwnd(), NULL, Fname, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001) == NO) { - Ret = FAIL; + Ret = FFFTP_FAIL; break; } } @@ -3297,3 +3667,20 @@ static int RenameUnuseableName(char *Fname) } +// 自動切断対策 +// NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用 +void NoopProc(void) +{ + int CancelCheckWork; + CancelCheckWork = NO; + if(AskConnecting() == YES && AskUserOpeDisabled() == NO) + { + if(AskReuseCmdSkt() == NO || AskShareProh() == YES) + { + DisableUserOpe(); + DoDirListCmdSkt("", "", 999, &CancelCheckWork); + EnableUserOpe(); + } + } +} +