X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=misc.c;h=67ccd911528605c5c240f7a022cd95ff6b83b011;hp=9cce7dd86bbe4e9e1eb955046055a456529211c6;hb=2bffe82de6811b380d280099f638dd7b4cbb3404;hpb=2bf85c03c1e059a2f75dbd48ef73be5961e12414 diff --git a/misc.c b/misc.c index 9cce7dd..67ccd91 100644 --- a/misc.c +++ b/misc.c @@ -1,6 +1,6 @@ -/*============================================================================= +/*============================================================================= * -* ‚»‚Ì‘¼‚̔ėpƒTƒuƒ‹[ƒ`ƒ“ +* その他の汎用サブルーチン * =============================================================================== / Copyright (C) 1997-2007 Sota. All rights reserved. @@ -33,7 +33,9 @@ #include #include #include -#include +// IPv6対応 +//#include +#include #include #include #include @@ -45,48 +47,54 @@ #include #include "helpid.h" +// UTF-8対応 +#undef __MBSWRAPPER_H__ +#include "mbswrapper.h" -/*===== “ü—̓_ƒCƒAƒƒOƒf[ƒ^‚̃Xƒgƒ‰ƒNƒ`ƒƒ =====*/ + +/*===== 入力ダイアログデータのストラクチャ =====*/ typedef struct { - char Title[80]; /* ƒ_ƒCƒAƒƒO‚̃^ƒCƒgƒ‹ */ - char Str[FMAX_PATH+1]; /* ƒfƒtƒHƒ‹ƒg•¶Žš—ñ^“ü—Í‚³‚ꂽ•¶Žš—ñ(Output) */ - int MaxLen; /* •¶Žš—ñ‚̍Œ· */ - int Anonymous; /* Anonymousƒtƒ‰ƒO(Output) */ + char Title[80]; /* ダイアログのタイトル */ + char Str[FMAX_PATH+1]; /* デフォルト文字列/入力された文字列(Output) */ + int MaxLen; /* 文字列の最長 */ + int Anonymous; /* Anonymousフラグ(Output) */ } DIALOGDATA; -/*===== ƒvƒƒgƒ^ƒCƒv =====*/ +/*===== プロトタイプ =====*/ -static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); -/*===== ŠO•”ŽQÆ =====*/ +/*===== 外部参照 =====*/ extern HWND hHelpWin; -/*===== ƒ[ƒJƒ‹‚ȃ[ƒN =====*/ +/*===== ローカルなワーク =====*/ -static DIALOGDATA *DialogData; /* “ü—̓_ƒCƒAƒƒOƒf[ƒ^ */ +static DIALOGDATA *DialogData; /* 入力ダイアログデータ */ static int HelpPage; -/*----- “ü—̓_ƒCƒAƒƒO‚ð•\Ž¦ -------------------------------------------------- +/*----- 入力ダイアログを表示 -------------------------------------------------- * * Parameter -* int Res : ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚ÌID -* HWND hWnd : eƒEƒCƒ“ƒhƒE‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* char *Title : ƒEƒCƒ“ƒhƒEƒ^ƒCƒgƒ‹ (NULL=Ý’肵‚È‚¢) -* char *Buf : ƒGƒfƒBƒbƒgƒ{ƒbƒNƒX‚̏‰Šú•¶Žš—ñ^“ü—Í•¶Žš—ñ‚ð•Ô‚·ƒoƒbƒtƒ@ -* int Max : ƒoƒbƒtƒ@‚̃TƒCƒY (FMAX_PATH+1ˆÈ‰º‚Å‚ ‚邱‚Æ) -* int *Flg : ƒtƒ‰ƒO‚̏‰Šú’l^ƒtƒ‰ƒO‚ð•Ô‚·ƒ[ƒN -* int Help : ƒwƒ‹ƒv‚̃Rƒ“ƒeƒLƒXƒg”ԍ† +* int Res : ダイアログボックスのID +* HWND hWnd : 親ウインドウのウインドウハンドル +* char *Title : ウインドウタイトル (NULL=設定しない) +* char *Buf : エディットボックスの初期文字列/入力文字列を返すバッファ +* int Max : バッファのサイズ (FMAX_PATH+1以下であること) +* int *Flg : フラグの初期値/フラグを返すワーク +* int Help : ヘルプのコンテキスト番号 * * Return Value -* int ƒXƒe[ƒ^ƒX (YES/NO=Žæ‚èÁ‚µ) +* int ステータス (YES/NO=取り消し) * * Note -* ƒ_ƒCƒAƒƒO‚Í‚PŒÂ‚ÌEditBox‚Æ‚PŒÂ‚ÌButton‚ðŽ‚Â‚à‚Ì‚ðŽg‚¤ +* ダイアログは1個のEditBoxと1個のButtonを持つものを使う *----------------------------------------------------------------------------*/ int InputDialogBox(int Res, HWND hWnd, char *Title, char *Buf, int Max, int *Flg, int Help) @@ -116,19 +124,21 @@ int InputDialogBox(int Res, HWND hWnd, char *Title, char *Buf, int Max, int *Flg } -/*----- “ü—̓_ƒCƒAƒƒO‚̃R[ƒ‹ƒoƒbƒN ------------------------------------------ +/*----- 入力ダイアログのコールバック ------------------------------------------ * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { char Tmp[FMAX_PATH+1]; @@ -170,19 +180,21 @@ static BOOL CALLBACK InputDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam } -/*----- mŽÀsn‚ƁmŽæÁn‚¾‚¯‚̃_ƒCƒAƒƒO‚Ì‹¤’ʃR[ƒ‹ƒoƒbƒNŠÖ” -------------- +/*----- [実行]と[取消]だけのダイアログの共通コールバック関数 -------------- * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { @@ -206,19 +218,21 @@ BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP } -/*----- mŽÀsn‚ƁmŽæÁn‚¾‚¯‚̃_ƒCƒAƒƒO‚Ì‹¤’ʃR[ƒ‹ƒoƒbƒNŠÖ”(ƒeƒLƒXƒg•\Ž¦‚‚«) +/*----- [実行]と[取消]だけのダイアログの共通コールバック関数(テキスト表示つき) * * Parameter -* HWND hDlg : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* UINT message : ƒƒbƒZ[ƒW”ԍ† -* WPARAM wParam : ƒƒbƒZ[ƒW‚Ì WPARAM ˆø” -* LPARAM lParam : ƒƒbƒZ[ƒW‚Ì LPARAM ˆø” +* HWND hDlg : ウインドウハンドル +* UINT message : メッセージ番号 +* WPARAM wParam : メッセージの WPARAM 引数 +* LPARAM lParam : メッセージの LPARAM 引数 * * Return Value * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { @@ -243,16 +257,16 @@ BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARA } -/*----- •¶Žš—ñ‚̍Ōã‚É "\" ‚ð•t‚¯‚é ------------------------------------------- +/*----- 文字列の最後に "\" を付ける ------------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒIƒŠƒWƒiƒ‹‚Ì•¶Žš—ñ char *Str ‚ª•ÏX‚³‚ê‚Ü‚·B +* オリジナルの文字列 char *Str が変更されます。 *----------------------------------------------------------------------------*/ void SetYenTail(char *Str) @@ -264,16 +278,16 @@ void SetYenTail(char *Str) } -/*----- •¶Žš—ñ‚̍Ōã‚Ì "\" ‚ðŽæ‚菜‚­ ----------------------------------------- +/*----- 文字列の最後の "\" を取り除く ----------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒIƒŠƒWƒiƒ‹‚Ì•¶Žš—ñ char *Str ‚ª•ÏX‚³‚ê‚Ü‚·B +* オリジナルの文字列 char *Str が変更されます。 *----------------------------------------------------------------------------*/ void RemoveYenTail(char *Str) @@ -290,20 +304,27 @@ void RemoveYenTail(char *Str) } -/*----- •¶Žš—ñ‚̍Ōã‚É "/" ‚ð•t‚¯‚é ------------------------------------------- +/*----- 文字列の最後に "/" を付ける ------------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒIƒŠƒWƒiƒ‹‚Ì•¶Žš—ñ char *Str ‚ª•ÏX‚³‚ê‚Ü‚·B +* オリジナルの文字列 char *Str が変更されます。 *----------------------------------------------------------------------------*/ void SetSlashTail(char *Str) { +#if defined(HAVE_TANDEM) + /* Tandem では / の代わりに . を追加 */ + if(AskHostType() == HTYPE_TANDEM) { + if(_mbscmp(_mbsninc(Str, _mbslen(Str) - 1), ".") != 0) + strcat(Str, "."); + } else +#endif if(_mbscmp(_mbsninc(Str, _mbslen(Str) - 1), "/") != 0) strcat(Str, "/"); @@ -311,16 +332,16 @@ void SetSlashTail(char *Str) } -/*----- •¶Žš—ñ‚©‚ç‰üsƒR[ƒh‚ðŽæ‚菜‚­ ---------------------------------------- +/*----- 文字列から改行コードを取り除く ---------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒIƒŠƒWƒiƒ‹‚Ì•¶Žš—ñ char *Str ‚ª•ÏX‚³‚ê‚Ü‚·B +* オリジナルの文字列 char *Str が変更されます。 *----------------------------------------------------------------------------*/ void RemoveReturnCode(char *Str) @@ -335,36 +356,42 @@ void RemoveReturnCode(char *Str) } -/*----- •¶Žš—ñ“à‚Ì“Á’è‚Ì•¶Žš‚ð‘S‚Ä’u‚«Š·‚¦‚é ---------------------------------- +/*----- 文字列内の特定の文字を全て置き換える ---------------------------------- * * Parameter -* char *Str : •¶Žš—ñ -* char Src : ŒŸõ•¶Žš -* char Dst : ’uŠ·•¶Žš +* char *Str : 文字列 +* char Src : 検索文字 +* char Dst : 置換文字 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ReplaceAll(char *Str, char Src, char Dst) { char *Pos; +/* Tandem ではノード名の変換を行わない */ +/* 最初の1文字が \ でもそのままにする */ +#if defined(HAVE_TANDEM) + if (AskRealHostType() == HTYPE_TANDEM && strlen(Str) > 0) + Str++; +#endif while((Pos = _mbschr(Str, Src)) != NULL) *Pos = Dst; return; } -/*----- ”Žš‚à‚µ‚­‚Í“Á’è‚Ì‚P•¶Žš‚©ƒ`ƒFƒbƒN ------------------------------------ +/*----- 数字もしくは特定の1文字かチェック ------------------------------------ * * Parameter -* int Ch : ƒ`ƒFƒbƒN‚·‚镶Žš -* int Sym : ‹L† +* int Ch : チェックする文字 +* int Sym : 記号 * * Return Value -* int ƒXƒe[ƒ^ƒX -* 0=”Žš‚Å‚à“Á’è‚Ì‹L†‚Å‚à‚È‚¢ +* int ステータス +* 0=数字でも特定の記号でもない *----------------------------------------------------------------------------*/ int IsDigitSym(int Ch, int Sym) @@ -380,14 +407,14 @@ int IsDigitSym(int Ch, int Sym) } -/*----- •¶Žš—ñ‚ª‘S‚Ä“¯‚¶•¶Žš‚©ƒ`ƒFƒbƒN ---------------------------------------- +/*----- 文字列が全て同じ文字かチェック ---------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ -* int Ch : •¶Žš +* char *Str : 文字列 +* int Ch : 文字 * * Return Value -* int ƒXƒe[ƒ^ƒX +* int ステータス * YES/NO *----------------------------------------------------------------------------*/ @@ -409,13 +436,13 @@ int StrAllSameChar(char *Str, char Ch) } -/*----- •¶Žš—ñ‚Ì––”ö‚̃Xƒy[ƒX‚ðíœ ------------------------------------------ +/*----- 文字列の末尾のスペースを削除 ------------------------------------------ * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void RemoveTailingSpaces(char *Str) @@ -433,15 +460,15 @@ void RemoveTailingSpaces(char *Str) } -/*----- ‘啶Žš^¬•¶Žš‚ð‹æ•Ê‚µ‚È‚¢strstr -------------------------------------- +/*----- 大文字/小文字を区別しないstrstr -------------------------------------- * * Parameter -* char *s1 : •¶Žš—ñ‚P -* char *s2 : •¶Žš—ñ‚Q +* char *s1 : 文字列1 +* char *s2 : 文字列2 * * Return Value -* char *•¶Žš—ñ‚P’†‚Å•¶Žš—ñ‚Q‚ªŒ©‚‚©‚Á‚½ˆÊ’u -* NULL=Œ©‚‚©‚ç‚È‚©‚Á‚½ +* char *文字列1中で文字列2が見つかった位置 +* NULL=見つからなかった *----------------------------------------------------------------------------*/ char *stristr(char *s1, char *s2) @@ -463,14 +490,14 @@ char *stristr(char *s1, char *s2) } -/*----- •¶Žš—ñ’†‚̃Xƒy[ƒX‚Å‹æØ‚ç‚ꂽŽŸ‚̃tƒB[ƒ‹ƒh‚ð•Ô‚· -------------------- +/*----- 文字列中のスペースで区切られた次のフィールドを返す -------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* char *ŽŸ‚̃tƒB[ƒ‹ƒh -* NULL=Œ©‚‚©‚ç‚È‚©‚Á‚½ +* char *次のフィールド +* NULL=見つからなかった *----------------------------------------------------------------------------*/ char *GetNextField(char *Str) @@ -491,16 +518,16 @@ char *GetNextField(char *Str) } -/*----- Œ»Ý‚̃tƒB[ƒ‹ƒh‚Ì•¶Žš—ñ‚ðƒRƒs[‚·‚é ---------------------------------- +/*----- 現在のフィールドの文字列をコピーする ---------------------------------- * * Parameter -* char *Str : •¶Žš—ñ -* char *Buf : ƒRƒs[æ -* int Max : Å‘啶Žš” +* char *Str : 文字列 +* char *Buf : コピー先 +* int Max : 最大文字数 * * Return Value -* int ƒXƒe[ƒ^ƒX -* SUCCESS/FAIL=’·‚³‚ª’·‚·‚¬‚é +* int ステータス +* FFFTP_SUCCESS/FFFTP_FAIL=長さが長すぎる *----------------------------------------------------------------------------*/ int GetOneField(char *Str, char *Buf, int Max) @@ -508,13 +535,13 @@ int GetOneField(char *Str, char *Buf, int Max) int Sts; char *Pos; - Sts = FAIL; + Sts = FFFTP_FAIL; if((Pos = strchr(Str, ' ')) == NULL) { if((int)strlen(Str) <= Max) { strcpy(Buf, Str); - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; } } else @@ -523,20 +550,20 @@ int GetOneField(char *Str, char *Buf, int Max) { strncpy(Buf, Str, Pos - Str); *(Buf + (Pos - Str)) = NUL; - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; } } return(Sts); } -/*----- ƒJƒ“ƒ}‚ðŽæ‚菜‚­ ------------------------------------------------------ +/*----- カンマを取り除く ------------------------------------------------------ * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void RemoveComma(char *Str) @@ -558,16 +585,16 @@ void RemoveComma(char *Str) } -/*----- ƒpƒX–¼‚Ì’†‚̃tƒ@ƒCƒ‹–¼‚̐擪‚ð•Ô‚· ------------------------------------ +/*----- パス名の中のファイル名の先頭を返す ------------------------------------ * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* char *ƒtƒ@ƒCƒ‹–¼‚̐擪 +* char *ファイル名の先頭 * * Note -* ƒfƒBƒŒƒNƒgƒŠ‚Ì‹æØ‚è‹L†‚Í "\" ‚Æ "/" ‚Ì—¼•û‚ª—LŒø +* ディレクトリの区切り記号は "\" と "/" の両方が有効 *----------------------------------------------------------------------------*/ char *GetFileName(char *Path) @@ -583,17 +610,22 @@ char *GetFileName(char *Path) if((Pos = _mbsrchr(Path, '/')) != NULL) Path = Pos + 1; +#if defined(HAVE_TANDEM) + /* Tandem は . がデリミッタとなる */ + if((AskHostType() == HTYPE_TANDEM) && ((Pos = _mbsrchr(Path, '.')) != NULL)) + Path = Pos + 1; +#endif return(Path); } -/*----- ƒc[ƒ‹‚Ì•\Ž¦–¼‚ð•Ô‚· -------------------------------------------------- +/*----- ツールの表示名を返す -------------------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* char * : •\Ž¦–¼ +* char * : 表示名 *----------------------------------------------------------------------------*/ char *GetToolName(char *Path) @@ -610,13 +642,13 @@ char *GetToolName(char *Path) } -/*----- ƒpƒX–¼‚Ì’†‚ÌŠg’£Žq‚̐擪‚ð•Ô‚· ---------------------------------------- +/*----- パス名の中の拡張子の先頭を返す ---------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* char *Šg’£Žq‚̐擪 +* char *拡張子の先頭 *----------------------------------------------------------------------------*/ char *GetFileExt(char *Path) @@ -637,17 +669,17 @@ char *GetFileExt(char *Path) } -/*----- ƒpƒX–¼‚©‚çƒtƒ@ƒCƒ‹–¼‚ðŽæ‚菜‚­ ---------------------------------------- +/*----- パス名からファイル名を取り除く ---------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ -* char *Buf : ƒtƒ@ƒCƒ‹–¼‚ðœ‚¢‚½ƒpƒX–¼‚̃Rƒs[æ +* char *Path : パス名 +* char *Buf : ファイル名を除いたパス名のコピー先 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒfƒBƒŒƒNƒgƒŠ‚Ì‹æØ‚è‹L†‚Í "\" ‚Æ "/" ‚Ì—¼•û‚ª—LŒø +* ディレクトリの区切り記号は "\" と "/" の両方が有効 *----------------------------------------------------------------------------*/ void RemoveFileName(char *Path, char *Buf) @@ -668,19 +700,19 @@ void RemoveFileName(char *Path, char *Buf) } -/*----- ãˆÊƒfƒBƒŒƒNƒgƒŠ‚̃pƒX–¼‚ðŽæ“¾ ---------------------------------------- +/*----- 上位ディレクトリのパス名を取得 ---------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒfƒBƒŒƒNƒgƒŠ‚Ì‹æØ‚è‹L†‚Í "\" ‚Æ "/" ‚Ì—¼•û‚ª—LŒø -* Å‰‚Ì "\"‚â"/"‚ÍŽc‚· -* —áj "/pub" --> "/" -* —áj "C:\DOS" --> "C:\" +* ディレクトリの区切り記号は "\" と "/" の両方が有効 +* 最初の "\"や"/"は残す +* 例) "/pub" --> "/" +* 例) "C:\DOS" --> "C:\" *----------------------------------------------------------------------------*/ void GetUpperDir(char *Path) @@ -702,19 +734,19 @@ void GetUpperDir(char *Path) } -/*----- ãˆÊƒfƒBƒŒƒNƒgƒŠ‚̃pƒX–¼‚ðŽæ“¾ ---------------------------------------- +/*----- 上位ディレクトリのパス名を取得 ---------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* ‚È‚µ +* なし * * Note -* ƒfƒBƒŒƒNƒgƒŠ‚Ì‹æØ‚è‹L†‚Í "\" ‚Æ "/" ‚Ì—¼•û‚ª—LŒø -* Å‰‚Ì "\"‚â"/"‚àÁ‚· -* —áj "/pub" --> "" -* —áj "C:\DOS" --> "C:" +* ディレクトリの区切り記号は "\" と "/" の両方が有効 +* 最初の "\"や"/"も消す +* 例) "/pub" --> "" +* 例) "C:\DOS" --> "C:" *----------------------------------------------------------------------------*/ void GetUpperDirEraseTopSlash(char *Path) @@ -731,16 +763,16 @@ void GetUpperDirEraseTopSlash(char *Path) } -/*----- ƒfƒBƒŒƒNƒgƒŠ‚ÌŠK‘w”‚ð•Ô‚· -------------------------------------------- +/*----- ディレクトリの階層数を返す -------------------------------------------- * * Parameter -* char *Path : ƒpƒX–¼ +* char *Path : パス名 * * Return Value -* ‚È‚µ +* なし * * Note -* ’P‚É '\' ‚Æ '/'‚̐”‚ð•Ô‚·‚¾‚¯ +* 単に '\' と '/'の数を返すだけ *----------------------------------------------------------------------------*/ int AskDirLevel(char *Path) @@ -759,14 +791,14 @@ int AskDirLevel(char *Path) } -/*----- ƒtƒ@ƒCƒ‹ƒTƒCƒY‚𕶎š—ñ‚É•ÏŠ·‚·‚é -------------------------------------- +/*----- ファイルサイズを文字列に変換する -------------------------------------- * * Parameter -* double Size : ƒtƒ@ƒCƒ‹ƒTƒCƒY -* char *Buf : •¶Žš—ñ‚ð•Ô‚·ƒoƒbƒtƒ@ +* double Size : ファイルサイズ +* char *Buf : 文字列を返すバッファ * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void MakeSizeString(double Size, char *Buf) @@ -788,14 +820,14 @@ void MakeSizeString(double Size, char *Buf) } -/*----- StaticText‚̗̈æ‚ÉŽû‚Ü‚é‚悤‚ɃpƒX–¼‚𐮌`‚µ‚Ä•\Ž¦ -------------------- +/*----- StaticTextの領域に収まるようにパス名を整形して表示 -------------------- * * Parameter -* HWND hWnd : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* char *Str : •¶Žš—ñ (’·‚³‚ÍFMAX_PATHˆÈ‰º) +* HWND hWnd : ウインドウハンドル +* char *Str : 文字列 (長さはFMAX_PATH以下) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void DispStaticText(HWND hWnd, char *Str) @@ -844,19 +876,19 @@ void DispStaticText(HWND hWnd, char *Str) } -/*----- •¶Žš—ñƒAƒŒƒC‚Ì’·‚³‚ð‹‚ß‚é -------------------------------------------- +/*----- 文字列アレイの長さを求める -------------------------------------------- * * Parameter -* char *Str : •¶Žš—ñƒAƒŒƒC (––”ö‚ÍNUL‚Q‚Â) +* char *Str : 文字列アレイ (末尾はNUL2つ) * * Return Value -* int ’·‚³ +* int 長さ * * Note -* I’[‚Ì2‚‚ÌNUL‚Ì‚¤‚¿‚̍Ōã‚Ì•¨‚͐”‚¦‚È‚¢ +* 終端の2つのNULのうちの最後の物は数えない * StrMultiLen("") = 0 * StrMultiLen("abc\0xyz\0") = 8 -* StrMultiLen("abc") = I’[‚ª‚Q‚‚ÌNUL‚Å‚È‚¢‚Ì‚Å‹‚ß‚ç‚ê‚È‚¢ +* StrMultiLen("abc") = 終端が2つのNULでないので求められない *----------------------------------------------------------------------------*/ int StrMultiLen(char *Str) @@ -875,14 +907,14 @@ int StrMultiLen(char *Str) } -/*----- RECT‚ðƒNƒ‰ƒCƒAƒ“ƒgÀ•W‚©‚çƒXƒNƒŠ[ƒ“À•W‚É•ÏŠ· ------------------------ +/*----- RECTをクライアント座標からスクリーン座標に変換 ------------------------ * * Parameter -* HWND hWnd : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ +* HWND hWnd : ウインドウハンドル * RECT *Rect : RECT * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void RectClientToScreen(HWND hWnd, RECT *Rect) @@ -905,13 +937,13 @@ void RectClientToScreen(HWND hWnd, RECT *Rect) } -/*----- 16i•¶Žš‚ðƒoƒCƒiƒŠ‚É•ÏŠ· ---------------------------------------------- +/*----- 16進文字をバイナリに変換 ---------------------------------------------- * * Parameter -* char Ch : 16i•¶Žš +* char Ch : 16進文字 * * Return Value -* int ƒoƒCƒiƒŠ’l +* int バイナリ値 *----------------------------------------------------------------------------*/ int hex2bin(char Ch) @@ -929,22 +961,22 @@ int hex2bin(char Ch) } -/*----- ‚t‚m‚b•¶Žš—ñ‚ð•ª‰ð‚·‚é ------------------------------------------------ +/*----- UNC文字列を分解する ------------------------------------------------ * * Parameter -* char *unc : UNC•¶Žš—ñ -* char *Host : ƒzƒXƒg–¼‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ (ƒTƒCƒY‚Í HOST_ADRS_LEN+1) -* char *Path : ƒpƒX–¼‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ (ƒTƒCƒY‚Í FMAX_PATH+1) -* char *File : ƒtƒ@ƒCƒ‹–¼‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ (ƒTƒCƒY‚Í FMAX_PATH+1) -* char *User : ƒ†[ƒU–¼‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ (ƒTƒCƒY‚Í USER_NAME_LEN+1) -* char *Pass : ƒpƒXƒ[ƒh‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ (ƒTƒCƒY‚Í PASSWORD_LEN+1) -* int *Port : ƒ|[ƒg”ԍ†‚ðƒRƒs[‚·‚éƒoƒbƒtƒ@ +* char *unc : UNC文字列 +* char *Host : ホスト名をコピーするバッファ (サイズは HOST_ADRS_LEN+1) +* char *Path : パス名をコピーするバッファ (サイズは FMAX_PATH+1) +* char *File : ファイル名をコピーするバッファ (サイズは FMAX_PATH+1) +* char *User : ユーザ名をコピーするバッファ (サイズは USER_NAME_LEN+1) +* char *Pass : パスワードをコピーするバッファ (サイズは PASSWORD_LEN+1) +* int *Port : ポート番号をコピーするバッファ * * Return Value -* int ƒXƒe[ƒ^ƒX -* SUCCESS/FAIL +* int ステータス +* FFFTP_SUCCESS/FFFTP_FAIL * -* "\"‚Í‘S‚Ä"/"‚É’u‚«Š·‚¦‚é +* "\"は全て"/"に置き換える *----------------------------------------------------------------------------*/ int SplitUNCpath(char *unc, char *Host, char *Path, char *File, char *User, char *Pass, int *Port) @@ -983,9 +1015,23 @@ int SplitUNCpath(char *unc, char *Host, char *Path, char *File, char *User, char strncpy(User, Tmp, USER_NAME_LEN); } + // IPv6対応 + if((Pos2 = _mbschr(Pos1, '[')) != NULL && Pos2 < _mbschr(Pos1, ':')) + { + Pos1 = Pos2 + 1; + if((Pos2 = _mbschr(Pos2, ']')) != NULL) + { + memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); + Pos1 = Pos2 + 1; + } + } + if((Pos2 = _mbschr(Pos1, ':')) != NULL) { - memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); + // IPv6対応 +// memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); + if(strlen(Host) == 0) + memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); Pos2++; if(IsDigit(*Pos2)) { @@ -1002,32 +1048,38 @@ int SplitUNCpath(char *unc, char *Host, char *Path, char *File, char *User, char } else if((Pos2 = _mbschr(Pos1, '/')) != NULL) { - memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); + // IPv6対応 +// memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); + if(strlen(Host) == 0) + memcpy(Host, Pos1, min1(Pos2-Pos1, HOST_ADRS_LEN)); RemoveFileName(Pos2, Path); strncpy(File, GetFileName(Pos2), FMAX_PATH); } else { - strncpy(Host, Pos1, HOST_ADRS_LEN); + // IPv6対応 +// strncpy(Host, Pos1, HOST_ADRS_LEN); + if(strlen(Host) == 0) + strncpy(Host, Pos1, HOST_ADRS_LEN); } - Sts = FAIL; + Sts = FFFTP_FAIL; if(strlen(Host) > 0) - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; return(Sts); } -/*----- “ú•t•¶Žš—ñ(JST)‚ðFILETIME(UTC)‚É•ÏŠ· ---------------------------------- +/*----- 日付文字列(JST)をFILETIME(UTC)に変換 ---------------------------------- * * Parameter -* char *Time : “ú•t•¶Žš—ñ ("yyyy/mm/dd hh:mm") -* FILETIME *Buf : ƒtƒ@ƒCƒ‹ƒ^ƒCƒ€‚ð•Ô‚·ƒ[ƒN +* char *Time : 日付文字列 ("yyyy/mm/dd hh:mm") +* FILETIME *Buf : ファイルタイムを返すワーク * * Return Value -* int ƒXƒe[ƒ^ƒX -* YES/NO=“ú•tî•ñ‚ª‚È‚©‚Á‚½ +* int ステータス +* YES/NO=日付情報がなかった *----------------------------------------------------------------------------*/ int TimeString2FileTime(char *Time, FILETIME *Buf) @@ -1066,16 +1118,16 @@ int TimeString2FileTime(char *Time, FILETIME *Buf) } -/*----- FILETIME(UTC)‚ð“ú•t•¶Žš—ñ(JST)‚É•ÏŠ· ---------------------------------- +/*----- FILETIME(UTC)を日付文字列(JST)に変換 ---------------------------------- * * Parameter -* FILETIME *Time : ƒtƒ@ƒCƒ‹ƒ^ƒCƒ€ -* char *Buf : “ú•t•¶Žš—ñ‚ð•Ô‚·ƒ[ƒN -* int Mode : ƒ‚[ƒh (DISPFORM_xxx) -* int InfoExist : î•ñ‚ª‚ ‚é‚©‚Ç‚¤‚© (FINFO_xxx) +* FILETIME *Time : ファイルタイム +* char *Buf : 日付文字列を返すワーク +* int Mode : モード (DISPFORM_xxx) +* int InfoExist : 情報があるかどうか (FINFO_xxx) * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist) @@ -1105,20 +1157,20 @@ void FileTime2TimeString(FILETIME *Time, char *Buf, int Mode, int InfoExist) else { // if (!strftime((char *)str, 100, "%c", (const struct tm *)thetime)) -// SetTaskMsg("strftime ‚ªŽ¸”s‚µ‚Ü‚µ‚½!\n"); +// SetTaskMsg("strftime が失敗しました!\n"); } return; } -/*----- ƒtƒ@ƒCƒ‹ƒ^ƒCƒ€‚ðŽw’èƒ^ƒCƒ€ƒ][ƒ“‚̃[ƒJƒ‹ƒ^ƒCƒ€‚©‚çGMT‚É•ÏŠ· --------- +/*----- ファイルタイムを指定タイムゾーンのローカルタイムからGMTに変換 --------- * * Parameter -* FILETIME *Time : ƒtƒ@ƒCƒ‹ƒ^ƒCƒ€ -* int TimeZone : ƒ^ƒCƒ€ƒ][ƒ“ +* FILETIME *Time : ファイルタイム +* int TimeZone : タイムゾーン * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void SpecificLocalFileTime2FileTime(FILETIME *Time, int TimeZone) @@ -1137,13 +1189,13 @@ void SpecificLocalFileTime2FileTime(FILETIME *Time, int TimeZone) } -/*----- ‘®«•¶Žš—ñ‚ð’l‚É•ÏŠ· -------------------------------------------------- +/*----- 属性文字列を値に変換 -------------------------------------------------- * * Parameter -* char *Str : ‘®«•¶Žš—ñ ("rwxrwxrwx") +* char *Str : 属性文字列 ("rwxrwxrwx") * * Return Value -* int ’l +* int 値 *----------------------------------------------------------------------------*/ int AttrString2Value(char *Str) @@ -1180,14 +1232,14 @@ int AttrString2Value(char *Str) } -/*----- ‘®«‚Ì’l‚𕶎š—ñ‚É•ÏŠ· ------------------------------------------------ +/*----- 属性の値を文字列に変換 ------------------------------------------------ * * Parameter -* int Attr : ‘®«‚Ì’l -* char *Buf : ‘®«•¶Žš—ñ‚ðƒZƒbƒg‚·‚éƒoƒbƒtƒ@ ("rwxrwxrwx") +* int Attr : 属性の値 +* char *Buf : 属性文字列をセットするバッファ ("rwxrwxrwx") * * Return Value -* int ’l +* int 値 *----------------------------------------------------------------------------*/ void AttrValue2String(int Attr, char *Buf) @@ -1219,13 +1271,13 @@ void AttrValue2String(int Attr, char *Buf) } -/*----- INIƒtƒ@ƒCƒ‹•¶Žš—ñ‚𐮌` ----------------------------------------------- +/*----- INIファイル文字列を整形 ----------------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void FormatIniString(char *Str) @@ -1253,20 +1305,20 @@ void FormatIniString(char *Str) } -/*----- ƒtƒ@ƒCƒ‹‘I‘ð ---------------------------------------------------------- +/*----- ファイル選択 ---------------------------------------------------------- * * Parameter -* HWND hWnd : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* char *Fname : ƒtƒ@ƒCƒ‹–¼‚ð•Ô‚·ƒoƒbƒtƒ@ -* char *Title : ƒ^ƒCƒgƒ‹ -* char *Filters : ƒtƒBƒ‹ƒ^[•¶Žš—ñ -* char *Ext : ƒfƒtƒHƒ‹ƒgŠg’£Žq -* int Flags : ’ljÁ‚·‚éƒtƒ‰ƒO -* int Save : uŠJ‚­v‚©u•Û‘¶v‚© (0=ŠJ‚­, 1=•Û‘¶) +* HWND hWnd : ウインドウハンドル +* char *Fname : ファイル名を返すバッファ +* char *Title : タイトル +* char *Filters : フィルター文字列 +* char *Ext : デフォルト拡張子 +* int Flags : 追加するフラグ +* int Save : 「開く」か「保存」か (0=開く, 1=保存) * * Return Value -* int ƒXƒe[ƒ^ƒX -* TRUE/FALSE=ŽæÁ +* int ステータス +* TRUE/FALSE=取消 *----------------------------------------------------------------------------*/ int SelectFile(HWND hWnd, char *Fname, char *Title, char *Filters, char *Ext, int Flags, int Save) @@ -1314,16 +1366,16 @@ int SelectFile(HWND hWnd, char *Fname, char *Title, char *Filters, char *Ext, in } -/*----- ƒfƒBƒŒƒNƒgƒŠ‚ð‘I‘ð ---------------------------------------------------- +/*----- ディレクトリを選択 ---------------------------------------------------- * * Parameter -* HWND hWnd : ƒEƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* char *Buf : ƒfƒBƒŒƒNƒgƒŠ–¼‚ð•Ô‚·ƒoƒbƒtƒ@i‰ŠúƒfƒBƒŒƒNƒgƒŠ–¼j -* int MaxLen : ƒoƒbƒtƒ@‚̃TƒCƒY +* HWND hWnd : ウインドウハンドル +* char *Buf : ディレクトリ名を返すバッファ(初期ディレクトリ名) +* int MaxLen : バッファのサイズ * * Return Value -* int ƒXƒe[ƒ^ƒX -* TRUE/FALSE=ŽæÁ +* int ステータス +* TRUE/FALSE=取消 *----------------------------------------------------------------------------*/ int SelectDir(HWND hWnd, char *Buf, int MaxLen) @@ -1363,20 +1415,20 @@ int SelectDir(HWND hWnd, char *Buf, int MaxLen) } -/*----- ’l‚ÉŠÖ˜A•t‚¯‚ç‚ꂽƒ‰ƒWƒIƒ{ƒ^ƒ“‚ðƒ`ƒFƒbƒN‚·‚é -------------------------- +/*----- 値に関連付けられたラジオボタンをチェックする -------------------------- * * Parameter -* HWND hDlg : ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* int Value : ’l -* const RADIOBUTTON *Buttons : ƒ‰ƒWƒIƒ{ƒ^ƒ“‚Æ’l‚ÌŠÖ˜A•t‚¯ƒe[ƒuƒ‹ -* int Num : ƒ{ƒ^ƒ“‚̐” +* HWND hDlg : ダイアログボックスのウインドウハンドル +* int Value : 値 +* const RADIOBUTTON *Buttons : ラジオボタンと値の関連付けテーブル +* int Num : ボタンの数 * * Return Value -* ‚È‚µ +* なし * * Note -* ’l‚ÉŠÖ˜A•t‚¯‚ç‚ꂽƒ{ƒ^ƒ“‚ª–³‚¢Žž‚́Aƒe[ƒuƒ‹‚̍ŏ‰‚É“o˜^‚³‚ê‚Ä‚¢‚éƒ{ƒ^ -* ƒ“‚ðƒ`ƒFƒbƒN‚·‚é +* 値に関連付けられたボタンが無い時は、テーブルの最初に登録されているボタ +* ンをチェックする *----------------------------------------------------------------------------*/ void SetRadioButtonByValue(HWND hDlg, int Value, const RADIOBUTTON *Buttons, int Num) @@ -1390,8 +1442,8 @@ void SetRadioButtonByValue(HWND hDlg, int Value, const RADIOBUTTON *Buttons, int if(Value == Buttons->Value) { SendDlgItemMessage(hDlg, Buttons->ButID, BM_SETCHECK, 1, 0); - /* ƒ‰ƒWƒIƒ{ƒ^ƒ“‚ð•ÏX‚µ‚½Žž‚É‘¼‚̍€–ڂ̃nƒCƒh‚È‚Ç‚ðs‚È‚¤Ž–‚ª */ - /* ‚ ‚é‚̂ŁA‚»‚Ì‚½‚ß‚É WM_COMMAND ‚ð‘—‚é */ + /* ラジオボタンを変更した時に他の項目のハイドなどを行なう事が */ + /* あるので、そのために WM_COMMAND を送る */ SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(Buttons->ButID, 0), 0); break; } @@ -1406,19 +1458,19 @@ void SetRadioButtonByValue(HWND hDlg, int Value, const RADIOBUTTON *Buttons, int } -/*----- ƒ`ƒFƒbƒN‚³‚ê‚Ä‚¢‚éƒ{ƒ^ƒ“‚ÉŠÖ˜A•t‚¯‚ç‚ꂽ’l‚ð•Ô‚· ---------------------- +/*----- チェックされているボタンに関連付けられた値を返す ---------------------- * * Parameter -* HWND hDlg : ƒ_ƒCƒAƒƒOƒ{ƒbƒNƒX‚̃EƒCƒ“ƒhƒEƒnƒ“ƒhƒ‹ -* const RADIOBUTTON *Buttons : ƒ‰ƒWƒIƒ{ƒ^ƒ“‚Æ’l‚ÌŠÖ˜A•t‚¯ƒe[ƒuƒ‹ -* int Num : ƒ{ƒ^ƒ“‚̐” +* HWND hDlg : ダイアログボックスのウインドウハンドル +* const RADIOBUTTON *Buttons : ラジオボタンと値の関連付けテーブル +* int Num : ボタンの数 * * Return Value -* int ’l +* int 値 * * Note -* ‚ǂ̃{ƒ^ƒ“‚àƒ`ƒFƒbƒN‚³‚ê‚Ä‚¢‚È‚¢Žž‚́Aƒe[ƒuƒ‹‚̍ŏ‰‚É“o˜^‚³‚ê‚Ä‚¢‚éƒ{ -* ƒ^ƒ“‚Ì’l‚ð•Ô‚· +* どのボタンもチェックされていない時は、テーブルの最初に登録されているボ +* タンの値を返す *----------------------------------------------------------------------------*/ int AskRadioButtonValue(HWND hDlg, const RADIOBUTTON *Buttons, int Num) @@ -1440,13 +1492,13 @@ int AskRadioButtonValue(HWND hDlg, const RADIOBUTTON *Buttons, int Num) } -/*----- ‚P‚Ui•¶Žš—ñ‚𐔒l‚É•ÏŠ· ---------------------------------------------- +/*----- 16進文字列を数値に変換 ---------------------------------------------- * * Parameter -* char *Str : •¶Žš—ñ +* char *Str : 文字列 * * Return Value -* int ’l +* int 値 *----------------------------------------------------------------------------*/ int xtoi(char *Str) @@ -1472,14 +1524,14 @@ int xtoi(char *Str) } -/*----- ƒtƒ@ƒCƒ‹‚ª“Ç‚ÝŽæ‚è‰Â”\‚©‚Ç‚¤‚©‚ð•Ô‚· ---------------------------------- +/*----- ファイルが読み取り可能かどうかを返す ---------------------------------- * * Parameter -* char *Fname : ƒtƒ@ƒCƒ‹–¼ +* char *Fname : ファイル名 * * Return Value -* int ƒXƒe[ƒ^ƒX -* SUCCESS/FAIL +* int ステータス +* FFFTP_SUCCESS/FFFTP_FAIL *----------------------------------------------------------------------------*/ int CheckFileReadable(char *Fname) @@ -1488,7 +1540,7 @@ int CheckFileReadable(char *Fname) HANDLE iFileHandle; SECURITY_ATTRIBUTES Sec; - Sts = FAIL; + Sts = FFFTP_FAIL; Sec.nLength = sizeof(SECURITY_ATTRIBUTES); Sec.lpSecurityDescriptor = NULL; @@ -1497,7 +1549,7 @@ int CheckFileReadable(char *Fname) if((iFileHandle = CreateFile(Fname, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, &Sec, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE) { - Sts = SUCCESS; + Sts = FFFTP_SUCCESS; CloseHandle(iFileHandle); } return(Sts); @@ -1544,14 +1596,14 @@ void ExcEndianDWORD(DWORD *x) -/*----- int’l‚Ì“ü‚ê‘Ö‚¦ ------------------------------------------------------- +/*----- int値の入れ替え ------------------------------------------------------- * * Parameter -* int *Num1 : ”’l‚P -* int *Num2 : ”’l‚Q +* int *Num1 : 数値1 +* int *Num2 : 数値2 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void SwapInt(int *Num1, int *Num2) @@ -1565,13 +1617,13 @@ void SwapInt(int *Num1, int *Num2) } -/*----- Žw’肳‚ꂽƒtƒHƒ‹ƒ_‚ª‚ ‚é‚©‚Ç‚¤‚©ƒ`ƒFƒbƒN ------------------------------- +/*----- 指定されたフォルダがあるかどうかチェック ------------------------------- * * Parameter -* char *Path : ƒpƒX +* char *Path : パス * * Return Value -* int ƒXƒe[ƒ^ƒX (YES/NO) +* int ステータス (YES/NO) *----------------------------------------------------------------------------*/ int IsFolderExist(char *Path) @@ -1595,16 +1647,16 @@ int IsFolderExist(char *Path) } -/*----- ƒe[ƒuƒ‹‚É‚µ‚½‚ª‚Á‚Đ”’l‚ð“o˜^ ----------------------------------------- +/*----- テーブルにしたがって数値を登録 ----------------------------------------- * * Parameter -* int x : ”’l -* int Dir : •ÏŠ·•ûŒü -* INTCONVTBL *Tbl : ƒe[ƒuƒ‹ -* int Num : ƒe[ƒuƒ‹‚̐”’l‚̐” +* int x : 数値 +* int Dir : 変換方向 +* INTCONVTBL *Tbl : テーブル +* int Num : テーブルの数値の数 * * Return Value -* int ”’l +* int 数値 *----------------------------------------------------------------------------*/ int ConvertNum(int x, int Dir, const INTCONVTBL *Tbl, int Num) @@ -1635,13 +1687,13 @@ int ConvertNum(int x, int Dir, const INTCONVTBL *Tbl, int Num) -/*----- ƒtƒ@ƒCƒ‹‚ðƒSƒ~” ‚ɍ폜 ------------------------------------------------ +/*----- ファイルをゴミ箱に削除 ------------------------------------------------ * * Parameter -* char *Path : ƒtƒ@ƒCƒ‹–¼ +* char *Path : ファイル名 * * Return Value -* int ƒXƒe[ƒ^ƒX (0=³íI—¹) +* int ステータス (0=正常終了) *----------------------------------------------------------------------------*/ int MoveFileToTrashCan(char *Path) @@ -1700,3 +1752,88 @@ char *MakeNumString(LONGLONG Num, char *Buf, BOOL Comma) } +// 異なるファイルが表示されるバグ修正 + +// ShellExecute等で使用されるファイル名を修正 +// UNCでない場合に末尾の半角スペースは無視されるため拡張子が補完されなくなるまで半角スペースを追加 +// 現在UNC対応の予定は無い +char* MakeDistinguishableFileName(char* Out, char* In) +{ + char* Fname; + char Tmp[FMAX_PATH+1]; + char Tmp2[FMAX_PATH+3]; + HANDLE hFind; + WIN32_FIND_DATA Find; + if(strlen(GetFileExt(GetFileName(In))) > 0) + strcpy(Out, In); + else + { + Fname = GetFileName(In); + strcpy(Tmp, In); + strcpy(Tmp2, Tmp); + strcat(Tmp2, ".*"); + while(strlen(Tmp) < FMAX_PATH && (hFind = FindFirstFile(Tmp2, &Find)) != INVALID_HANDLE_VALUE) + { + do + { + if(strcmp(Find.cFileName, Fname) != 0) + break; + } + while(FindNextFile(hFind, &Find)); + FindClose(hFind); + if(strcmp(Find.cFileName, Fname) != 0) + { + strcat(Tmp, " "); + strcpy(Tmp2, Tmp); + strcat(Tmp2, ".*"); + } + else + break; + } + strcpy(Out, Tmp); + } + return Out; +} + +// 環境依存の不具合対策 +char* GetAppTempPath(char* Buf) +{ + char Temp[32]; + GetTempPath(MAX_PATH, Buf); + SetYenTail(Buf); + sprintf(Temp, "ffftp%08x", GetCurrentProcessId()); + strcat(Buf, Temp); + return Buf; +} + +#if defined(HAVE_TANDEM) +/*----- ファイルサイズからEXTENTサイズの計算を行う ---------------------------- +* +* Parameter +* LONGLONG Size : ファイルサイズ +* +* Return Value +* なし +*----------------------------------------------------------------------------*/ +void CalcExtentSize(TRANSPACKET *Pkt, LONGLONG Size) +{ + LONGLONG extent; + + /* EXTENTS(4,28) MAXEXTENTS 978 */ + if(Size < 56025088) { + Pkt->PriExt = DEF_PRIEXT; + Pkt->SecExt = DEF_SECEXT; + Pkt->MaxExt = DEF_MAXEXT; + } else { + /* 増加余地を残すため Used 75% 近辺になるように EXTENT サイズを調整) */ + extent = (LONGLONG)(Size / ((DEF_MAXEXT * 0.75) * 2048LL)); + /* 28未満にすると誤差でFile Fullになる可能性がある */ + if(extent < 28) + extent = 28; + + Pkt->PriExt = (int)extent; + Pkt->SecExt = (int)extent; + Pkt->MaxExt = DEF_MAXEXT; + } +} +#endif