-\ Remaining field address conversion words
-
-: >NAME
- BEGIN
- 1- DUP @
- NFA_MARK AND
- NFA_MARK = UNTIL
-;
-
-: NAME> 1- LINK> ;
-
-: >LINK >NAME 1- ;
-
-: >BODY 1+ ;
-
-: BODY> 1- ;
-
-\ Constants and Variables
-
-: CONSTANT
- CREATE ,
-DOES> @
-;
-
-: ALLOT ( n -- )
- H +! ( adds n to H, after this the old value of H is still on the stack )
-;
-
-: VARIABLE
- CREATE
- 1 CELLS ALLOT ( allocate 1 cell of memory, push the pointer to this memory )
-;
-
-: VALUE ( n -- )
- CREATE ,
-DOES> @
-;
-
-: TO IMMEDIATE ( n -- )
- BL WORD ( get the name of the value )
- FIND DROP ( look it up in the dictionary )
- >BODY ( get a pointer to the first data field (the 'LIT') )
- STATE @ IF ( compiling? )
- ['] LIT , ( compile LIT )
- , ( compile the address of the value )
- ['] ! , ( compile ! )
- ELSE ( immediate mode )
- ! ( update it straightaway )
- THEN
-;
-
-( x +TO VAL adds x to VAL )
-: +TO IMMEDIATE
- BL WORD ( get the name of the value )
- FIND DROP ( look it up in the dictionary )
- >BODY ( get a pointer to the first data field (the 'LIT') )
- STATE @ IF ( compiling? )
- ['] LIT , ( compile LIT )
- , ( compile the address of the value )
- ['] +! , ( compile +! )
- ELSE ( immediate mode )
- +! ( update it straightaway )
- THEN
-;
-
-( Fill u ints, starting at a, with the value b )
-: FILL ( a u b -- )
- -ROT OVER + SWAP ?DO
- DUP I !
- LOOP
- DROP
-;
-
-: ERASE ( a u -- )
- 0 FILL
-;