uxn/projects/examples/devices/console.tal

60 lines
1.0 KiB
Tal
Raw Normal View History

( Console:
Prints Hello Uxn!, and listens for incoming stdin events on enter. )
2021-02-20 18:00:34 -05:00
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
2023-04-05 19:50:06 -04:00
|00
@buf
2021-04-21 12:48:04 -04:00
|0100 ( -> )
2021-02-20 18:00:34 -05:00
( set vector )
;on-console .Console/vector DEO2
( print hello )
2023-04-05 19:50:06 -04:00
;hello-txt print-str
2021-07-28 18:41:07 -04:00
2021-05-13 11:47:18 -04:00
BRK
2021-02-20 18:00:34 -05:00
@on-console ( -> )
2023-04-05 19:50:06 -04:00
.Console/read DEI .buf skey ?eval
BRK
@eval ( -> )
;buf
DUP2 ;quit-txt scmp ?quit
;yousaid-txt print-str
DUP2 print-str #0a18 DEO
sclr
BRK
@quit ( buf* -> )
POP2 #010f DEO
BRK
@print-str ( str* -- )
&while
LDAk #18 DEO
2023-04-05 19:50:06 -04:00
INC2 LDAk ?&while
POP2
JMP2r
2023-04-05 19:50:06 -04:00
@skey ( key buf -- proc ) OVR #21 LTH ?&eval #00 SWP sput #00 JMP2r &eval POP2 #01 JMP2r
@sclr ( str* -- ) LDAk ?&w POP2 JMP2r &w STH2k #00 STH2r STA INC2 LDAk ?&w POP2 JMP2r
@scap ( str* -- end* ) LDAk ?&w JMP2r &w INC2 LDAk ?&w JMP2r
@sput ( chr str* -- ) scap INC2k #00 ROT ROT STA STA JMP2r
@scmp ( a* b* -- f ) STH2 &l LDAk LDAkr STHr ANDk #00 EQU ?&e NEQk ?&e POP2 INC2 INC2r !&l &e NIP2 POP2r EQU JMP2r
@hello-txt "Welcome 20 "to 20 "Uxn! 0a $1
@yousaid-txt "You 20 "said: 20 $1
2023-04-05 19:50:06 -04:00
@quit-txt "quit $1