2008-04-01から1ヶ月間の記事一覧

sqlite3-ruby で自動的に文字コードを変換

入出力で毎回文字コードを変換するのが面倒だったから。 #!/usr/local/bin/ruby -Ks require 'sqlite3' require 'sqlite3/driver/native/driver' require 'kconv' class MyDriver < SQLite3::Driver::Native::Driver def bind_text( stmt, index, value, utf…

Altを押しながらテンキーで10進数3桁で文字コードを入力

よくある質問 - プログラミング言語 D (日本語訳) '~' は私のキーボードにないのですが… PCのキーボードでは、[Alt]を押しながらテンキーの 1, 2, 6を順に押してAltを離すと、'~'が入力されます。 これは知らなかった

std::map 指定した範囲の要素が存在するか

慣れないC++を使って。 #include <map> #include <iostream> int main( void ) { std::map<int,int> m; m[83] = 22; m[35] = 76; m[11] = 9; m[75] = 39; m[62] = 98; m[85] = 86; m[8] = 80; m[18] = 7; m[48] = 84; m[31] = 2; for( int i = 0; i < 100; i += 10 ) { int next = i </int,int></iostream></map>…

モジュール変数型の二次元配列でバグ?

HSP

#module mod x #modinit str _x x = _x:return #modfunc func mes x:return #global dimtype a, 5, 3, 3 newmod a, mod, "hoge" func a.1.1 // => hoge func a.1.2 // OpenHSP 3.2だと落ちるこれの対処は newmod で二次元以上だとエラーにするのでいいんだろ…

ビルトイン関数でショートサーキットっぽいものが出来るんでね?と思ったけど失敗した

こんなの。 code_get()したら式を評価するんだからスキップすることにはならない。 次のex2までスキップとかなら出来るけど最後のパラメータだったらそれも出来ないし。TYPE_MARK ')' までをスキップ? それじゃ入れ子に対応できないじゃんということで失敗…

split命令を追加してみる

IRC で 23:10 f_the_darudaru perlの my( $a,$b,$c ) = split( /,/ , $data); 見たいな記述の導入を検討師弟t抱けると幸いです(鬼 f_the_darudaru 他人事だからいえることを堂々と、血も涙も無い感じで・・・!! 23:12 fujidig わー>< f_the_darudaru で…

じっくりテトレットでめりこむことがある

最近よく暇つぶしにHSPTVを立ち上げてellerさん(id:eller)のじっくりテトレットで遊ぶんですが、まれにめり込むバグに遭遇します。なかなか再現できないのでどういうときに発生するのかなーと調べたら左右キーどちらかと上キーを同時に押したときに発生する…

優先順位は使わず規則だけで演算子の優先順位を

やってみた class Parser options no_result_var rule expr : addsub addsub: addsub '+' muldiv { val[0] + val[2] } | addsub '-' muldiv { val[0] - val[2] } | muldiv muldiv: muldiv '*' primary { val[0] * val[2] } | muldiv '/' primary { val[0] / …

ObjectSpace._id2ref

Object#object_id で得たオブジェクトIDからオブジェクトを得ることができる。 irb(main):001:0> a = "hoge" => "hoge" irb(main):002:0> b = ObjectSpace._id2ref( a.object_id ) => "hoge" irb(main):003:0> a.equal?( b ) => true 既にGCされたオブジェク…

Python にも sprintf 相当があったのね

% 演算子。 >>> "<%.*s>" % (3, "hoge") '<hog>' >>> "<%*d>" % (6, 123) '< 123>' >>> "<%2$d %1$d>" % (123, 456) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: unsupported format character '$' (0x24) at index 3 >>> "<%s><%d><%f</module></stdin></hog>…

RubyでHSPのオブジェクトファイルのインスペクタを作り中:3

行番号の表示とか。そろそろメソッド分割しないとやばい。 TYPENAMES = %w( TYPE_MARK TYPE_VAR TYPE_STRING TYPE_DNUM TYPE_INUM TYPE_STRUCT TYPE_XLABEL TYPE_LABEL TYPE_INTCMD TYPE_EXTCMD TYPE_EXTSYSVAR TYPE_CMPCMD TYPE_MODCMD TYPE_INTFUNC TYPE_S…

RubyでHSPのオブジェクトファイルのインスペクタを作り中:2

TYPENAMES = %w( TYPE_MARK TYPE_VAR TYPE_STRING TYPE_DNUM TYPE_INUM TYPE_STRUCT TYPE_XLABEL TYPE_LABEL TYPE_INTCMD TYPE_EXTCMD TYPE_EXTSYSVAR TYPE_CMPCMD TYPE_MODCMD TYPE_INTFUNC TYPE_SYSVAR TYPE_PROGCMD TYPE_DLLFUNC TYPE_DLLCTRL TYPE_USERD…

RubyでHSPのオブジェクトファイルのインスペクタを作り中

TYPENAMES = %w( TYPE_MARK TYPE_VAR TYPE_STRING TYPE_DNUM TYPE_INUM TYPE_STRUCT TYPE_XLABEL TYPE_LABEL TYPE_INTCMD TYPE_EXTCMD TYPE_EXTSYSVAR TYPE_CMPCMD TYPE_MODCMD TYPE_INTFUNC TYPE_SYSVAR TYPE_PROGCMD TYPE_DLLFUNC TYPE_DLLCTRL TYPE_USERD…

Cの構造体のメンバのオフセットとサイズを簡単に得る方法ないかなぁ

いちいち C で HSPHED hsphed; printf( "<%d>\n", (int)&hsphed.pt_cs - (int)&hsphed ); とか、 printf( "<%d>\n", (int) (&(((HSPHED *)0)->pt_cs)) ); とか(後者は今日知った)して調べるのは面倒すぎる。

strmidやinstrの第一引数が変数固定なのは

HSP

きっと任意の式を許すと文字列のコピーが必要になって処理速度が低下するから。 後ろのパラメータの値を取得するときに同じ領域に書き込まれてしまう。 うーん、なんだかなぁ。 - 実際、後ろにパラメータが続く文字列パラメータの取得にはstrncpyを使って文…

Python を少し触ってみた

ドキュメントもない状態で。 help や copyright 、 exit なんかもオブジェクトであることに笑。 関数名だけで関数オブジェクト的なものを返して(...)でそれを呼び出すという形は好み。 代入だけで関数の別名を作れる、すばらしい!でもその代わり関数呼び出…

SEGVる(デバッグウィンドウを表示しているときのみ)。 gosub *a:stop *a: return 1e300hsp3code.cpp void code_adddbg( char *name, double val ) が原因なんだけどどうしようかな。 snprintfを使う バッファサイズを大きくする #include <stdio.h> int main( void </stdio.h>…