小野田洋仁郎見た

2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|12|
2011|01|
2012|12|
2013|01|
2021|01|02|04|10|
2023|04|

2003年03月04日(火) [長年日記]

MOMITSU製DivX再生DVDプレーヤー

を、そのうち購入予定。最近全然使ってないTVチューナー付きキャプチャカードもこれで復活でしょうか。というかキャプチャカードから直接DivXなムービーを作ってくれるソフトってどっかにあるかなあ……。

AllegroShiftJIS対応実験(覚え書き)

小野田が以前から気楽にゲームを作るときに利用しているライブラリ「Allegro」ですが、こいつはUnicodeに一応対応したりしています。が、Unicodeな文字は現状ソース中に直接書けなかったりと使い勝手が悪いので、日本で一般的に使われているShiftJISを渡したくなるのが人情というものですが、悲しいことにAllegroの開発メンバーに日本人がいないのか、AllegroはShiftJISに対応していないのです。

要はウィンドウタイトルの文字列設定時などの処理の流れは「あらかじめ現在のコードをセット(U_ASCIIだとかU_UNICODEだとか)」「set_window_titleだかでウィンドウのタイトルを設定するために文字列を渡す」「その文字列が現在設定されている文字コードから内部的にUnicodeに変換される」「Unicodeに変換されたあとにU_ASCII(まあ英字のみ)に変換されて、その結果がウィンドウタイトルの文字として使われる」といった感じになるわけですが、この、U_ASCIIに変換されちまうというのがガンなんです。つまりShiftJISで漢字を渡したときにまずその文字コードが強引にUnicodeに変更され(デフォルトではU_ASCIIかなんかの英語モードになっているので、この段階でおかしなデータになる)、そのUnicodeがU_ASCIIに変換されるため、ワケわからん文字に変換されてしまうわけです。

で、どうしたらいいかというと、ShiftJISとUnicodeの相互変換処理を自前で書けば何とかなるんですね。Allegroにはその相互変換をうまいことやってくれる仕組みがあるので、そのフォーマットにあうように処理をいくつか書くだけですから、簡単は簡単です。ただ、ShiftJISとUnicodeの間には計算で求まる変換規則などは存在しないため、デカいテーブルを書いてそっから拾うようにするのが一般的です(多分)。通常は「この文字コードからこの文字コードの範囲内の場合、テーブルの『指定場所+オフセット』の位置から変換先データを拾ってくる」という処理になるんですが、ShiftJIS->UnicodeはともかくUnicode->ShiftJISの範囲をいちいち調べるのも面倒なので、完全に1対1のテーブルを用意して単純に頭から検索するような処理にしてしまいました(遅すぎ)。で、組み込んでみたところ、アッサリ動きました(当然set_window_titleでU_ASCIIに変換していた部分はU_SHIFTJIS(新規に作ったShiftJISモード)に変更)。

ただまあ、費やした労力のわりにはたいしてうまみのない改造ではあります。せいぜい前述のウィンドウタイトルの設定だとか、iniファイルの読み書きがうまくいくくらいなので。Allegroの文字列描画処理でShiftJISをダイレクトに使えれば多少魅力的ではありますが、Allegro用の漢字フォント(Unicode)が無いので、どうしょうもありません。そのうち漢字フォントでも作って表示実験でもしてみますかね……。

と、なんか長くなったわりには中身のない内容と相成りました。ShiftJIS対応に興味のある人はツッコミ入れてください。あと、高速なShiftJIS<->Unicode変換処理をくれる親切な人も募集中です。

松井猛打賞

大活躍のようで何よりです。シーズンに入ってどの程度活躍するのかがミモノですね。


2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|12|
2011|01|
2012|12|
2013|01|
2021|01|02|04|10|
2023|04|