なぜか、コンパイル後のプログラムが動いてくれない…

どういうわけか、条件式が、自分の思い描いている結果とは全く逆の動作を行ってくれたのです。100回はコンパイルしなおして、チョコチョコと確認も行ったのですが、治りません…

くそ、くそ、どうしてなんだ〜!

ともだえ苦しんでいたところ、ん?ん?あれ?これって…

そう、ただ単に成功するとtrueが返り、失敗するとfalseが返る関数を

if ( x(n) ) {
//失敗した場合の処理
}

なんて書いていたせいでした。orz

死んでしまえ自分(あうあう(泣き

疲れているときにプログラム組んじゃだめって、よくわかりました。

MacOSXでOpenGL

2005年2月11日 お仕事
唐突に書いてみる。

とりあえず、AppleDeveloperConnectionにアクセスして、ログイン(ID貰っていない人はとりあえず、IDもらうことから始める)。で、DownloadSoftwareからOpenGL Toolsを選択して、ダウンロード、インストール。

その後、ヘッダの参照をかわす為にgl.hとglu.hのシンボリックリンクを/usr/local/include/GLに貼る。
フォルダが無い場合は作る。

> sudo mkdir /usr/local/include
> sudo mkdir /usr/local/include/GL
> cd /usr/local/include/GL
> sudo ln -s /System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h
> sudo ln -s /System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/glu.h

で、前準備は完了。
後は、ソース内でお決まりの

#include <GL/gl.h>
#include <GL/glu.h>

と、gccのオプションで

-framework OpenGL

としてやればOK。

簡単だった…
今まで、あまり触れることがなかったが、フリーで実用的なゲーム用音楽として、MIDIやMP3以上に期待が持てるものに、MODというものがある。

海外では今まで数多く利用されてきたようだが、SDL_mixerでもその評価は高かったらしく、MikiModというライブラリを介して再生できるようになっている。

で、再生できるのはいいのだが、肝心の音源が無ければどうしようもない。
自分が見つけたすばらしいサイトはModArchiveという場所。

http://www.modarchive.com

ここで配布されている音源は、全て、オリジナルのままでの再配布が許可されている。つまり、数え切れないほどのすばらしい音源が無料で、加工さえしなければ再配布も可能である。

というわけで、今度はこれを利用してみようと思う。
というわけで、ボタンオブジェクトを状態遷移図を用いて表現すれば、Tipsとしてわかりやすくなるかと思い、 JUDEを用いて状態チャート図を描いてみた。

http://ilaliart.55street.net/tips/sdl_btn/sdl_btn00.png

意外と使える…

次のTipsはボタン作成になりそうです。
今まで、ずーっと気づいていなかった(というか、知っていたのに全然忘れていた)のだが、GPLに準拠したフリーの素材というのは山ほどある。そういえば、普段何気に使っているGnomeのテーマも、GPLに準拠していればその中身はいくらでも使い放題である。

http://themes.freshmeat.net

色々と探した結果、Michael Doches氏のAmaranthIconsや、GreenIcons、SteelIconsなどは素晴らしいできで、しかもGPL。Silmarys氏のKweather New Iconsも、何か他のものに使えそう。
やはり、国内よりも国外の方がフリーという点では勝っている。

がっちがちに固められた、利己主義的な国内の素材ライセンスに対して、GPLのようなライセンスが浸透してくれないかと願わずにはいられない。
SDL_mixerでmp3を再生してみた。

mixerでのmp3再生にはSMPEGが必要である。SMPEGのコンパイルとインストールさえ行っていれば、SDL_mixerをコンパイルリンクするだけでmp3の再生はできる。

で、再生してみた…音が飛ぶ…
んん?バッファが足りなかったのかと思ってバッファを増やしてみたがやはり音が飛ぶ…使えない機能だー!
と思ったので、oggに切り替える。音は飛ばない…

これは、何か理由があるのだろうが(設定間違いなど)結局mp3は使わないのが良いということだろう。どうせoggがあるし。

気になるなぁ。

それと、Mix_LoadMUS_RW関数が実装されていない問題で、一応USE_RWOPSを定義してやれば動くことがわかった(SDL_mixerのバージョンは1.2.6)。ただし、mikmodも同時にUSE_RWOPSを定義してコンパイルする必要がある。

今日はSDL_mixerを頑張ってお休みなさい。
しかしながら、ユーザが設定できるイベントの数は

SDL_NUMEVENTS-1-SDL_USEREVENT

と設定されているため、

/* Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */
SDL_USEREVENT = 24,
/* This last event is only for bounding internal arrays
It is the number of bits in the event mask datatype -- Uint32
*/
SDL_NUMEVENTS = 32

32-1-24=7

たった、7個である。いや、「7個も」なのかもしれないが、Windowsの標準のユーザ定義メッセージの設定範囲に比べると格段に少ない。しかし、これには訳があった。

/* A user-defined event type */
typedef struct SDL_UserEvent {
    Uint8 type;    /* SDL_USEREVENT through SDL_NUMEVENTS-1 */
    int code;    /* User defined event code */
    void *data1;    /* User defined data pointer */
    void *data2;    /* User defined data pointer */
} SDL_UserEvent;

ユーザイベント定義用の構造体SDL_UserEventには、/*User defined event code*/なるコメントがある。つまり、codeメンバはユーザ定義用に使っていいよという意味である。

ということは、32bit空間をフルに使ったイベント定義が行えるということで、自分の読みの浅さを思い知らされる結果となった。

チュートリアルより何より、SDLはヘッダこそが何よりのドキュメントであることを思い知らされて、今日は寝ようと思う。

どっぷりと…

2005年1月30日 お仕事
浸かってました。バグの海に。

なんというのか、SDLとは奥が深いです。
あぁ、この機能無いから追加しようとか思って作ると、なぜか標準で付いていたり…

SDL_efmという、イベント処理用のライブラリを組んでみたのですが、SDL_events.hにはSDL_EventFilterという便利なコールバックが定義されていて、うわ、すでに実装済みかよと悲しい思いをしました。
ただ、efmの方が、余計なフィルタはカットできるので、今後はefmでやってきたいと思います。

しかし、実際にSDL_EventStateでどの程度効率が上がるのかは不明。ホットスポットはここじゃないと思うのですが、一応調べてみたい部分ではあります。

それと、なぜかバイトの最中にスキーのお誘いがかかった。うーん、最近は滑っていなかったので少し不安。来週の日曜日に行くらしいけど、まぁ楽に滑ってこよう。
現在開発している、SDLと併用して用いることの出来るSDL_Scriptの仕様を書いてみる。

コマンド

A 引数,引数,... ;

文字列表示

"text"

コマンド宣言

defcommand コマンド名,コマンド番号,第一引数型,第二引数型,... ;

オブジェクト宣言

var オブジェクト名,,... ;
string オブジェクト名,... ;
surface オブジェクト名,... ;
savedata オブジェクト名,... ;
musicdata オブジェクト名,... ;
fontdata オブジェクト名,... ;
etc...

コメント

C,C++に対応

具体的な例で書いてみれば

var hoge = 3 ;
"テキストの表示を行います" A ;
// H コマンドを実行
H var ;

となる。
このスクリプトの画面への出力は

テキストの表示を行います3

となる。
このスクリプトを用いる利点は、ハードコードを行わなくて済むという点にある。
このスクリプトは、一端スクリプトコンパイラにて中間コードに変換され、それをSDL_Scriptの各関数で呼び出し、実行を行う。
各コマンドに対しての処理は、各自で実装することが出来、スクリプタの要求に対して、コマンド実装を介した柔軟な対応ができるという利点がある。
また、コマンド名もスクリプト側で自分に合わせて変更することが出来、柔軟なスクリプティングを提供する。

あれやこれやと実装するのは危険なので、かなり絞って実装している。数式、制御構文に対応するかどうかは今後検討予定。今のところ、対応する予定はなし。
偉大ですね〜

前にWindowsへの移植をやってみたxsystem35ですが、SDLを使っていたことがわかって、とりあえずCEコマンドの部分だけでもSDL単体で使えるように移植できないかと試してみた結果、一部移植ができたので、全体を移植している最中です。

いや、これだけでも大助かりで、自分で作る手間が省けました。GPLに則って、後で作者のchikama様に報告するつもりです。

他にも、役に立つ機能が盛り沢山なので、徐々に移植していきたいと思っています。
ずっと悩んでいたMacOSXでのフォント表示、ようやく収まりがつきました。MacOSXに付属の標準ヒラギノフォントを用いて画面所にフォントを表示するプログラムです。

http://kirara.k1.xrea.com/arc/wttf_mac_bin.tgz

実行するには、.dylibファイルを/usr/libの中に入れてあげてください。
いや、でもMacOSでgccってのもなかなか粋なもんだなと思った。Linuxと同じ使い心地。コマンドラインに慣れ親しんでいる人には良い環境だろう。
しかし、コンパイルして配布するには、ダイナミックライブラリをなんとかしてパッケージに含めなければならない。さて、どうするかと悩み中。XCodeを使えばそういうことも可能なのだろうが、多分gccでも可能だと思う。しかし、今の自分の知識ではちょっと無理。

さて、後でまとめてTipsとしてあげよう。
3日も引きずって、何をやっているのかと思うほどに頭の中はこのことしか無い状態…

MacOSXでは、パスの指定にはUTF-8文字列を用いるため、半角だけのパスならいざ知らず、全角文字の入ったパスは、fopenでどうやっても開けなかったのはUTF-8で指定していなかったためと判明。

一応、OpenTypeのヒラギノフォントなどもMacOSX上で開けるようになり、とりあえずフォントの読み込みには成功した。

が、SDL_ttfのバージョンが低いためか、なぜかフォント表示が上手くいかない。明日、もし雉鳩さんが作ったバイナリでフォント表示に失敗したら、とりあえずはバージョンを上げてもらってためすつもり。

というか、雉鳩さんにコンパイルを頼んでいるような状況なので、早めにMacOSXのDevelopmentKitの入ったCDをなんとかしないといけない。これ以上頼るのはちょっとつらいし。

これが終わったら、SDL_ttfを用いたMacOSXでのフォント表示についてTipsを上げます。
MacOSXでは、昨日書いたようなフォントを標準で表示可能なのだが、問題はこれらのフォントをいかにしてプログラム側で指定するかである。
実は、このフォントファイル名を指定しても普通にファイルを開くことができない。どうやら、ファイル名に使われている文字コードに問題があるようだ。

なら、Unicodeで保存すればいいんじゃないか?と思って、とりあえずプログラム側をUnicodeに対応させることにした。

wchar_tは、ANSI Cでunicodeを使うためのワイド文字列変数。これを使うことでプログラム側をunicode対応にできる。で、これを扱うためにはそれぞれ、char型と対となる関数が用意されている。

fopen->wfopen(_wfopen)
fscanf->fwscanf

などがある。で、Windowsでは、これらを使う上で、ちょっとしたコツがいる。

例えば、
_wfopen ( filename, L"r" ) ;
のように、入力ストリームをテキストモードでオープンした場合には、ストリームを流れる文字列はシフトJIS であると推定され、ワイド文字系入力関数を使用してデータを読み込むと、自動的に[シフトJIS → Unicode]変換が行われ、バッファには変換後の Unicode文字列が収納される。

_wfopen( filename, L"rb" ) ;
のように入力ストリームをバイナリモードでオープンした場合には、ストリームを流れる文字列はUnicodeであると推定され、文字コード変換は行われない。読み込まれたデータが Unicode 文字列としてそのままバッファに収納される。

これを間違えて、unicodeファイルをテキストモードでオープンして、fwscanfで文字列が読み込めないという事態となり、永遠と時間を費やした自分はあまりにもあほらしいと思った…

というか、これでもオープンできなかった…なぜ??
SDLを使ったMacOSXでのフォント表示にちょっとした光が見えてきました。

一応、SDL_ttfを使って文字を表示するというのが大前提なのですが、これを使う際にフォントをロードしなければならず、そのフォントがどこにあるのかというので悩んでいました。
で、とりあえず成功したフォントは以下の通りです。

1./Library/Fonts/华文楷体.ttf
2./Library/Fonts/华文仿宋.ttf
3./Library/Fonts/华文宋体.ttf
4./System/Library/Fonts/华文細黒.ttf
5./System/Library/Fonts/华文黒体.ttf

ちょーっとフォントの表示が化けてますが、化けるに十と書いて华
です。
1〜3までは下のような表示になります。
http://kirara.k1.xrea.com/arc/ttf_test.jpg
4,5は、下のような表示になります。
http://kirara.k1.xrea.com/arc/ttf_test2.jpg

とりあえず、今回用いたコードはしたからダウンロードできます。ただ、XCodeではまだ動作未確認なので、確認された方は教えていただけるとうれしいです。

http://kirara.k1.xrea.com/arc/ttf_mac.zip

SDL_ttfでの改行

2004年12月30日 お仕事
ただいま、SDL_ttfでの改行についてのTipsをあげました。

ADVなどに応用が効くと思いますので、是非利用してみてください。

次は、SDL_ttfで、文字列への影の付け方について書いてみようかなと思います。
MacintoshのMacOS9以前でC++コンパイラといえば、Appleが提供しているMPWのMrCppが標準だろう。また、自分が最近使っているSDLも、MPWに対応しているため、色々とMPWでやってみることにした。

でも、今日はちょっと時間が無いので、明日にでも詳しく書こうと思う。

すいません、題名からすると詐欺だけど。
でも、一応画像を表示させるプログラムはできました。
この調子で行けば、多分、お狐様はクロスプラットフォームになるかもしれない。移植の時間があればだけど、ソースはそのまま利用できれば…もしかすると!

でも、MacOSXには対応しないと思う。
再試も(本当は受ける必要はなかったんですよ?本当ですって。)、中間発表用プレゼンも、一通りできて終わって、学校のほうは一段落着きました。さて、こっからは個人的な用事を済ませてしまいたいと思います。あぁ、なんか仕事が山積してるよ…
とりあえず、

・3.xエディタ
・新VS_plot
・サークルのゲーム
・新しいTipsの更新

とデカイのが残っているので、ひとつずつ頑張ろう。。
意外と早く終わりそうなのが新しいTipsの更新。
今回はGTKでの日本語表示について少々書いてみようと思っています。特に、2.4からはglibでもutf-8 local char codeの相互変換ができるようになっているので、そこあたりを詳しく掘り下げてみようかと思っています。

さて、仕事仕事。

GTK+-2.4の

2004年10月10日 お仕事
関連記事をアップしました。
今回は、ベーシックなライブラリのインストール方法についてです。意外とWindows上におけるGTK+アプリケーションの開発については他ページでは触れられていないため、今回はそれらについて自分なりに説明してみました。わからない部分も多いかと思いますが、必要に応じて説明を追加していきたいと思います。

エディタ作成

2004年9月23日 お仕事
System3.xのコマンドラインコンパイラーでは使いにくいので、それらの処理も統合した3.x用のエディタを開発中。公開は10月前半になる模様。

これを用いると、今まで一々マウスでコンパイラを操作していたのが、全てキーボードでコンパイル、リンクできるようになる。これは、AliceBuilderでも同じ。AliceBuilderと違うのは、初期設定無しに手軽に実行できるようになっていること。また、コンパイラとリンカが一番初めから付いてくること。
ツールとして、一番重要なのは、ツール自体にマニュアルの必要性が無いこと。直感的に操作でき、誰にでも簡単に使える。これが一番大切であると思っている。
でも、AliceBuilderの高機能性は、使い慣れてる人にはすごくいいんだよね。というわけで、AliceBuilderとは違う路線で、使いやすいものを目指そうと思います。

そんでもって、スクリーンショット。

http://ilaliart.55street.net/graphics/edit.jpg

だんだんと…

2004年9月5日 お仕事
環境が整ってきたなぁと思う。
昔は、TeXを使うにしても色々とやらなきゃいけないことが沢山あって、セットアップだけでかなりの時間を費やしてきたのに、近頃は一発でインストールが完了する。すごい。。
WinShellも、昔よりも使いやすくなっている。これは、いいなぁ。

GTK+にしてもそう。最近、さらにバージョンがアップした模様。詳しくは
http://gladewin32.sourceforge.net/modules.php?name=News&;;;file=article&sid=20
を熟読すべし。現在のバージョンは2.4.6。

gladeのバグが減っていて、ずいぶんと使いやすくなっている他、インターフェースビルダーが統合。さらに、gtkglext(GTK OpenGL Extention)を統合。もう至れり尽くせりで、最強になっている。これであとはGTKSDLだけかなぁ。

今、そのGTK+-2.0 v2.4.6を使ってエディタを作っています。System3.xのコンパイラーをファンクションキー一発で動かすためのエディター、早くできるように頑張らなきゃ。。

しかし、主任様、「がっつりエロ」とは一体…??

1 2