OSDN Git Service

Fix bugs of displaying icons in the local file list.
[ffftp/ffftp.git] / misc.c
diff --git a/misc.c b/misc.c
index ac0539c..67ccd91 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -64,7 +64,9 @@ typedef struct {
 \r
 /*===== プロトタイプ =====*/\r
 \r
-static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 \r
 /*===== 外部参照 =====*/\r
 \r
@@ -134,7 +136,9 @@ int InputDialogBox(int Res, HWND hWnd, char *Title, char *Buf, int Max, int *Flg
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
 {\r
        char Tmp[FMAX_PATH+1];\r
 \r
@@ -188,7 +192,9 @@ static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (message)\r
        {\r
@@ -224,7 +230,9 @@ BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP
 *              BOOL TRUE/FALSE\r
 *----------------------------------------------------------------------------*/\r
 \r
-BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
        switch (message)\r
        {\r
@@ -310,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
@@ -356,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
@@ -589,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
@@ -1769,3 +1795,45 @@ char* MakeDistinguishableFileName(char* Out, char* In)
        return Out;\r
 }\r
 \r
+// 環境依存の不具合対策\r
+char* GetAppTempPath(char* Buf)\r
+{\r
+       char Temp[32];\r
+       GetTempPath(MAX_PATH, Buf);\r
+       SetYenTail(Buf);\r
+       sprintf(Temp, "ffftp%08x", GetCurrentProcessId());\r
+       strcat(Buf, Temp);\r
+       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