NO.1003:命令名を省略するマクロ
TACKが命令を作成する時はいつも長くなります
命令の衝突防止と
命令の名前を考えるのがめんどくさいので
だいたい。適当な命令名_at_モジュール名になってます
でも_at_モジュール名のパターンはそんなにないので
省略できるかな?と思ったらできました
FILE名:FILE_def_one_macro.hsp
FILE名:FILE_def_macro.hsp
FILE名:FILE_def_one_macro_use2func.hsp
FILE名:FILE_def_macro_use2func.hsp
命令の衝突防止と
命令の名前を考えるのがめんどくさいので
だいたい。適当な命令名_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 |