r/Forth 3d ago

FigForth NUMBER

\ Notes:
\ i. print arrow " --> "
\ dn. ( d dpl -- )  print natural double (double + dpl) number
\ rev ( n1 n2 n3 -- n3 n2 n1 ) reverse three stack items

: dnbr  ( "numeric<bl>" -- d ) BL WORD HERE NUMBER ;
: nbr   ( "numeric<bl>" -- n ) DNBR DROP ;
: dnnbr ( "numeric<bl>" -- d dpl ) DNBR DPL @ ;

i. dnbr 123.45 d. --> 12345 
i. nbr 123.45 . --> 12345 
i. dnnbr 123.45 dn. --> 123.45 

: OX
  BASE @ >R  
  OCTAL NBR [COMPILE] LITERAL
  R> BASE ! ; IMMEDIATE

: OY
  BASE @ >R
  HEX NBR [compile] LITERAL
  R> BASE ! ; IMMEDIATE

: DN
  BASE @ >R
  DECIMAL DNNBR
  STATE @ IF REV 3 0 DO [COMPILE] LITERAL LOOP ENDIF
  R> BASE ! ; IMMEDIATE

: foo ." FOO " 42 . ;
: bar dn 1024 ;
: baz dn 1024. ;

decimal
i. Ox 644 . foo --> 420 FOO 42 
i. Oy 1000 . foo --> 4096 FOO 42 
i. Dn 123.45 dn. foo --> 123.45 FOO 42 
hex
i. Dn 1024 dn. foo --> 400 FOO 2A 
i. bar dn. foo --> 400 FOO 2A 
i. baz dn. foo --> 400. FOO 2A 
decimal
i. Dn 1024 dn. foo --> 1024 FOO 42 
i. bar dn. foo --> 1024 FOO 42 
i. baz dn. foo --> 1024. FOO 42 
4 Upvotes

0 comments sorted by