X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=codecnv.c;h=2ac55e70c08d396fc11e52df998fcb8fd6d16ca7;hp=13d6b91e4a2fb5c43b1917a9fb63634eeb722a5a;hb=91e53f38be77b8d53a9509b748273a9aefce84b7;hpb=ace5228a5909b084161345b10e712b7937bb00c5 diff --git a/codecnv.c b/codecnv.c index 13d6b91..2ac55e7 100644 --- a/codecnv.c +++ b/codecnv.c @@ -1,6 +1,6 @@ -/*============================================================================= +/*============================================================================= * -* Š¿ŽšƒR[ƒh•ÏŠ·^‰üsƒR[ƒh•ÏŠ· +* 漢字コード変換/改行コード変換 * =============================================================================== / Copyright (C) 1997-2007 Sota. All rights reserved. @@ -40,12 +40,12 @@ -#define CONV_ASCII 0 /* ASCII•¶Žšˆ—’† */ -#define CONV_KANJI 1 /* Š¿Žšˆ—’† */ -#define CONV_KANA 2 /* ”¼ŠpƒJƒ^ƒJƒiˆ—’† */ +#define CONV_ASCII 0 /* ASCII文字処理中 */ +#define CONV_KANJI 1 /* 漢字処理中 */ +#define CONV_KANA 2 /* 半角カタカナ処理中 */ -/*===== ƒvƒƒgƒ^ƒCƒv =====*/ +/*===== プロトタイプ =====*/ static char *ConvEUCtoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put); static char *ConvJIStoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put); @@ -61,7 +61,7 @@ static int ConvertIBMExtendedChar(int code); #if 0 -/*----- Š¿ŽšƒR[ƒh•ÏŠ·‚̃eƒXƒgƒvƒƒOƒ‰ƒ€ ------------------------------------*/ +/*----- 漢字コード変換のテストプログラム ------------------------------------*/ void CodeCnvTest(void) { @@ -174,7 +174,7 @@ void CodeCnvTest(void) #if 0 -/*----- ‰üsƒR[ƒh•ÏŠ·‚̃eƒXƒgƒvƒƒOƒ‰ƒ€ ------------------------------------*/ +/*----- 改行コード変換のテストプログラム ------------------------------------*/ void TermCodeCnvTest(void) { @@ -242,13 +242,13 @@ void TermCodeCnvTest(void) -/*----- ‰üsƒR[ƒh•ÏŠ·î•ñ‚ð‰Šú‰» -------------------------------------------- +/*----- 改行コード変換情報を初期化 -------------------------------------------- * * Parameter -* TERMCODECONVINFO *cInfo : ‰üsƒR[ƒh•ÏŠ·î•ñ +* TERMCODECONVINFO *cInfo : 改行コード変換情報 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void InitTermCodeConvInfo(TERMCODECONVINFO *cInfo) @@ -258,16 +258,16 @@ void InitTermCodeConvInfo(TERMCODECONVINFO *cInfo) } -/*----- ‰üsƒR[ƒh•ÏŠ·‚ÌŽc‚èî•ñ‚ðo—Í ---------------------------------------- +/*----- 改行コード変換の残り情報を出力 ---------------------------------------- * * Parameter -* TERMCODECONVINFO *cInfo : ‰üsƒR[ƒh•ÏŠ·î•ñ +* TERMCODECONVINFO *cInfo : 改行コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (=NO) +* int くり返しフラグ (=NO) * * Note -* ‰üsƒR[ƒh•ÏŠ·‚̍Ōã‚ɌĂԎ– +* 改行コード変換の最後に呼ぶ事 *----------------------------------------------------------------------------*/ int FlushRestTermCodeConvData(TERMCODECONVINFO *cInfo) @@ -285,16 +285,16 @@ int FlushRestTermCodeConvData(TERMCODECONVINFO *cInfo) } -/*----- ‰üsƒR[ƒh‚ðCRLF‚É•ÏŠ· ------------------------------------------------- +/*----- 改行コードをCRLFに変換 ------------------------------------------------- * * Parameter -* TERMCODECONVINFO *cInfo : ‰üsƒR[ƒh•ÏŠ·î•ñ +* TERMCODECONVINFO *cInfo : 改行コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと *----------------------------------------------------------------------------*/ int ConvTermCodeToCRLF(TERMCODECONVINFO *cInfo) @@ -348,13 +348,13 @@ int ConvTermCodeToCRLF(TERMCODECONVINFO *cInfo) } -/*----- Š¿ŽšƒR[ƒh•ÏŠ·î•ñ‚ð‰Šú‰» -------------------------------------------- +/*----- 漢字コード変換情報を初期化 -------------------------------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void InitCodeConvInfo(CODECONVINFO *cInfo) @@ -366,22 +366,22 @@ void InitCodeConvInfo(CODECONVINFO *cInfo) cInfo->KanjiFst = 0; cInfo->KanaPrev = 0; cInfo->KanaProc = NULL; - // UTF-8‘Ήž + // UTF-8対応 cInfo->EscUTF8Len = 0; return; } -/*----- Š¿ŽšƒR[ƒh•ÏŠ·‚ÌŽc‚èî•ñ‚ðo—Í ---------------------------------------- +/*----- 漢字コード変換の残り情報を出力 ---------------------------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (=NO) +* int くり返しフラグ (=NO) * * Note -* Š¿ŽšƒR[ƒh•ÏŠ·‚̍Ōã‚ɌĂԎ– +* 漢字コード変換の最後に呼ぶ事 *----------------------------------------------------------------------------*/ int FlushRestData(CODECONVINFO *cInfo) @@ -399,7 +399,7 @@ int FlushRestData(CODECONVINFO *cInfo) *Put++ = cInfo->EscCode[0]; if(cInfo->EscProc == 2) *Put++ = cInfo->EscCode[1]; - // UTF-8‘Ήž + // UTF-8対応 memcpy(Put, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); Put += cInfo->EscUTF8Len; @@ -409,16 +409,16 @@ int FlushRestData(CODECONVINFO *cInfo) } -/*----- EUCŠ¿ŽšƒR[ƒh‚ðSHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +/*----- EUC漢字コードをSHIFT-JIS漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと *----------------------------------------------------------------------------*/ int ConvEUCtoSJIS(CODECONVINFO *cInfo) @@ -450,7 +450,7 @@ int ConvEUCtoSJIS(CODECONVINFO *cInfo) cInfo->KanjiFst = *Str++; else { - if((uchar)cInfo->KanjiFst == (uchar)0x8E) /* ”¼ŠpƒJƒ^ƒJƒi */ + if((uchar)cInfo->KanjiFst == (uchar)0x8E) /* 半角カタカナ */ { Put = ConvEUCtoSJISkanaProc(cInfo, *Str++, Put); } @@ -485,15 +485,15 @@ int ConvEUCtoSJIS(CODECONVINFO *cInfo) } -/*----- EUC-->SHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ·‚Ì”¼ŠpƒJƒ^ƒJƒi‚̏ˆ— ------------------- +/*----- EUC-->SHIFT-JIS漢字コードに変換の半角カタカナの処理 ------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ -* char Dt : •¶Žš -* char *Put : ƒf[ƒ^ƒZƒbƒgˆÊ’u +* CODECONVINFO *cInfo : 漢字コード変換情報 +* char Dt : 文字 +* char *Put : データセット位置 * * Return Value -* char *ŽŸ‚̃f[ƒ^ƒZƒbƒgˆÊ’u +* char *次のデータセット位置 *----------------------------------------------------------------------------*/ static char *ConvEUCtoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) @@ -528,21 +528,21 @@ static char *ConvEUCtoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) } -/*----- JISŠ¿ŽšƒR[ƒh‚ðSHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +/*----- JIS漢字コードをSHIFT-JIS漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと * -* ƒGƒXƒP[ƒvƒR[ƒh‚́AŽŸ‚Ì‚à‚̂ɑΉž‚µ‚Ä‚¢‚é -* Š¿ŽšŠJŽn $B $@ -* ”¼ŠpƒJƒiŠJŽn (I -* Š¿ŽšI—¹ (B (J (H +* エスケープコードは、次のものに対応している +* 漢字開始 $B $@ +* 半角カナ開始 (I +* 漢字終了 (B (J (H *----------------------------------------------------------------------------*/ int ConvJIStoSJIS(CODECONVINFO *cInfo) @@ -679,15 +679,15 @@ int ConvJIStoSJIS(CODECONVINFO *cInfo) } -/*----- JIS-->SHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ·‚Ì”¼ŠpƒJƒ^ƒJƒi‚̏ˆ— ------------------- +/*----- JIS-->SHIFT-JIS漢字コードに変換の半角カタカナの処理 ------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ -* char Dt : •¶Žš -* char *Put : ƒf[ƒ^ƒZƒbƒgˆÊ’u +* CODECONVINFO *cInfo : 漢字コード変換情報 +* char Dt : 文字 +* char *Put : データセット位置 * * Return Value -* char *ŽŸ‚̃f[ƒ^ƒZƒbƒgˆÊ’u +* char *次のデータセット位置 *----------------------------------------------------------------------------*/ static char *ConvJIStoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) @@ -722,18 +722,18 @@ static char *ConvJIStoSJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) } -/*----- Samba-HEX/Samba-CAPŠ¿ŽšƒR[ƒh‚ðSHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ· -------------- +/*----- Samba-HEX/Samba-CAP漢字コードをSHIFT-JIS漢字コードに変換 -------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ -* •ªŠ„‚³‚ꂽ“ü—Í•¶Žš—ñ‚Ì•ÏŠ·‚̓Tƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ -* ”¼ŠpƒJƒ^ƒJƒi‚Ì•ÏŠ·Ý’è‚ɂ͑Ήž‚µ‚Ä‚¢‚È‚¢ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと +* 分割された入力文字列の変換はサポートしていない +* 半角カタカナの変換設定には対応していない *----------------------------------------------------------------------------*/ int ConvSMBtoSJIS(CODECONVINFO *cInfo) @@ -778,16 +778,16 @@ int ConvSMBtoSJIS(CODECONVINFO *cInfo) } -/*----- SHIFT-JISŠ¿ŽšƒR[ƒh‚ðEUCŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +/*----- SHIFT-JIS漢字コードをEUC漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと *----------------------------------------------------------------------------*/ int ConvSJIStoEUC(CODECONVINFO *cInfo) @@ -856,15 +856,15 @@ int ConvSJIStoEUC(CODECONVINFO *cInfo) } -/*----- SHIFT-JIS-->EUCŠ¿ŽšƒR[ƒh‚É•ÏŠ·‚Ì”¼ŠpƒJƒ^ƒJƒi‚̏ˆ— ------------------- +/*----- SHIFT-JIS-->EUC漢字コードに変換の半角カタカナの処理 ------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ -* char Dt : •¶Žš -* char *Put : ƒf[ƒ^ƒZƒbƒgˆÊ’u +* CODECONVINFO *cInfo : 漢字コード変換情報 +* char Dt : 文字 +* char *Put : データセット位置 * * Return Value -* char *ŽŸ‚̃f[ƒ^ƒZƒbƒgˆÊ’u +* char *次のデータセット位置 *----------------------------------------------------------------------------*/ static char *ConvSJIStoEUCkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) @@ -902,21 +902,21 @@ static char *ConvSJIStoEUCkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) } -/*----- SHIFT-JISŠ¿ŽšƒR[ƒh‚ðJISŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +/*----- SHIFT-JIS漢字コードをJIS漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと * -* ƒGƒXƒP[ƒvƒR[ƒh‚́AŽŸ‚Ì‚à‚Ì‚ðŽg—p‚·‚é -* Š¿ŽšŠJŽn $B -* ”¼ŠpƒJƒiŠJŽn (I -* Š¿ŽšI—¹ (B +* エスケープコードは、次のものを使用する +* 漢字開始 $B +* 半角カナ開始 (I +* 漢字終了 (B *----------------------------------------------------------------------------*/ int ConvSJIStoJIS(CODECONVINFO *cInfo) @@ -1008,15 +1008,15 @@ int ConvSJIStoJIS(CODECONVINFO *cInfo) } -/*----- SHIFT-JIS-->JISŠ¿ŽšƒR[ƒh‚É•ÏŠ·‚Ì”¼ŠpƒJƒ^ƒJƒi‚̏ˆ— ------------------- +/*----- SHIFT-JIS-->JIS漢字コードに変換の半角カタカナの処理 ------------------- * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ -* char Dt : •¶Žš -* char *Put : ƒf[ƒ^ƒZƒbƒgˆÊ’u +* CODECONVINFO *cInfo : 漢字コード変換情報 +* char Dt : 文字 +* char *Put : データセット位置 * * Return Value -* char *ŽŸ‚̃f[ƒ^ƒZƒbƒgˆÊ’u +* char *次のデータセット位置 *----------------------------------------------------------------------------*/ static char *ConvSJIStoJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) @@ -1066,18 +1066,18 @@ static char *ConvSJIStoJISkanaProc(CODECONVINFO *cInfo, char Dt, char *Put) } -/*----- SHIFT-JISŠ¿ŽšƒR[ƒh‚ðSamba-HEXŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------ +/*----- SHIFT-JIS漢字コードをSamba-HEX漢字コードに変換 ------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ -* •ªŠ„‚³‚ꂽ“ü—Í•¶Žš—ñ‚Ì•ÏŠ·‚̓Tƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ -* ”¼ŠpƒJƒ^ƒJƒi‚Ì•ÏŠ·Ý’è‚ɂ͑Ήž‚µ‚Ä‚¢‚È‚¢ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと +* 分割された入力文字列の変換はサポートしていない +* 半角カタカナの変換設定には対応していない *----------------------------------------------------------------------------*/ int ConvSJIStoSMB_HEX(CODECONVINFO *cInfo) @@ -1125,17 +1125,17 @@ int ConvSJIStoSMB_HEX(CODECONVINFO *cInfo) } -/*----- SHIFT-JISŠ¿ŽšƒR[ƒh‚ðSamba-CAPŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------ +/*----- SHIFT-JIS漢字コードをSamba-CAP漢字コードに変換 ------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ -* •ªŠ„‚³‚ꂽ“ü—Í•¶Žš—ñ‚Ì•ÏŠ·‚̓Tƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと +* 分割された入力文字列の変換はサポートしていない *----------------------------------------------------------------------------*/ int ConvSJIStoSMB_CAP(CODECONVINFO *cInfo) @@ -1174,13 +1174,13 @@ int ConvSJIStoSMB_CAP(CODECONVINFO *cInfo) } -/*----- ‚PƒoƒCƒgƒJƒ^ƒJƒi‚ðJISŠ¿ŽšƒR[ƒh‚É•ÏŠ· --------------------------------- +/*----- 1バイトカタカナをJIS漢字コードに変換 --------------------------------- * * Parameter -* char Ch : ‚PƒoƒCƒgƒJƒ^ƒJƒiƒR[ƒh +* char Ch : 1バイトカタカナコード * * Return Value -* int JISŠ¿ŽšƒR[ƒh +* int JIS漢字コード *----------------------------------------------------------------------------*/ static int HanKataToZen(char Ch) @@ -1200,14 +1200,14 @@ static int HanKataToZen(char Ch) } -/*----- ‘÷‰¹^”¼‘÷‰¹‚ɂȂ镶Žš‚©ƒ`ƒFƒbƒN -------------------------------------- +/*----- 濁音/半濁音になる文字かチェック -------------------------------------- * * Parameter -* char Ch : ‚PƒoƒCƒgƒJƒ^ƒJƒiƒR[ƒh -* char Daku : ‘÷“_^”¼‘÷“_ +* char Ch : 1バイトカタカナコード +* char Daku : 濁点/半濁点 * * Return Value -* int •¶ŽšƒR[ƒh‚ɉÁ‚¦‚é’l (0=‘÷‰¹^”¼‘÷‰¹‚É‚È‚ç‚È‚¢) +* int 文字コードに加える値 (0=濁音/半濁音にならない) *----------------------------------------------------------------------------*/ static int AskDakuon(char Ch, char Daku) @@ -1244,15 +1244,15 @@ static int AskDakuon(char Ch, char Daku) -/*----- •¶Žš—ñ‚ÌŠ¿ŽšƒR[ƒh‚𒲂ׁAShift-JIS‚É•ÏŠ· ----------------------------- +/*----- 文字列の漢字コードを調べ、Shift-JISに変換 ----------------------------- * * Parameter -* char *Text : •¶Žš—ñ -* int Pref : SJIS/EUC‚Ì—DæŽw’è -– KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUC‚̃`ƒFƒbƒN‚Í‚µ‚È‚¢ +* char *Text : 文字列 +* int Pref : SJIS/EUCの優先指定 +* KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUCのチェックはしない * * Return Value -* ‚È‚µ +* なし *----------------------------------------------------------------------------*/ void ConvAutoToSJIS(char *Text, int Pref) @@ -1294,16 +1294,16 @@ void ConvAutoToSJIS(char *Text, int Pref) } -/*----- Žg‚í‚ê‚Ä‚¢‚銿ŽšƒR[ƒh‚𒲂ׂé ---------------------------------------- +/*----- 使われている漢字コードを調べる ---------------------------------------- * * Parameter -* char *Text : •¶Žš—ñ -* int Size : •¶Žš—ñ‚Ì’·‚³ -* int Pref : SJIS/EUC‚Ì—DæŽw’è -– KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUC‚̃`ƒFƒbƒN‚Í‚µ‚È‚¢ +* char *Text : 文字列 +* int Size : 文字列の長さ +* int Pref : SJIS/EUCの優先指定 +* KANJI_SJIS / KANJI_EUC / KANJI_NOCNV=SJIS/EUCのチェックはしない * * Return Value -* int Š¿ŽšƒR[ƒh (KANJI_xxx) +* int 漢字コード (KANJI_xxx) *----------------------------------------------------------------------------*/ int CheckKanjiCode(char *Text, int Size, int Pref) @@ -1320,7 +1320,7 @@ int CheckKanjiCode(char *Text, int Size, int Pref) Ret = -1; Btm = Text + Size; - /* JISŠ¿ŽšƒR[ƒh‚̃`ƒFƒbƒN */ + /* JIS漢字コードのチェック */ Pos = Text; while((Pos = memchr(Pos, 0x1b, Btm-Pos-2)) != NULL) { @@ -1334,7 +1334,7 @@ int CheckKanjiCode(char *Text, int Size, int Pref) } } - /* EUC‚ÆSHIFT-JISŠ¿ŽšƒR[ƒh‚̃`ƒFƒbƒN */ + /* EUCとSHIFT-JIS漢字コードのチェック */ if(Ret == -1) { if(Pref != KANJI_NOCNV) @@ -1368,17 +1368,17 @@ int CheckKanjiCode(char *Text, int Size, int Pref) } -/*----- SHIFT-JISƒR[ƒh‚̉”\«‚ª‚ ‚é‚©ƒ`ƒFƒbƒN -------------------------------- +/*----- SHIFT-JISコードの可能性があるかチェック -------------------------------- * * Parameter -* uchar *Pos : •¶Žš—ñ -* uchar *Btm : •¶Žš—ñ‚Ì––”ö +* uchar *Pos : 文字列 +* uchar *Btm : 文字列の末尾 * * Return Value -* int “¾“_ +* int 得点 * * Note -* High 81-FF (A0-DF‚Í”¼Šp) (EBˆÈ~‚Í‚Ù‚Æ‚ñ‚Ç–³‚¢) +* High 81-FF (A0-DFは半角) (EB以降はほとんど無い) * Low 40-FC *----------------------------------------------------------------------------*/ @@ -1393,36 +1393,36 @@ static int CheckOnSJIS(uchar *Pos, uchar *Btm) { if(FstOnTwo == YES) { - if((*Pos < 0x40) || (*Pos > 0xFC)) /* 2ƒoƒCƒg–Ú‚Í 0x40`0xFC */ + if((*Pos < 0x40) || (*Pos > 0xFC)) /* 2バイト目は 0x40~0xFC */ Point = 0; FstOnTwo = NO; } else if(*Pos >= 0x81) { - if((*Pos < 0xA0) || (*Pos > 0xDF)) /* ”¼ŠpƒJƒi‚Å‚È‚¯‚ê‚Î */ + if((*Pos < 0xA0) || (*Pos > 0xDF)) /* 半角カナでなければ */ { - if(*Pos >= 0xEB) /* 1ƒoƒCƒg–Ú‚Í0xEBˆÈ~‚Í‚Ù‚Æ‚ñ‚Ç–³‚¢ */ + if(*Pos >= 0xEB) /* 1バイト目は0xEB以降はほとんど無い */ Point -= 50; FstOnTwo = YES; } } Pos++; } - if(FstOnTwo == YES) /* ‚PƒoƒCƒg–ڂŏI‚í‚Á‚Ä‚¢‚é‚Ì‚Í‚¨‚©‚µ‚¢ */ + if(FstOnTwo == YES) /* 1バイト目で終わっているのはおかしい */ Point = 0; return(Point); } -/*----- EUCƒR[ƒh‚̉”\«‚ª‚ ‚é‚©ƒ`ƒFƒbƒN ------------------------------------- +/*----- EUCコードの可能性があるかチェック ------------------------------------- * * Parameter -* uchar *Pos : •¶Žš—ñ -* uchar *Btm : •¶Žš—ñ‚Ì––”ö +* uchar *Pos : 文字列 +* uchar *Btm : 文字列の末尾 * * Return Value -* int “¾“_ +* int 得点 * * Note * High A1-FE , 8E @@ -1440,43 +1440,43 @@ static int CheckOnEUC(uchar *Pos, uchar *Btm) { if(FstOnTwo == 1) { - if((*Pos < 0xA1) || (*Pos > 0xFE)) /* 2ƒoƒCƒg–Ú‚Í 0xA1`0xFE */ + if((*Pos < 0xA1) || (*Pos > 0xFE)) /* 2バイト目は 0xA1~0xFE */ Point = 0; FstOnTwo = 0; } - else if(FstOnTwo == 2) /* ”¼ŠpƒJƒi */ + else if(FstOnTwo == 2) /* 半角カナ */ { - if((*Pos < 0xA0) || (*Pos > 0xDF)) /* 2ƒoƒCƒg–Ú‚Í 0xA0`0xDF */ + if((*Pos < 0xA0) || (*Pos > 0xDF)) /* 2バイト目は 0xA0~0xDF */ Point = 0; FstOnTwo = 0; } else { - if(*Pos == 0x8E) /* 0x8E??‚Í”¼ŠpƒJƒi */ + if(*Pos == 0x8E) /* 0x8E??は半角カナ */ FstOnTwo = 2; else if((*Pos >= 0xA1) && (*Pos <= 0xFE)) FstOnTwo = 1; } Pos++; } - if(FstOnTwo != 0) /* ‚PƒoƒCƒg–ڂŏI‚í‚Á‚Ä‚¢‚é‚Ì‚Í‚¨‚©‚µ‚¢ */ + if(FstOnTwo != 0) /* 1バイト目で終わっているのはおかしい */ Point = 0; return(Point); } -// UTF-8N‘Ήž ‚±‚±‚©‚火 -/*----- UTF-8NŠ¿ŽšƒR[ƒh‚ðSHIFT-JISŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +// UTF-8対応 ここから↓ +/*----- UTF-8漢字コードをSHIFT-JIS漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと *----------------------------------------------------------------------------*/ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) @@ -1486,8 +1486,8 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) // char temp_string[2048]; int string_length; - // ‘å‚«‚¢ƒTƒCƒY‚ɑΉž - // I’[‚ÌNULL‚ðŠÜ‚ÞƒoƒO‚ðC³ + // 大きいサイズに対応 + // 終端のNULLを含むバグを修正 int SrcLength; char* pSrc; wchar_t* pUTF16; @@ -1496,16 +1496,16 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) Continue = NO; - // ¶¬‚³‚ê‚é’†ŠÔƒR[ƒh‚̃TƒCƒY‚𒲂ׂé + // 生成される中間コードのサイズを調べる // string_length = MultiByteToWideChar( -// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 0 // Ši”[æƒTƒCƒY +// CP_UTF8, // 変換先文字コード +// 0, // フラグ(0:なし) +// cInfo->Str, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// NULL, // 変換した文字列の格納先 +// 0 // 格納先サイズ // ); - // ‘O‰ñ‚Ì•ÏŠ·•s”\‚ÈŽc‚è‚Ì•¶Žš—ñ‚ð“ü—͂̐擪‚ÉŒ‹‡ + // 前回の変換不能な残りの文字列を入力の先頭に結合 SrcLength = cInfo->StrLen + cInfo->EscUTF8Len; if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1)))) { @@ -1516,12 +1516,12 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen); *(pSrc + SrcLength) = '\0'; - // UTF-8‚̏ꍇA•sŠ®‘S‚È•¶Žš‚͏í‚É•ÏŠ·‚³‚ê‚È‚¢ + // UTF-8の場合、不完全な文字は常に変換されない UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, NULL, 0); - // ƒTƒCƒY0 or ƒoƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚Í - // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA - // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B + // サイズ0 or バッファサイズより大きい場合は + // cInfo->Bufの最初に'\0'を入れて、 + // cInfo->BufSizeに0を入れて返す。 // if( string_length == 0 || // string_length >= 1024 ){ // *(cInfo->Buf) = '\0'; @@ -1536,32 +1536,32 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) return Continue; } - // ’†ŠÔƒR[ƒh(unicode)‚É•ÏŠ· + // 中間コード(unicode)に変換 // MultiByteToWideChar( -// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 1024 // Ši”[æƒTƒCƒY +// CP_UTF8, // 変換先文字コード +// 0, // フラグ(0:なし) +// cInfo->Str, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// (unsigned short *)temp_string, // 変換した文字列の格納先 +// 1024 // 格納先サイズ // ); MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, pUTF16, UTF16Length); - // ¶¬‚³‚ê‚éUTF-8ƒR[ƒh‚̃TƒCƒY‚𒲂ׂé + // 生成されるUTF-8コードのサイズを調べる // string_length = WideCharToMultiByte( -// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 0, // Ši”[æƒTƒCƒY +// CP_ACP, // 変換先文字コード +// 0, // フラグ(0:なし) +// (unsigned short *)temp_string, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// NULL, // 変換した文字列の格納先 +// 0, // 格納先サイズ // NULL,NULL // ); string_length = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); - // ƒTƒCƒY0 or o—̓oƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A - // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA - // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B + // サイズ0 or 出力バッファサイズより大きい場合は、 + // cInfo->Bufの最初に'\0'を入れて、 + // cInfo->BufSizeに0を入れて返す。 // if( string_length == 0 || // string_length >= cInfo->BufSize ){ // *(cInfo->Buf) = '\0'; @@ -1569,29 +1569,29 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) // return(Continue); // } - // o—̓TƒCƒY‚ðÝ’è + // 出力サイズを設定 // cInfo->OutLen = string_length; - // UTF-8ƒR[ƒh‚É•ÏŠ· + // UTF-8コードに変換 // WideCharToMultiByte( -// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) -// cInfo->BufSize, // Ši”[æƒTƒCƒY +// CP_ACP, // 変換先文字コード +// 0, // フラグ(0:なし) +// (unsigned short *)temp_string, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// cInfo->Buf, // 変換した文字列の格納先(BOM:3bytes) +// cInfo->BufSize, // 格納先サイズ // NULL,NULL // ); cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); - // ƒoƒbƒtƒ@‚ÉŽû‚Ü‚ç‚È‚¢‚½‚ß•ÏŠ·•¶Žš”‚𔼌¸ + // バッファに収まらないため変換文字数を半減 while(cInfo->OutLen == 0 && UTF16Length > 0) { UTF16Length = UTF16Length / 2; cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); } - // •ÏŠ·‚³‚ꂽŒ³‚Ì•¶Žš—ñ‚Å‚Ì•¶Žš”‚ðŽæ“¾ + // 変換された元の文字列での文字数を取得 Count = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); - // •ÏŠ·‰Â”\‚ÈŽc‚è‚Ì•¶Žš”‚ðŽæ“¾ + // 変換可能な残りの文字数を取得 UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc + Count, SrcLength - Count, NULL, 0); cInfo->Str += Count - cInfo->EscUTF8Len; cInfo->StrLen -= Count - cInfo->EscUTF8Len; @@ -1600,7 +1600,7 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) Continue = YES; else { - // •ÏŠ·•s”\‚È‚½‚ߎŸ‚Ì“ü—͂̐擪‚ÉŒ‹‡ + // 変換不能なため次の入力の先頭に結合 memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen); cInfo->EscUTF8Len = cInfo->StrLen; cInfo->Str += cInfo->StrLen; @@ -1614,16 +1614,16 @@ int ConvUTF8NtoSJIS(CODECONVINFO *cInfo) return(Continue); } -/*----- SHIFT-JISŠ¿ŽšƒR[ƒh‚ðUTF-8NŠ¿ŽšƒR[ƒh‚É•ÏŠ· ------------------------------ +/*----- SHIFT-JIS漢字コードをUTF-8漢字コードに変換 ------------------------------ * * Parameter -* CODECONVINFO *cInfo : Š¿ŽšƒR[ƒh•ÏŠ·î•ñ +* CODECONVINFO *cInfo : 漢字コード変換情報 * * Return Value -* int ‚­‚è•Ô‚µƒtƒ‰ƒO (YES/NO) +* int くり返しフラグ (YES/NO) * * Note -* ‚­‚è•Ô‚µƒtƒ‰ƒO‚ªYES‚ÌŽž‚́AcInfo‚Ì“à—e‚ð•Ï‚¦‚¸‚É‚à‚¤ˆê“xŒÄ‚Ô‚±‚Æ +* くり返しフラグがYESの時は、cInfoの内容を変えずにもう一度呼ぶこと *----------------------------------------------------------------------------*/ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) { @@ -1632,8 +1632,8 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) // char temp_string[2048]; int string_length; - // ‘å‚«‚¢ƒTƒCƒY‚ɑΉž - // I’[‚ÌNULL‚ðŠÜ‚ÞƒoƒO‚ðC³ + // 大きいサイズに対応 + // 終端のNULLを含むバグを修正 int SrcLength; char* pSrc; wchar_t* pUTF16; @@ -1642,16 +1642,16 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) Continue = NO; - // ¶¬‚³‚ê‚é’†ŠÔƒR[ƒh‚̃TƒCƒY‚𒲂ׂé + // 生成される中間コードのサイズを調べる // string_length = MultiByteToWideChar( -// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 0 // Ši”[æƒTƒCƒY +// CP_ACP, // 変換先文字コード +// 0, // フラグ(0:なし) +// cInfo->Str, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// NULL, // 変換した文字列の格納先 +// 0 // 格納先サイズ // ); - // ‘O‰ñ‚Ì•ÏŠ·•s”\‚ÈŽc‚è‚Ì•¶Žš—ñ‚ð“ü—͂̐擪‚ÉŒ‹‡ + // 前回の変換不能な残りの文字列を入力の先頭に結合 SrcLength = cInfo->StrLen + cInfo->EscUTF8Len; if(!(pSrc = (char*)malloc(sizeof(char) * (SrcLength + 1)))) { @@ -1662,7 +1662,7 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) memcpy(pSrc, cInfo->EscUTF8, sizeof(char) * cInfo->EscUTF8Len); memcpy(pSrc + cInfo->EscUTF8Len, cInfo->Str, sizeof(char) * cInfo->StrLen); *(pSrc + SrcLength) = '\0'; - // Shift_JIS‚̏ꍇA•sŠ®‘S‚È•¶Žš‚Å‚à•ÏŠ·‚³‚ê‚邱‚Æ‚ª‚ ‚邽‚߁A––”ö‚Ì•sŠ®‘S‚È•”•ª‚ðí‚é + // Shift_JISの場合、不完全な文字でも変換されることがあるため、末尾の不完全な部分を削る Count = 0; while(Count < SrcLength) { @@ -1683,9 +1683,9 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) SrcLength = Count; UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, NULL, 0); - // ƒTƒCƒY0 or ƒoƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A - // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA - // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B + // サイズ0 or バッファサイズより大きい場合は、 + // cInfo->Bufの最初に'\0'を入れて、 + // cInfo->BufSizeに0を入れて返す。 // if( string_length == 0 || // string_length >= 1024 ){ // *(cInfo->Buf) = '\0'; @@ -1700,32 +1700,32 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) return Continue; } - // ’†ŠÔƒR[ƒh(unicode)‚É•ÏŠ· + // 中間コード(unicode)に変換 // MultiByteToWideChar( -// CP_ACP, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// cInfo->Str, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// (unsigned short *)temp_string, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 1024 // Ši”[æƒTƒCƒY +// CP_ACP, // 変換先文字コード +// 0, // フラグ(0:なし) +// cInfo->Str, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// (unsigned short *)temp_string, // 変換した文字列の格納先 +// 1024 // 格納先サイズ // ); MultiByteToWideChar(CP_ACP, 0, pSrc, SrcLength, pUTF16, UTF16Length); - // ¶¬‚³‚ê‚éUTF-8ƒR[ƒh‚̃TƒCƒY‚𒲂ׂé + // 生成されるUTF-8コードのサイズを調べる // string_length = WideCharToMultiByte( -// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// NULL, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ -// 0, // Ši”[æƒTƒCƒY +// CP_UTF8, // 変換先文字コード +// 0, // フラグ(0:なし) +// (unsigned short *)temp_string, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// NULL, // 変換した文字列の格納先 +// 0, // 格納先サイズ // NULL,NULL // ); string_length = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); - // ƒTƒCƒY0 or o—̓oƒbƒtƒ@ƒTƒCƒY‚æ‚è‘å‚«‚¢ê‡‚́A - // cInfo->Buf‚̍ŏ‰‚É'\0'‚ð“ü‚ê‚āA - // cInfo->BufSize‚É0‚ð“ü‚ê‚Ä•Ô‚·B + // サイズ0 or 出力バッファサイズより大きい場合は、 + // cInfo->Bufの最初に'\0'を入れて、 + // cInfo->BufSizeに0を入れて返す。 // if( string_length == 0 || // string_length >= cInfo->BufSize ){ // *(cInfo->Buf) = '\0'; @@ -1733,37 +1733,37 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) // return(Continue); // } - // o—̓TƒCƒY‚ðÝ’è + // 出力サイズを設定 // cInfo->OutLen = string_length; /* - // «•t‚¯‚¿‚Ⴞ‚ß ƒRƒ}ƒ“ƒh‚É‚à’ljÁ‚³‚ê‚Ä‚µ‚Ü‚¤ - // o—Í•¶Žš—ñ‚̐擪‚ÉBOM(byte order mark)‚ð‚‚¯‚é + // ↓付けちゃだめ コマンドにも追加されてしまう + // 出力文字列の先頭にBOM(byte order mark)をつける *(cInfo->Buf) = (char)0xef; *(cInfo->Buf+1) = (char)0xbb; *(cInfo->Buf+2) = (char)0xbf; */ - // UTF-8ƒR[ƒh‚É•ÏŠ· + // UTF-8コードに変換 // WideCharToMultiByte( -// CP_UTF8, // •ÏŠ·æ•¶ŽšƒR[ƒh -// 0, // ƒtƒ‰ƒO(0:‚È‚µ) -// (unsigned short *)temp_string, // •ÏŠ·Œ³•¶Žš—ñ -// -1, // •ÏŠ·Œ³•¶Žš—ñƒoƒCƒg”(-1:Ž©“®) -// cInfo->Buf, // •ÏŠ·‚µ‚½•¶Žš—ñ‚ÌŠi”[æ(BOM:3bytes) -// cInfo->BufSize, // Ši”[æƒTƒCƒY +// CP_UTF8, // 変換先文字コード +// 0, // フラグ(0:なし) +// (unsigned short *)temp_string, // 変換元文字列 +// -1, // 変換元文字列バイト数(-1:自動) +// cInfo->Buf, // 変換した文字列の格納先(BOM:3bytes) +// cInfo->BufSize, // 格納先サイズ // NULL,NULL // ); cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); - // ƒoƒbƒtƒ@‚ÉŽû‚Ü‚ç‚È‚¢‚½‚ß•ÏŠ·•¶Žš”‚𔼌¸ + // バッファに収まらないため変換文字数を半減 while(cInfo->OutLen == 0 && UTF16Length > 0) { UTF16Length = UTF16Length / 2; cInfo->OutLen = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL); } - // •ÏŠ·‚³‚ꂽŒ³‚Ì•¶Žš—ñ‚Å‚Ì•¶Žš”‚ðŽæ“¾ + // 変換された元の文字列での文字数を取得 Count = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL); - // •ÏŠ·‰Â”\‚ÈŽc‚è‚Ì•¶Žš”‚ðŽæ“¾ + // 変換可能な残りの文字数を取得 UTF16Length = MultiByteToWideChar(CP_ACP, 0, pSrc + Count, SrcLength - Count, NULL, 0); cInfo->Str += Count - cInfo->EscUTF8Len; cInfo->StrLen -= Count - cInfo->EscUTF8Len; @@ -1772,7 +1772,7 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) Continue = YES; else { - // •ÏŠ·•s”\‚È‚½‚ߎŸ‚Ì“ü—͂̐擪‚ÉŒ‹‡ + // 変換不能なため次の入力の先頭に結合 memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen); cInfo->EscUTF8Len = cInfo->StrLen; cInfo->Str += cInfo->StrLen; @@ -1785,16 +1785,16 @@ int ConvSJIStoUTF8N(CODECONVINFO *cInfo) return(Continue); } -// UTF-8N‘Ήž ‚±‚±‚܂Łª +// UTF-8対応 ここまで↑ -/*----- IBMŠg’£Š¿Žš‚ðNEC‘I’èIBMŠg’£Š¿Žš“™‚É•ÏŠ· ------------------------------- +/*----- IBM拡張漢字をNEC選定IBM拡張漢字等に変換 ------------------------------- * * Parameter -* code Š¿ŽšƒR[ƒh +* code 漢字コード * * Return Value -* int Š¿ŽšƒR[ƒh +* int 漢字コード *----------------------------------------------------------------------------*/ static int ConvertIBMExtendedChar(int code) {