mirror of https://git.sr.ht/~rabbits/uxn
1 changed files with 52 additions and 72 deletions
@ -1,108 +1,88 @@
|
||||
( usage: uxncli console.rom arg1 arg2 arg3 Prints Hello Uxn!, and listens for incoming stdin events on enter. ) |
||||
( usage: uxncli console.rom foo "bar baz" |
||||
| Prints Welcome to Uxn!, and listens for incoming stdin events on enter. ) |
||||
|
||||
|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |
||||
|
||||
|0000 |
||||
|000 |
||||
|
||||
@buf |
||||
@arg $40 |
||||
@std $40 |
||||
|
||||
|0100 |
||||
|100 |
||||
|
||||
@on-reset ( -> ) |
||||
;Dict/hello <print-str> |
||||
.Console/type DEI ?{ |
||||
( | no arguments ) |
||||
;on-stdin .Console/vector DEO2 |
||||
BRK } |
||||
;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 } |
||||
[ LIT2 02 -Console/type ] DEI NEQ ?{ |
||||
.Console/read DEI [ LIT2 00 &ptr -arg ] INCk ,&ptr STR |
||||
STZ2 |
||||
BRK } |
||||
;arg ;Dict/yousent <print-result> |
||||
[ LIT2 04 -Console/type ] DEI NEQ ?{ ;on-stdin .Console/vector DEO2 } |
||||
[ LIT2 -arg _&ptr ] STR |
||||
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 |
||||
[ LIT2 0a -Console/read ] DEI EQU ?{ |
||||
.Console/read DEI [ LIT2 00 &ptr -std ] INCk ,&ptr STR |
||||
STZ2 |
||||
BRK } |
||||
;std DUP2 ;Dict/yousaid <print-result> |
||||
;Dict/quit scmp ?quit |
||||
[ LIT2 -std _&ptr ] STR |
||||
BRK |
||||
|
||||
@quit ( buf* -> ) |
||||
#800f DEO |
||||
BRK |
||||
|
||||
@<print-type> ( -- ) |
||||
[ LIT2 00 -Console/type ] DEI #01 GTH DUP ADD ;types ADD2 |
||||
( ) LDA2 !<print-str>/ |
||||
@<print-result> ( buf* name* -- ) |
||||
<print-str> |
||||
[ LIT2 "" 18 ] DEO |
||||
<print-str>/ |
||||
[ LIT2 "" 18 ] DEO |
||||
[ LIT2 00 -Console/type ] DEI DUP ADD ;Types ADD2 LDA2 <print-str>/ |
||||
#0a18 DEO |
||||
JMP2r |
||||
|
||||
( |
||||
@|stdlib ) |
||||
|
||||
@<print-str> ( str* -- ) |
||||
&w ( -- ) |
||||
LDAk #18 DEO |
||||
INC2 & LDAk ?&w |
||||
POP2 JMP2r |
||||
|
||||
@sclr ( str* -- ) |
||||
&w ( -- ) |
||||
STH2k #00 STH2r STA |
||||
INC2 & LDAk ?&w |
||||
LDAk #18 DEO |
||||
INC2 & LDAk ?<print-str> |
||||
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 |
||||
LDAk LDAkr STHr NEQk ?&d |
||||
DUP EOR EQUk ?&d |
||||
POP2 INC2 INC2r !&l |
||||
|
||||
@<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 |
||||
&d ( a* c1 c2 b* -- f ) |
||||
NIP2 POP2r EQU JMP2r |
||||
|
||||
( |
||||
@|assets ) |
||||
|
||||
@types |
||||
=dict/std =dict/arg |
||||
@Types =Dict/arg-none =Dict/arg-stdin =Dict/arg-data =Dict/arg-spacer =Dict/arg-end |
||||
|
||||
@dict ( ) |
||||
@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 |
||||
&arg-none "<none> $1 |
||||
&arg-stdin "<stdin> $1 |
||||
&arg-data "<data> $1 |
||||
&arg-spacer "<spacer> $1 |
||||
&arg-end "<end> $1 |
||||
|
||||
|
||||
Loading…
Reference in new issue