~rabbits/left

84fbda18be9903712a2f70ff1fdc65fc1ad5637f — Devine Lu Linvega a month ago f1e4210
Further porting to Call opcodes
2 files changed, 110 insertions(+), 110 deletions(-)

M src/left.tal
M src/manifest.tal
M src/left.tal => src/left.tal +91 -91
@@ 103,9 103,9 @@ BRK
	;on-mouse-trap .Mouse/vector DEO2
	#00 .Mouse/state DEO
	( clear cursor )
	#40 ;draw-cursor ( .. )
	#40 !draw-cursor

JMP2
( .. )

@untrap ( -- )



@@ 119,9 119,9 @@ JMP2
		;file-new/untitled-txt ;filepath scpy
		&no-empty

	#01 ;draw-filepath ( .. )
	#01 !draw-filepath

JMP2
( .. )

@on-console ( -> )



@@ 223,11 223,11 @@ BRK
	[ #22 ] NEQk NIP ?&no-ad select-next-marker POP BRK &no-ad

	DUP #04 AND ?&shift
		.selection/from LDZ2 ROT ,arrow-to-addr JSR select-start
		.selection/from LDZ2 ROT arrow-to-addr select-start
		POP
	BRK
	&shift
		.selection/to LDZ2 ROT ,arrow-to-addr JSR select-end
		.selection/to LDZ2 ROT arrow-to-addr select-end
		POP

BRK


@@ 238,18 238,18 @@ BRK
	DUP #02 AND ?&alt
	( default )
	#04 SFT
	[ #01 ] NEQk NIP ?&no-u ROT ROT #0001 SUB2 ;find-line-start JMP2 &no-u
	[ #01 ] NEQk NIP ?&no-u ROT ROT #0001 SUB2 !find-line-start &no-u
	[ #02 ] NEQk NIP ?&no-d ROT ROT find-line-end INC2 JMP2r &no-d
	[ #04 ] NEQk NIP ?&no-l ROT ROT #0001 SUB2 JMP2r &no-l
	[ #08 ] NEQk NIP ?&no-r ROT ROT INC2 JMP2r &no-r
	&ctrl
	#04 SFT
	[ #04 ] NEQk NIP ?&no-cl ROT ROT ;find-line-start JMP2 &no-cl
	[ #08 ] NEQk NIP ?&no-cr ROT ROT ;find-line-end JMP2 &no-cr
	[ #04 ] NEQk NIP ?&no-cl ROT ROT !find-line-start &no-cl
	[ #08 ] NEQk NIP ?&no-cr ROT ROT !find-line-end &no-cr
	&alt
	#04 SFT
	[ #04 ] NEQk NIP ?&no-al ROT ROT ;find-prev-spacer JMP2 &no-al
	[ #08 ] NEQk NIP ?&no-ar ROT ROT ;find-next-spacer JMP2 &no-ar
	[ #04 ] NEQk NIP ?&no-al ROT ROT !find-prev-spacer &no-al
	[ #08 ] NEQk NIP ?&no-ar ROT ROT !find-next-spacer &no-ar
	ROT ROT

JMP2r


@@ 279,24 279,24 @@ BRK
	.Mouse/state DEI STHk [ LIT &last $1 ]
	( mouse1 )
	DUP2 #0101 NEQ2 ?&no-drag
		,touch-to-addr JSR select-end
		touch-to-addr select-end
		&no-drag
	DUP2 #0100 NEQ2 ?&no-down
		,touch-to-addr JSR
		touch-to-addr
		.Controller/button DEI
		[ #04 ] NEQk NIP ?&no-shift
			POP select-end ,&no-down JMP
			POP select-end !&no-down
			&no-shift
		[ #02 ] NEQk NIP ?&no-alt
			POP select-word
			#00 .Mouse/state DEO ,&no-down JMP
			#00 .Mouse/state DEO !&no-down
			&no-alt
		POP
		select-start
		&no-down
	( mouse2 )
	DUP2 #0200 NEQ2 ?&no-down2
		,touch-to-addr JSR select-word
		touch-to-addr select-word
		#00 .Mouse/state DEO
		&no-down2
	( mouse3 )


@@ 365,7 365,7 @@ BRK
@scroll-to ( line* -- )

	DUP2 .scroll/y LDZ2 EQU2 ?&skip
	DUP2 ,count-lines JSR GTH2 ?&skip
	DUP2 count-lines GTH2 ?&skip
	DUP2 set-scroll-y
	draw-textarea
	&skip


@@ 382,7 382,7 @@ JMP2r
@count-lines ( -- line* )

	LITr -scroll/y LDZ2r
	,get-eof JSR .scroll/addr LDZ2
	get-eof .scroll/addr LDZ2
	&while
		LDAk #0a NEQ JMP INC2r
		INC2 GTH2k ?&while


@@ 409,7 409,7 @@ JMP2r
	DUP2 .scroll/y LDZ2 EQU2 ?&same
		#00 draw-position
		DUP2 .scroll/y STZ2
		DUP2 ,line-to-addr JSR .scroll/addr STZ2
		DUP2 line-to-addr .scroll/addr STZ2
		update-nav
		#02 draw-position
		&same


@@ 421,9 421,9 @@ JMP2r

	STH2
	.textarea/length LDZ2k STH2r ADD2 ROT STZ2
	#02 ;draw-state ( .. )
	#02 !draw-state

JMP2
( .. )

@line-to-addr ( line* -- addr* )



@@ 445,7 445,7 @@ JMP2r
	DUP2 find-line-start
	&loop
		EQU2k ?&end
		,get-width JSR STH2 ADD2r
		get-width STH2 ADD2r
		INC2 GTH2k ?&loop
	&end
	POP2 POP2


@@ 479,13 479,13 @@ JMP2r
@update-selection ( -- )

	( scroll-x )
	.selection/to LDZ2 #0001 SUB2 ,addr-to-x JSR #00a0 ADD2
	.selection/to LDZ2 #0001 SUB2 addr-to-x #00a0 ADD2
	.Screen/width DEI2 SUB2 DUP2 #8000 LTH2 ?&no-scroll
		POP2 #0000
		&no-scroll
	set-scroll-x
	( scroll-y )
	.selection/to LDZ2 ,addr-to-line JSR
	.selection/to LDZ2 addr-to-line
	DUP2 .scroll/y LDZ2 .textarea/lines LDZ2 ADD2 LTH2 ?&no-below
		DUP2 .scroll/y LDZ2 .textarea/lines LDZ2 ADD2 SUB2
		.scroll/y LDZ2 INC2 ADD2 set-scroll-y


@@ 494,19 494,19 @@ JMP2r
		DUP2 set-scroll-y
		&no-above
	POP2
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )

@select-word ( addr* -- )

	find-prev-spacer INC2 DUP2 find-next-spacer ,select-range ( .. )
	find-prev-spacer INC2 DUP2 find-next-spacer !select-range

JMP
( .. )

@select-start ( addr* -- )

	INC2k ,select-range JMP
	INC2k !select-range

@select-end ( addr* -- )



@@ 514,17 514,17 @@ JMP

@select-range ( from* to* -- )

	,set-selection JSR [ JMP JMP2r ]
	set-selection [ JMP JMP2r ]
		update-selection
		;update-nav ( .. )
		!update-nav

JMP2
( .. )

@select-prev-marker ( -- )

	.selection/from LDZ2 get-current-marker #01 SUB

,select-marker JMP
!select-marker

@select-next-marker ( -- )



@@ 534,19 534,19 @@ JMP2

	get-marker
		DUP2 ;search slen ADD2
		;select-range ( .. )
		!select-range

JMP2
( .. )

@reset-selection ( -- )

	.selection/from LDZ2 INC2k ,set-selection JSR ?&no-unsearch
	.selection/from LDZ2 INC2k set-selection ?&no-unsearch
		#00 .search STZ
		&no-unsearch
	update-nav
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )

@set-selection ( from* to* -- changed )



@@ 571,9 571,9 @@ JMP2r

	.selection/from LDZ2 get-eof .selection/length LDZ2 msfl
	update-nav
	#0000 .selection/length LDZ2 SUB2 ;mod-length ( .. )
	#0000 .selection/length LDZ2 SUB2 !mod-length

JMP2
( .. )

@insert ( char -- )



@@ 584,7 584,7 @@ JMP2
	( convert linebreaks )
	DUP #0d EQU #03 MUL SUB

	.selection/length LDZ2 #0001 EQU2 ,&no-block JCN
	.selection/length LDZ2 #0001 EQU2 ?&no-block
		erase-selection
		.selection/from LDZ2 INC2k set-selection POP
		&no-block


@@ 592,9 592,9 @@ JMP2
	.selection/from LDZ2 STH2k #0001 SUB2 get-eof #0001 msfr
	#0001 mod-length
	STH2kr STA
	STH2r INC2 ;select-start ( .. )
	STH2r INC2 !select-start

JMP2
( .. )

@erase ( -- )



@@ 602,15 602,15 @@ JMP2

	.selection/length LDZ2 #0001 EQU2 ?&no-block
		erase-selection
		;reset-selection JMP2
		!reset-selection
		&no-block

	.selection/from LDZ2 #0001 SUB2
		DUP2 get-eof #0001 msfl
		select-start
	#ffff ;mod-length ( .. )
	#ffff !mod-length ( .. )

JMP2
( .. )

@delete ( -- )



@@ 618,15 618,15 @@ JMP2

	.selection/length LDZ2 #0001 EQU2 ?&no-block
		erase-selection
		;reset-selection JMP2
		!reset-selection
		&no-block

	.selection/from LDZ2 get-eof #0001 msfl
	update-nav
	#ffff mod-length
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )

( find )



@@ 679,9 679,9 @@ JMP2r
@toggle-highlight ( -- )

	.textarea/highlight LDZk #00 EQU SWP STZ
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )

(
@|nav )


@@ 693,29 693,29 @@ JMP2
	get-eof .scroll/addr LDZ2 find-first-marker
	&l
		LDA2k #0a LIT "@ NEQ2 ?&continue
			INC2 DUP2 ,add-marker JSR
			INC2 DUP2 add-marker
			INC2
			&continue
		( reached bottom ) .nav/len LDZ #18 GTH ?&end
		INC2 GTH2k ?&l
	&end
	POP2 POP2
	;draw-navbar ( .. )
	!draw-navbar

JMP2
( .. )

&when-search ( -- )

	get-eof ;text
	&loop
		;search OVR2 sseg #00 EQU ?&no-find
			DUP2 ,add-marker JSR
			DUP2 add-marker
			&no-find
		INC2 GTH2k ?&loop
	POP2 POP2
	;draw-navbar ( .. )
	!draw-navbar

JMP2
( .. )

@add-marker ( addr* -- )



@@ 747,7 747,7 @@ JMP2r
	STH2
	.nav/len LDZ #00
	&loop
		DUP ,get-marker JSR #0001 SUB2 STH2kr GTH2 ?&end
		DUP get-marker #0001 SUB2 STH2kr GTH2 ?&end
		INC GTHk ?&loop
	&end
	NIP #01 SUB


@@ 765,9 765,9 @@ JMP2r
	.selection/from LDZ2 ;search
		( length ) .selection/length LDZ2 #0020 LTH2k [ JMP SWP2 POP2 ]
		mcpy
	;update-nav ( .. )
	!update-nav

JMP2
( .. )

(
@|drawing )


@@ 777,9 777,9 @@ JMP2
	draw-spacer
	draw-scrollbar
	draw-navbar
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )

@draw-textarea ( -- )



@@ 807,15 807,15 @@ JMP2
	#15 .Screen/auto DEO
	get-eof INC2 .scroll/addr LDZ2
	&loop
		,draw-token JSR
		draw-token
		.Screen/y DEI2 .Screen/height DEI2 #0010 SUB2 GTH2 ?&end
		LDAk #00 EQU ?&end
		GTH2k ?&loop
	&end
	POP2 POP2
	;draw-scrollbar ( .. )
	!draw-scrollbar

JMP2
( .. )

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



@@ 854,7 854,7 @@ JMP2r
		&continue
	( set color )
	SWP2
	,draw-token/is-selected JSR #0d01 ROT [ JMP SWP POP ]
	draw-token/is-selected #0d01 ROT [ JMP SWP POP ]
		;draw-ufx/color STA
	SWP2
	( draw glyph )


@@ 919,7 919,7 @@ JMP2r
@draw-special ( char -- )

	[ #09 ] NEQk NIP ?&no-tab
		POP #10 ;tab-icn ;draw-ufx/seg JMP2
		POP #10 ;tab-icn !draw-ufx/seg
		&no-tab
	[ #0a ] NEQk NIP ?&no-linebreak
		POP #08 ;linebreak-icn draw-ufx/seg


@@ 927,9 927,9 @@ JMP2r
		#0010 .scroll/x LDZ2 SUB2 #0080 ADD2 .Screen/x DEO2
		JMP2r
		&no-linebreak
	POP #08 ;checkered-icn ;draw-ufx/seg ( .. )
	POP #08 ;checkered-icn !draw-ufx/seg

JMP2
( .. )

@draw-scrollbar ( -- )



@@ 1029,7 1029,7 @@ JMP2r

@draw-str-right ( text* -- )

	DUP2 ,get-strw JSR STH2
	DUP2 get-strw STH2
	.Screen/x DEI2k STH2r SUB2 ROT DEO2

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


@@ 1037,7 1037,7 @@ JMP2r
	LDAk #00 EQU ?&skip
	#15 .Screen/auto DEO
	&while
		LDAk ,draw-chr JSR
		LDAk draw-chr
		INC2 LDAk ?&while
	&skip
	INC2


@@ 1059,13 1059,13 @@ JMP2r
	find-prev-spacer INC2
	&while
		.Screen/x DEI2 #0078 GTH2 ?&truncate
		LDAk ,draw-chr JSR
		LDAk draw-chr
		INC2 LDAk #20 GTH ?&while
	&skip
	INC2

JMP2r
	&truncate LIT ". DUP ,draw-chr JSR ,draw-chr JMP
	&truncate LIT ". DUP draw-chr !draw-chr

@draw-filepath ( color -- )



@@ 1095,9 1095,9 @@ JMP2r
	#03e8 ,&parse JSR
	#0064 ,&parse JSR
	#000a ,&parse JSR
	NIP #30 ADD ;draw-chr ( .. )
	NIP #30 ADD !draw-chr

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


@@ 1138,9 1138,9 @@ JMP2r
	( draw )
	#01 draw-filepath
	update-nav
	;draw-textarea ( .. )
	!draw-textarea

JMP2
( .. )
	&untitled-txt "untitled.txt $1

@file-goto ( -- )


@@ 1163,9 1163,9 @@ JMP2
	( draw )
	reset-selection
	#01 draw-filepath
	#01 ;draw-state ( .. )
	#01 !draw-state

JMP2
( .. )
	&tal-ext ".tal $1

@file-save ( -- )


@@ 1173,9 1173,9 @@ JMP2
	;filepath .File/name DEO2
	;text slen .File/length DEO2
	;text .File/write DEO2
	#01 ;draw-state ( .. )
	#01 !draw-state

JMP2
( .. )

( snarf )



@@ 1183,12 1183,12 @@ JMP2

@edit-cut ( -- )

	,edit-copy JSR
	edit-copy

	erase-selection
	;reset-selection ( .. )
	!reset-selection

JMP2
( .. )

@edit-copy ( -- )



@@ 1219,25 1219,25 @@ JMP2r
	;snarf-txt .File/name DEO2
	STH2kr .File/length DEO2
	.selection/from LDZ2 .File/read DEO2
	.selection/from LDZ2 STH2r ADD2 ;select-start ( .. )
	.selection/from LDZ2 STH2r ADD2 !select-start

JMP2
( .. )

@edit-select-at ( -- )

	.selection/from LDZ2 ;select-word ( .. )
	.selection/from LDZ2 !select-word

JMP2
( .. )

(
@|stdlib )

@scmp ( a* b* -- f ) STH2 &l LDAk LDAkr STHr ANDk #00 EQU ?&e NEQk ?&e POP2 INC2 INC2r ,&l JMP &e NIP2 POP2r EQU JMP2r
@shex ( str* -- val* ) LIT2r 0000 &w LITr 40 SFT2r LITr 00 LDAk ,chex JSR STH ADD2r INC2 LDAk ?&w POP2 STH2r 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
@shex ( str* -- val* ) LIT2r 0000 &w LITr 40 SFT2r LITr 00 LDAk chex STH ADD2r INC2 LDAk ?&w POP2 STH2r JMP2r
@chex ( c -- val ) LIT "0 SUB DUP #09 GTH JMP JMP2r #27 SUB DUP #0f GTH JMP JMP2r POP #ff JMP2r
@msfl ( b* a* len* -- ) STH2 SWP2 EQU2k ?&e &l DUP2k STH2kr ADD2 LDA ROT ROT STA INC2 GTH2k ?&l POP2 POP2 &e POP2r JMP2r
@msfr ( b* a* len* -- ) STH2 EQU2k ?&e &l DUP2 LDAk ROT ROT STH2kr ADD2 STA #0001 SUB2 LTH2k ?&l POP2 POP2 &e POP2r JMP2r
@sseg ( a* b* -- f ) STH2 &l LDAk LDAkr STHr NEQ ?&e INC2k LDA #00 EQU ?&e INC2 INC2r ,&l JMP &e LDA LDAr STHr EQU JMP2r
@sseg ( a* b* -- f ) STH2 &l LDAk LDAkr STHr NEQ ?&e INC2k LDA #00 EQU ?&e INC2 INC2r !&l &e LDA LDAr STHr EQU JMP2r
@mcpy ( src* dst* len* -- ) SWP2 STH2 OVR2 ADD2 SWP2 &loop LDAk STH2kr STA INC2r INC2 GTH2k ?&loop POP2 POP2 POP2r JMP2r
@sclr ( str* -- ) &w STH2k #00 STH2r STA INC2 LDAk ?&w POP2 JMP2r


M src/manifest.tal => src/manifest.tal +19 -19
@@ 38,7 38,7 @@ BRK
	( don't leave if menu is active )
	;draw-menu/sel LDA INC ?&no-leave
	.Mouse/y DEI2 #0014 LTH2 ?&no-leave
		,menu-close JSR
		menu-close
		&no-leave

BRK


@@ 75,15 75,15 @@ JMP2r
	#ff ;draw-sub/sel STA
	DUP ;draw-menu/sel STA
	#ff draw-sub
	;draw-menu ( .. )
	!draw-menu

JMP2
( .. )

@menu-deselect ( cat cat -- )

	POP2 ;menu-close ( .. )
	POP2 !menu-close

JMP2
( .. )

@menu-select-sub ( sub -- )



@@ 186,13 186,13 @@ JMP2r
	,&mk STR2
	;draw-menu/manifest LDA2
	&cat
		LDAk STH INC2 ,skip-str JSR
		LDAk STH INC2 skip-str
		STHr #00
		&subcat
			OVR2 LDA2 [ LIT2 &mk $2 ] NEQ2 ?&continue
				POP2 INC2 INC2 LDA2 JMP2r
				&continue
			SWP2 #0004 ADD2 ,skip-str JSR SWP2
			SWP2 #0004 ADD2 skip-str SWP2
			INC GTHk ?&subcat
		POP2
		LDAk ?&cat


@@ 206,7 206,7 @@ JMP2r
	LDAk STH INC2 skip-str
	STHr #00
	&subcat
		SWP2 #0004 ADD2 ,skip-str JSR SWP2
		SWP2 #0004 ADD2 skip-str SWP2
		INC GTHk ?&subcat
	POP2



@@ 289,12 289,12 @@ JMP2
		LIT "+ ;&buf sput
		&no-mod
	( key )
	DUP #08 NEQ ?&no-bsp ;&bsp ,&cat JMP &no-bsp
	DUP #09 NEQ ?&no-tab ;&tab ,&cat JMP &no-tab
	DUP #0d NEQ ?&no-ent ;&ent ,&cat JMP &no-ent
	DUP #20 NEQ ?&no-spc ;&spc ,&cat JMP &no-spc
	DUP #1b NEQ ?&no-esc ;&esc ,&cat JMP &no-esc
	DUP #7f NEQ ?&no-del ;&del ,&cat JMP &no-del
	DUP #08 NEQ ?&no-bsp ;&bsp !&cat &no-bsp
	DUP #09 NEQ ?&no-tab ;&tab !&cat &no-tab
	DUP #0d NEQ ?&no-ent ;&ent !&cat &no-ent
	DUP #20 NEQ ?&no-spc ;&spc !&cat &no-spc
	DUP #1b NEQ ?&no-esc ;&esc !&cat &no-esc
	DUP #7f NEQ ?&no-del ;&del !&cat &no-del
	DUP ;&buf sput
	&end
	POP


@@ 309,7 309,7 @@ JMP2r
@update-cursor ( color addr* -- )

	#00 .Screen/auto DEO
	#40 ,draw-cursor JSR
	#40 draw-cursor
	.Mouse/x DEI2 .cursor/x STZ2
	.Mouse/y DEI2 .cursor/y STZ2
	.Screen/addr DEO2


@@ 343,10 343,10 @@ JMP2r
@|stdlib )

@scap ( str* -- end* ) LDAk #00 NEQ JMP JMP2r &w INC2 LDAk ?&w JMP2r
@spop ( str* -- ) LDAk ?&n POP2 JMP2r &n ,scap JSR #0001 SUB2 #00 ROT ROT STA JMP2r
@sput ( chr str* -- ) ,scap JSR INC2k #00 ROT ROT STA STA JMP2r
@slen ( str* -- len* ) DUP2 ,scap JSR SWP2 SUB2 JMP2r
@scat ( src* dst* -- ) ,scap JSR
@spop ( str* -- ) LDAk ?&n POP2 JMP2r &n scap #0001 SUB2 #00 ROT ROT STA JMP2r
@sput ( chr str* -- ) scap INC2k #00 ROT ROT STA STA JMP2r
@slen ( str* -- len* ) DUP2 scap SWP2 SUB2 JMP2r
@scat ( src* dst* -- ) scap
@scpy ( src* dst* -- ) STH2 &w LDAk STH2kr STA INC2r INC2 LDAk ?&w POP2 #00 STH2r STA JMP2r
@mclr ( src* len* -- ) OVR2 ADD2 SWP2 &l STH2k #00 STH2r STA INC2 GTH2k ?&l POP2 POP2 JMP2r
@phex ( short* -- ) SWP ,&b JSR &b DUP #04 SFT ,&c JSR &c #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r