: vector
create ( n -- ) 0
do , loop
does> ( n -- ) swap cells + @ execute ;
: ,I
dup c@ C, ; : ,V dup 1 + c@ C, ; : ,X dup 2 + c@ C, ;
:noname ,I ,X drop ;
:noname ,V ,I ,I ,I drop ;
:noname ,V ,I ,I drop ;
:noname ,V ,I drop ;
:noname ,V drop ;
:noname ,I ,V drop ;
:noname ,I ,I ,I drop ;
:noname ,I ,I drop ;
:noname ,I drop ;
' drop ( 0 : no output ) 10 vector ,digit
: roman-rec ( numerals n -- )
10 /mod dup
if
>r over 2 + r> recurse
else
drop
then
,digit ;
: roman ( n -- c-addr u )
dup 0 4000 within 0= abort" EX LIMITO!"
HERE SWAP s" IVXLCDM" drop swap roman-rec HERE OVER - ;
\ adjust to convert 00 digits
: nulla.obliterate ( nHH nMM --- nHH' nMM')
swap
dup 0= \ if nHH = 0
if
drop 24
then
swap
dup 0= \ if nMM = 0
if
drop 1- 60
then
;
\ lopp that display time in roman numerals
: clepsydra ( ---)
24 0 do
60 0 do
j i nulla.obliterate
swap roman type ." :" roman type cr
key drop
loop
loop
;