0
0
Fork 0
mirror of https://git.sr.ht/~rabbits/uxn synced 2024-12-03 02:57:25 +00:00
uxn/projects/examples/devices/console.tal
2023-07-16 10:04:40 -07:00

113 lines
1.9 KiB
Tal

( 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
;dict/hello <print-str>
.Console/type DEI ?&has-arg
BRK
&has-arg ( -> )
;dict/queue <print-str>
BRK
@on-argument ( -> )
.Console/type DEI ?&>no-argend
;on-stdin .Console/vector DEO2
BRK &>no-argend
.Console/read DEI .buf skey ?&eval
BRK
&eval ( -> )
<print-type>
;dict/yousent <print-str>
LIT "" #18 DEO
;buf <print-str>
LIT "" #18 DEO
#0a18 DEO
;buf sclr .Console/type DEI #04 NEQ ?&>no-close
;dict/argend <print-str>
;on-stdin .Console/vector DEO2 &>no-close
BRK
@on-stdin ( -> )
.Console/read DEI .buf skey ?&eval
BRK
&eval ( -> )
<print-type>
;buf ;dict/quit scmp ?&quit
;dict/yousaid <print-str>
LIT "" #18 DEO
;buf <print-str>
LIT "" #18 DEO
#0a18 DEO
;buf sclr BRK
&quit ( buf* -> )
#010f DEO
BRK
@<print-type> ( -- )
[ LIT2 00 -Console/type ] DEI #01 GTH DUP ADD ;types ADD2 LDA2 !<print-str>
(
@|stdlib )
@<print-str> ( str* -- )
!&
&while ( -- )
LDAk #18 DEO
INC2 & LDAk ?&while
POP2 JMP2r
@skey ( key buf -- proc )
OVR #20 LTH ?&eval
#00 SWP sput #00 JMP2r
&eval POP2 #01 JMP2r
@sclr ( str* -- )
!&
&while ( -- )
STH2k #00 STH2r STA
INC2 & LDAk ?&while
POP2 JMP2r
@scap ( str* -- end* )
!&
&while ( -- )
INC2 & LDAk ?&while
JMP2r
@sput ( chr str* -- )
scap INC2k #00 ROT ROT STA
STA
JMP2r
@scmp ( a* b* -- f )
STH2
&loop ( -- )
LDAk LDAkr STHr ANDk #00 EQU ?&e
NEQk ?&e
POP2 INC2 INC2r !&loop
&e NIP2 POP2r EQU 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
&queue "(queue) 0a $1