X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=ftpproc.c;h=e13bc7d639703f09069119285c77e9f098f25b04;hp=e610ad3d3b7535f930473e68096d92f35fc79b6c;hb=663728dfaea4b4e0da170722b4046764e01555dc;hpb=27e47ec02a3553a6e9b4e935a43dc28919d91c0d diff --git a/ftpproc.c b/ftpproc.c index e610ad3..e13bc7d 100644 --- a/ftpproc.c +++ b/ftpproc.c @@ -28,6 +28,8 @@ /============================================================================*/ #define STRICT +// IPv6対応 +#include #include #include #include @@ -50,24 +52,39 @@ /*===== プロトタイプ =====*/ 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); @@ -91,10 +108,15 @@ extern SIZE MirrorDlgSize; extern int VaxSemicolon; extern int DebugConsole; extern int CancelFlg; +// ディレクトリ自動作成 +extern int MakeAllDir; /*===== ローカルなワーク =====*/ static char TmpString[FMAX_PATH+80]; /* テンポラリ */ +#if defined(HAVE_TANDEM) +static char TmpFileCode[5]; /* テンポラリ */ +#endif static int CurWin; /* ウインドウ番号 */ int UpExistMode = EXIST_OVW; /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */ @@ -116,11 +138,50 @@ static double FileSize; /* ファイル総容量 */ * なし *----------------------------------------------------------------------------*/ -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]; // 同時接続対応 CancelFlg = NO; @@ -203,6 +264,19 @@ 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; @@ -211,11 +285,19 @@ void DownLoadProc(int ChName, int ForceFile, int All) Pkt.KanjiCodeDesired = AskLocalKanjiCode(); Pkt.KanaCnv = AskHostKanaCnv(); + // ディレクトリ自動作成 + 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; } @@ -228,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); @@ -249,7 +332,7 @@ void DownLoadProc(int ChName, int ForceFile, int All) * なし *----------------------------------------------------------------------------*/ -void DirectDownLoadProc(char *Fname) +void DirectDownloadProc(char *Fname) { TRANSPACKET Pkt; @@ -330,8 +413,9 @@ void DirectDownLoadProc(char *Fname) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); // KeepTransferDialog(NO); @@ -351,7 +435,7 @@ void DirectDownLoadProc(char *Fname) * なし *----------------------------------------------------------------------------*/ -void InputDownLoadProc(void) +void InputDownloadProc(void) { char Path[FMAX_PATH+1]; int Tmp; @@ -361,7 +445,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(); @@ -596,8 +680,9 @@ void MirrorDownloadProc(int Notify) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); } else EraseTmpTransFileList(&Base); @@ -786,7 +871,9 @@ static int CheckLocalFile(TRANSPACKET *Pkt) * 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[] = { @@ -852,7 +939,70 @@ static BOOL CALLBACK DownExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wP * なし *----------------------------------------------------------------------------*/ -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; @@ -895,17 +1045,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 { // 名前を変更する 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) @@ -964,16 +1141,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対応 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"); @@ -999,8 +1189,9 @@ void UpLoadListProc(int ChName, int All) DeleteFileList(&FileListBase); - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); @@ -1019,7 +1210,7 @@ void UpLoadListProc(int ChName, int All) * なし *----------------------------------------------------------------------------*/ -void UpLoadDragProc(WPARAM wParam) +void UploadDragProc(WPARAM wParam) { FILELIST *FileListBase; FILELIST *Pos; @@ -1063,6 +1254,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) { @@ -1119,16 +1316,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対応 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"); @@ -1154,8 +1365,9 @@ void UpLoadDragProc(WPARAM wParam) DeleteFileList(&FileListBase); - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); GoForwardTransWindow(); @@ -1390,11 +1602,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対応 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); } @@ -1420,8 +1637,9 @@ void MirrorUploadProc(int Notify) AddTransFileList(&Pkt); } - strcpy(Pkt.Cmd, "GOQUIT"); - AddTransFileList(&Pkt); + // 同時接続対応 +// strcpy(Pkt.Cmd, "GOQUIT"); +// AddTransFileList(&Pkt); } else EraseTmpTransFileList(&Base); @@ -1487,7 +1705,9 @@ static void MirrorDeleteAllDir(FILELIST *Remote, TRANSPACKET *Pkt, TRANSPACKET * * 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; @@ -1536,7 +1756,9 @@ static BOOL CALLBACK MirrorNotifyCallBack(HWND hDlg, UINT iMessage, WPARAM wPara * 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 }, @@ -1753,7 +1975,7 @@ static int AskMirrorNoTrn(char *Fname, int Mode) * int 属性 (-1=設定なし) *----------------------------------------------------------------------------*/ -static int AskUpLoadFileAttr(char *Fname) +static int AskUploadFileAttr(char *Fname) { int Ret; int Sts; @@ -1795,13 +2017,26 @@ static int AskUpLoadFileAttr(char *Fname) 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; @@ -1842,7 +2077,9 @@ static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList) * 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[] = { @@ -1908,7 +2145,55 @@ static BOOL CALLBACK UpExistDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPar * 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) + { + 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); + return(TRUE); + + case WM_COMMAND : + switch(GET_WM_COMMAND_ID(wParam, lParam)) + { + case IDOK : + SendDlgItemMessage(hDlg, UPDOWNAS_NEW, WM_GETTEXT, FMAX_PATH, (LPARAM)TmpString); + EndDialog(hDlg, YES); + break; + + case UPDOWNAS_STOP : + EndDialog(hDlg, NO_ALL); + break; + } + return(TRUE); + } + return(FALSE); +} + + +#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) { @@ -1921,6 +2206,9 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa 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 : @@ -1928,6 +2216,7 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa { 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; @@ -1939,6 +2228,7 @@ static BOOL CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wPa } return(FALSE); } +#endif /*----- ファイル一覧で指定されたファイルを削除する ---------------------------- @@ -2098,7 +2388,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; @@ -2149,7 +2441,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi * 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) { @@ -2401,7 +2695,9 @@ void MoveRemoteFileProc(int drop_index) * 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) { @@ -2755,7 +3051,9 @@ void ChmodProc(void) * 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; @@ -2919,7 +3217,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(); } @@ -3357,3 +3657,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(); + } + } +} +