davi さんは書きました:
> で、MSDNによると、 MFCのATLでwchar_t 型なるものが定義されたらしいので、
> そのライブラリへのリンク(って、#define _UNICODE って書けばいいの?)
> を付けて、コード中で
>
> char → TCHAR
> char* → LPTSTR
>
> と一括置換。
>
> あと、#define iskanji(x)、#define iskanji2(x)のコメントアウト。
> 更に0xffや0x80を決め打ちして判断しているif文のコメントアウト。
>
> …そんな辺りで行けそうでしょうか?
入力がマルチバイトのまんまなんだから、wchar_t 使うようにしたって意味ない
ですよ。
POS read_txt(unsigned far *buf, char *file)
{
FILE *fp;
int c, c2;
POS count;
File_Name = file;
Line_No = 1;
if ((fp = fopen(file, "r")) == NULL)
error(ERR_READ);
for (count = 0; (c = fgetc(fp)) != EOF; count++) {//←このfgetcは1バイト
ごとの読み出し
if (iskanji(c)) {
if (iskanji2(c2 = fgetc(fp)))
c = ((c << 8) | c2);//←2バイト文字なら上位下位のペアを組み立てる
else
error(ERR_KANJI);
} else if (c == '\n') {
Line_No++;
}
if (buf != NULL)
buf[count] = c & ~0x8000;//2バイト文字の最上位ビットを落とす
}
fclose(fp);
File_Name = NULL;
return count;
}
つまり、sjisで
C:\home>echo LCSを使う|hexdump
4C 43 53 82 F0 8E 67 82 A4
というバイト並びのイメージを内部的に
004C 0043 0053 02F0 0E67 02A4
という16ビットごとの並びにして、処理を進めているわけです。
-- 木村浩一
--
木村浩一/KIMURA Koichi
I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
mail kbk at kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/index.html