後から1をORでくっ付け条件を殺す仕組み
条件を書いておいて後からその条件を殺す仕組みを作った
例えば
( ? Dc2>Vpc2 ? Dc0>Dc2+Vpcp _OR ? Dc0<Vpc2 )
というある種のフィルタ
()内の_ORで結合されているどこかが1(TRUE)になれば全体が1(TRUE)になるので条件が殺される
なので
( ? Dc2>Vpc2 ? Dc0>Dc2+Vpcp _OR ? Dc0<Vpc2 _OR ? 1 )
と最後に1をORでくっ付ければすべての条件を殺せる
この「1をORでくっ付ける」というのをマクロを使って後からスマートに行える仕組みを作った
まず
( ? Dc2>Vpc2 ? Dc0>Dc2+Vpcp _OR ? Dc0<Vpc2 __AfterOR__ )
と書いとく(後からORが来ますの意味:和製英語?)
通常はこの__AfterOR__という字句には意味がないので
- Compileで無視され
- Assembleでも無視され
と何の影響も及ぼさない
しかし上の方に
/#AftOR_1/
と書くと
define(`__AfterOR__',`_OR ? 1')
というm4マクロが定義され、
()内全体が殺されてしまう という仕組み
# AfterOR s:/#AftOR_1/\(.*\):define(`__AfterOR_\1_',`_OR\n\t\? 1'):g
というsed script でm4のdifineに置換してる
複数個別に制御したい場合は
__AfterOR_1_ __AfterOR_2_
とでもしといて
/#AftOR_1/1 /#AftOR_1/2
で制御できる
sed は便利だ