( 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