昔の最近の出来事(2006.07)

2006/07/31

日付け越え前に帰着。

RIBプラグをちょろっと調べて終了。

2006/07/30

昼前起床。

最近Pixieが更新されているので、WingsのRIB出力プラグでどんな 具合か見てみようと思った所、何故かRIBプラグのExportでエラーする ようになっていたり。どうやらテクスチャを含むとダメな模様。 でも、以前いじった所から はソースは全然変わってないんだけどなぁ。

CD-Rドライブのトレーが勝手に出たり引っ込んだり。 以前同じ症状が出たの ですが、その後、何事も無かったかのようになりを潜めていました。 何が契機になっているのか謎。

2006/07/29

昼過ぎ起床。

ぐうたら過ごして一日終了。
gdcでSDLを使う話。よく考えてみたら、mingw対応が必要と判った のはgdcをenable-languagesに含んだgccでSDLのテストソースが コンパイルできなかったという所に端を発していたのですが、 gdcで使用するにはSDLをひっぱってくる為のDコードが必要だったり。 当たり前。

そんな訳で、D言語関係のサイトを回り、 Z-LOCK というD言語で書かれたゲームのソース内に同梱されているSDLのDポートされた ソースと、 こちらのD-porting のサイトのSDLポート内に含まれるテストソースを使ってみたり。

Z-LOCKのimportディレクトリはそのまま使用するのですが、 bulletml.d(弾幕記述言語のDポート)とSDL_mixer.dは *.d.xxx などとして外して、SDLのtest/testgl.cのDポート testgl.dを 以下のようなコマンドラインでコンパイルしてみました。

gdc -O2 -mwindows -mno-cygwin -I../import testgl.d ../import/*.d /usr/local/lib/libSDL.dll.a -lglu32 -lopengl32 -lm

一応実行バイナリは生成できて実行もOKそう。
因みにbulletml.dを外したのは使用していないからですが、 SDL_mixer.dを外したのは何故かリンクでシンボルが見つからなくて エラーしたから。そんな感じ。

2006/07/28

日付け越え前に帰着。

昨日の続き。libphobosのビルドで「get」ってコマンドを実行して command not foundでコケたり。なんだかよく判らなかったので、 何もしないgetというシェルスクリプトを作ってビルドした所、 エラー無くビルド終了。make installして手持ちDソースを -mno-cygwinオプション付きでコンパイルしてみたり。 特にエラー無くビルドできてみたり。cygwin1.dllをパスから 外して実行してみてもうまく動く模様。OK。

2006/07/27

日付け越え前に帰着。

昨日のビルドはエラーしていたり。mingwのヘッダがインクルードパス に含まれていない為。インストール先となるディレクトリに i686-pc-mingw32てのをmkdirして、/usr/i686-pc-mingw32と同じ ような感じでinclude,lib,binのディレクトリをシンボリックリンク したり。他、gcc-4.0.3下にwinsupディレクトリを要求されているようなので、 cygwinソースのwinsupをシンボリックリンクしたり、 i686-pc-mingw32-arを要求されたけどそんなもんは無いので、 /usr/bin/arをシンボリックリンクしたり。

2006/07/26

日付け越え前に帰着。

SDLのサンプルプログラムをビルドしてみたり。ビルドはできるのですが、 うまくビルドできているようなそうでもないような。

gdcで使えるか?と思ったのですが、mingw依存の為リンクがうまくできなかったり。 で、mingw対応されているハズという事で、gdcのターゲットをi686-pc-mingw32 にしてビルドしてみたり。しばらく終りそうにないのでほっぽらかし。

2006/07/25

日付け越え前に帰着。

SDL-1.2.11をビルドしてみたり。Cygwinでビルドする分には特に エラーはしなさげ。で、build/.libs/SDL.dllをerlangに入れたESDLのと 差し替えてみた所、SHIFTキーは効く模様。という事はコードの せいじゃないの?謎。
Wingsの掲示板を見てみると、SDL.dllを0.98.34のものと入れかえれば 良いという技が発明されている模様。SDLの問題だという方向に向かって いるようなので、そのうち直るでしょう。

何気に観ていた「アキハバラ@DEEP」最終回。最後までバカっぽさを 通し切ったという感じ。くだらね〜〜と思いながらも観てしまった辺り、 すっかりハメられていたのかも。

2006/07/24

日付け越え前に帰着。

WingsでSHIFTキーが効かない件。どうやらWindows98/Me系だけの話 らしい。んー?本当?
偶然にも1.2.5という少し古いSDLのソースアーカイブが何故かダウンロード されていたので、それと最新の1.2.11のdiffを取ってみたり。 結構変わっているのですが、src/events/SDL_keyboard.cを見た感じ では、大きく変わっている感じは特に無し。
「shift」をgrep -i で引っ掛けてみた所、 src/video/windib/SDL_dibevents.cというソースがWindows時の キーイベントをハンドルしているようだったので、見比べてみた 所、SHIFTキーの処理が少し違っていたり。

SDL-1.2.11/src/video/windib/SDL_dibevents.c
  :
LRESULT DIB_HandleMessage(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  :
    switch (msg) {
        case WM_SYSKEYDOWN:
        case WM_KEYDOWN: {
         :
            switch (wParam) {
                case VK_SHIFT:
                    /* EXTENDED trick doesn't work here */
                    {
                    Uint8 *state = SDL_GetKeyState(NULL);
                    if (state[SDLK_LSHIFT] == SDL_RELEASED && (GetKeyState(VK_LSHIFT) & 0x8000)) {
                        wParam = VK_LSHIFT;
                    } else if (state[SDLK_RSHIFT] == SDL_RELEASED && (GetKeyState(VK_RSHIFT) & 0x8000)) {
                        wParam = VK_RSHIFT;
                    } else {
                        /* Win9x */
                        int sc = HIWORD(lParam) & 0xFF;
                    
                        if (sc == 0x2A)
                            wParam = VK_LSHIFT;
                        else
                        if (sc == 0x36)
                            wParam = VK_RSHIFT;
                        else
                            wParam = VK_LSHIFT;
                    }
                    }

1.2.11だとWin9x用コードというのが用意されているみたいですが、1.2.5の場合は、

SDL-1.2.5/src/video/windib/SDL_dibevents.c
 :
LONG
 DIB_HandleMessage(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 :
    switch (msg) {
         :
        case WM_SYSKEYDOWN:
        case WM_KEYDOWN: {
	  :
            switch (wParam) {
                case VK_SHIFT:
                    /* EXTENDED trick doesn't work here */
                    wParam = VK_LSHIFT;
                    break;

てな感じで、Win9x用コードというのが無い代わり、LSHIFTかRSHIFTかを区別しない コードになっているようです。 wParamがVK_SHIFTだったときのHIWORD(lParam)が何を示しているのかが よく判りませんが、ここに秘密がありそうな予感。

2006/07/23

昼頃起床。風邪気味。

お買い物。ついでにハチクロ(9)ゲット。

そういやgdcのベースgccのバージョンが4.0.2だったので、4.0.3で 再ビルドしたり。

ハチクロ(9)。あれ?なんか急展開な感じに読みいってしまったり。

何気にWeb巡回していたら、yafrayの0.0.9が出ていたり。 以前使用した時は、 ポリゴン数が多いと変な穴が空いたりしていたのですが、 ちょっと使ってみた感じではバグは修正されている模様。

2006/07/22

昼頃起床。ぐうたら過ごして一日終了。

Wingsの0.98.35のSHIFTキーが効いていない件は掲示板でも報告が 上がっている模様。Wings自体のコードのせいでは無いと思われる ので、少し時間がかかる予感。

本屋に。色々出ていたので色々買ってみたのですが、ハチクロ(9)だけ は見当たらなかったり。

2006/07/21

日付け越え前に帰着。

ハウルの動く城のほとんど終りかけのところだけ観たり。てか 観たうちに入らないか。

Wingsの0.98.35をコンパイルしたり。ビルド中にエラー。 OpenGL系の関数がいくつか見つからない模様。ESDLの新しい のをダウンロード&インストールして再度ビルド。取りあえず 本体のビルドはできてみたり。ちょろっと立ち上げてみた所、 ALT+SHIFT+mouseL でパンできなかったり。SHIFT+TABの クイックスムーズ表示のショートカットも効かないようで、 SHIFTキーが反応していないように見えたり。 バイナリパッケージの方も同じく効かず。0.98.33は効くので Windowsがマズイという感じでもなく。キー入力はESDLに 依存しているので、ESDLのバグっぽい感じがするのですが、 以前版のESDLとの違いもあまり見当たらず。てか、SDLの Erlang用ラッパーという感じなので、ESDLよりもSDLの方が よくないのか?とも思ったり。

2006/07/20

日付け越え前に帰着。

Web巡回して終了。Wingsの新しいのをダウンロードしたり、 ついでに再コンパイル用にErlangの新しいのをダウンロードしたり。

2006/07/19

日付け越え前に帰着。

GLUT版のhairmakerをCygwinのXでコンパイルしてみたり。 インクルードパスとリンクするライブラリを変更すれば取りあえず ソースをいじる事無くコンパイルできたのですが、実際動かして みると、遅過ぎて用事にならなかったり。

2006/07/18

遅くもなく早くもなく帰着。

Web巡回して眠くて死亡。

2006/07/17

昼前起床。

ぐうたら過ごして一日終了。暑いような寒いようなで絶不調。

月火の深夜に1時間枠で放送していたので、最初はてっきり再放送か何かかと と思いながら何気に見ていた「アキハバラ@DEEP」。バカっぽくて つい観てしまってます。

2006/07/16

昼過ぎ起床。

Segfaultの原因が判った所で、OpenGLを使用する別のDソースを コンパイルした所、何故か実行してもオブジェクトが表示されず。 どのソースが関係するかを見る為に、一部をgdc-0.18でコンパイル した所、絵が出るようになったので、そこから追いかけてみる事に。 むー。

三丁目の夕日。初見の感想は「あー、面白かった」そんな感じ。 原作は殆ど読んだ事無い(散髪行った時にビッグコミックオリジナル を読んだ時くらい)ので、原作との違いなどについてはよく判りませんが、 笑いと涙がうまく織り込まれてて、すっかり見入ってしまったという 感じです。
で、コメンタリーで観たり。プロペラのゴムを捲く方向と実際に飛んで いる時の回転方向が同じとか、8/20設定なのにお盆前のような話を しているとか、映画中に出てきたオート三輪は設定の昭和33年には まだ発売されていない型だとか、結構面白かったです。

絵が出ない件を調べたり。直接の原因は頂点座標が全てnanになっている という事みたいですが、どこでnanに化けているのか判らなかったり。 printfを挟みながら見ていったら、初期値に何も入れていない所があり、 どうやらそれが初期値0.0期待で動作していた模様。マニュアルを見ても、 doubleの初期値はnanとなっていたのですが、gdc-0.18では実際には0.0が 入っていて、たまたま動いていたという事みたい。

2006/07/15

昼頃起床。

雷スゲーと思いながら先日のSegfaultを調査してたらPCが瞬電で落ちたり。弱っ。

ぐうたらTVを見ていたら ディズニーアニメ原画展 の特番を やってたり。毎度思う事なのですが、初期の作品はとても60年以上前に 制作されたアニメーションとは思えないところがスゲーです。 また、当時の原画がきちんと保存されているというのを知り 驚きました。日本だとその手のものはそのうち捨てられてしまう ようなのですが、そういう所にアニメの仕事自体が使い捨てっぽいイメージが 植え付けられる一端があるような気がしなくもありません。
番組中にオープン当時のディズニーランドの映像が流れていました。 その中に着ぐるみミッキーが踊っている姿が映っていたのですが、 そのミッキーの造形がハリボテっぽくて恐かった。

gdbでsignal受信時に停止する方法を調べたり。次のようにすれば良い らしい。

(gdb) handle SIGSEGV stop
Signal        Stop      Print   Pass to program Description
SIGSEGV       Yes       Yes     Yes             Segmentation fault
(gdb) run
Starting program: /usr/local/gdc019/libexec/gcc/i686-pc-cygwin/4.0.2/cc1d.exe Frame.d \
-quiet -dumpbase Frame.d -mwindows -mtune=pentiumpro -auxbase Frame -O2 -Wall -version\
 -I../ -o qqq.s

Program received signal SIGSEGV, Segmentation fault.
0x610b3586 in pthread_key_create () from /usr/bin/cygwin1.dll
(gdb) where
#0  0x610b3586 in pthread_key_create () from /usr/bin/cygwin1.dll
#1  0x61091fd8 in _sigfe () from /usr/bin/cygwin1.dll
#2  0x59432d52 in ?? ()
#3  0x019f2260 in ?? ()
#4  0x007fe8e0 in TypeidExp::~TypeidExp ()
#5  0x610b4327 in pthread::once () from /usr/bin/cygwin1.dll
#6  0x61091fd8 in _sigfe () from /usr/bin/cygwin1.dll
#7  0x0159c9e8 in ?? ()
#8  0x007f0c15 in _Unwind_SjLj_Register () at ../../gcc/d/d-codegen.h:515
#9  0x007f0c15 in _Unwind_SjLj_Register () at ../../gcc/d/d-codegen.h:515
#10 0x0048f09e in __static_initialization_and_destruction_0 (__initialize_p=1, 
    __priority=65535) at ../../gcc/d/d-codegen.cc:3045
#11 0x610047c2 in do_global_ctors () from /usr/bin/cygwin1.dll
#12 0x610ff1a0 in _check_for_executable ()
(gdb)

handleコマンドでシグナルに対してどのように振舞うかを指定すると いう感じ。「info signals」でシグナルの一覧を出せるみたい。 ただし、gdcはフロントエンドなので、そこで指定しても止める事はできません。 なので、gdc -v ....でコンパイラ本体である cc1d の引数を 調べて、cc1dをgdbで調べるという感じにしました。普段だとsegfaultをハンドル する事は無いので、こんな事をいちいちする必要は無い所なのですが、使うだけの人 からはこういう所でもきちんとメッセージが出ないとダメという事なのかも。
で、cygwinのDLLの中でずっこけている感があってどうしたものやら。

そんな訳でコンパイラを再度ビルド。誤ってgdcをビルドしたときのgccで ビルドしてしまったのですが、偶然にもそのコンパイラを使用した方が スタックトレースのシンボルが正しく残るようで、そのお陰で Segfaultを起こす原因となっているDソースに辿り着くことができてみたり。

(gdb) run
Starting program: /usr/local/gdc019/libexec/gcc/i686-pc-cygwin/4.0.2/cc1d.exe Frame.d \
-quiet -dumpbase Frame.d -mwindows -mtune=pentiumpro -auxbase Frame -O2 -Wall -version\
 -I../ -o qqq.s
Loaded symbols for /usr/bin/cygintl-3.dll
Loaded symbols for /usr/bin/cygiconv-2.dll
Loaded symbols for /cygdrive/c/WINDOWS/SYSTEM/KERNEL32.DLL
Loaded symbols for /cygdrive/c/WINDOWS/SYSTEM/ADVAPI32.DLL
Loaded symbols for /usr/bin/cygwin1.dll
GNU D version 4.0.2 (gdc 0.19, using dmd 0.162) (i686-pc-cygwin)
        compiled by GNU C version 4.0.2 (gdc 0.19, using dmd 0.162).
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096

Program received signal SIGSEGV, Segmentation fault.
_ZN13TypeQualified4sizeE3Loc (this=0x1a9f400, loc=
      {filename = 0x1a33158 "../win32/winnt.d", linnum = 2055})
    at ../../gcc/d/dmd/mtype.c:2762
2762    *(char*)0=0;
(gdb) where
#0  _ZN13TypeQualified4sizeE3Loc (this=0x1a9f400, loc=
      {filename = 0x1a33158 "../win32/winnt.d", linnum = 2055})
    at ../../gcc/d/dmd/mtype.c:2762
#1  0x00447dae in _ZN4Type11getPropertyE3LocP10Identifier (this=0x1a9f400, loc=
      {filename = 0x1a33158 "../win32/winnt.d", linnum = 2055}, 
    ident=0x19eba50) at ../../gcc/d/dmd/mtype.c:543
#2  0x0044785a in _ZN4Type6dotExpEP5ScopeP10ExpressionP10Identifier (
    this=0x1a9f400, sc=0x1b6abd0, e=0x1baadb0, ident=0x19eba50)
    at ../../gcc/d/dmd/mtype.c:625
#3  0x0042d841 in _ZN8DotIdExp8semanticEP5Scope (this=0x1baad40, sc=0x1b6abd0)
    at ../../gcc/d/dmd/expression.c:3751
#4  0x00415af6 in _ZN14VarDeclaration8semanticEP5Scope (this=0x1a9ddd8, 
    sc=0x1b6abd0) at ../../gcc/d/dmd/declaration.c:722
#5  0x00403503 in _ZN23StorageClassDeclaration8semanticEP5Scope (
    this=0x1a9de50, sc=0x1b6abd0) at ../../gcc/d/dmd/attrib.c:309
#6  0x0045531e in _ZN6Module8semanticEv (this=0x1a32f18)
    at ../../gcc/d/dmd/module.c:629
#7  0x0043d516 in _ZN6Import8semanticEP5Scope (this=0x1a27420, sc=0x1a204f8)
    at ../../gcc/d/dmd/import.c:91
#8  0x0045531e in _ZN6Module8semanticEv (this=0x1a22840)
    at ../../gcc/d/dmd/module.c:629
#9  0x0043d516 in _ZN6Import8semanticEP5Scope (this=0x1a21bd8, sc=0x1a1de00)
    at ../../gcc/d/dmd/import.c:91
#10 0x0045531e in _ZN6Module8semanticEv (this=0x1a20a98)
    at ../../gcc/d/dmd/module.c:629
#11 0x0043d516 in _ZN6Import8semanticEP5Scope (this=0x1a15498, sc=0x1a17718)
    at ../../gcc/d/dmd/import.c:91
#12 0x0045531e in _ZN6Module8semanticEv (this=0x1a0a9a0)
    at ../../gcc/d/dmd/module.c:629
#13 0x0048cdfa in d_parse_file () at ../../gcc/d/d-lang.cc:960
#14 0x004ebdc3 in toplev_main (argc=15, argv=0x19d2148)
    at ../../gcc/toplev.c:1010
#15 0x61006168 in dll_crt0_1 () from /usr/bin/cygwin1.dll
#16 0x61004416 in _cygtls::call2 () from /usr/bin/cygwin1.dll
#17 0x00000000 in ?? ()

../win32/winnt.d という自分コードの中の2055行目でエラーが発生 しているという感じだったので、とりあえずその行を削ってみたら、 Segfaultが発生しなくなったり。リンクまでできたのでひとまず 使えそう。

もう少し詳しく見てみた所、次のようなパターンがダメらしい。

struct _SECURITY_DESCRIPTOR {
  BYTE Revision;
  BYTE Sbz1;
  SECURITY_DESCRIPTOR_CONTROL Control;
  PSID Owner;
  PSID Group;
  PACL Sacl;
  PACL Dacl;
}

const uint SECURITY_DESCRIPTOR_MIN_LENGTH = SECURITY_DESCRIPTOR.sizeof;
alias _SECURITY_DESCRIPTOR SECURITY_DESCRIPTOR;

SECURITY_DESCRIPTORは構造体_SECURITY_DESCRIPTORのaliasなのですが、 SECURITY_DESCRIPTORがaliasされる前にSECURITY_DESCRIPTOR.sizeof で構造体サイズを知ろうとしているのがダメっぽい。行を入れかえると Segfaultしなくなりました。gdcの0.18ではこれでもエラーはしなかったの ですが、正しく使えていたかどうかは調べてません。普通に書けば 予定調和でこのようなパターンにははまらないと思われるのですが、 以前作成した動生成の ソースに手を加えたものだったので、そんな感じになったみたい。

夜もいい時間にスタックしてあった「ALWAYS 三丁目の夕日」を観たり。

2006/07/14

日付け越え前に帰着。

先日のビルドはエラー無く終了。make installして実行したら やっぱりSegfault。Segfaultがシグナルハンドルされているので、 どこでずっこけているのかよく判らず。色々試してみた所、 Segfaultしないでコンパイルできるソースもあるもよう。

2006/07/13

日付け越え前に帰着。

先日のビルドは終了。make install して適当なソースをコンパイル してみた所、コンパイラが Segfault。そういや、ダウンロードしたまま ほっぽらかしにしていた、4.0.3ってビルド自体した事ないや。
そんな訳で4.0.2でビルドしなおしてみる事に。ちぇっ。

2006/07/12

日付け越え前に帰着。

gdcの0.19が出ていたり。今バージョンからバイナリパッケージも 配布している模様。Cygwin用パッケージをダウンロードしてみたの ですが、gcc-3.4.4ベースだったので、ソースも落として4.0.xベース でビルドしてみる事に。という事でconfigure実行&make。このまま ほったらかし。

そういや、Windows98のサポートが終了したらしい。これを機会に 新しいの買うか.....という感じの事を何度も言っている気も(^^;

2006/07/11

日付け越え。

眠くて死亡。

2006/07/10

日付け越え前に帰着。

昨日買ったものの中に「銭(4)」もあったので読み。 「声優の値段」の中で、アニメ番組中に速報などのテロップが入ると 製作者側は喜ぶという節がありました。そのこころは、 録画が台無しになるのでセルDVDが売れるから。そんなにうまく いくもんかね?と思いながらも、絶対うまくいく気がするのは、 なんでだろう?(笑。

2006/07/09

昼頃起床。

「まりもっこり」って一体......

リロードついでに本屋に。「DEATH NOTE(12)」購入。帰って読み。 いやー、すっきり。そんな感じ。 どこでひっくり返すかで、どっちが勝つかが決まるという感じ だったのですが、最後のそういう駆け引きの部分よりも、 負けと決まってから話としてカタがつくまでがスカッと筋が通っていたのが、 すっきりと感じる所なのかも。

2006/07/08

起きたら夕方。寝過ぎ。

ちょろっと本屋に.....と思ったら2000円しか持ってなかった ので、「ONE PIECE(42)」と「もやしもん(3)」を買って終了。 食料買ったら200円しか残ってませんよ。

2006/07/07

日付け越え。

眠くて死亡。

2006/07/06

日付け越え前に帰着。

Web巡回してたら眠くて死亡。

2006/07/05

日付け越え。

Web巡回して終了。

2006/07/04

日付け越え前に帰着。

ちょろっとコードいじり。

2006/07/03

日付け越え前に帰着。

Web巡回して終了。

2006/07/02

昼頃起床。

ファミ通WaveDVD見るの続き。E3レポートメインでしたが、あんま 目新しいものは無かったり。そういや、バーチャの5ってPS3で出ると いうのを初めて知ったのですが、まだアーケードでは稼動していない ようですが、そんなもん?
全然関係無いのですが、ビートマニア(やポップンなどKONAMIの 音ゲーシリーズ一式)の大会DVDのCM。プレイの模様が少しだけ収録 されていたのですが、どれも凄過ぎて口空きっぱなし。てゆーか、 目で見て押せるレベルじゃないですよ。

SAIの新しいのが出てたり。でもダウンロードしただけ。あう。

2006/07/01

昼頃起床。

なんか風邪気味で死亡。

ちょろっと本屋に。ファミ通WaveDVDとたまたま目に入った「もやしもん(1)」 を購入。もやしもんの方は「のだめカンタービレ(15)」に出ていたのを たまたま覚えていて、菌の出てくるマンガって何?というのが気になって 買ってみた次第。

帰ってゴロゴロしながら読んだり。ヤバっ!面白っ!そんな感じ。 そういや、一番最初は「農大物語」というタイトルだったようですが、 二話目からタイトル変更で「もやしもん」になってます。「農大物語」は ストーリー的にもそのまんまなのですが、「もやしもん」はどういう意味 なのかよく判らず。

ファミ通WaveDVDを見ていたらだんだん風邪の症状が悪化して死亡。


TOP PREV