\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
\r
static DIALOGDATA *DialogData; /* 入力ダイアログデータ */\r
static int HelpPage;\r
+// 高DPI対応\r
+static int DisplayDPIX;\r
+static int DisplayDPIY;\r
\r
\r
\r
* 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
switch (iMessage)\r
{\r
case WM_INITDIALOG :\r
+ // プロセス保護\r
+ ProtectAllEditControls(hDlg);\r
if(strlen(DialogData->Title) != 0)\r
SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)DialogData->Title);\r
SendDlgItemMessage(hDlg, INP_INPSTR, EM_LIMITTEXT, DialogData->MaxLen-1, 0);\r
* 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
* 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
\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
{\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
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
\r
void MakeSizeString(double Size, char *Buf)\r
{\r
- if(Size >= (1024*1024))\r
+ // 修正\r
+// if(Size >= (1024*1024))\r
+// {\r
+// Size /= (1024*1024);\r
+// sprintf(Buf, "%.2fM Bytes", Size);\r
+// }\r
+// else if (Size >= 1024)\r
+// {\r
+// Size /= 1024;\r
+// sprintf(Buf, "%.2fK Bytes", Size);\r
+// }\r
+// else\r
+// sprintf(Buf, "%.0f Bytes", Size);\r
+ if(Size >= 1024.0)\r
{\r
- Size /= (1024*1024);\r
- sprintf(Buf, "%.2fM Bytes", Size);\r
- }\r
- else if (Size >= 1024)\r
- {\r
- Size /= 1024;\r
- sprintf(Buf, "%.2fK Bytes", Size);\r
+ Size /= 1024.0;\r
+ if(Size >= 1024.0)\r
+ {\r
+ Size /= 1024.0;\r
+ if(Size >= 1024.0)\r
+ {\r
+ Size /= 1024.0;\r
+ if(Size >= 1024.0)\r
+ {\r
+ Size /= 1024.0;\r
+ sprintf(Buf, "%.2lfT Bytes", Size);\r
+ }\r
+ else\r
+ sprintf(Buf, "%.2lfG Bytes", Size);\r
+ }\r
+ else\r
+ sprintf(Buf, "%.2lfM Bytes", Size);\r
+ }\r
+ else\r
+ sprintf(Buf, "%.2lfK Bytes", Size);\r
}\r
else\r
- sprintf(Buf, "%.0f Bytes", Size);\r
+ sprintf(Buf, "%.0lf Bytes", Size);\r
\r
return;\r
}\r
else\r
sTime.wHour = atoi(Time + 12);\r
sTime.wMinute = atoi(Time + 14);\r
- sTime.wSecond = 0;\r
+ // タイムスタンプのバグ修正\r
+// sTime.wSecond = 0;\r
+ if(strlen(Time) >= 19)\r
+ sTime.wSecond = atoi(Time + 17);\r
+ else\r
+ sTime.wSecond = 0;\r
sTime.wMilliseconds = 0;\r
\r
SystemTimeToFileTime(&sTime, &fTime);\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist)\r
+// タイムスタンプのバグ修正\r
+//void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist)\r
+void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist, int ShowSeconds)\r
{\r
SYSTEMTIME sTime;\r
FILETIME fTime;\r
if((Time->dwLowDateTime == 0) && (Time->dwHighDateTime == 0))\r
InfoExist = 0;\r
\r
- /* "yyyy/mm/dd hh:mm" */\r
+ // タイムスタンプのバグ修正\r
+// /* "yyyy/mm/dd hh:mm" */\r
+ /* "yyyy/mm/dd hh:mm:ss" */\r
FileTimeToLocalFileTime(Time, &fTime);\r
FileTimeToSystemTime(&fTime, &sTime);\r
\r
- if(InfoExist & FINFO_DATE)\r
- sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay);\r
- else\r
- sprintf(Buf, " ");\r
-\r
- if(InfoExist & FINFO_TIME)\r
- sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute);\r
+ // タイムスタンプのバグ修正\r
+// if(InfoExist & FINFO_DATE)\r
+// sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay);\r
+// else\r
+// sprintf(Buf, " ");\r
+//\r
+// if(InfoExist & FINFO_TIME)\r
+// sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute);\r
+// else\r
+// sprintf(Buf+11, " ");\r
+ if(InfoExist & (FINFO_DATE | FINFO_TIME))\r
+ {\r
+ if(InfoExist & FINFO_DATE)\r
+ sprintf(Buf, "%04d/%02d/%02d ", sTime.wYear, sTime.wMonth, sTime.wDay);\r
+ else\r
+ sprintf(Buf, " ");\r
+ if(ShowSeconds == YES)\r
+ {\r
+ if(InfoExist & FINFO_TIME)\r
+ sprintf(Buf+11, "%2d:%02d:%02d", sTime.wHour, sTime.wMinute, sTime.wSecond);\r
+ else\r
+ sprintf(Buf+11, " ");\r
+ }\r
+ else\r
+ {\r
+ if(InfoExist & FINFO_TIME)\r
+ sprintf(Buf+11, "%2d:%02d", sTime.wHour, sTime.wMinute);\r
+ else\r
+ sprintf(Buf+11, " ");\r
+ }\r
+ }\r
else\r
- sprintf(Buf+11, " ");\r
+ Buf[0] = NUL;\r
}\r
else\r
{\r
\r
Ret = 0;\r
memset(Tmp, 0, 10);\r
- strncpy(Tmp, Str, 9);\r
-\r
- if(Tmp[0] != '-')\r
- Ret |= 0x400;\r
- if(Tmp[1] != '-')\r
- Ret |= 0x200;\r
- if(Tmp[2] != '-')\r
- Ret |= 0x100;\r
-\r
- if(Tmp[3] != '-')\r
- Ret |= 0x40;\r
- if(Tmp[4] != '-')\r
- Ret |= 0x20;\r
- if(Tmp[5] != '-')\r
- Ret |= 0x10;\r
-\r
- if(Tmp[6] != '-')\r
- Ret |= 0x4;\r
- if(Tmp[7] != '-')\r
- Ret |= 0x2;\r
- if(Tmp[8] != '-')\r
- Ret |= 0x1;\r
+ // ファイルの属性を数字で表示\r
+// strncpy(Tmp, Str, 9);\r
+//\r
+// if(Tmp[0] != '-')\r
+// Ret |= 0x400;\r
+// if(Tmp[1] != '-')\r
+// Ret |= 0x200;\r
+// if(Tmp[2] != '-')\r
+// Ret |= 0x100;\r
+//\r
+// if(Tmp[3] != '-')\r
+// Ret |= 0x40;\r
+// if(Tmp[4] != '-')\r
+// Ret |= 0x20;\r
+// if(Tmp[5] != '-')\r
+// Ret |= 0x10;\r
+//\r
+// if(Tmp[6] != '-')\r
+// Ret |= 0x4;\r
+// if(Tmp[7] != '-')\r
+// Ret |= 0x2;\r
+// if(Tmp[8] != '-')\r
+// Ret |= 0x1;\r
+ if(strlen(Str) >= 9)\r
+ {\r
+ strncpy(Tmp, Str, 9);\r
+\r
+ if(Tmp[0] != '-')\r
+ Ret |= 0x400;\r
+ if(Tmp[1] != '-')\r
+ Ret |= 0x200;\r
+ if(Tmp[2] != '-')\r
+ Ret |= 0x100;\r
+\r
+ if(Tmp[3] != '-')\r
+ Ret |= 0x40;\r
+ if(Tmp[4] != '-')\r
+ Ret |= 0x20;\r
+ if(Tmp[5] != '-')\r
+ Ret |= 0x10;\r
+\r
+ if(Tmp[6] != '-')\r
+ Ret |= 0x4;\r
+ if(Tmp[7] != '-')\r
+ Ret |= 0x2;\r
+ if(Tmp[8] != '-')\r
+ Ret |= 0x1;\r
+ }\r
+ else if(strlen(Str) >= 3)\r
+ {\r
+ strncpy(Tmp, Str, 3);\r
+ Ret = strtol(Tmp, NULL, 16);\r
+ }\r
\r
return(Ret);\r
}\r
* int 値\r
*----------------------------------------------------------------------------*/\r
\r
-void AttrValue2String(int Attr, char *Buf)\r
+// ファイルの属性を数字で表示\r
+//void AttrValue2String(int Attr, char *Buf)\r
+void AttrValue2String(int Attr, char *Buf, int ShowNumber)\r
{\r
- strcpy(Buf, "---------");\r
-\r
- if(Attr & 0x400)\r
- Buf[0] = 'r';\r
- if(Attr & 0x200)\r
- Buf[1] = 'w';\r
- if(Attr & 0x100)\r
- Buf[2] = 'x';\r
-\r
- if(Attr & 0x40)\r
- Buf[3] = 'r';\r
- if(Attr & 0x20)\r
- Buf[4] = 'w';\r
- if(Attr & 0x10)\r
- Buf[5] = 'x';\r
-\r
- if(Attr & 0x4)\r
- Buf[6] = 'r';\r
- if(Attr & 0x2)\r
- Buf[7] = 'w';\r
- if(Attr & 0x1)\r
- Buf[8] = 'x';\r
+ // ファイルの属性を数字で表示\r
+// strcpy(Buf, "---------");\r
+//\r
+// if(Attr & 0x400)\r
+// Buf[0] = 'r';\r
+// if(Attr & 0x200)\r
+// Buf[1] = 'w';\r
+// if(Attr & 0x100)\r
+// Buf[2] = 'x';\r
+//\r
+// if(Attr & 0x40)\r
+// Buf[3] = 'r';\r
+// if(Attr & 0x20)\r
+// Buf[4] = 'w';\r
+// if(Attr & 0x10)\r
+// Buf[5] = 'x';\r
+//\r
+// if(Attr & 0x4)\r
+// Buf[6] = 'r';\r
+// if(Attr & 0x2)\r
+// Buf[7] = 'w';\r
+// if(Attr & 0x1)\r
+// Buf[8] = 'x';\r
+ if(ShowNumber == YES)\r
+ {\r
+ sprintf(Buf, "%03x", Attr);\r
+ }\r
+ else\r
+ {\r
+ strcpy(Buf, "---------");\r
+\r
+ if(Attr & 0x400)\r
+ Buf[0] = 'r';\r
+ if(Attr & 0x200)\r
+ Buf[1] = 'w';\r
+ if(Attr & 0x100)\r
+ Buf[2] = 'x';\r
+\r
+ if(Attr & 0x40)\r
+ Buf[3] = 'r';\r
+ if(Attr & 0x20)\r
+ Buf[4] = 'w';\r
+ if(Attr & 0x10)\r
+ Buf[5] = 'x';\r
+\r
+ if(Attr & 0x4)\r
+ Buf[6] = 'r';\r
+ if(Attr & 0x2)\r
+ Buf[7] = 'w';\r
+ if(Attr & 0x1)\r
+ Buf[8] = 'x';\r
+ }\r
\r
return;\r
}\r
GetCurrentDirectory(FMAX_PATH, Cur);\r
\r
strcpy(Tmp, Fname);\r
+ // 変数が未初期化のバグ修正\r
+ memset(&OpenFile, 0, sizeof(OPENFILENAME));\r
OpenFile.lStructSize = sizeof(OPENFILENAME);\r
OpenFile.hwndOwner = hWnd;\r
OpenFile.hInstance = 0;\r
// 現在UNC対応の予定は無い\r
char* MakeDistinguishableFileName(char* Out, char* In)\r
{\r
+ char* Fname;\r
char Tmp[FMAX_PATH+1];\r
char Tmp2[FMAX_PATH+3];\r
HANDLE hFind;\r
strcpy(Out, In);\r
else\r
{\r
+ Fname = GetFileName(In);\r
strcpy(Tmp, In);\r
strcpy(Tmp2, Tmp);\r
strcat(Tmp2, ".*");\r
{\r
do\r
{\r
- if(strchr(Find.cFileName, '.'))\r
+ if(strcmp(Find.cFileName, Fname) != 0)\r
break;\r
}\r
while(FindNextFile(hFind, &Find));\r
FindClose(hFind);\r
- if(strchr(Find.cFileName, '.'))\r
+ if(strcmp(Find.cFileName, Fname) != 0)\r
{\r
strcat(Tmp, " ");\r
strcpy(Tmp2, Tmp);\r
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
+\r
+// 高DPI対応\r
+void QueryDisplayDPI()\r
+{\r
+ HDC hDC;\r
+ if(DisplayDPIX == 0)\r
+ {\r
+ if(hDC = GetDC(NULL))\r
+ {\r
+ DisplayDPIX = GetDeviceCaps(hDC, LOGPIXELSX);\r
+ DisplayDPIY = GetDeviceCaps(hDC, LOGPIXELSY);\r
+ ReleaseDC(NULL, hDC);\r
+ }\r
+ }\r
+}\r
+\r
+int CalcPixelX(int x)\r
+{\r
+ QueryDisplayDPI();\r
+ return (x * DisplayDPIX + 96 / 2) / 96;\r
+}\r
+\r
+int CalcPixelY(int y)\r
+{\r
+ QueryDisplayDPI();\r
+ return (y * DisplayDPIY + 96 / 2) / 96;\r
+}\r
+\r
+HBITMAP ResizeBitmap(HBITMAP hBitmap, int UnitSizeX, int UnitSizeY, int ScaleNumerator, int ScaleDenominator)\r
+{\r
+ HBITMAP hDstBitmap;\r
+ HDC hDC;\r
+ HDC hSrcDC;\r
+ HDC hDstDC;\r
+ BITMAP Bitmap;\r
+ HGDIOBJ hSrcOld;\r
+ HGDIOBJ hDstOld;\r
+ int Width;\r
+ int Height;\r
+ hDstBitmap = NULL;\r
+ if(hDC = GetDC(NULL))\r
+ {\r
+ if(hSrcDC = CreateCompatibleDC(hDC))\r
+ {\r
+ if(hDstDC = CreateCompatibleDC(hDC))\r
+ {\r
+ if(GetObject(hBitmap, sizeof(BITMAP), &Bitmap) > 0)\r
+ {\r
+ if(UnitSizeX == 0)\r
+ UnitSizeX = Bitmap.bmWidth;\r
+ if(UnitSizeY == 0)\r
+ UnitSizeY = Bitmap.bmHeight;\r
+ Width = (Bitmap.bmWidth / UnitSizeX) * ((CalcPixelX(UnitSizeX) * ScaleNumerator) / ScaleDenominator);\r
+ Height = (Bitmap.bmHeight / UnitSizeY) * ((CalcPixelY(UnitSizeY) * ScaleNumerator) / ScaleDenominator);\r
+ if(hDstBitmap = CreateCompatibleBitmap(hDC, Width, Height))\r
+ {\r
+ hSrcOld = SelectObject(hSrcDC, hBitmap);\r
+ hDstOld = SelectObject(hDstDC, hDstBitmap);\r
+ SetStretchBltMode(hDstDC, COLORONCOLOR);\r
+ StretchBlt(hDstDC, 0, 0, Width, Height, hSrcDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight, SRCCOPY);\r
+ SelectObject(hSrcDC, hSrcOld);\r
+ SelectObject(hDstDC, hDstOld);\r
+ }\r
+ }\r
+ DeleteDC(hDstDC);\r
+ }\r
+ DeleteDC(hSrcDC);\r
+ }\r
+ ReleaseDC(NULL, hDC);\r
+ }\r
+ return hDstBitmap;\r
+}\r
+\r