-/*=============================================================================\r
+/*=============================================================================\r
*\r
-* \82e\82s\82o\83R\83}\83\93\83h\91\80\8dì\r
+* FTPコマンド操作\r
*\r
===============================================================================\r
/ Copyright (C) 1997-2007 Sota. All rights reserved.\r
/============================================================================*/\r
\r
#define STRICT\r
+// IPv6対応\r
+#include <winsock2.h>\r
#include <windows.h>\r
#include <stdio.h>\r
#include <stdlib.h>\r
#include <htmlhelp.h>\r
#include "helpid.h"\r
\r
+// UTF-8対応\r
+#undef __MBSWRAPPER_H__\r
+#include "mbswrapper.h"\r
\r
-/*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
+\r
+/*===== プロトタイプ =====*/\r
\r
static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList);\r
-static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
\r
static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote);\r
static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base);\r
static int CheckLocalFile(TRANSPACKET *Pkt);\r
-static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
static void RemoveAfterSemicolon(char *Path);\r
static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base);\r
-static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
-static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt);\r
static int AskMirrorNoTrn(char *Fname, int Mode);\r
-static int AskUpLoadFileAttr(char *Fname);\r
-static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+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
static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
static int RenameUnuseableName(char *Fname);\r
\r
-/*===== \8aO\95\94\8eQ\8fÆ ====*/\r
+/*===== 外部参照 ====*/\r
\r
extern HWND hHelpWin;\r
\r
-/* \90Ý\92è\92l */\r
+/* 設定値 */\r
extern int FnameCnv;\r
extern int RecvMode;\r
extern int SendMode;\r
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
+/*===== ローカルなワーク =====*/\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
-/*===== \83\8d\81[\83J\83\8b\82È\83\8f\81[\83N =====*/\r
-\r
-static char TmpString[FMAX_PATH+80]; /* \83e\83\93\83|\83\89\83\8a */\r
-static int CurWin; /* \83E\83C\83\93\83h\83E\94Ô\8d\86 */\r
-\r
-int UpExistMode = EXIST_OVW; /* \83A\83b\83v\83\8d\81[\83h\82Å\93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\88µ\82¢\95û EXIST_xxx */\r
-int ExistMode = EXIST_OVW; /* \93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\88µ\82¢\95û EXIST_xxx */\r
-static int ExistNotify; /* \8am\94F\83_\83C\83A\83\8d\83O\82ð\8fo\82·\82©\82Ç\82¤\82© YES/NO */\r
+int UpExistMode = EXIST_OVW; /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
+int ExistMode = EXIST_OVW; /* 同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
+static int ExistNotify; /* 確認ダイアログを出すかどうか YES/NO */\r
\r
-static double FileSize; /* \83t\83@\83C\83\8b\91\8d\97e\97Ê */\r
+static double FileSize; /* ファイル総容量 */\r
\r
\r
\r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é --------------------\r
+/*----- ファイル一覧で指定されたファイルをダウンロードする --------------------\r
*\r
* Parameter\r
-* int ChName : \96¼\91O\82ð\95Ï\82¦\82é\82©\82Ç\82¤\82© (YES/NO)\r
-* int ForceFile : \83f\83B\83\8c\83N\83g\83\8a\82ð\83t\83@\83C\83\8b\8c©\82È\82·\82©\82Ç\82¤\82© (YES/NO)\r
-* int All : \91S\82Ä\82ª\91I\82Î\82ê\82Ä\82¢\82é\95¨\82Æ\82µ\82Ä\88µ\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+* int ChName : 名前を変えるかどうか (YES/NO)\r
+* int ForceFile : ディレクトリをファイル見なすかどうか (YES/NO)\r
+* int All : 全てが選ばれている物として扱うかどうか (YES/NO)\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void DownLoadProc(int ChName, int ForceFile, int All)\r
+// ディレクトリ自動作成\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
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
// 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
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
else if(FnameCnv == FNAME_UPPER)\r
_mbsupr(TmpString);\r
RemoveAfterSemicolon(TmpString);\r
- if(RenameUnuseableName(TmpString) == FAIL)\r
+ if(RenameUnuseableName(TmpString) == FFFTP_FAIL)\r
break;\r
}\r
else\r
CurWin = WIN_REMOTE;\r
if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES)\r
{\r
- if(RenameUnuseableName(TmpString) == FAIL)\r
+ if(RenameUnuseableName(TmpString) == FFFTP_FAIL)\r
break;\r
}\r
else\r
}\r
\r
strcpy(Pkt.Cmd, "RETR ");\r
+#if defined(HAVE_TANDEM)\r
+ if(AskHostType() == HTYPE_TANDEM) {\r
+ if(AskTransferType() != TYPE_X) {\r
+ Pkt.Type = AskTransferType();\r
+ } else {\r
+ Pkt.Attr = Pos->Attr;\r
+ if (Pkt.Attr == 101)\r
+ Pkt.Type = TYPE_A;\r
+ else\r
+ Pkt.Type = TYPE_I;\r
+ }\r
+ } else\r
+#endif\r
Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType());\r
Pkt.Size = Pos->Size;\r
Pkt.Time = Pos->Time;\r
Pkt.KanjiCode = AskHostKanjiCode();\r
- // UTF-8\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
\r
- Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize \82ª\83Z\83b\83g\82³\82ê\82é */\r
+ // ディレクトリ自動作成\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
}\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
}\r
\r
\r
-/*----- \8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\88ê\82Â\83_\83E\83\93\83\8d\81[\83h\82·\82é ------------------------------\r
+/*----- 指定されたファイルを一つダウンロードする ------------------------------\r
*\r
* Parameter\r
-* char *Fname : \83t\83@\83C\83\8b\96¼\r
+* char *Fname : ファイル名\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void DirectDownLoadProc(char *Fname)\r
+void DirectDownloadProc(char *Fname)\r
{\r
TRANSPACKET Pkt;\r
+ // ディレクトリ自動作成\r
+ char Tmp[FMAX_PATH+1];\r
+\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
_mbsupr(TmpString);\r
RemoveAfterSemicolon(TmpString);\r
\r
- if(RenameUnuseableName(TmpString) == SUCCESS)\r
+ if(RenameUnuseableName(TmpString) == FFFTP_SUCCESS)\r
{\r
strcat(Pkt.LocalFile, TmpString);\r
ReplaceAll(Pkt.LocalFile, '/', '\\');\r
strcpy(Pkt.Cmd, "RETR-S ");\r
Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType());\r
\r
- /* \83T\83C\83Y\82Æ\93ú\95t\82Í\93]\91\97\91¤\83X\83\8c\83b\83h\82Å\8eæ\93¾\82µ\81A\83Z\83b\83g\82·\82é */\r
+ /* サイズと日付は転送側スレッドで取得し、セットする */\r
\r
Pkt.KanjiCode = AskHostKanjiCode();\r
- // UTF-8\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
\r
- Pkt.Mode = CheckLocalFile(&Pkt); /* Pkt.ExistSize \82ª\83Z\83b\83g\82³\82ê\82é */\r
+ // ディレクトリ自動作成\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
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
}\r
\r
\r
-/*----- \93ü\97Í\82³\82ê\82½\83t\83@\83C\83\8b\96¼\82Ì\83t\83@\83C\83\8b\82ð\88ê\82Â\83_\83E\83\93\83\8d\81[\83h\82·\82é ------------------\r
+/*----- 入力されたファイル名のファイルを一つダウンロードする ------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void InputDownLoadProc(void)\r
+void InputDownloadProc(void)\r
{\r
char Path[FMAX_PATH+1];\r
int Tmp;\r
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
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83_\83E\83\93\83\8d\81[\83h\82ð\8ds\82¤ ----------------------------------------\r
+/*----- ミラーリングダウンロードを行う ----------------------------------------\r
*\r
* Parameter\r
-* int Notify : \8am\94F\82ð\8ds\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+* int Notify : 確認を行うかどうか (YES/NO)\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void MirrorDownloadProc(int Notify)\r
char *Cat;\r
int Level;\r
int Mode;\r
+ // ファイル一覧バグ修正\r
+ int ListSts;\r
+\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
\r
if((Notify == YES) || (Notify == YES_LIST))\r
{\r
- /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\8eæ\93¾ =====*/\r
+ /*===== ファイルリスト取得 =====*/\r
\r
LocalListBase = NULL;\r
- MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+ // ファイル一覧バグ修正\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
{\r
- RemotePos->Attr = YES; /* RemotePos->Attr\82Í\93]\91\97\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+ RemotePos->Attr = YES; /* RemotePos->Attrは転送するかどうかのフラグに使用 (YES/NO) */\r
RemotePos = RemotePos->Next;\r
}\r
\r
}\r
else\r
{\r
- LocalPos->Attr = NO; /* LocalPos->Attr\82Í\8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+ LocalPos->Attr = NO; /* LocalPos->Attrは削除するかどうかのフラグに使用 (YES/NO) */\r
\r
if(LocalPos->Node == NODE_DIR)\r
{\r
}\r
}\r
\r
- /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\94ä\8ar =====*/\r
+ /*===== ファイルリスト比較 =====*/\r
\r
RemotePos = RemoteListBase;\r
while(RemotePos != NULL)\r
\r
DispMirrorFiles(LocalListBase, RemoteListBase);\r
\r
- /*===== \8dí\8f\9c\81^\83A\83b\83v\83\8d\81[\83h =====*/\r
+ /*===== 削除/アップロード =====*/\r
\r
LocalPos = LocalListBase;\r
while(LocalPos != NULL)\r
Pkt.Time = RemotePos->Time;\r
// Pkt.Attr = 0;\r
Pkt.KanjiCode = AskHostKanjiCode();\r
- // UTF-8\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
Pkt.Mode = EXIST_OVW;\r
+ // ミラーリング設定追加\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
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
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ð\95\\8e¦ --------------------------------------\r
+/*----- ミラーリングのファイル一覧を表示 --------------------------------------\r
*\r
* Parameter\r
-* FILELIST *Local : \83\8d\81[\83J\83\8b\91¤\r
-* FILELIST *Remote : \83\8a\83\82\81[\83g\91¤\r
+* FILELIST *Local : ローカル側\r
+* FILELIST *Remote : リモート側\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void DispMirrorFiles(FILELIST *Local, FILELIST *Remote)\r
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\8e\9e\82Ì\83\8d\81[\83J\83\8b\91¤\82Ì\83t\83H\83\8b\83_\8dí\8f\9c ------------------------------\r
+/*----- ミラーリング時のローカル側のフォルダ削除 ------------------------------\r
*\r
* Parameter\r
-* FILELIST *Local : \83t\83@\83C\83\8b\83\8a\83X\83g\r
+* FILELIST *Local : ファイルリスト\r
* TRANSPACKET *Pkt : \r
* TRANSPACKET **Base : \r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void MirrorDeleteAllLocalDir(FILELIST *Local, TRANSPACKET *Pkt, TRANSPACKET **Base)\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\96¼\82Ì\83Z\83~\83R\83\8d\83\93\88È\8d~\82ð\8eæ\82è\8f\9c\82 ----------------------------------\r
+/*----- ファイル名のセミコロン以降を取り除く ----------------------------------\r
*\r
* Parameter\r
-* char *Path : \83t\83@\83C\83\8b\96¼\r
+* char *Path : ファイル名\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*\r
* Note\r
-* Path\82Ì\93à\97e\82ª\8f\91\82«\8a·\82¦\82ç\82ê\82é\r
-* \83I\83v\83V\83\87\83\93\90Ý\92è\82É\82æ\82Á\82Ä\8f\88\97\9d\82ð\90Ø\91Ö\82¦\82é\r
+* Pathの内容が書き換えられる\r
+* オプション設定によって処理を切替える\r
*----------------------------------------------------------------------------*/\r
\r
static void RemoveAfterSemicolon(char *Path)\r
}\r
\r
\r
-/*----- \83\8d\81[\83J\83\8b\82É\93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82È\82¢\82©\83`\83F\83b\83N --------------------------\r
+/*----- ローカルに同じ名前のファイルがないかチェック --------------------------\r
*\r
* Parameter\r
-* TRANSPACKET *Pkt : \93]\91\97\83t\83@\83C\83\8b\8fî\95ñ\r
+* TRANSPACKET *Pkt : 転送ファイル情報\r
*\r
* Return Value\r
-* int \8f\88\97\9d\95û\96@\r
+* int 処理方法\r
* EXIST_OVW/EXIST_RESUME/EXIST_IGNORE\r
*\r
* Note\r
-* Pkt.ExistSize, ExistMode\81AExistNotify \82ª\95Ï\8dX\82³\82ê\82é\r
+* Pkt.ExistSize, ExistMode、ExistNotify が変更される\r
*----------------------------------------------------------------------------*/\r
\r
static int CheckLocalFile(TRANSPACKET *Pkt)\r
\r
if(Ret == EXIST_NEW)\r
{\r
- /*\83t\83@\83C\83\8b\93ú\95t\83`\83F\83b\83N */\r
+ /*ファイル日付チェック */\r
if(CompareFileTime(&Find.ftLastWriteTime, &Pkt->Time) < 0)\r
Ret = EXIST_OVW;\r
else\r
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
}\r
\r
\r
-/*----- \83\8d\81[\83J\83\8b\82É\93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ----\r
+/*----- ローカルに同じ名前のファイルがある時の確認ダイアログのコールバック ----\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
static TRANSPACKET *Pkt;\r
+ // 同じ名前のファイルの処理方法追加\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
{\r
case IDOK_ALL :\r
ExistNotify = NO;\r
- /* \82±\82±\82É break \82Í\82È\82¢ */\r
+ /* ここに break はない */\r
\r
case IDOK :\r
ExistMode = AskRadioButtonValue(hDlg, DownExistButton, DOWNEXISTBUTTONS);\r
\r
\r
\r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é --------------------\r
+/*----- ファイル一覧で指定されたファイルをアップロードする --------------------\r
*\r
* Parameter\r
-* int ChName : \96¼\91O\82ð\95Ï\82¦\82é\82©\82Ç\82¤\82© (YES/NO)\r
-* int All : \91S\82Ä\82ª\91I\82Î\82ê\82Ä\82¢\82é\95¨\82Æ\82µ\82Ä\88µ\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+* int ChName : 名前を変えるかどうか (YES/NO)\r
+* int All : 全てが選ばれている物として扱うかどうか (YES/NO)\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void UpLoadListProc(int ChName, int All)\r
+// ディレクトリ自動作成\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
FILELIST *RemoteList;\r
char Tmp[FMAX_PATH+1];\r
int FirstAdd;\r
+ // ファイル一覧バグ修正\r
+ int ListSts;\r
+\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
- // \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
+ // ローカル側で選ばれているファイルをFileListBaseに登録\r
FileListBase = NULL;\r
- MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+ // ファイル一覧バグ修正\r
+// MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
+ ListSts = MakeSelectedFileList(WIN_LOCAL, YES, All, &FileListBase, &CancelFlg);\r
\r
- // \8c»\8dÝ\83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82É\95\\8e¦\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ðRemoteList\82É\93o\98^\r
- // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+ // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
+ // 同名ファイルチェック用\r
RemoteList = NULL;\r
AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList);\r
\r
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
_mbslwr(Cat);\r
else if(FnameCnv == FNAME_UPPER)\r
_mbsupr(Cat);\r
+#if defined(HAVE_TANDEM)\r
+ Pkt.FileCode = 0;\r
+ Pkt.PriExt = DEF_PRIEXT;\r
+ Pkt.SecExt = DEF_SECEXT;\r
+ Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
}\r
else\r
{\r
- // \96¼\91O\82ð\95Ï\8dX\82·\82é\r
+ // 名前を変更する\r
strcpy(TmpString, Pos->File);\r
CurWin = WIN_LOCAL;\r
+#if defined(HAVE_TANDEM)\r
+ strcpy(TmpFileCode, "0"); /* ASCII モードの場合は無視される */\r
+ if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_with_ext_dlg), GetMainHwnd(), UpDownAsWithExtDialogCallBack) == YES) {\r
+ strcat(Pkt.RemoteFile, TmpString);\r
+ Pkt.FileCode = atoi(TmpFileCode);\r
+ } else {\r
+ break;\r
+ }\r
+ } else\r
+#endif\r
if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES)\r
strcat(Pkt.RemoteFile, TmpString);\r
else\r
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
\r
if(Pos->Node == NODE_DIR)\r
{\r
- // \83t\83H\83\8b\83_\82Ì\8fê\8d\87\r
+ // フォルダの場合\r
\r
- // \83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ðRemoteList\82É\93o\98^\r
- // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+ // ホスト側のファイル一覧をRemoteListに登録\r
+ // 同名ファイルチェック用\r
if(RemoteList != NULL)\r
DeleteFileList(&RemoteList);\r
RemoteList = NULL;\r
}\r
else\r
{\r
- // \83t\83H\83\8b\83_\82ð\8dì\90¬\r
+ // フォルダを作成\r
if((FirstAdd == YES) && (AskNoFullPathMode() == YES))\r
{\r
strcpy(Pkt1.Cmd, "SETCUR");\r
}\r
else if(Pos->Node == NODE_FILE)\r
{\r
- // \83t\83@\83C\83\8b\82Ì\8fê\8d\87\r
+ // ファイルの場合\r
AskLocalCurDir(Pkt.LocalFile, FMAX_PATH);\r
SetYenTail(Pkt.LocalFile);\r
strcat(Pkt.LocalFile, Pos->File);\r
\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\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+ if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+ CalcExtentSize(&Pkt, Pos->Size);\r
+ }\r
+#endif\r
+ // ディレクトリ自動作成\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
\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
}\r
\r
\r
-/*----- \83h\83\89\83b\83O\81\95\83h\83\8d\83b\83v\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é --------------\r
+/*----- ドラッグ&ドロップで指定されたファイルをアップロードする --------------\r
*\r
* Parameter\r
-* WPARAM wParam : \83h\83\8d\83b\83v\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\8fî\95ñ\r
+* WPARAM wParam : ドロップされたファイルの情報\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void UpLoadDragProc(WPARAM wParam)\r
+void UploadDragProc(WPARAM wParam)\r
{\r
FILELIST *FileListBase;\r
FILELIST *Pos;\r
int FirstAdd;\r
char Cur[FMAX_PATH+1];\r
\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
- // \83\8d\81[\83J\83\8b\91¤\82Å\91I\82Î\82ê\82Ä\82¢\82é\83t\83@\83C\83\8b\82ðFileListBase\82É\93o\98^\r
+ // ローカル側で選ばれているファイルをFileListBaseに登録\r
FileListBase = NULL;\r
MakeDroppedFileList(wParam, Cur, &FileListBase);\r
\r
- // \8c»\8dÝ\83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82É\95\\8e¦\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ðRemoteList\82É\93o\98^\r
- // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+ // 現在ホスト側のファイル一覧に表示されているものをRemoteListに登録\r
+ // 同名ファイルチェック用\r
RemoteList = NULL;\r
AddRemoteTreeToFileList(AskCurrentFileListNum(), "", RDIR_NONE, &RemoteList);\r
\r
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
\r
if(Pos->Node == NODE_DIR)\r
{\r
- // \83t\83H\83\8b\83_\82Ì\8fê\8d\87\r
+ // フォルダの場合\r
\r
- // \83z\83X\83g\91¤\82Ì\83t\83@\83C\83\8b\88ê\97\97\82ðRemoteList\82É\93o\98^\r
- // \93¯\96¼\83t\83@\83C\83\8b\83`\83F\83b\83N\97p\r
+ // ホスト側のファイル一覧をRemoteListに登録\r
+ // 同名ファイルチェック用\r
if(RemoteList != NULL)\r
DeleteFileList(&RemoteList);\r
RemoteList = NULL;\r
}\r
else if(Pos->Node == NODE_FILE)\r
{\r
- // \83t\83@\83C\83\8b\82Ì\8fê\8d\87\r
+ // ファイルの場合\r
strcpy(Pkt.LocalFile, Cur);\r
SetYenTail(Pkt.LocalFile);\r
strcat(Pkt.LocalFile, Pos->File);\r
\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\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+ if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+ int a = Pos->InfoExist && FINFO_SIZE;\r
+ CalcExtentSize(&Pkt, Pos->Size);\r
+ }\r
+#endif\r
+ // ディレクトリ自動作成\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
\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
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\82ð\8ds\82¤ ----------------------------------------\r
+/*----- ミラーリングアップロードを行う ----------------------------------------\r
*\r
* Parameter\r
-* int Notify : \8am\94F\82ð\8ds\82¤\82©\82Ç\82¤\82© (YES/NO)\r
+* int Notify : 確認を行うかどうか (YES/NO)\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void MirrorUploadProc(int Notify)\r
SYSTEMTIME TmpStime;\r
FILETIME TmpFtimeL;\r
FILETIME TmpFtimeR;\r
+ // ファイル一覧バグ修正\r
+ int ListSts;\r
\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
\r
if((Notify == YES) || (Notify == YES_LIST))\r
{\r
- /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\8eæ\93¾ =====*/\r
+ /*===== ファイルリスト取得 =====*/\r
\r
LocalListBase = NULL;\r
- MakeSelectedFileList(WIN_LOCAL, YES, YES, &LocalListBase, &CancelFlg);\r
+ // ファイル一覧バグ修正\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
{\r
- LocalPos->Attr = YES; /* LocalPos->Attr\82Í\93]\91\97\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+ LocalPos->Attr = YES; /* LocalPos->Attrは転送するかどうかのフラグに使用 (YES/NO) */\r
LocalPos = LocalPos->Next;\r
}\r
\r
}\r
else\r
{\r
- RemotePos->Attr = NO; /* RemotePos->Attr\82Í\8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O\82É\8eg\97p (YES/NO) */\r
+ RemotePos->Attr = NO; /* RemotePos->Attrは削除するかどうかのフラグに使用 (YES/NO) */\r
\r
if(RemotePos->Node == NODE_DIR)\r
{\r
}\r
}\r
\r
- /*===== \83t\83@\83C\83\8b\83\8a\83X\83g\94ä\8ar =====*/\r
+ /*===== ファイルリスト比較 =====*/\r
\r
LocalPos = LocalListBase;\r
while(LocalPos != NULL)\r
\r
DispMirrorFiles(LocalListBase, RemoteListBase);\r
\r
- /*===== \8dí\8f\9c\81^\83A\83b\83v\83\8d\81[\83h =====*/\r
+ /*===== 削除/アップロード =====*/\r
\r
RemotePos = RemoteListBase;\r
while(RemotePos != NULL)\r
\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\91Î\89\9e\r
+ // UTF-8対応\r
Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
Pkt.KanaCnv = AskHostKanaCnv();\r
+#if defined(HAVE_TANDEM)\r
+ if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+ CalcExtentSize(&Pkt, LocalPos->Size);\r
+ }\r
+#endif\r
Pkt.Mode = EXIST_OVW;\r
+ // ミラーリング設定追加\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
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
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\8e\9e\82Ì\83z\83X\83g\91¤\82Ì\83t\83H\83\8b\83_\8dí\8f\9c --------------------------------\r
+/*----- ミラーリング時のホスト側のフォルダ削除 --------------------------------\r
*\r
* Parameter\r
-* FILELIST *Base : \83t\83@\83C\83\8b\83\8a\83X\83g\r
+* FILELIST *Base : ファイルリスト\r
* TRANSPACKET *Pkt : \r
* TRANSPACKET **Base : \r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET **Base)\r
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\8aJ\8en\8am\94F\83E\83C\83\93\83h\83E\82Ì\83R\81[\83\8b\83o\83b\83N --------------\r
+/*----- ミラーリングアップロード開始確認ウインドウのコールバック --------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
static int Mode;\r
\r
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\83A\83b\83v\83\8d\81[\83h\8f\88\97\9d\93à\97e\8am\94F\83E\83C\83\93\83h\83E\82Ì\83R\81[\83\8b\83o\83b\83N ----------\r
+/*----- ミラーリングアップロード処理内容確認ウインドウのコールバック ----------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK MirrorDispListCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
static DIALOGSIZE DlgSize = {\r
{ MIRROR_DEL, MIRROR_SIZEGRIP, -1 },\r
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
Num = SendDlgItemMessage(hDlg, MIRROR_LIST, LB_GETSELITEMS, Num, (LPARAM)List);\r
for(Num--; Num >= 0; Num--)\r
{\r
- if(RemoveTmpTransFileListItem(Base, List[Num]) == SUCCESS)\r
+ if(RemoveTmpTransFileListItem(Base, List[Num]) == FFFTP_SUCCESS)\r
SendDlgItemMessage(hDlg, MIRROR_LIST, LB_DELETESTRING, List[Num], 0);\r
else\r
MessageBeep(-1);\r
}\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
}\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Å\93]\91\97\81^\8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\90\94\82ð\90\94\82¦\83_\83C\83A\83\8d\83O\82É\95\\8e¦---------\r
+/*----- ミラーリングで転送/削除するファイルの数を数えダイアログに表示---------\r
*\r
* Parameter\r
* HWND hWnd : \r
* TRANSPACKET *Pkt : \r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void CountMirrorFiles(HWND hDlg, TRANSPACKET *Pkt)\r
\r
\r
\r
-/*----- \83~\83\89\81[\83\8a\83\93\83O\82Å\93]\91\97\81^\8dí\8f\9c\82µ\82È\82¢\83t\83@\83C\83\8b\82©\82Ç\82¤\82©\82ð\95Ô\82· ------------------\r
+/*----- ミラーリングで転送/削除しないファイルかどうかを返す ------------------\r
*\r
* Parameter\r
-* char Fname : \83t\83@\83C\83\8b\96¼\r
-* int Mode : \83\82\81[\83h\r
-* 0=\93]\91\97\82µ\82È\82¢\83t\83@\83C\83\8b, 1=\8dí\8f\9c\82µ\82È\82¢\83t\83@\83C\83\8b\r
+* char Fname : ファイル名\r
+* int Mode : モード\r
+* 0=転送しないファイル, 1=削除しないファイル\r
*\r
* Return Value\r
-* int \83X\83e\81[\83^\83X\r
-* YES=\93]\91\97\81E\8dí\8f\9c\82µ\82È\82¢/NO\r
+* int ステータス\r
+* YES=転送・削除しない/NO\r
*----------------------------------------------------------------------------*/\r
\r
static int AskMirrorNoTrn(char *Fname, int Mode)\r
Fname = GetFileName(Fname);\r
while(*Tbl != NUL)\r
{\r
- if(CheckFname(Fname, Tbl) == SUCCESS)\r
+ if(CheckFname(Fname, Tbl) == FFFTP_SUCCESS)\r
{\r
Ret = YES;\r
break;\r
}\r
\r
\r
-/*----- \83A\83b\83v\83\8d\81[\83h\82·\82é\83t\83@\83C\83\8b\82Ì\91®\90«\82ð\95Ô\82· ----------------------------------\r
+/*----- アップロードするファイルの属性を返す ----------------------------------\r
*\r
* Parameter\r
-* char Fname : \83t\83@\83C\83\8b\96¼\r
+* char Fname : ファイル名\r
*\r
* Return Value\r
-* int \91®\90« (-1=\90Ý\92è\82È\82µ)\r
+* int 属性 (-1=設定なし)\r
*----------------------------------------------------------------------------*/\r
\r
-static int AskUpLoadFileAttr(char *Fname)\r
+static int AskUploadFileAttr(char *Fname)\r
{\r
int Ret;\r
int Sts;\r
Sts = CheckFname(Fname, Tbl);\r
Tbl += strlen(Tbl) + 1;\r
\r
- if((Sts == SUCCESS) && (*Tbl != NUL))\r
+ if((Sts == FFFTP_SUCCESS) && (*Tbl != NUL))\r
{\r
Ret = xtoi(Tbl);\r
break;\r
}\r
\r
\r
-/*----- \83z\83X\83g\82É\93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82È\82¢\82©\83`\83F\83b\83N- ---------------------------a\r
+/*----- ホストに同じ名前のファイルがないかチェック- ---------------------------a\r
*\r
* Parameter\r
-* TRANSPACKET *Pkt : \93]\91\97\83t\83@\83C\83\8b\8fî\95ñ\r
+* TRANSPACKET *Pkt : 転送ファイル情報\r
* FILELIST *ListList : \r
*\r
* Return Value\r
-* int \8f\88\97\9d\95û\96@\r
+* int 処理方法\r
* EXIST_OVW/EXIST_UNIQUE/EXIST_IGNORE\r
*\r
* Note\r
-* Pkt.ExistSize, UpExistMode\81AExistNotify \82ª\95Ï\8dX\82³\82ê\82é\r
+* Pkt.ExistSize, UpExistMode、ExistNotify が変更される\r
*----------------------------------------------------------------------------*/\r
\r
static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)\r
{\r
int Ret;\r
+#if defined(HAVE_TANDEM)\r
+ int Mode;\r
+#endif\r
FILELIST *Exist;\r
\r
Ret = EXIST_OVW;\r
Pkt->ExistSize = 0;\r
if(SendMode != TRANS_OVW)\r
{\r
+#if defined(HAVE_TANDEM)\r
+ /* HP NonStop Server は大文字小文字の区別なし(すべて大文字) */\r
+ if(AskHostType() == HTYPE_TANDEM)\r
+ Mode = COMP_IGNORE;\r
+ else\r
+ Mode = COMP_STRICT;\r
+\r
+ if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, Mode)) != NULL)\r
+#else\r
if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, COMP_STRICT)) != NULL)\r
+#endif\r
{\r
Pkt->ExistSize = Exist->Size;\r
\r
\r
if(Ret == EXIST_NEW)\r
{\r
- /*\83t\83@\83C\83\8b\93ú\95t\83`\83F\83b\83N */\r
+ /*ファイル日付チェック */\r
if(CompareFileTime(&Exist->Time, &Pkt->Time) < 0)\r
Ret = EXIST_OVW;\r
else\r
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
}\r
\r
\r
-/*----- \83z\83X\83g\82É\93¯\82¶\96¼\91O\82Ì\83t\83@\83C\83\8b\82ª\82 \82é\8e\9e\82Ì\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------\r
+/*----- ホストに同じ名前のファイルがある時の確認ダイアログのコールバック ------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
static TRANSPACKET *Pkt;\r
+ // 同じ名前のファイルの処理方法追加\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
{\r
case IDOK_ALL :\r
ExistNotify = NO;\r
- /* \82±\82±\82É break \82Í\82È\82¢ */\r
+ /* ここに break はない */\r
\r
case IDOK :\r
UpExistMode = AskRadioButtonValue(hDlg, UpExistButton, UPEXISTBUTTONS);\r
}\r
\r
\r
-/*----- \83A\83b\83v\83\8d\81[\83h\81^\83_\83E\83\93\83\8d\81[\83h\83t\83@\83C\83\8b\96¼\93ü\97Í\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------\r
+/*----- アップロード/ダウンロードファイル名入力ダイアログのコールバック ------\r
+*\r
+* Parameter\r
+* HWND hDlg : ウインドウハンドル\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
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
switch (iMessage)\r
{\r
SendDlgItemMessage(hDlg, UPDOWNAS_NEW, EM_LIMITTEXT, FMAX_PATH, 0);\r
SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_SETTEXT, 0, (LPARAM)TmpString);\r
SendDlgItemMessage(hDlg, UPDOWNAS_TEXT, WM_SETTEXT, 0, (LPARAM)TmpString);\r
+ SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, EM_LIMITTEXT, 4, 0);\r
+ SendDlgItemMessage(hDlg, UPDOWNAS_FILECODE, WM_SETTEXT, 0, (LPARAM)TmpFileCode);\r
+\r
return(TRUE);\r
\r
case WM_COMMAND :\r
{\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
}\r
return(FALSE);\r
}\r
+#endif\r
\r
\r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82ð\8dí\8f\9c\82·\82é ----------------------------\r
+/*----- ファイル一覧で指定されたファイルを削除する ----------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void DeleteProc(void)\r
char CurDir[FMAX_PATH+1];\r
char Tmp[FMAX_PATH+1];\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
+ // デッドロック対策\r
+ DisableUserOpe();\r
Sts = YES;\r
AskRemoteCurDir(CurDir, FMAX_PATH);\r
FileListBase = NULL;\r
else\r
{\r
Win = WIN_REMOTE;\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
MakeSelectedFileList(Win, YES, NO, &FileListBase, &CancelFlg);\r
else\r
Sts = NO;\r
\r
if(Sts == YES)\r
{\r
- DisableUserOpe();\r
+ // デッドロック対策\r
+// DisableUserOpe();\r
\r
DelFlg = NO;\r
Sts = NO;\r
GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
}\r
\r
- EnableUserOpe();\r
+ // デッドロック対策\r
+// EnableUserOpe();\r
}\r
+ // デッドロック対策\r
+ EnableUserOpe();\r
return;\r
}\r
\r
\r
-/*----- \83T\83u\83f\83B\83\8c\83N\83g\83\8a\88È\89º\82ð\91S\82Ä\8dí\8f\9c\82·\82é ------------------------------------\r
+/*----- サブディレクトリ以下を全て削除する ------------------------------------\r
*\r
* Parameter\r
-* FILELIST *Dt : \8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\83\8a\83X\83g\r
-* int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
-* int *Sw : \91\80\8dì\95û\96@ (YES/NO/YES_ALL/NO_ALL)\r
-* int *Flg : \83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82½\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O (YES/NO)\r
-* char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
+* FILELIST *Dt : 削除するファイルのリスト\r
+* int Win : ウインドウ番号 (WIN_xxx)\r
+* int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL)\r
+* int *Flg : ファイルを削除したかどうかのフラグ (YES/NO)\r
+* char *CurDir : カレントディレクトリ\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void DeleteAllDir(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir)\r
}\r
\r
\r
-/*----- \8dí\8f\9c\82·\82é\82©\82Ç\82¤\82©\82Ì\8am\94F\82Æ\8dí\8f\9c\8eÀ\8ds --------------------------------------\r
+/*----- 削除するかどうかの確認と削除実行 --------------------------------------\r
*\r
* Parameter\r
-* FILELIST *Dt : \8dí\8f\9c\82·\82é\83t\83@\83C\83\8b\82Ì\83\8a\83X\83g\r
-* int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
-* int *Sw : \91\80\8dì\95û\96@ (YES/NO/YES_ALL/NO_ALL)\r
-* int *Flg : \83t\83@\83C\83\8b\82ð\8dí\8f\9c\82µ\82½\82©\82Ç\82¤\82©\82Ì\83t\83\89\83O (YES/NO)\r
-* char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
+* FILELIST *Dt : 削除するファイルのリスト\r
+* int Win : ウインドウ番号 (WIN_xxx)\r
+* int *Sw : 操作方法 (YES/NO/YES_ALL/NO_ALL)\r
+* int *Flg : ファイルを削除したかどうかのフラグ (YES/NO)\r
+* char *CurDir : カレントディレクトリ\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDir)\r
{\r
sprintf(TmpString, "%s", Path);\r
\r
- if(AskHostType() == HTYPE_VMS)\r
+ // ローカルのファイルのパスの最後の'\\'が消えるバグ修正\r
+// if(AskHostType() == HTYPE_VMS)\r
+ if(Win == WIN_REMOTE && AskHostType() == HTYPE_VMS)\r
ReformToVMSstylePathName(TmpString);\r
\r
CurWin = Win;\r
}\r
else\r
{\r
- /* \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\8e\9e\82Ì\82½\82ß\82Ì\8f\88\97\9d */\r
- if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FAIL)\r
+ /* フルパスを使わない時のための処理 */\r
+ // 同時接続対応\r
+// if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)\r
+ if(ProcForNonFullpath(AskCmdCtrlSkt(), Path, CurDir, GetMainHwnd(), &CancelFlg) == FFFTP_FAIL)\r
*Sw = NO_ALL;\r
\r
if(*Sw != NO_ALL)\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\8dí\8f\9c\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ----------------------------------\r
+/*----- ファイル削除ダイアログのコールバック ----------------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK DeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
switch (iMessage)\r
{\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\88ê\97\97\82Å\8ew\92è\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\96¼\91O\82ð\95Ï\8dX\82·\82é ----------------------\r
+/*----- ファイル一覧で指定されたファイルの名前を変更する ----------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void RenameProc(void)\r
int RenFlg;\r
int Sts;\r
\r
- Sts = SUCCESS;\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
+ Sts = FFFTP_SUCCESS;\r
if(GetFocus() == GetLocalHwnd())\r
Win = WIN_LOCAL;\r
else\r
Sts = CheckClosedAndReconnect();\r
}\r
\r
- if(Sts == SUCCESS)\r
+ if(Sts == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
\r
\r
//\r
-// \83\8a\83\82\81[\83g\91¤\82Å\82Ì\83t\83@\83C\83\8b\82Ì\88Ú\93®\81i\83\8a\83l\81[\83\80\81j\82ð\8ds\82¤\r
+// リモート側でのファイルの移動(リネーム)を行う\r
// \r
-// RenameProc()\82ð\83x\81[\83X\82É\89ü\91¢\81B(2007.9.5 yutaka)\r
+// RenameProc()をベースに改造。(2007.9.5 yutaka)\r
//\r
void MoveRemoteFileProc(int drop_index)\r
{\r
int RenFlg;\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(MoveMode == MOVE_DISABLE)\r
{\r
return;\r
\r
AskRemoteCurDir(HostDir, FMAX_PATH);\r
\r
- // \83h\83\8d\83b\83v\90æ\82Ì\83t\83H\83\8b\83_\96¼\82ð\93¾\82é\r
- GetNodeName(WIN_REMOTE, drop_index, Pkt.File, FMAX_PATH);\r
+ // ドロップ先のフォルダ名を得る\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
}\r
}\r
\r
- Sts = SUCCESS;\r
+ Sts = FFFTP_SUCCESS;\r
#if 0\r
if(GetFocus() == GetLocalHwnd())\r
Win = WIN_LOCAL;\r
Sts = CheckClosedAndReconnect();\r
#endif\r
\r
- if(Sts == SUCCESS)\r
+ if(Sts == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
\r
\r
if((Sts == YES) && (strlen(TmpString) != 0))\r
{\r
- // \83p\83X\82Ì\90Ý\92è(local)\r
+ // パスの設定(local)\r
strncpy_s(Old, sizeof(Old), HostDir, _TRUNCATE);\r
strncat_s(Old, sizeof(Old), "/", _TRUNCATE);\r
strncat_s(Old, sizeof(Old), Pos->File, _TRUNCATE);\r
\r
- // \83p\83X\82Ì\90Ý\92è(remote)\r
+ // パスの設定(remote)\r
strncpy_s(New, sizeof(New), HostDir, _TRUNCATE);\r
strncat_s(New, sizeof(New), "/", _TRUNCATE);\r
strncat_s(New, sizeof(New), Pkt.File, _TRUNCATE);\r
\r
\r
\r
-/*----- \90V\83t\83@\83C\83\8b\96¼\93ü\97Í\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
+/*----- 新ファイル名入力ダイアログのコールバック ------------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK RenameDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
switch (iMessage)\r
{\r
}\r
\r
\r
-/*----- \90V\82µ\82¢\83f\83B\83\8c\83N\83g\83\8a\82ð\8dì\90¬\82·\82é ------------------------------------------\r
+/*----- 新しいディレクトリを作成する ------------------------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void MkdirProc(void)\r
char *Title;\r
int Tmp;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetLocalHwnd())\r
{\r
Win = WIN_LOCAL;\r
}\r
else\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
DoMKD(Path);\r
}\r
\r
\r
-/*----- \83q\83X\83g\83\8a\83\8a\83X\83g\82ð\8eg\82Á\82½\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ------------------------------\r
+/*----- ヒストリリストを使ったディレクトリの移動 ------------------------------\r
*\r
* Parameter\r
-* HWND hWnd : \83R\83\93\83{\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+* HWND hWnd : コンボボックスのウインドウハンドル\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void ChangeDirComboProc(HWND hWnd)\r
char Tmp[FMAX_PATH+1];\r
int i;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR)\r
{\r
SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp);\r
}\r
else\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
if(DoCWD(Tmp, YES, NO, YES) < FTP_RETRY)\r
}\r
\r
\r
-/*----- \83u\83b\83N\83}\81[\83N\82ð\8eg\82Á\82½\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® --------------------------------\r
+/*----- ブックマークを使ったディレクトリの移動 --------------------------------\r
*\r
* Parameter\r
-* int MarkID : \83u\83b\83N\83}\81[\83N\82Ì\83\81\83j\83\85\81[ID\r
+* int MarkID : ブックマークのメニューID\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void ChangeDirBmarkProc(int MarkID)\r
char Remote[FMAX_PATH+1];\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1);\r
if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH))\r
{\r
DisableUserOpe();\r
- if(DoLocalCWD(Local) == SUCCESS)\r
+ if(DoLocalCWD(Local) == FFFTP_SUCCESS)\r
GetLocalDirForWnd();\r
EnableUserOpe();\r
}\r
\r
if((Sts == BMARK_TYPE_REMOTE) || (Sts == BMARK_TYPE_BOTH))\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
if(DoCWD(Remote, YES, NO, YES) < FTP_RETRY)\r
}\r
\r
\r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\96¼\82ð\93ü\97Í\82µ\82Ä\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ----------------------------\r
+/*----- ディレクトリ名を入力してディレクトリの移動 ----------------------------\r
*\r
* Parameter\r
-* int Win : \83E\83C\83\93\83h\83E\94Ô\8d\86 (WIN_xxx)\r
+* int Win : ウインドウ番号 (WIN_xxx)\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void ChangeDirDirectProc(int Win)\r
char *Title;\r
int Tmp;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(Win == WIN_LOCAL)\r
Title = MSGJPN072;\r
else\r
\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
}\r
else\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
if(DoCWD(Path, YES, NO, YES) < FTP_RETRY)\r
}\r
\r
\r
-/*----- Drop\82³\82ê\82½\83t\83@\83C\83\8b\82É\82æ\82é\83f\83B\83\8c\83N\83g\83\8a\82Ì\88Ú\93® ----------------------------\r
+/*----- Dropされたファイルによるディレクトリの移動 ----------------------------\r
*\r
* Parameter\r
-* WPARAM wParam : \83h\83\8d\83b\83v\82³\82ê\82½\83t\83@\83C\83\8b\82Ì\8fî\95ñ\r
+* WPARAM wParam : ドロップされたファイルの情報\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void ChangeDirDropFileProc(WPARAM wParam)\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\82Ì\91®\90«\95Ï\8dX ----------------------------------------------------\r
+/*----- ファイルの属性変更 ----------------------------------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void ChmodProc(void)\r
char *BufTmp;\r
int BufLen;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetRemoteHwnd())\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
FileListBase = NULL;\r
}\r
\r
\r
-/*----- \91®\90«\95Ï\8dX\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N --------------------------------------\r
+/*----- 属性変更ダイアログのコールバック --------------------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
char Str[5];\r
static char *Buf;\r
}\r
\r
\r
-/*----- \91®\90«\82ð\83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82É\90Ý\92è ----------------------------------------\r
+/*----- 属性をダイアログボックスに設定 ----------------------------------------\r
*\r
* Parameter\r
-* HWND hWnd : \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* int Attr : \91®\90«\r
+* HWND hWnd : ダイアログボックスのウインドウハンドル\r
+* int Attr : 属性\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
static void SetAttrToDialog(HWND hDlg, int Attr)\r
}\r
\r
\r
-/*----- \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\93à\97e\82©\82ç\91®\90«\82ð\8eæ\93¾ --------------------------------\r
+/*----- ダイアログボックスの内容から属性を取得 --------------------------------\r
*\r
* Parameter\r
-* HWND hWnd : \83_\83C\83A\83\8d\83O\83{\83b\83N\83X\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+* HWND hWnd : ダイアログボックスのウインドウハンドル\r
*\r
* Return Value\r
-* int \91®\90«\r
+* int 属性\r
*----------------------------------------------------------------------------*/\r
\r
static int GetAttrFromDialog(HWND hDlg)\r
\r
\r
\r
-/*----- \94C\88Ó\82Ì\83R\83}\83\93\83h\82ð\91\97\82é --------------------------------------------------\r
+/*----- 任意のコマンドを送る --------------------------------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void SomeCmdProc(void)\r
int Tmp;\r
FILELIST *FileListBase;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetRemoteHwnd())\r
{\r
- if(CheckClosedAndReconnect() == SUCCESS)\r
+ if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
FileListBase = NULL;\r
\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
\r
\r
\r
-/*----- \83t\83@\83C\83\8b\91\8d\97e\97Ê\82Ì\8cv\8eZ\82ð\8ds\82¤ --------------------------------------------\r
+/*----- ファイル総容量の計算を行う --------------------------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void CalcFileSizeProc(void)\r
int All;\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL)\r
{\r
- Sts = SUCCESS;\r
+ Sts = FFFTP_SUCCESS;\r
if(GetFocus() == GetLocalHwnd())\r
Win = WIN_LOCAL;\r
else\r
Sts = CheckClosedAndReconnect();\r
}\r
\r
- if(Sts == SUCCESS)\r
+ if(Sts == FFFTP_SUCCESS)\r
{\r
ListBase = NULL;\r
MakeSelectedFileList(Win, YES, All, &ListBase, &CancelFlg);\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\97e\97Ê\8c\9f\8dõ\8am\94F\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N --------------------------\r
+/*----- ファイル容量検索確認ダイアログのコールバック --------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
-* \83\81\83b\83Z\81[\83W\82É\91Î\89\9e\82·\82é\96ß\82è\92l\r
+* メッセージに対応する戻り値\r
*----------------------------------------------------------------------------*/\r
\r
static LRESULT CALLBACK SizeNotifyDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\97e\97Ê\8c\9f\8dõ\83_\83C\83A\83\8d\83O\82Ì\83R\81[\83\8b\83o\83b\83N ------------------------------\r
+/*----- ファイル容量検索ダイアログのコールバック ------------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hDlg : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
-* \83\81\83b\83Z\81[\83W\82É\91Î\89\9e\82·\82é\96ß\82è\92l\r
+* メッセージに対応する戻り値\r
*----------------------------------------------------------------------------*/\r
\r
static LRESULT CALLBACK SizeDlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
}\r
\r
\r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\88Ú\93®\8e¸\94s\8e\9e\82Ì\83G\83\89\81[\82ð\95\\8e¦ ----------------------------------\r
+/*----- ディレクトリ移動失敗時のエラーを表示 ----------------------------------\r
*\r
* Parameter\r
-* HWND hDlg : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
+* HWND hDlg : ウインドウハンドル\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void DispCWDerror(HWND hWnd)\r
}\r
\r
\r
-/*----- URL\82ð\83N\83\8a\83b\83v\83{\81[\83h\82É\83R\83s\81[ -------------------------------------------\r
+/*----- URLをクリップボードにコピー -------------------------------------------\r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void CopyURLtoClipBoard(void)\r
sprintf(Port, ":%d", AskHostPort());\r
\r
Set = Total;\r
- Total += strlen(Path) + strlen(Host) + strlen(Port) + 8; /* 8\82Í "ftp://\r\n" \82Ì\82Ô\82ñ */\r
+ Total += strlen(Path) + strlen(Host) + strlen(Port) + 8; /* 8は "ftp://\r\n" のぶん */\r
if(AskHostType() == HTYPE_VMS)\r
Total++;\r
\r
}\r
\r
\r
-/*----- \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\83t\83@\83C\83\8b\83A\83N\83Z\83X\82Ì\8f\80\94õ ------------------------------\r
+/*----- フルパスを使わないファイルアクセスの準備 ------------------------------\r
*\r
* Parameter\r
-* char *Path : \83p\83X\96¼\r
-* char *CurDir : \83J\83\8c\83\93\83g\83f\83B\83\8c\83N\83g\83\8a\r
-* HWND hWnd : \83G\83\89\81[\83E\83C\83\93\83h\83E\82ð\95\\8e¦\82·\82é\8dÛ\82Ì\90e\83E\83C\83\93\83h\83E\r
-* int Type : \8eg\97p\82·\82é\83\\83P\83b\83g\82Ì\8eí\97Þ\r
-* 0=\83R\83}\83\93\83h\83\\83P\83b\83g, 1=\93]\91\97\83\\83P\83b\83g\r
+* char *Path : パス名\r
+* char *CurDir : カレントディレクトリ\r
+* HWND hWnd : エラーウインドウを表示する際の親ウインドウ\r
+* int Type : 使用するソケットの種類\r
+* 0=コマンドソケット, 1=転送ソケット\r
*\r
* Return Value\r
-* int \83X\83e\81[\83^\83X(SUCCESS/FAIL)\r
+* int ステータス(FFFTP_SUCCESS/FFFTP_FAIL)\r
*\r
* Note\r
-* \83t\83\8b\83p\83X\82ð\8eg\82í\82È\82¢\8e\9e\82Í\81A\r
-* \82±\82Ì\83\82\83W\83\85\81[\83\8b\93à\82Å CWD \82ð\8ds\82È\82¢\81A\r
-* Path \82É\83t\83@\83C\83\8b\96¼\82Ì\82Ý\8ec\82·\81B\81i\83p\83X\96¼\82Í\8fÁ\82·\81j\r
+* フルパスを使わない時は、\r
+* このモジュール内で CWD を行ない、\r
+* Path にファイル名のみ残す。(パス名は消す)\r
*----------------------------------------------------------------------------*/\r
\r
-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+// 同時接続対応\r
+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork)\r
{\r
int Sts;\r
int Cmd;\r
char Tmp[FMAX_PATH+1];\r
\r
- Sts = SUCCESS;\r
+ Sts = FFFTP_SUCCESS;\r
if(AskNoFullPathMode() == YES)\r
{\r
strcpy(Tmp, Path);\r
\r
if(strcmp(Tmp, CurDir) != 0)\r
{\r
- if(Type == 0)\r
- Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
- else\r
- Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);\r
+ // 同時接続対応\r
+// if(Type == 0)\r
+// Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
+// else\r
+// Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);\r
+ Cmd = CommandProcTrn(cSkt, NULL, CancelCheckWork, "CWD %s", Tmp);\r
\r
if(Cmd/100 != FTP_COMPLETE)\r
{\r
DispCWDerror(hWnd);\r
- Sts = FAIL;\r
+ Sts = FFFTP_FAIL;\r
}\r
else\r
strcpy(CurDir, Tmp);\r
}\r
\r
\r
-/*----- \83f\83B\83\8c\83N\83g\83\8a\96¼\82ðVAX VMS\83X\83^\83C\83\8b\82É\95Ï\8a·\82·\82é -----------------------------\r
+/*----- ディレクトリ名をVAX VMSスタイルに変換する -----------------------------\r
*\r
* Parameter\r
-* char *Path : \83p\83X\96¼\r
+* char *Path : パス名\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*\r
* Note\r
* ddd:[xxx.yyy]/rrr/ppp --> ddd:[xxx.yyy.rrr.ppp]\r
}\r
\r
\r
-/*----- \83t\83@\83C\83\8b\96¼\82ðVAX VMS\83X\83^\83C\83\8b\82É\95Ï\8a·\82·\82é ---------------------------------\r
+/*----- ファイル名をVAX VMSスタイルに変換する ---------------------------------\r
*\r
* Parameter\r
-* char *Path : \83p\83X\96¼\r
+* char *Path : パス名\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*\r
* Note\r
* ddd:[xxx.yyy]/rrr/ppp --> ddd:[xxx.yyy.rrr]ppp\r
\r
\r
#if defined(HAVE_OPENVMS)\r
-/*----- VMS\82Ì"HOGE.DIR;?"\82Æ\82¢\82¤\83f\83B\83\8c\83N\83g\83\8a\96¼\82©\82ç"HOGE"\82ð\8eæ\82è\8fo\82· ---------------\r
+/*----- VMSの"HOGE.DIR;?"というディレクトリ名から"HOGE"を取り出す ---------------\r
*\r
* Parameter\r
-* char *DirName : "HOGE.DIR;?"\8c`\8e®\82Ì\83f\83B\83\8c\83N\83g\83\8a\96¼\r
-* int Flg : ";"\82Ì\83`\83F\83b\83N\82ð\82·\82é(TRUE)\82©\82µ\82È\82¢(FALSE)\82©\r
+* char *DirName : "HOGE.DIR;?"形式のディレクトリ名\r
+* int Flg : ";"のチェックをする(TRUE)かしない(FALSE)か\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*\r
* Note\r
-* DirName\82ð\92¼\90Ú\8f\91\82«\82©\82¦\82é\r
+* DirNameを直接書きかえる\r
*----------------------------------------------------------------------------*/\r
\r
void ReformVMSDirName(char *DirName, int Flg)\r
char *p;\r
\r
if (Flg == TRUE) {\r
- /* ';'\82ª\82È\82¢\8fê\8d\87\82ÍVMS\8c`\8e®\82¶\82á\82È\82³\82»\82¤\82È\82Ì\82Å\89½\82à\82µ\82È\82¢ */\r
+ /* ';'がない場合はVMS形式じゃなさそうなので何もしない */\r
if ((p = strrchr(DirName, ';')) == NULL)\r
return;\r
}\r
\r
- /* ".DIR"\82ª\82 \82Á\82½\82ç\82Â\82Ô\82· */\r
+ /* ".DIR"があったらつぶす */\r
if ((p = strrchr(DirName, '.'))) {\r
if (memcmp(p + 1, "DIR", 3) == 0)\r
*p = '\0';\r
#endif\r
\r
\r
-/*----- \83t\83@\83C\83\8b\96¼\82É\8eg\82¦\82È\82¢\95¶\8e\9a\82ª\82È\82¢\82©\83`\83F\83b\83N\82µ\96¼\91O\82ð\95Ï\8dX\82·\82é --------------\r
+/*----- ファイル名に使えない文字がないかチェックし名前を変更する --------------\r
*\r
* Parameter\r
-* char *Fname : \83t\83@\83C\83\8b\96¼\r
+* char *Fname : ファイル名\r
*\r
* Return Value\r
-* int \83X\83e\81[\83^\83X\r
-* SUCCESS/FAIL=\92\86\8e~\82·\82é\r
+* int ステータス\r
+* FFFTP_SUCCESS/FFFTP_FAIL=中止する\r
*\r
* Note\r
-* Fname\82ð\92¼\90Ú\8f\91\82«\82©\82¦\82é\r
+* Fnameを直接書きかえる\r
*----------------------------------------------------------------------------*/\r
\r
static int RenameUnuseableName(char *Fname)\r
int Tmp;\r
int Ret;\r
\r
- Ret = SUCCESS;\r
+ Ret = FFFTP_SUCCESS;\r
while(1)\r
{\r
if((_mbschr(Fname, ':') != NULL) ||\r
{\r
if(InputDialogBox(forcerename_dlg, GetMainHwnd(), NULL, Fname, FMAX_PATH+1, &Tmp, IDH_HELP_TOPIC_0000001) == NO)\r
{\r
- Ret = FAIL;\r
+ Ret = FFFTP_FAIL;\r
break;\r
}\r
}\r
}\r
\r
\r
+// 自動切断対策\r
+// NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
+void NoopProc(int Force)\r
+{\r
+// CancelFlg = NO;\r
+ if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
+ {\r
+ if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+ {\r
+ DisableUserOpe();\r
+ DoDirListCmdSkt("", "", 999, &CancelFlg);\r
+ EnableUserOpe();\r
+ }\r
+ }\r
+}\r
+\r
+// 同時接続対応\r
+void AbortRecoveryProc(void)\r
+{\r
+ CancelFlg = NO;\r
+ if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+ {\r
+ if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
+ {\r
+ if(AskErrorReconnect() == YES)\r
+ {\r
+ DisableUserOpe();\r
+ ReConnectCmdSkt();\r
+ GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
+ EnableUserOpe();\r
+ }\r
+ else\r
+ RemoveReceivedData(AskCmdCtrlSkt());\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r