More ... | マクロ内に複数行のパラメータを送りたい以前りすとはそんな要望にチャチャ入れてかなりヤられちゃった過去もあるんですけど(あん時はかなり凹んだ)HSPの命令/関数は値と変数しか渡せません。でもマクロってコードもラベルも渡せます。コードも渡せるってことは、コードをいっぱい渡したいですよね。そんな時はどうしたらいいでしょうか?マクロで文字列(値じゃないですよ。コードの断片です)をスタックへの出し入れができます。そんなわけで複数のコードの断片をマクロを介して渡してみました。 #define ctype push(%1) %tpop_push %s1 #define ctype push_1(%1):\ push(%1):push(/**/):push(/**/):push(/**/) #define ctype push_2(%1,%2):\ push(%1):push(%2):push(/**/):push(/**/) #define ctype push_3(%1,%2,%3):\ push(%1):push(%2):push(%3):push(/**/) #define ctype push_4(%1,%2,%3,%4):\ push(%1):push(%2):push(%3):push(%4) #define pop4 %tpop_push %o:%o:%o:%o #define ctype コードを送ったラベル(%1)*%1:pop4:pop4:return push_4(mes a,a++,a++,a++) push_2(a++,a=0) gosub *code stop コードを送ったラベル(code) 上のスクリプトではスタックへコメントを挿入することで無理矢理4個づつ詰め込んでますけど、何個かづつ挿入するのはマクロを書くのがめんどくさいです。そんなわけで1個づつ代入してみます。 #define ctype push(%1) %tpop_push %s1 #define 空_push_4:push(/**/):push(/**/):push(/**/):push(/**/) #define 展開無しpop4 %tpop_push %p0:%p1:%p2:%p3 #define pop %tpop_push %o #define pop4 %tpop_push %o:%o:%o:%o: #define ctype コードを送ったラベル(%1)*%1:展開無しpop4:return 空_push_4 push(mes a) push(a="abc") gosub *code stop コードを送ったラベル(code) *pop用ラベル pop pop pop4 return 複数行渡しの例として、elseifの実現と配列に数字をいっぱい渡して代入するというのがありました。elseifは探したらベクターにありました。
|