今年の汚れ、今年もウチに
おいおいあとひと月ぐらいで今年終わっちゃうじゃんか。どうなってんだ(俺の中の時間の流れ的な意味で…)。
んー
そういや 2.4.2-jpfix のバイナリ、いちおう作ってはおいたんだけど上げたほうがいいんスかねえ…。
(正直、Win95+Cirrus の構成が 586+NoSMP でないと動かせなかったのでけっこう萎えている)。
俺と Win32 コンソール(2):半分冗談で msvc/mingw32 用のオレオレ getch を模索してみた
いわゆる「澤」問題。よりくわしく言うと「getch でカーソルキーとか押すと 0xE0 のプレフィックスがついちゃって DBCS 入力にものすごくさしさわりがってゆうかこれじゃカーソルだか 2byte 文字だか判別しようがねーだろゴルァ」問題。(詳しいの?それって詳しいの?)。
ちなみにプレフィクスが 0xE0 になるのって実はマイクロソフトのランタイムだけっぽいのさ…そもそも <conio.h> の関数って dos 時代に作られた dos 特化のコンソール入出力関数なのに、この件に限って言えばマイクロソフトだけが dos 時代の Microsoft C/C++ と挙動が違うんですよ(dos 時代の _getch はカーソルキー押してもプレフィクスは 0xE0 にならない。0 のまま)。ちなみに Borland とかの他社製は dos 時代の仕様に合わせてたりする。テンキー統合のカーソルキーと独立のカーソルキーを別個に判別したいという需要があったのかもしれないけど、それならそれ相応の関数を別に作っても良かったじゃん…。
つまり何が言いたいかと申しますと、MS の _getch は DBCS 入力のことなんてなーんも考えておらんということです。ここで採りうるソリューション:
- _getch をあきらめる。Win32 のコンソールAPI を自前で使う(_getch 代替関数の作成も含めて)
- Microsoft や mingw をあきらめる。Borland, DigitalMars, OpenWatcom の検討
- DBCS をあきらめる(その1)。コンソールで日本語なんて入力しませんよJK
- DBCS をあきらめる(その2)。_getwch で Unicode 受け(さようなら Win9x)。
いちばん正しい道は 1. だと思うのですが、個人的な趣味により、もっとも変態的なアプローチを考えてみました。
続きを読む