作者: Bruce.
日時: 2008/12/24(16:45)
Bruce.です。
ふたつまとめて。

davi さんは書きました:
> MSDNの引数説明、書式をどうにかして欲しいですね。
> ワザと理解しづらく書いているとしか思えん…。

基本的にあれは機械翻訳そのまま(らしい)ので、日本語で読みやすいことは期待
しないほうが
シアワセでいられると思います。

> でも、元のソースがシッカリしているので、言語を全く知らなくても
> 「多分、こんなことやってるんだろう。」と、流れを想像するだけで
> どうにかなってしまうのがスゴイというか、恐ろしいというか…。
> パソ通時代のプログラマは、やっぱり偉かったんだなぁ。
> 
> ところで、fopen_sを使うと、出力の改行がCR+CR+LF(0D+0D+0A)に
> なっちゃいました。

呼び出した後は通常の fopen と変わらないはずなので、切り替えたことによって
改行がそのようになってしまったというのは考えづらいのですが。
そもそも、オープンモードで 'b' (binary) 指定しているんだし。


> 後の方の出力指定をしている所が c == '\n' となっていたのを
>  c == '\r\n' としてみたり、色々試しましたが、どうも上手く
> 行きませんでした。

'' の中に書けるのは1バイト分だけです。'\r\n' とかしたら
警告が出ると思うんですが。


> で、結局、バイナリで読むのを諦めて、"r"だけにしたら、あっさり解決。
> 文字コード周りはホントに難しいですね…。

それ文字コード関係ありません><

> 
> 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と比較するとか、
> そんな処理が頻出しているので、漢字コードの範囲指定ではなさそうな気も…。

この断片だけ見てもなんとも判断できませんが、0x80 や 0x8000 は
それぞれ char, (DOS用Cコンパイラの大半での) int の最上位ビットを示してま
すから
まあその辺でなんかやってるんでしょう。
0xffは unsigned char の max value ですね。

-- 
木村浩一/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