2008年7月29日火曜日

gotoを使用したサブルーチン:ver05

set_get_labelモジュールに続いて
manage_labelモジュールの名前も変更します

タイプがめんどくさい命令名になった気もしますが
直接呼ばれる可能性は低いので大丈夫でしょう

ちなみにcallマクロとbackマクロは
このモジュールを使う場合何度も呼び出す可能性があるので、そのままです
変な名前をつけると、使ったあと読みにくそうですからね

init_at_manage_label
変数の初期化処理

call(p1)
gosubのようにサブルーチンを呼び出します
p1:呼び出すサブルーチンのラベル

back
call命令でジャンプした場所に戻る命令

FILE名:FILE_manage_label_0_5.hsp
#include "FILE_set_get_label_0_2.hsp"
#module manage_label
#deffunc init_at_manage_label
now=-1
init_at_set_get_label
return
#deffunc set_at_manage_label
now++
set_label_at_set_get_label now
return
#deffunc back_of_st_at_manage_label
get_label_at_set_get_label now
now--
return
#define global ctype inner_call(%1,%2):\
tmp_l@set_get_label=*%2:set_at_manage_label:goto %1:*%2
#define global ctype call(%1)%tlabel_call inner_call(%1,%n)
#define global back:\
back_of_st_at_manage_label:goto tmp_r@set_get_label
#global


テストコード
#include "FILE_manage_label_0_5.hsp"
init_at_manage_label
call(*s_a)
mes "OK"

stop
*s_a
mes "a"
call(*s_b)
call(*s_d)
back
*s_b
mes "b"
call(*s_c)
back
*s_c
mes "c"
back
*s_d
mes "d"
back

0 件のコメント: