Collection of Forth Macro definitions#
Wil Baden#
( A New Definition for Simple Macro ) ( The simplest form of macro -- parameterless string replacement. : MACRO : CHAR WORD COUNT POSTPONE SLITERAL POSTPONE EVALUATE POSTPONE ; IMMEDIATE ; Parameters can be provided by replacing `EVALUATE` with `SEQUENTIAL-EVALUATE`. I believe such definition works on all Standard Forths. ) ( Simple Macro -- Evaluate Alternating Texts and Parameters Sequentially. ) : SPLIT-AT-CHAR ( a n char -- a+k n-k a k ) >R 2DUP ( a n a+k n-k)( R: char) BEGIN DUP WHILE OVER C@ R@ = 0= WHILE 1 /STRING REPEAT THEN R> DROP ( R: ) DUP >R 2SWAP R> - ( a+k n-k a k) ; : SEQUENTIAL-EVALUATE ( ... caddr u "ccc"... -- ??? ) BEGIN ( caddr u) [CHAR] \ SPLIT-AT-CHAR 2SWAP SWAP >R >R ( caddr u) EVALUATE ( ) R@ WHILE BL WORD COUNT EVALUATE R> R> SWAP 1 /STRING ( caddr u) REPEAT ( ) R> R> 2DROP ; : MACRO : CHAR WORD COUNT POSTPONE SLITERAL POSTPONE SEQUENTIAL-EVALUATE POSTPONE ; IMMEDIATE ; ( Examples. ) MACRO :GO " ANEW NONCE : (GO) " MACRO GO " (GO) NONCE " MACRO ?? " IF \ THEN " MACRO #DO " 0 MAX 0 ?DO " MACRO ORIF " ?DUP 0= IF " MACRO ANDIF " DUP IF DROP " MACRO H " HEX \ DECIMAL " MACRO 'TH " CELLS \ + " ( -- Wil Baden Costa Mesa, California )