作者: davi
日時: 2008/12/24(06:09)
Bruce.さん  <  こん??は でび です

On Wed, 24 Dec 2008 04:53:32 +0900
"davi" <davi-1984@...> wrote:

> パソ通時代のプログラマは、やっぱり偉かったんだなぁ。

に関連してなんですが、元のソースだと、

> if ((dt = Buf[list_s]) > 0xff)

> putchar((dt >> 8) | 0x80);

> if ((Buf[op] & 0x8000) != 0) {

> Buf[tmp_op] &= ~0x8000;

のように、0x80や0xffや0x8000が頻出します。

これって多分、S-JIS対応させるための処理とかなんでしょうけど、
0x80や0xffや0x8000は、それぞれ、如何なる意味で重要なのでしょうか?

0x80はS-JISやJISでのASCII文字の最後。
0xffはS-JISやJISでの半角部分(ASCII文字+半角カタカナ)の最後。
という意味かな?と想像しましたが、それでOK?

(なお、昔、PerlCGIとかで泣かされた、いわゆる「ダメ文字」処理の
ようなものは入っていないようです。)

あと、0x8000の意味がどうしてもわかりません。
10進に直しても、32768って数字には1024とか256みたいなキリの良さげな
感じがありません。

S-JISで漢字開始なら8140とすべきだろうし、JISなら2120か2121だろうよ、と…。

でも、常に読み込んだ文字列に付け足すとか、|で選択して0と比較するとか、
そんな処理が頻出しているので、漢字コードの範囲指定ではなさそうな気も…。

でび  http://davi.txt-nifty.com/1984/