( usage: uxncli console.rom arg1 arg2 arg3 Prints Hello Uxn!, and listens for incoming stdin events on enter. ) |10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |0000 @buf |0100 @on-reset ( -> ) ;on-argument .Console/vector DEO2 .Console/type DEI ?{ ;on-stdin .Console/vector DEO2 } ;dict/hello <print-str> BRK @on-argument ( -> ) .Console/read DEI .buf skey ?{ BRK } <print-type> ;dict/yousent <print-str> LIT "" #18 DEO ;buf <print-str>/ LIT "" #18 DEO #0a18 DEO ;buf sclr/ .Console/type DEI #04 NEQ ?{ ;dict/argend <print-str> ;on-stdin .Console/vector DEO2 } BRK @on-stdin ( -> ) .Console/read DEI .buf skey ?{ BRK } ;buf ;dict/quit scmp ?&quit <print-type> ;dict/yousaid <print-str> LIT "" #18 DEO ;buf <print-str>/ LIT "" #18 DEO #0a18 DEO ;buf sclr/ BRK &quit ( buf* -> ) #800f DEO BRK @<print-type> ( -- ) [ LIT2 00 -Console/type ] DEI #01 GTH DUP ADD ;types ADD2 ( ) LDA2 !<print-str>/ ( @|stdlib ) @<print-str> ( str* -- ) &w ( -- ) LDAk #18 DEO INC2 & LDAk ?&w POP2 JMP2r @sclr ( str* -- ) &w ( -- ) STH2k #00 STH2r STA INC2 & LDAk ?&w POP2 JMP2r @skey ( key buf -- proc ) OVR #20 LTH ?{ #00 SWP sput #00 JMP2r } POP2 #01 JMP2r @scap ( str* -- end* ) &w ( -- ) INC2 & LDAk ?&w JMP2r @sput ( chr str* -- ) scap/ STA JMP2r @scmp ( a* b* -- f ) STH2 &l ( a* b* -- f ) LDAk LDAkr STHr NEQk ?&d DUP EOR EQUk ?&d POP2 INC2 INC2r !&l &d ( a* c1 c2 b* -- f ) NIP2 POP2r EQU JMP2r @<phex> ( short* -- ) SWP <phex>/b &b ( -- ) DUP #04 SFT <phex>/c &c ( -- ) #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO JMP2r ( @|assets ) @types =dict/std =dict/arg @dict ( ) &hello "Welcome 20 "to 20 "Uxn! 0a $1 &yousaid "You 20 "said: 20 $1 &yousent "You 20 "sent: 20 $1 &std "(std) $1 &arg "(arg) $1 &quit "quit $1 &argend "(argend) 0a $1