diff --git a/prelude.f b/prelude.f index 95297b5..3583f42 100644 --- a/prelude.f +++ b/prelude.f @@ -60,6 +60,47 @@ : RXTAIL 67 ; : SYSREADY 68 ; +\ Printing utilities + +: CR 10 EMIT ; +: SPACE 32 EMIT ; + +: CHAR + KEY + STATE @ 0<> IF + LIT LIT , , \ Append LIT to definition if compiling + THEN +; IMMEDIATE + +: EMIT-DIGIT + DUP 10 < IF CHAR 0 ELSE CHAR A THEN + + EMIT +; + +: . + \ Handle negatives + DUP 0< IF CHAR - EMIT NEGATE THEN + + \ Determine starting place value + 1 BEGIN BASE @ * 2DUP / 0= UNTIL + + \ Print leading non-zero digits + BEGIN + BASE @ / + 2DUP / EMIT-DIGIT + TUCK MOD SWAP + OVER 0= + UNTIL + + \ Print any trailing zeros + BASE @ / + DUP 0<> IF + BEGIN CHAR 0 EMIT BASE @ / 0= UNTIL + THEN + + 2DROP +; + \ Set SYSREADY high to indicate prelude has finished and enable user \ input on the JS side.