OSDN Git Service

Add support for HP NonStop Server
authorYuji Tanaka <chibi_honu@users.sourceforge.jp>
Tue, 10 Jan 2012 12:01:37 +0000 (21:01 +0900)
committerYuji Tanaka <chibi_honu@users.sourceforge.jp>
Tue, 10 Jan 2012 12:01:37 +0000 (21:01 +0900)
24 files changed:
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/FFFTP-eng.rc
Resource_eng/resource.h
common.h
config.h
connect.c
doc/eng/FFFTP_hpnonstop.txt [new file with mode: 0644]
doc/jpn/FFFTP_hpnonstop.txt [new file with mode: 0644]
filelist.c
ftpproc.c
getput.c
hostman.c
main.c
mesg-eng.h
mesg-eng.old.h
mesg-jpn.h
mesg-jpn.old.h
misc.c
putty/Release/PuTTY.dll
remote.c
toolmenu.c

index 6652352..1fb27ca 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index e5b401f..5bba617 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 4de913b..c20968b 100644 (file)
@@ -219,6 +219,7 @@ BEGIN
         MENUITEM "URL\82ð\83N\83\8a\83b\83v\83{\81[\83h\82Ö",                MENU_URL_COPY\r
         MENUITEM "\91S\82Ä\82ð\83_\83E\83\93\83\8d\81[\83h",                   MENU_DOWNLOAD_ALL\r
         MENUITEM "\91S\82Ä\82ð\83A\83b\83v\83\8d\81[\83h",                   MENU_UPLOAD_ALL\r
+        MENUITEM "OSS<->GUARDIAN \90Ø\82è\91Ö\82¦",         MENU_SWITCH_OSS\r
     END\r
 END\r
 \r
@@ -817,6 +818,19 @@ BEGIN
     LTEXT           "\82Ì\96¼\91O\82ð\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B",-1,15,20,133,8\r
 END\r
 \r
+updown_as_with_ext_dlg DIALOGEX 0, 0, 187, 89\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x0\r
+BEGIN\r
+    EDITTEXT        UPDOWNAS_NEW,7,34,173,12,ES_AUTOHSCROLL\r
+    LTEXT           "",UPDOWNAS_TEXT,7,7,173,8,SS_NOPREFIX\r
+    LTEXT           "\82Ì\96¼\91O\82ð\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢\81B",-1,15,20,133,8\r
+    LTEXT           "\83t\83@\83C\83\8b\83R\81[\83h",-1,10,51,44,8\r
+    EDITTEXT        UPDOWNAS_FILECODE,55,49,21,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER\r
+    DEFPUSHBUTTON   "OK",IDOK,35,66,50,14\r
+    PUSHBUTTON      "\92\86\8e~(&S)",UPDOWNAS_STOP,101,66,50,14\r
+END\r
+\r
 re_passwd_dlg DIALOG  0, 0, 187, 62\r
 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION\r
 CAPTION "\83p\83X\83\8f\81[\83h"\r
@@ -1695,6 +1709,14 @@ BEGIN
         BOTTOMMARGIN, 65\r
     END\r
 \r
+    updown_as_with_ext_dlg, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 180\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 87\r
+    END\r
+\r
     re_passwd_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
index 78283af..ec5a51a 100644 (file)
 #define hset_adv3_dlg                   190\r
 #define savecrypt_dlg                   191\r
 #define updatesslroot_dlg               192\r
+#define updown_as_with_ext_dlg          193\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define UPDOWNAS_TEXT                   1113\r
 #define UPDOWNAS_NEW                    1114\r
 #define UPDOWNAS_STOP                   1115\r
+#define UPDOWNAS_FILECODE               1116\r
 #define SEL_FNAME                       1117\r
 #define SEL_REGEXP                      1118\r
 #define SEL_NOEXIST                     1119\r
 #define ID_BUTTON40173                  40173\r
 #define ID_BUTTON40174                  40174\r
 #define ID_BUTTON40175                  40175\r
+#define MENU_SWITCH_OSS                 40176\r
 #define FSNOTIFY_TITLE                  65535\r
 #define HOST_SIZEGRIP                   65535\r
 \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
-#define _APS_NEXT_COMMAND_VALUE         40176\r
+#define _APS_NEXT_COMMAND_VALUE         40177\r
 #define _APS_NEXT_CONTROL_VALUE         1213\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
index b70cb19..2d62437 100644 (file)
@@ -219,6 +219,7 @@ BEGIN
         MENUITEM "URL to clipboard",            MENU_URL_COPY\r
         MENUITEM "Download all",                MENU_DOWNLOAD_ALL\r
         MENUITEM "Upload all",                  MENU_UPLOAD_ALL\r
+        MENUITEM "Switch OSS<->GUARDIAN",       MENU_SWITCH_OSS\r
     END\r
 END\r
 \r
@@ -824,6 +825,19 @@ BEGIN
     LTEXT           "Enter new name",-1,7,7,133,8\r
 END\r
 \r
+updown_as_with_ext_dlg DIALOGEX 0, 0, 187, 89\r
+STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION\r
+FONT 9, "MS Sans Serif", 0, 0, 0x0\r
+BEGIN\r
+    EDITTEXT        UPDOWNAS_NEW,7,34,173,12,ES_AUTOHSCROLL\r
+    LTEXT           "",UPDOWNAS_TEXT,7,7,173,8,SS_NOPREFIX\r
+    LTEXT           "Enter new name",-1,15,20,133,8\r
+    LTEXT           "File Code",-1,10,51,44,8\r
+    EDITTEXT        UPDOWNAS_FILECODE,55,49,21,12,ES_CENTER | ES_AUTOHSCROLL | ES_NUMBER\r
+    DEFPUSHBUTTON   "OK",IDOK,35,66,50,14\r
+    PUSHBUTTON      "Cancel",UPDOWNAS_STOP,101,66,50,14\r
+END\r
+\r
 re_passwd_dlg DIALOG  0, 0, 187, 62\r
 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION\r
 CAPTION "Password"\r
@@ -1723,6 +1737,14 @@ BEGIN
         BOTTOMMARGIN, 65\r
     END\r
 \r
+    updown_as_with_ext_dlg, DIALOG\r
+    BEGIN\r
+        LEFTMARGIN, 7\r
+        RIGHTMARGIN, 180\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 87\r
+    END\r
+\r
     re_passwd_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
index 676d75b..427bdf8 100644 (file)
 #define hset_adv3_dlg                   190\r
 #define savecrypt_dlg                   191\r
 #define updatesslroot_dlg               192\r
+#define updown_as_with_ext_dlg          193\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define UPDOWNAS_TEXT                   1113\r
 #define UPDOWNAS_NEW                    1114\r
 #define UPDOWNAS_STOP                   1115\r
+#define UPDOWNAS_FILECODE               1116\r
 #define SEL_FNAME                       1117\r
 #define SEL_REGEXP                      1118\r
 #define SEL_NOEXIST                     1119\r
 #define ID_BUTTON40173                  40173\r
 #define ID_BUTTON40174                  40174\r
 #define ID_BUTTON40175                  40175\r
+#define MENU_SWITCH_OSS                 40176\r
 #define FSNOTIFY_TITLE                  65535\r
 #define HOST_SIZEGRIP                   65535\r
 \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
-#define _APS_NEXT_COMMAND_VALUE         40176\r
+#define _APS_NEXT_COMMAND_VALUE         40177\r
 #define _APS_NEXT_CONTROL_VALUE         1213\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
index 2f8be0c..d1f7b5c 100644 (file)
--- a/common.h
+++ b/common.h
 #define CHMOD_CMD_NOR  "SITE CHMOD"    /* 属性変更コマンド */\r
 #define PORT_NOR               21                              /* ポート番号 */\r
 #define LS_FNAME               "-alL"                  /* NLSTに付けるもの */\r
+#if defined(HAVE_TANDEM)\r
+#define DEF_PRIEXT             4                               /* Primary Extents の初期値 */\r
+#define DEF_SECEXT             28                              /* Secondary Extents の初期値 */\r
+#define DEF_MAXEXT             978                             /* Max Extents の初期値 */\r
+#endif\r
 \r
 /*===== 同じ名前のファイルがあった時の処理 =====*/\r
 \r
 #define LIST_UNIX_16   48              /* UNIX 16 */\r
 // MLSD対応\r
 #define LIST_MLSD              49\r
+#if defined(HAVE_TANDEM)\r
+#define LIST_TANDEM            50              /* HP NonStop Server */\r
+#endif\r
 \r
 #define LIST_MELCOM            0x100   /* MELCOM80 */\r
 \r
@@ -682,6 +690,13 @@ LIST_UNIX_70
        drwxr-x--- 3 root root      4096 2011-12-06 23:39 ..\r
        -rw-r----- 1 root root       251 2011-12-06 23:39 .hoge\r
 \r
+*LIST_TANDEM\r
+        0             1               2    3         4        5       6\r
+       ---------------------------------------------------------------\r
+       File         Code             EOF  Last Modification    Owner  RWEP\r
+       EMSACSTM      101             146  18-Sep-00 09:03:37 170,175 "nunu"\r
+       TACLCSTM   O  101             101  4-Mar-01  23:50:06 255,255 "oooo"\r
+\r
 ------------------------------------*/\r
 \r
 /*===== 接続ウインドウの形式 =====*/\r
@@ -762,6 +777,9 @@ LIST_UNIX_70
 #define        HTYPE_STRATUS   5               /* Stratus */\r
 #define        HTYPE_AGILENT   6               /* Agilent Logic analyzer */\r
 #define        HTYPE_SHIBASOKU 7               /* Shibasoku LSI test system */\r
+#if defined(HAVE_TANDEM)\r
+#define HTYPE_TANDEM   8               /* HP NonStop Server */\r
+#endif\r
 \r
 /*===== コマンドラインオプション =====*/\r
 \r
@@ -1066,6 +1084,12 @@ typedef struct transpacket {
        int KanjiCodeDesired;                   /* ローカルの漢字コード (KANJI_xxx) */\r
        int KanaCnv;                                    /* 半角カナを全角に変換(YES/NO) */\r
        int Mode;                                               /* 転送モード (EXIST_xxx) */\r
+#if defined(HAVE_TANDEM)\r
+       int FileCode;                                   /* ファイルコード */\r
+       int PriExt;                                             /* Primary Extents */\r
+       int SecExt;                                             /* Secondary Extents */\r
+       int MaxExt;                                             /* Max Extents */\r
+#endif\r
        HWND hWndTrans;                                 /* 転送中ダイアログのウインドウハンドル */\r
        int Abort;                                              /* 転送中止フラグ (ABORT_xxx) */\r
        // 同時接続対応\r
@@ -1456,6 +1480,11 @@ int AskShareProh(void);
 void DisconnectProc(void);\r
 void DisconnectSet(void);\r
 int AskConnecting(void);\r
+#if defined(HAVE_TANDEM)\r
+int AskRealHostType(void);\r
+int SetOSS(int wkOss);\r
+int AskOSS(void);\r
+#endif\r
 SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
 // IPv6対応\r
 SOCKET connectsockIPv4(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
@@ -1574,6 +1603,9 @@ int DoQUOTE(char *CmdStr);
 SOCKET DoClose(SOCKET Sock);\r
 int DoQUIT(SOCKET ctrl_skt);\r
 int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork);\r
+#if defined(HAVE_TANDEM)\r
+void SwitchOSSProc(void);\r
+#endif\r
 int CommandProcCmd(char *Reply, char *fmt, ...);\r
 // 同時接続対応\r
 //int CommandProcTrn(char *Reply, char *fmt, ...);\r
@@ -1747,6 +1779,9 @@ char *MakeNumString(LONGLONG Num, char *Buf, BOOL Comma);
 char* MakeDistinguishableFileName(char* Out, char* In);\r
 // 環境依存の不具合対策\r
 char* GetAppTempPath(char* Buf);\r
+#if defined(HAVE_TANDEM)\r
+void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size);\r
+#endif\r
 \r
 /*===== dlgsize.c =====*/\r
 \r
index 8a9a593..50a28a2 100644 (file)
--- a/config.h
+++ b/config.h
@@ -20,3 +20,6 @@
 // ファイル転送の同時接続数\r
 #define MAX_DATA_CONNECTION 4\r
 \r
+/* HP NonStop Server 用のコードを有効にする */\r
+#define HAVE_TANDEM\r
+\r
index b679a4d..db97a58 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -123,6 +123,9 @@ static const struct in6_addr IN6ADDR_NONE = {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff
 static int UseIPadrs;\r
 static char DomainName[HOST_ADRS_LEN+1];\r
 \r
+#if defined(HAVE_TANDEM)\r
+static int Oss = NO;  /* OSS ファイルシステムへアクセスしている場合は YES */\r
+#endif\r
 \r
 \r
 \r
@@ -895,6 +898,14 @@ int AskHostType(void)
        if(AskCurrentHost() != HOSTNUM_NOENTRY)\r
                CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
 \r
+#if defined(HAVE_TANDEM)\r
+       /* OSS ファイルシステムは UNIX ファイルシステムと同じでいいので AUTO を返す\r
+          ただし、Guardian ファイルシステムに戻ったときにおかしくならないように\r
+          CurHost.HostType 変数は更新しない */\r
+       if(CurHost.HostType == HTYPE_TANDEM && Oss == YES)\r
+               return(HTYPE_AUTO);\r
+#endif\r
+\r
        return(CurHost.HostType);\r
 }\r
 \r
@@ -1316,6 +1327,55 @@ int AskConnecting(void)
 }\r
 \r
 \r
+#if defined(HAVE_TANDEM)\r
+/*----- 接続している本当のホストのホストタイプを返す --------------------------\r
+*\r
+*      Parameter\r
+*              なし\r
+*\r
+*      Return Value\r
+*              char *ファイル名/オプション\r
+*----------------------------------------------------------------------------*/\r
+\r
+int AskRealHostType(void)\r
+{\r
+       if(AskCurrentHost() != HOSTNUM_NOENTRY)\r
+               CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
+\r
+       return(CurHost.HostType);\r
+}\r
+\r
+/*----- OSS ファイルシステムにアクセスしているかどうかのフラグを変更する ------\r
+*\r
+*      Parameter\r
+*              int ステータス (YES/NO)\r
+*\r
+*      Return Value\r
+*              int ステータス (YES/NO)\r
+*----------------------------------------------------------------------------*/\r
+\r
+int SetOSS(int wkOss)\r
+{\r
+       Oss = wkOss;\r
+       return(Oss);\r
+}\r
+\r
+/*----- OSS ファイルシステムにアクセスしているかどうかを返す ------------------\r
+*\r
+*      Parameter\r
+*              なし\r
+*\r
+*      Return Value\r
+*              int ステータス (YES/NO)\r
+*----------------------------------------------------------------------------*/\r
+\r
+int AskOSS(void)\r
+{\r
+       return(Oss);\r
+}\r
+#endif /* HAVE_TANDEM */\r
+\r
+\r
 /*----- ホストへ接続する ------------------------------------------------------\r
 *\r
 *      Parameter\r
diff --git a/doc/eng/FFFTP_hpnonstop.txt b/doc/eng/FFFTP_hpnonstop.txt
new file mode 100644 (file)
index 0000000..fc59e89
--- /dev/null
@@ -0,0 +1,67 @@
+Overview\r
+---------------------\r
+\r
+This is a supplemental document for HP NonStop Server.\r
+\r
+FFFTP supports Guardian and OSS environments. You can switch their\r
+environments.\r
+\r
+How to use ?\r
+---------------------\r
+\r
+Please specify the "NonStop Server" as "Host Type" of "Host Setting" -\r
+"Special" tab.\r
+\r
+HP NonStop Server special features are implemented in right button menu.\r
+\r
+How to switch Guardian and OSS environments ?\r
+---------------------------------------------------------------\r
+\r
+Please choose "OSS <-> Guardian Switch(O)" in right button menu at\r
+remote window.\r
+\r
+How to move VOL/SUBVOL in Guardian environment ?\r
+---------------------------------------------------------------\r
+\r
+Please input VOL/SUBVOL directly by clicking the "Change Folder" Icon\r
+(Next to Up button in remote window). Up button is ignored although\r
+the error message is not shown.\r
+\r
+- How to specify the file code for uploading to Guardian environment ?\r
+\r
+Please choose "Upload As..." in right button menu at local window.\r
+You can specify the file code at Upload As dialog.\r
+\r
+Tips for Guardian environment\r
+---------------------------------------------------------------\r
+\r
+When you upload to Guardian environment by "Filename Depend", "ASCII\r
+mode Filenames" setting is used. So it is useful that "*.c/*.h/*.config/\r
+*.pl" are added to ASCII mode Filenames of "Option - Transfer1".\r
+This is a global setting.\r
+\r
+When ASCII mode filenames are uploaded to Guardian environment, ASCII\r
+mode transfer is choosen. Otherwise, binary mode transfer is choosen.\r
+\r
+EXTENT and MAXEXTENTS\r
+---------------------------------------------------------------\r
+\r
+HP Default FTPSERV program creates a file with EXT (4,28) MAXEXTENTS 978\r
+as a default. When the file size is over than it, upload operation fails\r
+with File Full (Error 45).\r
+\r
+FFFTP calculates the EXTENT and MAXEXTENT automatically when uploading\r
+to Guardian environment with binary mode transfer.\r
+\r
+Target used ratio is 75 % and MAXEXTENTS is maximum (978). But NonStop\r
+NS Series or later adjusts the EXTENT and MAXEXTENTS when it is not\r
+multiples of 14. So it may be that the target used ratio is not accurate.\r
+\r
+When you wonder the EXTENT and MAXEXTENT size, you can see the calculated\r
+size by FFFTP at console window as the follows.\r
+\r
+  STOR Filename,FileCode,Primary,Secondary,MaxExtents\r
+\r
+When an append mode transfer is used, EXTENT and MAXEXTENS are not\r
+specified. This is a limitation at this version.\r
+\r
diff --git a/doc/jpn/FFFTP_hpnonstop.txt b/doc/jpn/FFFTP_hpnonstop.txt
new file mode 100644 (file)
index 0000000..ddc7a03
--- /dev/null
@@ -0,0 +1,60 @@
+\81\9c\8aT\97v\r
+\r
+HP NonStop Server \91Î\89\9e\82Ì\95â\91«\83h\83L\83\85\83\81\83\93\83g\82Å\82·\r
+\r
+Guardian & OSS \82Ì\97¼\95û\82É\91Î\89\9e\82µ\82Ä\82¨\82è\81A\90Ø\82è\91Ö\82¦\82ª\82Å\82«\82Ü\82·\r
+\r
+\81\9c\8eg\82¢\95û\r
+\r
+HP NonStop Server \82Ì\8fê\8d\87\82Í\81u\83z\83X\83g\90Ý\92è\81¨\8d\82\93x\81v\82©\82ç\81u\83z\83X\83g\82Ì\8eí\97Þ\81v\82Å\r
+NonStop Server \82ð\91I\82ñ\82Å\82­\82¾\82³\82¢\81BNonStop Server\93Á\97L\82Ì\93®\8dì\82Í\89E\83{\83^\83\93\r
+\83\81\83j\83\85\81[\82Æ\82µ\82Ä\8eÀ\91\95\82³\82ê\82Ä\82¢\82Ü\82·\81B\r
+\r
+- Guardian \82Æ OSS \82ð\90Ø\82è\91Ö\82¦\82é\r
+\r
+\83\8a\83\82\81[\83g\83\8a\83X\83g\82ª\95\\8e¦\82³\82ê\82Ä\82¢\82é\83E\83B\83\93\83h\83E\82Å\89E\83{\83^\83\93\82ð\89\9f\82·\82Æ\95\\8e¦\82³\82ê\82é\r
+\83\81\83j\83\85\81[\82©\82ç\81uOSS<->Guardian \90Ø\82è\91Ö\82¦\81v\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+\r
+- Guardian \8aÂ\8b«\82Å VOL/SUBVOL\82ð\90Ø\82è\91Ö\82¦\82é\r
+\r
+\83f\83B\83\8c\83N\83g\83\8a\82Ì\92¼\90Ú\88Ú\93®\82Ì\83A\83C\83R\83\93(\8fã\82Ì\83f\83B\83\8c\83N\83g\83\8a\82Ì\83A\83C\83R\83\93\82Ì\97×)\82ð\89\9f\r
+\82µ\82Ä$VOL.SUBVOL\82ð\92¼\90Ú\93ü\97Í\82µ\82Ä\82­\82¾\82³\82¢\81B\8fã\82Ì\83f\83B\83\8c\83N\83g\83\8a\83A\83C\83R\83\93\82Í(\89\9f\r
+\82¹\82Ü\82·\82ª)\93®\8dì\82µ\82Ü\82¹\82ñ\81B\r
+\r
+- Guardian \8aÂ\8b«\82Ö\83A\83b\83v\83\8d\81[\83h\82·\82é\82Æ\82«\82Ì\83t\83@\83C\83\8b\83R\81[\83h\82ð\8ew\92è\82·\82é\r
+\r
+\83\8d\81[\83J\83\8b\83\8a\83X\83g\82ª\95\\8e¦\82³\82ê\82Ä\82¢\82é\83E\83B\83\93\83h\83E\82Å\89E\83{\83^\83\93\82ð\89\9f\82·\82Æ\95\\8e¦\82³\82ê\82é\83\81\r
+\83j\83\85\81[\82©\82ç\81u\96¼\91O\82ð\95Ï\8dX\82µ\82Ä\83A\83b\83v\83\8d\81[\83h\81v\82ð\91I\91ð\82·\82é\82Æ\83t\83@\83C\83\8b\83R\81[\83h\82ð\8ew\r
+\92è\82µ\82Ä\83A\83b\83v\83\8d\81[\83h\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\r
+\r
+- Guardian \8aÂ\8b«\82Å\95Ö\97\98\82É\8eg\82¤\82É\82Í\r
+\r
+\81u\8aÂ\8b«\90Ý\92è\81¨\93]\91\971\81v\82Å\81u\83A\83X\83L\81[\83\82\81[\83h\82Ì\83t\83@\83C\83\8b\96¼\81v\82É\81u*.c/*.h/*.config/\r
+*.pl\81v\82ð\92Ç\89Á\82µ\82Ä\82¨\82­\82ÆGuardian\8aÂ\8b«\82É\83A\83b\83v\83\8d\81[\83h\82·\82é\82Æ\82«\8e©\93®\94»\95Ê\93]\91\97\82Å\83A\r
+\83X\83L\81[\83\82\81[\83h\82É\82È\82è\81A\83t\83@\83C\83\8b\83R\81[\83h\82ª101\82É\82È\82è\82Ü\82·\82Ì\82Å\92Ç\89Á\82µ\82Ä\82¨\82­\82±\82Æ\82ð\r
+\82¨\8a©\82ß\82µ\82Ü\82·\81B\83_\83E\83\93\83\8d\81[\83h\8e\9e\82Í\83t\83@\83C\83\8b\83R\81[\83h\82ð\82Ý\82Ä\83t\83@\83C\83\8b\83R\81[\83h\82ª101\82È\r
+\82ç ASCII \83\82\81[\83h\81A\82»\82ê\88È\8aO\82È\82ç\83o\83C\83i\83\8a\83\82\81[\83h\82Å\93]\91\97\82³\82ê\82Ü\82·\81B\r
+\r
+\81\9cEXTENT\83T\83C\83Y\82ÆMAXEXTENT\83T\83C\83Y\82É\82Â\82¢\82Ä\r
+\r
+FTP\83v\83\8d\83g\83R\83\8b\82ÅGuardian\8aÂ\8b«\82É\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é\82Æ\82«FTP\83T\81[\83o\82ª\83f\r
+\83t\83H\83\8b\83g\82Å EXT (4,28) MAXEXTENTS 978 \82Ì\83t\83@\83C\83\8b\82ð\8dì\90¬\82µ\82Ü\82·\81B\82±\82ê\82ð\92´\82¦\r
+\82é\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82µ\82æ\82¤\82Æ\82·\82é\82Æ File Full (Error 45) \82Æ\82È\82è\82Ü\82·\81B\r
+\r
+FFFTP\82Å\82ÍGuardian\8aÂ\8b«\82É\83o\83C\83i\83\8a\83\82\81[\83h\82Å\83t\83@\83C\83\8b\82ð\83A\83b\83v\83\8d\81[\83h\82·\82é\82Æ\82«\82É\r
+EXTENT\83T\83C\83Y\82ÆMAXEXTENT\83T\83C\83Y\82ð\8e©\93®\8cv\8eZ\82µ\82Ä\83A\83b\83v\83\8d\81[\83h\82·\82é\82æ\82¤\82É\82È\82Á\82Ä\r
+\82¢\82Ü\82·\81B\r
+\r
+MAXEXTENTS\82Í\8dÅ\91å(978)\81A75%\82Ì\8eg\97p\97¦\82ð\96Ú\8ew\82µ\82Ä\8cv\8eZ\82µ\82Ä\82¢\82Ü\82·\82ª NS Series\r
+\88È\8d~\82ÍEXTENT\83T\83C\83Y\82ª14\82Ì\94{\90\94\82Å\82È\82¢\82Æ\82«\81A\83V\83X\83e\83\80\91¤\82Å\8e©\93®\93I\82ÉEXTENT\83T\83C\r
+\83Y\82âMAXEXTENT\83T\83C\83Y\82Ì\92²\90®\82ð\8ds\82¢\82Ü\82·\81B\95K\82¸\82µ\82à\8ew\92è\82³\82ê\82½EXTENT\82Å\8dì\90¬\82³\82ê\r
+\82é\82í\82¯\82Å\82Í\82 \82è\82Ü\82¹\82ñ\82Ì\82Å\82²\97¯\88Ó\82­\82¾\82³\82¢\81B\r
+\r
+\82È\82¨\81A\8cv\8eZ\82µ\82½EXT\81AMAXEXTENT\83T\83C\83Y\82Í\83R\83\93\83\\81[\83\8b\83E\83B\83\93\83h\83E\82Å\88È\89º\82Ì\82æ\82¤\82É\r
+\95\\8e¦\82³\82ê\82Ä\82¢\82Ü\82·\81B\8cv\8eZ\8c\8b\89Ê\82ª\8bC\82É\82È\82é\95û\82Í\82²\8am\94F\82­\82¾\82³\82¢\81B\r
+\r
+STOR \83t\83@\83C\83\8b\96¼,FileCode,Primary,Secondary,MaxExtents\r
+\r
+\83t\83@\83C\83\8b\82ð\8dÄ\8dì\90¬\82µ\82È\82¢\82ÆEXTENT\83T\83C\83Y\82Í\95Ï\8dX\82Å\82«\82È\82¢\82½\82ß\81A\92Ç\8bL\83\82\81[\83h\82Å\82Í\r
+\8e©\93®\8cv\8eZ\82µ\82È\82¢\82æ\82¤\82É\82È\82Á\82Ä\82¢\82Ü\82·\81B\r
+\r
index 0592d10..be49252 100644 (file)
@@ -898,6 +898,11 @@ static LRESULT FileListCommonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPA
  \r
                                        } \r
  \r
+#if defined(HAVE_TANDEM)\r
+                                       if(FileListBaseNoExpand == NULL)\r
+                                               pf = FileListBase;\r
+                                       else\r
+#endif\r
                                        pf = FileListBaseNoExpand;\r
                                        for (filenum = 0; pf ; filenum++) {\r
                                                pf = pf->Next;\r
@@ -1507,6 +1512,11 @@ static void AddDispFileList(FLISTANCHOR *Anchor, char *Name, FILETIME *Time, LON
                        {\r
                                if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
                                        ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) < 0)) ||\r
+#if defined(HAVE_TANDEM)\r
+                                  ((AskHostType() == HTYPE_TANDEM) &&\r
+                                   ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+                                       ((Cmp = Attr - Pos->Attr) < 0)) ||\r
+#endif\r
                                   (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
                                        ((Cmp = Size - Pos->Size) < 0)) ||\r
                                   (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
@@ -1525,6 +1535,11 @@ static void AddDispFileList(FLISTANCHOR *Anchor, char *Name, FILETIME *Time, LON
                        {\r
                                if((((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
                                        ((Cmp = _mbsicmp(GetFileExt(Name), GetFileExt(Pos->File))) > 0)) ||\r
+#if defined(HAVE_TANDEM)\r
+                                  ((AskHostType() == HTYPE_TANDEM) &&\r
+                                   ((Sort & SORT_MASK_ORD) == SORT_EXT) &&\r
+                                       ((Cmp = Attr - Pos->Attr) > 0)) ||\r
+#endif\r
                                   (((Sort & SORT_MASK_ORD) == SORT_SIZE) &&\r
                                        ((Cmp = Size - Pos->Size) > 0)) ||\r
                                   (((Sort & SORT_MASK_ORD) == SORT_DATE) &&\r
@@ -1705,6 +1720,12 @@ static void AddListView(HWND hWnd, int Pos, char *Name, int Type, LONGLONG Size,
        LvItem.mask = LVIF_TEXT;\r
        LvItem.iItem = Pos;\r
        LvItem.iSubItem = 3;\r
+#if defined(HAVE_TANDEM)\r
+       if (AskHostType() == HTYPE_TANDEM) {\r
+               _itoa_s(Attr, Tmp, sizeof(Tmp), 10);\r
+               LvItem.pszText = Tmp;\r
+       } else\r
+#endif\r
        LvItem.pszText = GetFileExt(Name);\r
        LvItem.iItem = SendMessage(hWnd, LVM_SETITEM, 0, (LPARAM)&LvItem);\r
 \r
@@ -1712,7 +1733,11 @@ static void AddListView(HWND hWnd, int Pos, char *Name, int Type, LONGLONG Size,
        {\r
                /* 属性 */\r
                strcpy(Tmp, "");\r
+#if defined(HAVE_TANDEM)\r
+               if((InfoExist & FINFO_ATTR) && (AskHostType() != HTYPE_TANDEM))\r
+#else\r
                if(InfoExist & FINFO_ATTR)\r
+#endif\r
                        AttrValue2String(Attr, Tmp);\r
                LvItem.mask = LVIF_TEXT;\r
                LvItem.iItem = Pos;\r
@@ -2337,6 +2362,13 @@ int GetNodeSize(int Win, int Pos, LONGLONG *Buf)
        SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)&LvItem);\r
        *Buf = -1;\r
        Ret = NO;\r
+#if defined(HAVE_TANDEM)\r
+       if(AskHostType() == HTYPE_TANDEM) {\r
+               RemoveComma(Tmp);\r
+               *Buf = _atoi64(Tmp);\r
+               Ret = YES;\r
+       } else\r
+#endif\r
        if(strlen(Tmp) > 0)\r
        {\r
                RemoveComma(Tmp);\r
@@ -2371,12 +2403,22 @@ int GetNodeAttr(int Win, int Pos, int *Buf)
        {\r
                LvItem.mask = LVIF_TEXT;\r
                LvItem.iItem = Pos;\r
+#if defined(HAVE_TANDEM)\r
+               if(AskHostType() == HTYPE_TANDEM)\r
+                       LvItem.iSubItem = 3;\r
+               else\r
+#endif\r
                LvItem.iSubItem = 4;\r
                LvItem.pszText = Tmp;\r
                LvItem.cchTextMax = 20;\r
                SendMessage(GetRemoteHwnd(), LVM_GETITEM, 0, (LPARAM)&LvItem);\r
                if(strlen(Tmp) > 0)\r
                {\r
+#if defined(HAVE_TANDEM)\r
+                       if(AskHostType() == HTYPE_TANDEM)\r
+                               *Buf = atoi(Tmp);\r
+                       else\r
+#endif\r
                        *Buf = AttrString2Value(Tmp);\r
                        Ret = YES;\r
                }\r
@@ -2679,10 +2721,19 @@ void MakeDroppedFileList(WPARAM wParam, char *Cur, FILELIST **Base)
                        strcpy(Pkt.File, GetFileName(Name));\r
 \r
                        memset(&Pkt.Time, 0, sizeof(FILETIME));\r
+#if defined(HAVE_TANDEM)\r
+                       /* Guardian スペースへのアップロードのためにサイズが必要 */\r
+                       Pkt.Size = 0;\r
+                       Pkt.InfoExist = 0;\r
+#endif\r
                        if((fHnd = FindFirstFile(Name, &Find)) != INVALID_HANDLE_VALUE)\r
                        {\r
                                FindClose(fHnd);\r
                                Pkt.Time = Find.ftLastWriteTime;\r
+#if defined(HAVE_TANDEM)\r
+                               Pkt.Size = MakeLongLong(Find.nFileSizeHigh, Find.nFileSizeLow);\r
+                               Pkt.InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE);\r
+#endif\r
                        }\r
                        AddFileList(&Pkt, Base);\r
                }\r
@@ -3713,6 +3764,20 @@ static int AnalizeFileInfo(char *Str)
                                }\r
                        }\r
                }\r
+#if defined(HAVE_TANDEM)\r
+               /* 以下のフォーマットをチェック */\r
+               /* LIST_TANDEM */\r
+\r
+               /* OSS の場合は自動判別可能のため Ret == LIST_UNKNOWN のチェックは後 */\r
+               if(AskRealHostType() == HTYPE_TANDEM) {\r
+                       if(Ret == LIST_UNKNOWN) {\r
+                               SetOSS(NO);\r
+                               Ret = LIST_TANDEM;\r
+                       } else {\r
+                               SetOSS(YES);\r
+                       }\r
+               }\r
+#endif\r
 \r
                // MLSD対応\r
                if(Ret == LIST_UNKNOWN)\r
@@ -4719,6 +4784,66 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
                        }\r
                        break;\r
 \r
+#if defined(HAVE_TANDEM)\r
+               case LIST_TANDEM :\r
+                       *InfoExist |= (FINFO_TIME | FINFO_DATE | FINFO_SIZE | FINFO_ATTR);\r
+                       /* Open 中だったらずらす */\r
+                       if(FindField(Str, Buf, 1, NO) != FFFTP_SUCCESS)\r
+                               break;\r
+                       if (!strncmp(Buf, "O", 1)) {\r
+                               offs = 1;\r
+                       }\r
+                       /* 日付 */\r
+                       if(FindField(Str, Buf, 3 + offs, NO) != FFFTP_SUCCESS)\r
+                               break;\r
+                       if (Buf[1] == '-') {  /* 日付が 1桁 */\r
+                               sTime.wYear = Assume1900or2000(atoi(Buf + 6));\r
+                               Buf[5] = 0;\r
+                               GetMonth(Buf+2, &sTime.wMonth, &sTime.wDay);    /* wDayは常に0 */\r
+                               sTime.wDay = atoi(Buf);\r
+                               sTime.wDayOfWeek = 0;\r
+                       } else {\r
+                               sTime.wYear = Assume1900or2000(atoi(Buf + 7));\r
+                               Buf[6] = 0;\r
+                               GetMonth(Buf+3, &sTime.wMonth, &sTime.wDay);    /* wDayは常に0 */\r
+                               sTime.wDay = atoi(Buf);\r
+                               sTime.wDayOfWeek = 0;\r
+                       }\r
+                       /* 時刻 */\r
+                       FindField(Str, Buf, 4 + offs, NO);\r
+                       sTime.wHour = atoi(Buf);\r
+                       sTime.wMinute = atoi(Buf+3);\r
+                       sTime.wSecond = atoi(Buf+6);\r
+                       sTime.wMilliseconds = 0;\r
+                       SystemTimeToFileTime(&sTime, Time);\r
+                       SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());\r
+\r
+                       /* 属性 セキュリティではなく FileCode を保存する */\r
+                       FindField(Str, Buf, 1 + offs, NO);\r
+                       *Attr = atoi(Buf);\r
+                       /* サイズ */\r
+                       FindField(Str, Buf, 2 + offs, NO);\r
+                       *Size = _atoi64(Buf);\r
+                       /* オーナ名 */\r
+                       if(FindField(Str, Buf, 5 + offs, NO) == FFFTP_SUCCESS) {\r
+                               if(strncmp(Buf, "Owner", sizeof("Owner"))) {\r
+                                       memset(Owner, NUL, OWNER_NAME_LEN+1);\r
+                                       strncpy(Owner, Buf, OWNER_NAME_LEN);\r
+                                       /* 通常は 255,255 だが、20, 33 などにも対応する */\r
+                                       /* 最後の文字が , だったら後ろとつなげる */\r
+                                       if (Buf[strlen(Buf)-1] == ',') {\r
+                                               FindField(Str, Buf, 6 + offs, NO);\r
+                                               strncat(Owner, Buf, OWNER_NAME_LEN - strlen(Buf));\r
+                                       }\r
+                                       /* ファイル名 */\r
+                                       if(FindField(Str, Fname, 0, NO) == FFFTP_SUCCESS) {\r
+                                               Ret = NODE_FILE;\r
+                                       }\r
+                               }\r
+                       }\r
+                       break;\r
+#endif\r
+\r
                case LIST_UNIX_10 :\r
                case LIST_UNIX_11 :\r
                case LIST_UNIX_12 :\r
index 3e76a49..8963604 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -75,6 +75,9 @@ static int AskUpLoadFileAttr(char *Fname);
 // 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
 // 64ビット対応\r
@@ -109,6 +112,9 @@ extern int CancelFlg;
 /*===== ローカルなワーク =====*/\r
 \r
 static char TmpString[FMAX_PATH+80];           /* テンポラリ */\r
+#if defined(HAVE_TANDEM)\r
+static char TmpFileCode[5];            /* テンポラリ */\r
+#endif\r
 static int CurWin;                                             /* ウインドウ番号 */\r
 \r
 int UpExistMode = EXIST_OVW;           /* アップロードで同じ名前のファイルがある時の扱い方 EXIST_xxx */\r
@@ -217,6 +223,19 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                }\r
 \r
                                strcpy(Pkt.Cmd, "RETR ");\r
+#if defined(HAVE_TANDEM)\r
+                               if(AskHostType() == HTYPE_TANDEM) {\r
+                                       if(AskTransferType() != TYPE_X) {\r
+                                               Pkt.Type = AskTransferType();\r
+                                       } else {\r
+                                               Pkt.Attr = Pos->Attr;\r
+                                               if (Pkt.Attr == 101)\r
+                                                       Pkt.Type = TYPE_A;\r
+                                               else\r
+                                                       Pkt.Type = TYPE_I;\r
+                                       }\r
+                               } else\r
+#endif\r
                                Pkt.Type = AskTransferTypeAssoc(Pkt.RemoteFile, AskTransferType());\r
                                Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
@@ -911,12 +930,29 @@ void UpLoadListProc(int ChName, int All)
                                        _mbslwr(Cat);\r
                                else if(FnameCnv == FNAME_UPPER)\r
                                        _mbsupr(Cat);\r
+#if defined(HAVE_TANDEM)\r
+                               Pkt.FileCode = 0;\r
+                               Pkt.PriExt = DEF_PRIEXT;\r
+                               Pkt.SecExt = DEF_SECEXT;\r
+                               Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
                        }\r
                        else\r
                        {\r
                                // 名前を変更する\r
                                strcpy(TmpString, Pos->File);\r
                                CurWin = WIN_LOCAL;\r
+#if defined(HAVE_TANDEM)\r
+                               strcpy(TmpFileCode, "0"); /* ASCII モードの場合は無視される */\r
+                               if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO) {\r
+                                       if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_with_ext_dlg), GetMainHwnd(), UpDownAsWithExtDialogCallBack) == YES) {\r
+                                               strcat(Pkt.RemoteFile, TmpString);\r
+                                               Pkt.FileCode = atoi(TmpFileCode);\r
+                                       } else {\r
+                                               break;\r
+                                       }\r
+                               } else\r
+#endif\r
                                if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(updown_as_dlg), GetMainHwnd(), UpDownAsDialogCallBack) == YES)\r
                                        strcat(Pkt.RemoteFile, TmpString);\r
                                else\r
@@ -985,6 +1021,11 @@ void UpLoadListProc(int ChName, int All)
                                // 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
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
@@ -1079,6 +1120,12 @@ void UpLoadDragProc(WPARAM wParam)
                        else if(FnameCnv == FNAME_UPPER)\r
                                _mbsupr(Cat);\r
                        ReplaceAll(Pkt.RemoteFile, '\\', '/');\r
+#if defined(HAVE_TANDEM)\r
+                       Pkt.FileCode = 0;\r
+                       Pkt.PriExt = DEF_PRIEXT;\r
+                       Pkt.SecExt = DEF_SECEXT;\r
+                       Pkt.MaxExt = DEF_MAXEXT;\r
+#endif\r
 \r
                        if(AskHostType() == HTYPE_ACOS)\r
                        {\r
@@ -1140,6 +1187,12 @@ void UpLoadDragProc(WPARAM wParam)
                                // 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
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                if(Pkt.Mode == EXIST_ABORT)\r
                                        break;\r
@@ -1411,6 +1464,11 @@ void MirrorUploadProc(int Notify)
                                                // 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
                                                AddTmpTransFileList(&Pkt, &Base);\r
                                        }\r
@@ -1815,13 +1873,26 @@ static int AskUpLoadFileAttr(char *Fname)
 static int CheckRemoteFile(TRANSPACKET *Pkt, FILELIST *ListList)\r
 {\r
        int Ret;\r
+#if defined(HAVE_TANDEM)\r
+       int Mode;\r
+#endif\r
        FILELIST *Exist;\r
 \r
        Ret = EXIST_OVW;\r
        Pkt->ExistSize = 0;\r
        if(SendMode != TRANS_OVW)\r
        {\r
+#if defined(HAVE_TANDEM)\r
+               /* HP NonStop Server は大文字小文字の区別なし(すべて大文字) */\r
+               if(AskHostType() == HTYPE_TANDEM)\r
+                       Mode = COMP_IGNORE;\r
+               else\r
+                       Mode = COMP_STRICT;\r
+\r
+               if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, Mode)) != NULL)\r
+#else\r
                if((Exist = SearchFileList(GetFileName(Pkt->RemoteFile), ListList, COMP_STRICT)) != NULL)\r
+#endif\r
                {\r
                        Pkt->ExistSize = Exist->Size;\r
 \r
@@ -1965,6 +2036,57 @@ static INT_PTR CALLBACK UpDownAsDialogCallBack(HWND hDlg, UINT iMessage, WPARAM
 }\r
 \r
 \r
+#if defined(HAVE_TANDEM)\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
+static INT_PTR CALLBACK UpDownAsWithExtDialogCallBack(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
+                       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
+                       switch(GET_WM_COMMAND_ID(wParam, lParam))\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
+                               case UPDOWNAS_STOP :\r
+                                       EndDialog(hDlg, NO_ALL);\r
+                                       break;\r
+                       }\r
+            return(TRUE);\r
+       }\r
+       return(FALSE);\r
+}\r
+#endif\r
+\r
+\r
 /*----- ファイル一覧で指定されたファイルを削除する ----------------------------\r
 *\r
 *      Parameter\r
index 6c7a2a7..28c2471 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -2286,6 +2286,12 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
                        if (AskHostType() == HTYPE_VMS)\r
                                return;\r
 #endif\r
+#if defined(HAVE_TANDEM)\r
+                       /* HP Nonstop Server の場合、ファイルのない subvol へ移動すると550 File not found\r
+                        * になるが問題ないのでエラーダイアログやエラーメッセージを出さないため */\r
+                       if (AskHostType() == HTYPE_TANDEM)\r
+                               return;\r
+#endif\r
 \r
                        if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))\r
                        {\r
@@ -2636,6 +2642,16 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
        {\r
                SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);\r
                if(Resume == NO)\r
+#if defined(HAVE_TANDEM)\r
+                       if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO && Pkt->Type != TYPE_A) {\r
+                               if( Pkt->PriExt == DEF_PRIEXT && Pkt->SecExt == DEF_SECEXT && Pkt->MaxExt == DEF_MAXEXT) {\r
+                                       // EXTENTがデフォルトのときはコードのみ\r
+                                       sprintf(Buf, "%s%s,%d", Pkt->Cmd, Pkt->RemoteFile, Pkt->FileCode);\r
+                               } else {\r
+                                       sprintf(Buf, "%s%s,%d,%d,%d,%d", Pkt->Cmd, Pkt->RemoteFile, Pkt->FileCode, Pkt->PriExt, Pkt->SecExt, Pkt->MaxExt);\r
+                               }\r
+                       } else\r
+#endif\r
                        sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);\r
                else\r
                        sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);\r
@@ -2779,6 +2795,16 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
 \r
                                SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);\r
                                if(Resume == NO)\r
+#if defined(HAVE_TANDEM)\r
+                                       if(AskHostType() == HTYPE_TANDEM && AskOSS() == NO && Pkt->Type != TYPE_A) {\r
+                                               if( Pkt->PriExt == DEF_PRIEXT && Pkt->SecExt == DEF_SECEXT && Pkt->MaxExt == DEF_MAXEXT) {\r
+                                                       // EXTENTがデフォルトのときはコードのみ\r
+                                                       sprintf(Buf, "%s%s,%d", Pkt->Cmd, Pkt->RemoteFile, Pkt->FileCode);\r
+                                               } else {\r
+                                                       sprintf(Buf, "%s%s,%d,%d,%d,%d", Pkt->Cmd, Pkt->RemoteFile, Pkt->FileCode, Pkt->PriExt, Pkt->SecExt, Pkt->MaxExt);\r
+                                               }\r
+                                       } else\r
+#endif\r
                                        sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);\r
                                else\r
                                        sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);\r
index 31b75a2..0249d1a 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -2130,8 +2130,15 @@ static INT_PTR CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                        SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN144);\r
                        SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN289);\r
                        SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN295);\r
+#if defined(HAVE_TANDEM)\r
+                       SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN2000);\r
+#endif\r
                        SendDlgItemMessage(hDlg, HSET_HOSTTYPE, CB_SETCURSEL, TmpHost.HostType, 0);\r
+#if defined(HAVE_TANDEM)\r
+                       if(TmpHost.HostType == 2 || TmpHost.HostType == HTYPE_TANDEM)  /* VAX or Tandem */\r
+#else\r
                        if(TmpHost.HostType == 2)\r
+#endif\r
                        {\r
                                EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);\r
                                EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);\r
@@ -2200,12 +2207,34 @@ static INT_PTR CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                                                EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);\r
                                                EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), FALSE);\r
                                        }\r
+#if defined(HAVE_TANDEM)\r
+                                       else if(Num == HTYPE_TANDEM) /* Tandem */\r
+                                       {\r
+                                               /* Tandem を選択すると自動的に LIST にチェックをいれる */\r
+                                               SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_SETCHECK, 1, 0);\r
+                                               EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);\r
+                                               EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), FALSE);\r
+                                               EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), FALSE);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               if(SendDlgItemMessage(hDlg, HSET_LISTCMD, BM_GETCHECK, 0, 0) == 0) {\r
+                                                       EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);\r
+                                                       EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);\r
+                                               } else {\r
+                                                       EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), FALSE);\r
+                                                       EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);\r
+                                               }\r
+                                               EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), TRUE);\r
+                                       }\r
+#else\r
                                        else\r
                                        {\r
                                                EnableWindow(GetDlgItem(hDlg, HSET_NLST_R), TRUE);\r
                                                EnableWindow(GetDlgItem(hDlg, HSET_LISTCMD), TRUE);\r
                                                EnableWindow(GetDlgItem(hDlg, HSET_FULLPATH), TRUE);\r
                                        }\r
+#endif\r
                                        break;\r
                        }\r
                        return(TRUE);\r
diff --git a/main.c b/main.c
index f48ce74..51d8b35 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1407,6 +1407,12 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                                LocalRbuttonMenu(1);\r
                                        break;\r
 \r
+#if defined(HAVE_TANDEM)\r
+                               case MENU_SWITCH_OSS :\r
+                                       SwitchOSSProc();\r
+                                       break;\r
+#endif\r
+\r
                                default :\r
                                        if((LOWORD(wParam) >= MENU_BMARK_TOP) &&\r
                                           (LOWORD(wParam) < MENU_BMARK_TOP+100))\r
@@ -1449,7 +1455,15 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                                case MENU_DOWNLOAD :\r
                                                        lpttt->lpszText = MSGJPN157;\r
                                                        break;\r
+#if defined(HAVE_TANDEM)\r
+                                               case MENU_DOWNLOAD_AS :\r
+                                                       lpttt->lpszText = MSGJPN065;\r
+                                                       break;\r
 \r
+                                               case MENU_UPLOAD_AS :\r
+                                                       lpttt->lpszText = MSGJPN064;\r
+                                                       break;\r
+#endif\r
                                                case MENU_UPLOAD :\r
                                                        lpttt->lpszText = MSGJPN158;\r
                                                        break;\r
index fce4785..fb2cfe5 100644 (file)
 #define MSGJPN336              "Overwrite all later"\r
 #define MSGJPN337              "Resume all later"\r
 #define MSGJPN338              "Skip all"\r
+#if defined(HAVE_TANDEM)\r
+#define MSGJPN2000             "NonStop Server"\r
+#define MSGJPN2001             "OSS<->GUARDIAN Switch(&O)"\r
+#endif\r
index fbb560f..968c8f0 100644 (file)
 #define MSGJPN336              "Overwrite all later"\r
 #define MSGJPN337              "Resume all later"\r
 #define MSGJPN338              "Skip all"\r
+#if defined(HAVE_TANDEM)\r
+#define MSGJPN2000             "NonStop Server"\r
+#define MSGJPN2001             "OSS<->GUARDIAN Switch(&O)"\r
+#endif\r
index 02e3e6c..eb20898 100644 (file)
 #define MSGJPN336              "\xE5\x85\xA8\xE3\x81\xA6\xE5\xBE\x8C\xE3\x81\xA7\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D"\r
 #define MSGJPN337              "\xE5\x85\xA8\xE3\x81\xA6\xE5\xBE\x8C\xE3\x81\xA7\xE3\x83\xAA\xE3\x82\xB8\xE3\x83\xA5\xE3\x83\xBC\xE3\x83\xA0"\r
 #define MSGJPN338              "\xE5\x85\xA8\xE3\x81\xA6\xE3\x82\xB9\xE3\x82\xAD\xE3\x83\x83\xE3\x83\x97"\r
+#if defined(HAVE_TANDEM)\r
+#define MSGJPN2000              "NonStop Server"\r
+#define MSGJPN2001              "OSS<->GUARDIAN \xE5\x88\x87\xE3\x82\x8A\xE6\x9B\xBF\xE3\x81\x88(&O)"\r
+#endif\r
index 68a8a23..7f48fcb 100644 (file)
 #define MSGJPN336              "\91S\82Ä\8cã\82Å\8fã\8f\91\82«"\r
 #define MSGJPN337              "\91S\82Ä\8cã\82Å\83\8a\83W\83\85\81[\83\80"\r
 #define MSGJPN338              "\91S\82Ä\83X\83L\83b\83v"\r
+#if defined(HAVE_TANDEM)\r
+#define MSGJPN2000              "NonStop Server"\r
+#define MSGJPN2001              "OSS<->GUARDIAN \90Ø\82è\91Ö\82¦(&O)"\r
+#endif\r
diff --git a/misc.c b/misc.c
index 5489e66..67ccd91 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -318,6 +318,13 @@ void RemoveYenTail(char *Str)
 \r
 void SetSlashTail(char *Str)\r
 {\r
+#if defined(HAVE_TANDEM)\r
+    /* Tandem では / の代わりに . を追加 */\r
+       if(AskHostType() == HTYPE_TANDEM) {\r
+               if(_mbscmp(_mbsninc(Str, _mbslen(Str) - 1), ".") != 0)\r
+                       strcat(Str, ".");\r
+       } else\r
+#endif\r
        if(_mbscmp(_mbsninc(Str, _mbslen(Str) - 1), "/") != 0)\r
                strcat(Str, "/");\r
 \r
@@ -364,6 +371,12 @@ void ReplaceAll(char *Str, char Src, char Dst)
 {\r
        char *Pos;\r
 \r
+/* Tandem ではノード名の変換を行わない */\r
+/* 最初の1文字が \ でもそのままにする */\r
+#if defined(HAVE_TANDEM)\r
+       if (AskRealHostType() == HTYPE_TANDEM && strlen(Str) > 0)\r
+               Str++;\r
+#endif\r
        while((Pos = _mbschr(Str, Src)) != NULL)\r
                *Pos = Dst;\r
        return;\r
@@ -597,6 +610,11 @@ char *GetFileName(char *Path)
        if((Pos = _mbsrchr(Path, '/')) != NULL)\r
                Path = Pos + 1;\r
 \r
+#if defined(HAVE_TANDEM)\r
+       /* Tandem は . がデリミッタとなる */\r
+       if((AskHostType() == HTYPE_TANDEM) && ((Pos = _mbsrchr(Path, '.')) != NULL))\r
+               Path = Pos + 1;\r
+#endif\r
        return(Path);\r
 }\r
 \r
@@ -1788,3 +1806,34 @@ char* GetAppTempPath(char* Buf)
        return Buf;\r
 }\r
 \r
+#if defined(HAVE_TANDEM)\r
+/*----- ファイルサイズからEXTENTサイズの計算を行う ----------------------------\r
+*\r
+*      Parameter\r
+*              LONGLONG Size : ファイルサイズ\r
+*\r
+*      Return Value\r
+*              なし\r
+*----------------------------------------------------------------------------*/\r
+void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size)\r
+{\r
+       LONGLONG extent;\r
+\r
+       /* EXTENTS(4,28) MAXEXTENTS 978 */\r
+       if(Size < 56025088) {\r
+               Pkt->PriExt = DEF_PRIEXT;\r
+               Pkt->SecExt = DEF_SECEXT;\r
+               Pkt->MaxExt = DEF_MAXEXT;\r
+       } else {\r
+               /* 増加余地を残すため Used 75% 近辺になるように EXTENT サイズを調整) */\r
+               extent = (LONGLONG)(Size / ((DEF_MAXEXT * 0.75) * 2048LL));\r
+               /* 28未満にすると誤差でFile Fullになる可能性がある */\r
+               if(extent < 28)\r
+                       extent = 28;\r
+\r
+               Pkt->PriExt = (int)extent;\r
+               Pkt->SecExt = (int)extent;\r
+               Pkt->MaxExt = DEF_MAXEXT;\r
+       }\r
+}\r
+#endif\r
index 6a506e4..123affa 100644 (file)
Binary files a/putty/Release/PuTTY.dll and b/putty/Release/PuTTY.dll differ
index 56da76e..bc80b07 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -685,6 +685,39 @@ int CommandProcCmd(char *Reply, char *fmt, ...)
 }\r
 \r
 \r
+#if defined(HAVE_TANDEM)\r
+/*----- OSS/Guardian ファイルシステムを切り替えるコマンドを送る ---------------\r
+*\r
+*      Parameter\r
+*              なし\r
+*\r
+*      Return Value\r
+*              なし\r
+*----------------------------------------------------------------------------*/\r
+\r
+void SwitchOSSProc(void)\r
+{\r
+       char Buf[MAX_PATH+1];\r
+\r
+       /* DoPWD でノード名の \ を保存するために OSSフラグも変更する */\r
+       if(AskOSS() == YES) {\r
+               DoQUOTE("GUARDIAN");\r
+               SetOSS(NO);\r
+       } else {\r
+               DoQUOTE("OSS");\r
+               SetOSS(YES);\r
+       }\r
+       /* Current Dir 再取得 */\r
+       if (DoPWD(Buf) == FTP_COMPLETE)\r
+               SetRemoteDirHist(Buf);\r
+       /* ファイルリスト再読み込み */\r
+       PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(REFRESH_REMOTE, 0), 0);\r
+\r
+       return;\r
+}\r
+#endif\r
+\r
+\r
 /*----- リモート側へコマンドを送りリプライを待つ(転送ソケット)---------------\r
 *\r
 *      Parameter\r
index ae530b4..217e2c9 100644 (file)
@@ -1846,9 +1846,18 @@ void RemoteRbuttonMenu(int Pos)
                AppendMenu(hMenu, MF_STRING | Flg1, MENU_DOWNLOAD_ALL, MSGJPN266);\r
                AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_DELETE, MSGJPN267);\r
                AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_RENAME, MSGJPN268);\r
+#if defined(HAVE_TANDEM)\r
+               /* HP NonStop Server では CHMOD の仕様が異なるため使用不可 */\r
+               if (AskRealHostType() != HTYPE_TANDEM)\r
+#endif\r
                AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_CHMOD, MSGJPN269);\r
                AppendMenu(hMenu, MF_STRING | Flg1, MENU_MKDIR, MSGJPN270);\r
                AppendMenu(hMenu, MF_STRING | Flg1 | Flg2, MENU_URL_COPY, MSGJPN271);\r
+#if defined(HAVE_TANDEM)\r
+               /* OSS モードのときに表示されるように AskRealHostType() を使用する */\r
+               if (AskRealHostType() == HTYPE_TANDEM)\r
+                       AppendMenu(hMenu, MF_STRING | Flg1, MENU_SWITCH_OSS, MSGJPN2001);\r
+#endif\r
                AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r
                AppendMenu(hMenu, MF_STRING | Flg1, MENU_FILESIZE, MSGJPN272);\r
                AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);\r