: 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 
  ;