ちょっとしたUIをさくっと作りたいランゲージ
ネタ元は、こちら→id:ABA:20050118
もともと、このネタに関しては「HSPとかひまわりとかでいいんじゃないかな」くらいに思ってて、そこらへんの流れで、HSPコンパイラでも書いてみようとするも、「型無し言語をわざわざコンパイルするメリットは薄い」だとか、「サブルーチンの扱いがやばい」とか、そんな感じで、HSPコンパイラネタは放棄。
と、まあ、色々考えたり、考えなかったりして、「やっぱ時代は自作言語だね」ってことで、さくっとちょっとしたUIが書ける言語を作ってみた。
http://morihyphen.hp.infoseek.co.jp/files/sakutto.zip
まだディレクトリ構成が強制されるだとかがあるので、実用にはならないけど、まあ、可能性のひとつとして。
READMEより引用
* ちょっとしたUIをさくっと作りたいランゲージ * ウィンドウ一個でいいから、ちょっとしたコンフィグ画面をちょろっと出したいんだよねー とか、そんな場合を想定して作られた、アレのナニ。 こんな特徴を持ってます↓ ・超簡単、ウィンドウ出現。 -------------------------- funcname WinMain; BUTTON but("OK",100,100, 100, 20, 1); popup( this_win ); -------------------------- たった!!たったのこれだけで、(100,100)の位置に100x20のボタンが出てくるウィンドウが作れます。 あと、これやると、WinMainがstdcallとかってWarningが出てくるけど無視! ・超現実派、実行バイナリの生成 「スクリプトだとか、Javaだとかが移植性が高い」とか言ってる奴はアレだ、アレ。 まあ、そういうのはどうでもいいんだけど、これで作られたプログラムはランタイムライブラリ一切必要無し。 実行バイナリの力によって、デフォルト状態のWin95とかでも動作するプログラムが生成可能…多分…(確認してない) ・超貧乏派、極小実行バイナリ 普通にやっても、10KB以下のバイナリが作れる!! うまくやれば、5KBまで可能なことを確認済み。 ・超柔軟性、関数呼び出し Cの関数が直接呼べます。どのくらい直接かというと、CPUのCALL命令使うくらい直接。 ・超適当、作りかけ あんまり真面目に作ってないので使いにくいです。 こんな感じです。
で、プログラムは、
funcname hoge; extern void *open_file( const char *); extern void write_line( void *, const char *, const char *); extern void write_bool( void *, const char *, int ); move( this_win, 300, 300, 320, 240 ); this_win.text = "title"; CHECKBOX check_nanika("use nanika",10,20,100,20); CHECKBOX check_doreka("use doreka",10,40,100,20); RADIO radio_a("select A", 120, 20, 100, 20, 1 ); RADIO radio_b("select B", 120, 40, 100, 20, 0 ); BUTTON but( "Ok", 20, 160, 40, 30, 10 ); EDIT edit("please input value", 10, 80, 200, 20 ); popup( this_win ); void *file = open_file("out.txt"); char buf[256]; gettext( edit, buf, 256 ); write_line( file, "edit_value", buf ); write_bool( file, "A", radio_a.check ); write_bool( file, "B", radio_b.check ); write_bool( file, "nanika", check_nanika.check ); write_bool( file, "doreka", check_doreka.check );
こんな感じ。test.exeがこれをコンパイルしたもの。入力された値をout.txtに出力。
えーと、眠くなってきたので、所感とかは明日書く。
あと、mingwかcygwinのbinutils、gccがいります。と、追記
ミスってた。out.txtは削除してからtest.exeを実行してください。と、さらに追記。