ちょっとした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に出力。


えーと、眠くなってきたので、所感とかは明日書く。


あと、mingwcygwinbinutilsgccがいります。と、追記
ミスってた。out.txtは削除してからtest.exeを実行してください。と、さらに追記。