ちょっとした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を実行してください。と、さらに追記。