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
)