作者: Bruce.
日時: 2008/12/25(21:36)
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