~rabbits/left

1f0adeeb35c102ad8e708cfc2fa16daf73c54a2d — Devine Lu Linvega a month ago 9eb0b32
Optimized token drawing routine
1 files changed, 46 insertions(+), 38 deletions(-)

M src/left.tal
M src/left.tal => src/left.tal +46 -38
@@ 38,12 38,12 @@
	load-theme
	( size )
	#02a8 .Screen/width DEO2
	#0180 .Screen/height DEO2
	#01a0 .Screen/height DEO2
	( cache position )
	.Screen/height DEI2
		DUP2 #0020 SUB2 #04 SFT2 .textarea/lines STZ2
		#0018 SUB2 .scrollbar/height STZ2
	.Screen/height DEI2 #06 SFT2 NIP INC ;draw-textarea/height STA
		DUP2 #0018 SUB2 .scrollbar/height STZ2
		#06 SFT2 NIP INC ;draw-textarea/height STA
	.Screen/width DEI2 #0088 SUB2 #03 SFT2 NIP ;draw-textarea/width STA
	( defaults )
	#0001 .scroll/ratio STZ2


@@ 65,7 65,7 @@ BRK
	( name ) "Left 0a
	( details ) "A 20 "Text 20 "Editor 0a
	( author ) "By 20 "Hundred 20 "Rabbits 0a
	( date ) "Jan 20 "8, 20 "2023 00
	( date ) "Jan 20 "20, 20 "2023 00
	02
		( icon ) 83 =appicon
		( mask ) 41 1705


@@ 131,18 131,18 @@ BRK
		;filepath sclr
		&no-start
	.Console/read DEI .filepath skey
		?&open
		?&on-open

BRK

&open ( -> )
&on-open ( -> )

	#00 ,&listen STR file-open
	;on-inject .Console/vector DEO2
	;&on-inject .Console/vector DEO2

BRK

@on-inject ( -> )
&on-inject ( -> )

	( once a file has been opened, console injects characters )
	.Console/read DEI insert


@@ 804,17 804,17 @@ JMP2r
	( fast clear )
	#71 .Screen/auto DEO
	#0020 .Screen/y DEO2
	[ LIT &height $1 ] #00
	#00 [ LIT &height $1 ] SUB
	&h
		#0088 .Screen/x DEO2
		[ LIT &width $1 ] #00
		#00 [ LIT &width $1 ] SUB
		&w
			#00 .Screen/sprite DEO
			INC GTHk ?&w
		POP2
			INC DUP ?&w
		POP
		.Screen/y DEI2k #0040 ADD2 ROT DEO2
		INC GTHk ?&h
	POP2
		INC DUP ?&h
	POP
	( setup )
	.selection/from LDZ2 get-current-marker
		get-marker ;walk-color/scope STA2


@@ 827,7 827,6 @@ JMP2r
	&l
		draw-token
		.Screen/y DEI2 .Screen/height DEI2 #0010 SUB2 GTH2 ?&end
		LDAk #00 EQU ?&end
		GTH2k ?&l
	&end
	POP2 POP2


@@ 837,29 836,34 @@ JMP2r

@draw-token ( str* -- str* )

	walk-color STH
	( detect underline )
	DUP2 is-rune ;draw-ufx/ul STA
	( draw rune )
	;walk-color/c LDA  ?&w
	.textarea/highlight LDZ ?&w
	draw-rune
	LDAk #21 LTH ?&whitespace

	( color ) walk-color ,&color STR
	( underline ) DUP2 is-rune ;draw-ufx/ul STA
	( rune ) draw-rune
	&w
		is-selected STH
		LDAk STH2kr #0d ROT ROT [ JMP SWP POP ] draw-ufx POPr
		LDAk [ LIT2 0d &color 00 ] STHr [ JMP SWP POP ] draw-ufx
		LDAk #1f LTH ?&end
		INC2 LDAk #20 GTH ?&w
	( reset ul ) #00 ;draw-ufx/ul STA
	( reset color ) POPr
	&w2
		is-selected STH
		LDAk #0d01 STHr [ JMP SWP POP ] draw-ufx
		INC2 LDAk #01 SUB #20 LTH ?&w2
	&end

JMP2r

&whitespace ( str* -- str* )

	( remove underline ) #00 ;draw-ufx/ul STA
	is-selected #0c MUL INC ,&ws-color STR
	LDAk [ LIT &ws-color $1 ] draw-ufx
	INC2

JMP2r

@draw-rune ( addr* -- addr* )

	;walk-color/c LDA ?&skip
	.textarea/highlight LDZ ?&skip

	LDAk ;runes cndx INC2k ORA ?&continue
		POP2 JMP2r
		&continue


@@ 872,6 876,7 @@ JMP2r
	#50 SFT2 ;rune-icns ADD2 #08 ROT ROT
		draw-ufx/seg
	INC2
	&skip

JMP2r



@@ 1102,18 1107,21 @@ JMP2r
@draw-dec ( short* -- )

	#00 ,&z STR
	#2710 ,&parse JSR
	#03e8 ,&parse JSR
	#0064 ,&parse JSR
	#000a ,&parse JSR
	#2710 draw-dec/parse
	#03e8 draw-dec/parse
	#0064 draw-dec/parse
	#000a draw-dec/parse
	NIP #30 ADD !draw-chr

( .. )
	&parse
		DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
		DUP #30 ADD draw-chr #ff ,&z STR
		&skip POP MUL2 SUB2
	JMP2r

&parse

	DIV2k DUPk [ LIT &z $1 ] EQU ?&skip
	DUP #30 ADD draw-chr #ff ,&z STR
	&skip POP MUL2 SUB2

JMP2r

(
@|document )