0 value owed
0 value paid
: $. ( n -- )
<# # # [char] . hold #s [char] $ hold #> type ;
: status ." CHARGE: " owed $. ." PAID: " paid $. cr ;
: reset 0 to paid 0 to owed ;
: make-change ( n -- ) paid owed - emit-coins reset ;
: ?make-change paid owed >= if make-change then status ;
: charge ( n -- ) +to owed ?make-change ; : c charge ;
: pay ( n -- ) +to paid ?make-change ; : p pay ;
: cancel 0 to owed ?make-change ;
create coins 2000 , 1000 , 500 , 100 , 25 , 10 , 5 , 1 ,
: n-coin ( $ coin -- )
dup -rot /mod 0 ?do over $. space loop nip ;
: emit-coins ( n -- )
." DISPENSING ------ "
coins swap begin dup while
over @ n-coin >r cell+ r>
repeat
cr 2drop ;
." INSTRUCTIONS" cr
." ------------" cr
." c[harge] --- charge an amount in cents" cr
." p[ay] --- pay an amount in cents" cr
." cancel --- cancel current transaction" cr
." bye --- exit" cr
status
quit
0 value owed
0 value paid
: $. ( n -- ) <# # # [char] . hold #s [char] $ hold #> type ;
: status ." CHARGE: " owed $. ." PAID: " paid $. cr ;
: reset 0 to paid 0 to owed ;
create coins 2000 , 1000 , 500 , 100 , 25 , 10 , 5 , 1 ,
: n-coin ( $ coin -- )
dup -rot /mod 0 ?do over $. space loop nip ;
: emit-coins ( n -- )
." DISPENSING ------ "
coins swap begin dup while over @ n-coin >r cell+ r> repeat
cr 2drop ;
: make-change ( n -- ) paid owed - emit-coins reset ;
: ?make-change paid owed >= if make-change then status ;
: charge ( n -- ) +to owed ?make-change ; : c charge ;
: pay ( n -- ) +to paid ?make-change ; : p pay ;
: cancel 0 to owed ?make-change ;
." INSTRUCTIONS" cr
." ------------" cr
." c[harge] --- charge an amount in cents" cr
." p[ay] --- pay an amount in cents" cr
." cancel --- cancel current transaction" cr
." bye --- exit" cr
status
quit