~rabbits/uxnlin

4a2ec4714c86bddf0d4c92ae0c10fb5ba4599b63 — Devine Lu Linvega 3 months ago b265eb6
Improved stdlib routines
1 files changed, 55 insertions(+), 20 deletions(-)

M src/uxnlin.tal
M src/uxnlin.tal => src/uxnlin.tal +55 -20
@@ 324,14 324,47 @@ JMP2r

@ciuc ( c -- f ) LIT "A SUB #19 LTH JMP2r
@cilc ( c -- f ) LIT "a SUB #1a LTH JMP2r
@scap ( str* -- end* ) LDAk ?&w JMP2r &w INC2 LDAk ?&w JMP2r
@sput ( chr str* -- ) scap STA JMP2r
@slen ( str* -- len* ) DUP2 scap SWP2 SUB2 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
@sclr ( str* -- ) LDAk ?&w POP2 JMP2r &w STH2k #00 STH2r STA INC2 LDAk ?&w POP2 JMP2r
@scpy ( src* dst* -- ) OVR2 LDA ?&e POP2 POP2 JMP2r &e STH2 &w LDAk STH2kr STA INC2r INC2 LDAk ?&w POP2 #00 STH2r STA JMP2r

@scap ( str* -- end* )
	LDAk ?&w
JMP2r
	&w ( -- )
		INC2 LDAk ?&w
JMP2r

@sput ( chr str* -- )
	scap STA
JMP2r

@slen ( str* -- len* )
	DUP2 scap SWP2 SUB2
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

@sclr ( str* -- )
	#00 ROT ROT
	&w ( -- )
		STAk INC2 LDAk ?&w
	STA
JMP2r

@scpy ( src* dst* -- )
	STH2
	&w ( -- )
		LDAk #00 STH2kr STA2 INC2r INC2 LDAk ?&w
	POP2 POP2r
JMP2r

@skey ( key buf -- proc ) OVR #21 LTH ?&eval #00 SWP sput #00 JMP2r &eval POP2 #01 JMP2r
@pstr ( str* -- ) &w LDAk #19 DEO INC2 LDAk ?&w POP2 JMP2r

@scmp-wild ( a* b* -- flag )



@@ 409,7 442,7 @@ JMP2r
	( padding )
	LDA2k [ LIT2 "|_ ] NEQ2 ?&no-pad
		OVR2 LDA LIT "| EQU ?&pass
		 &no-pad
		&no-pad
	( literals )
	LDA2k [ LIT2 "#_ ] NEQ2 ?&no-lit
		DUP2 slen #0003 NEQ2 ?&no-byte


@@ 495,21 528,23 @@ JMP2r

@pdec ( short* -- )

	[ LIT2 00 _&z ] STR
	#2710 pdec/parse
	#03e8 pdec/parse
	#0064 pdec/parse
	#000a pdec/parse
	NIP #30 ADD #19 DEO
	#2710 LIT2r 00fb
	&w
		DIV2k #000a DIV2k MUL2 SUB2 SWPr
		EQUk OVR STHkr EQU AND ?&skip
			DUP LIT "0 ADD #19 DEO INCr
			&skip
		POP2 #000a DIV2
		SWPr INCr STHkr ?&w
	POP2r POP2 POP2

JMP2r

&parse ( short* den* -- short* )

	DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
	DUP #30 ADD #19 DEO [ LIT2 ff _&z ] STR
	&skip POP MUL2 SUB2

@pstr ( str* -- )
	&w
		LDAk #19 DEO
		INC2 LDAk ?&w
	POP2
JMP2r

(