NO.1003:命令名を省略するマクロ

TACKが命令を作成する時はいつも長くなります
命令の衝突防止と
命令の名前を考えるのがめんどくさいので
だいたい。適当な命令名_at_モジュール名になってます
でも_at_モジュール名のパターンはそんなにないので
省略できるかな?と思ったらできました

FILE名:FILE_def_one_macro.hsp
//	%1をdef_sタグへストック
#define ctype def_stock(%1):%tdef_s  %s1
//	%1と%2を結合してdef_sタグへストック
//	命令名_at_モジュール名。と書きたいので
//	%1は_at_。%2はモジュール名を代入する仕様
#define ctype dA_stock(%1,%2):def_stock(%1%2)
//	%1にdef_sタグへストックしてたものをくっつけて命令名とする
//	ストックは維持
#define ctype dA(%1):%tdef_s %1%p
//	ストックしてたものを吐き出す。=0は代入式にさせるため
#define def_end %tdef_s %o=0

goto *@f
#deffunc aaa_at_bbb
mes "OK"
return
#deffunc aaaa_at_bbb int a
mes "this is "+a
return
*@

dA_stock(_at_,bbb)
dA(aaa)
dA(aaaa) 1
stop
def_end

FILE名:FILE_def_macro.hsp
//	%1をdef_sタグへストック
#define ctype def_stock_dA(%1):%tdef_s_dA  %s1
#define ctype def_stock_dB(%1):%tdef_s_dB  %s1
#define ctype def_stock_dC(%1):%tdef_s_dC  %s1
#define ctype def_stock_dD(%1):%tdef_s_dD  %s1
#define ctype def_stock_dE(%1):%tdef_s_dE  %s1
//	%1と%2を結合してdef_sタグへストック
//	命令名_at_モジュール名。と書きたいので
//	%1は_at_。%2はモジュール名を代入する仕様
#define ctype dA_stock(%1,%2):def_stock_dA(%1%2)
#define ctype dB_stock(%1,%2):def_stock_dB(%1%2)
#define ctype dC_stock(%1,%2):def_stock_dC(%1%2)
#define ctype dD_stock(%1,%2):def_stock_dD(%1%2)
#define ctype dE_stock(%1,%2):def_stock_dE(%1%2)
//	%1にdef_sタグへストックしてたものをくっつけて命令名とする
//	ストックは維持
#define ctype dA(%1):%tdef_s_dA %1%p
#define ctype dB(%1):%tdef_s_dB %1%p
#define ctype dC(%1):%tdef_s_dC %1%p
#define ctype dD(%1):%tdef_s_dD %1%p
#define ctype dE(%1):%tdef_s_dE %1%p
//	ストックしてたものを吐き出す。=0は代入式にさせるため
#define def_dA_end %tdef_s_dA %o=0
#define def_dB_end %tdef_s_dB %o=0
#define def_dC_end %tdef_s_dC %o=0
#define def_dD_end %tdef_s_dD %o=0
#define def_dE_end %tdef_s_dE %o=0

goto *@f
//	以下テストコード
#deffunc hoge_at_aaa
mes "this is hoge_at_aaa"
return
#deffunc hoge_at_bbb
mes "this is hoge_at_bbb"
return
#deffunc hoge_at_ccc
mes "this is hoge_at_ccc"
return
#deffunc hoge_at_ddd
mes "this is hoge_at_ddd"
return
#deffunc hoge_at_eee
mes "this is hoge_at_eee"
return
#deffunc piyo_at_aaa str name
mes name+":this is hoge_at_aaa"
return
#deffunc piyo_at_bbb str name
mes name+":this is hoge_at_bbb"
return
#deffunc piyo_at_ccc str name
mes name+":this is hoge_at_ccc"
return
#deffunc piyo_at_ddd str name
mes name+":this is hoge_at_ddd"
return
#deffunc piyo_at_eee str name
mes name+":this is hoge_at_eee"
return
*@

dA_stock(_at_,aaa)
dB_stock(_at_,bbb)
dC_stock(_at_,ccc)
dD_stock(_at_,ddd)
dE_stock(_at_,eee)

dA(hoge)
dA(piyo) "Jane"
dB(hoge)
dB(piyo) "Ken"
dC(hoge)
dC(piyo) "Mike"
dD(hoge)
dD(piyo) "Bob"
dE(hoge)
dE(piyo) "Erin"
stop

def_dA_end
def_dB_end
def_dC_end
def_dD_end
def_dE_end

FILE名:FILE_def_one_macro_use2func.hsp
//	%1をdef_sタグへストック
#define ctype def_stock(%1):%tdef_s  %s1
//	%1と%2を結合してdef_sタグへストック
//	命令名_at_モジュール名。と書きたいので
//	%1は_at_。%2はモジュール名を代入する仕様
#define ctype dA_stock(%1,%2):def_stock(%1%2)
//	%1にdef_sタグへストックしてたものをくっつけて命令名とする
//	ストックは維持
#define ctype dA(%1) %tdef_s %1%p
//	ストックしてたものを吐き出す。=0は代入式にさせるため
#define def_end %tdef_s %o=0

goto *@f
dA_stock(_at_,bbb)
#deffunc dA(aaa)
mes "OK"
return
#deffunc dA(aaaa) int a
mes "this is "+a
return
*@

dA(aaa)
dA(aaaa) 1
stop
def_end

FILE名:FILE_def_macro_use2func.hsp
//	%1をdef_sタグへストック
#define ctype def_stock_dA(%1):%tdef_s_dA  %s1
#define ctype def_stock_dB(%1):%tdef_s_dB  %s1
#define ctype def_stock_dC(%1):%tdef_s_dC  %s1
#define ctype def_stock_dD(%1):%tdef_s_dD  %s1
#define ctype def_stock_dE(%1):%tdef_s_dE  %s1
//	%1と%2を結合してdef_sタグへストック
//	命令名_at_モジュール名。と書きたいので
//	%1は_at_。%2はモジュール名を代入する仕様
#define ctype dA_stock(%1,%2):def_stock_dA(%1%2)
#define ctype dB_stock(%1,%2):def_stock_dB(%1%2)
#define ctype dC_stock(%1,%2):def_stock_dC(%1%2)
#define ctype dD_stock(%1,%2):def_stock_dD(%1%2)
#define ctype dE_stock(%1,%2):def_stock_dE(%1%2)
//	%1にdef_sタグへストックしてたものをくっつけて命令名とする
//	ストックは維持
#define ctype dA(%1) %tdef_s_dA %1%p
#define ctype dB(%1) %tdef_s_dB %1%p
#define ctype dC(%1) %tdef_s_dC %1%p
#define ctype dD(%1) %tdef_s_dD %1%p
#define ctype dE(%1) %tdef_s_dE %1%p
//	ストックしてたものを吐き出す。=0は代入式にさせるため
#define def_dA_end %tdef_s_dA %o=0
#define def_dB_end %tdef_s_dB %o=0
#define def_dC_end %tdef_s_dC %o=0
#define def_dD_end %tdef_s_dD %o=0
#define def_dE_end %tdef_s_dE %o=0

goto *@f
//	以下テストコード

dA_stock(_at_,aaa)
dB_stock(_at_,bbb)
dC_stock(_at_,ccc)
dD_stock(_at_,ddd)
dE_stock(_at_,eee)

#deffunc dA(hoge)
mes "this is hoge_at_aaa"
return
#deffunc dB(hoge)
mes "this is hoge_at_bbb"
return
#deffunc dC(hoge)
mes "this is hoge_at_ccc"
return
#deffunc dD(hoge)
mes "this is hoge_at_ddd"
return
#deffunc dE(hoge)
mes "this is hoge_at_eee"
return
#deffunc dA(piyo) str name
mes name+":this is hoge_at_aaa"
return
#deffunc dB(piyo) str name
mes name+":this is hoge_at_bbb"
return
#deffunc dC(piyo) str name
mes name+":this is hoge_at_ccc"
return
#deffunc dD(piyo) str name
mes name+":this is hoge_at_ddd"
return
#deffunc dE(piyo) str name
mes name+":this is hoge_at_eee"
return
*@
dA(hoge)
dA(piyo) "Jane"
dB(hoge)
dB(piyo) "Ken"
dC(hoge)
dC(piyo) "Mike"
dD(hoge)
dD(piyo) "Bob"
dE(hoge)
dE(piyo) "Erin"
stop

def_dA_end
def_dB_end
def_dC_end
def_dD_end
def_dE_end