optimize some labels, optimize redrawing

This commit is contained in:
~d6 2022-04-01 12:11:09 -04:00
parent 17ed894126
commit 5ef9b333c9
1 changed files with 38 additions and 52 deletions

View File

@ -88,6 +88,8 @@
( zero page ) ( zero page )
|0000 |0000
@counter $2
@term [ @term [
&cols $2 ( relative x coordinate of cursor, from 0 ) &cols $2 ( relative x coordinate of cursor, from 0 )
&rows $2 ( relative y coordinaet of cursor, from 1 ) &rows $2 ( relative y coordinaet of cursor, from 1 )
@ -145,7 +147,7 @@
&active $1 ( are we displaying search results? ) &active $1 ( are we displaying search results? )
&orig-row $2 ( row we began the search at ) &orig-row $2 ( row we began the search at )
&orig-col $2 ( col we began the search at ) &orig-col $2 ( col we began the search at )
( &regex $2 ( regex to be stored if any ) ) &regex $2 ( regex to be stored if any )
] ]
( startup ) ( startup )
@ -153,7 +155,7 @@
;init-zero-page JSR2 ;init-zero-page JSR2
;startup JMP2 ;startup JMP2
( ~regex.tal ) ~regex.tal
( intialize zero page variables ) ( intialize zero page variables )
( ) ( )
@ -276,16 +278,17 @@
( FIXME: handle long lines ) ( FIXME: handle long lines )
@forward ( -> ) @forward ( -> )
;cur-pos JSR2 ;last-pos JSR2 GTH2 ,&skip JCN ;cur-pos JSR2 ;last-pos JSR2 GTH2 ,&skip JCN
;cur-col JSR2 ;cur-len JSR2 LTH2 ,&normal JCN ,&next-line JMP ;cur-col JSR2 ;cur-len JSR2 LTH2 ,&normal JCN
#0000 .cursor/col STZ2
.cursor/row LDZ2 INC2 .cursor/row STZ2
;ensure-visible-cursor JSR2
,&skip JMP
&normal &normal
;cur-col JSR2 INC2 .cursor/col STZ2 ;cur-col JSR2 INC2 .cursor/col STZ2
;redraw-statusbar-and-cursor JSR2 ;redraw-statusbar-and-cursor JSR2
,&skip JMP &skip
&next-line #0000 .cursor/col STZ2
.cursor/row LDZ2 INC2 .cursor/row STZ2
;ensure-visible-cursor JSR2
;redraw-cursor JSR2 ;redraw-cursor JSR2
&skip ;return JMP2 ;return JMP2
( FIXME: handle long lines ) ( FIXME: handle long lines )
@go-back ( -> ) @go-back ( -> )
@ -543,7 +546,8 @@
#0000 SWP2 ;jump-to-coord JMP2 #0000 SWP2 ;jump-to-coord JMP2
@ensure-visible-cursor @ensure-visible-cursor
;cur-rel-row JSR2 .term/rows LDZ2 LTH2 ,&noop JCN .cursor/row LDZ2 .buffer/line-offset LDZ2
SUB2 .term/rows LDZ2 LTH2 ,&noop JCN
;cur-abs-row JSR2 ;jump-to-line JSR2 ;cur-abs-row JSR2 ;jump-to-line JSR2
;redraw-all JSR2 ;redraw-all JSR2
&noop JMP2r &noop JMP2r
@ -613,25 +617,24 @@
;redraw-prompt-and-cursor JSR2 ;return JMP2 ;redraw-prompt-and-cursor JSR2 ;return JMP2
@do-search ( -> ) @do-search ( -> )
( #0000 .searching/regex STZ2 ) #0000 .searching/regex STZ2
;move-to-next-match JSR2 ,&found JCN ;move-to-next-match JSR2 ,&found JCN
;move-to-prev-match JSR2 ,&found JCN ;move-to-prev-match JSR2 ,&found JCN
;move-to-message-line JSR2 ;messages/no-matches-found ;print JSR2 ;move-to-message-line JSR2 ;messages/no-matches-found ;print JSR2
;draw-cursor JSR2 BRK ;draw-cursor JSR2 BRK
&found #01 .searching/active STZ ;return JMP2 &found #01 .searching/active STZ ;return JMP2
( @regex-search ( -> ) @regex-search ( -> )
;messages/regex-search-prompt ;messages/null ;do-regex-search ;start-prompt JSR2 ;messages/regex-search-prompt ;messages/null ;do-regex-search ;start-prompt JSR2
;redraw-prompt-and-cursor JSR2 ;return JMP2 ;redraw-prompt-and-cursor JSR2 ;return JMP2
@do-regex-search ( -> ) @do-regex-search ( -> )
;tmp/data ;compile .searching/regex STZ2 ;tmp/data ;compile .searching/regex STZ2
( compile regex )
;move-to-next-regex-match JSR2 ,&found JCN ;move-to-next-regex-match JSR2 ,&found JCN
;move-to-prev-regex-match JSR2 ,&found JCN ;move-to-prev-regex-match JSR2 ,&found JCN
;move-to-message-line JSR2 ;messages/no-matches-found ;print JSR2 ;move-to-message-line JSR2 ;messages/no-matches-found ;print JSR2
;draw-cursor JSR2 BRK ;draw-cursor JSR2 BRK
&found #01 .searching/active STZ ;return JMP2 ) &found #01 .searching/active STZ ;return JMP2
@toggle-color ( -> ) @toggle-color ( -> )
.config/color LDZ2 #3733 EQU2 ,&wrap-around JCN .config/color LDZ2 #3733 EQU2 ,&wrap-around JCN
@ -652,7 +655,7 @@
.state/key LDZ LIT '> EQU ( M-> ) ;goto-end JCN2 .state/key LDZ LIT '> EQU ( M-> ) ;goto-end JCN2
.state/key LDZ LIT 'c EQU ( M-c ) ;toggle-color JCN2 .state/key LDZ LIT 'c EQU ( M-c ) ;toggle-color JCN2
.state/key LDZ LIT 'g EQU ( M-g ) ;goto-line JCN2 .state/key LDZ LIT 'g EQU ( M-g ) ;goto-line JCN2
( .state/key LDZ LIT 's EQU ( M-s ) ;regex-search JCN2 ) .state/key LDZ LIT 's EQU ( M-s ) ;regex-search JCN2
.state/key LDZ LIT 't EQU ( M-t ) ;toggle-tabs JCN2 .state/key LDZ LIT 't EQU ( M-t ) ;toggle-tabs JCN2
.state/key LDZ LIT 'v EQU ( M-v ) ;page-up JCN2 .state/key LDZ LIT 'v EQU ( M-v ) ;page-up JCN2
.state/key LDZ LIT '[ EQU ( M-[ ) ;xterm JCN2 .state/key LDZ LIT '[ EQU ( M-[ ) ;xterm JCN2
@ -732,17 +735,14 @@
.buffer/limit LDZ2 .buffer/limit LDZ2
;cur-pos JSR2 INC2 ;cur-pos JSR2 INC2
&loop &loop
GTH2k ,&next JCN ,&fail JMP GTH2k #00 EQU ,&fail JCN
&next
DUP2 ;matches-at JSR2 DUP2 ;matches-at JSR2
ORA ,&found JCN ORA ,&found JCN
INC2 ,&loop JMP INC2 ,&loop JMP
&found &found
NIP2 ;jump-to-pos JSR2 #01 ,&done JMP NIP2 ;jump-to-pos JSR2 #01 JMP2r
&fail &fail
;redraw-cursor JSR2 POP2 POP2 #00 ;redraw-cursor JSR2 POP2 POP2 #00 JMP2r
&done
JMP2r
@move-to-prev-match ( -> ok^ ) @move-to-prev-match ( -> ok^ )
;data ;data
@ -753,18 +753,15 @@
ORA ,&found JCN ORA ,&found JCN
#0001 SUB2 ,&loop JMP #0001 SUB2 ,&loop JMP
&found &found
NIP2 ;jump-to-pos JSR2 #01 ,&done JMP NIP2 ;jump-to-pos JSR2 #01 JMP2r
&fail &fail
;redraw-cursor JSR2 POP2 POP2 #00 ;redraw-cursor JSR2 POP2 POP2 #00 JMP2r
&done
JMP2r
( @move-to-next-regex-match ( -> ok^ ) @move-to-next-regex-match ( -> ok^ )
.buffer/limit LDZ2 .buffer/limit LDZ2
;cur-pos JSR2 INC2 ;cur-pos JSR2 INC2
&loop &loop
GTH2k ,&next JCN ,&fail JMP GTH2k #00 EQU ,&fail JCN
&next
( ;search-start ;search-end ) ( ;search-start ;search-end )
( DUP2 ;matches-at JSR2 ) ( DUP2 ;matches-at JSR2 )
DUP2 .searching/regex LDR2 ;rx-search DUP2 .searching/regex LDR2 ;rx-search
@ -776,11 +773,9 @@
;search-start LDA2 ;search-start LDA2
;jump-to-pos JSR2 #01 JMP2r ;jump-to-pos JSR2 #01 JMP2r
&fail &fail
POP2 POP2 #00 POP2 POP2 #00 JMP2r
&done
JMP2r )
( @move-to-prev-regex-match ( -> ok^ ) @move-to-prev-regex-match ( -> ok^ )
#00 JMP2r #00 JMP2r
( ;data ( ;data
;cur-pos JSR2 #0001 SUB2 ;cur-pos JSR2 #0001 SUB2
@ -794,7 +789,7 @@
&fail &fail
POP2 POP2 #00 POP2 POP2 #00
&done &done
JMP2r ) ) JMP2r )
@on-key-searching @on-key-searching
.state/key LDZ #07 EQU ( C-g ) ;cancel-search JCN2 .state/key LDZ #07 EQU ( C-g ) ;cancel-search JCN2
@ -870,21 +865,9 @@
@redraw-prompt-and-cursor ( -> ) #05 ;redraw-add JMP2 @redraw-prompt-and-cursor ( -> ) #05 ;redraw-add JMP2
@redraw-all ( -> ) #1f ;redraw-add JMP2 @redraw-all ( -> ) #1f ;redraw-add JMP2
( @offset-for-cur-row
.buffer/offset LDZ2 ( offset )
#0000 ;cur-rel-row JSR2 SUB2 STH2 ( offset [-k] )
&loop STH2r ORA ,&next JCN
POP2r JMP2r
&next LDAk #0a NEQ JMP INC2r
INC2 ,&loop JMP )
@draw-cursor ( -> ) @draw-cursor ( -> )
.prompt/active LDZ ,&on-prompt JCN .prompt/active LDZ ,&on-prompt JCN
;cur-w-col JSR2 .term/lmargin LDZ2 ADD2 ( TODO: handle long lines )
.term/cols LDZ2 LTH2 ,&ok JCN
( we have a long line )
( ;offset-for-cur-row JSR2 )
&ok
;cur-w-col JSR2 .term/lmargin LDZ2 ADD2 ;cur-w-col JSR2 .term/lmargin LDZ2 ADD2
;cur-rel-row JSR2 ;cur-rel-row JSR2
;term-move-cursor JMP2 ;term-move-cursor JMP2
@ -928,6 +911,7 @@
emit-) emit-)
sp sp
;get-tab-status JSR2 ;print JSR2 ;get-tab-status JSR2 ;print JSR2
sp .counter LDZ2 ;emit-dec2 JSR2 ( FIXME )
;emit-reset JSR2 ;emit-reset JSR2
JMP2r JMP2r
@ -981,6 +965,8 @@
&not-end &not-end
;abs-line JMP2 ;abs-line JMP2
( TODO: enable drawing of regex matches )
( requires a way to anchor our regex on the LHS (e.g. ^) )
@draw-matches ( -> ) @draw-matches ( -> )
( return if not searching ) ( return if not searching )
.searching/active LDZ #00 EQU ,&return JCN ( ) .searching/active LDZ #00 EQU ,&return JCN ( )
@ -1093,9 +1079,9 @@
DUP #08 AND ,&do-8 JCN ,&skip-8 JMP &do-8 ;draw-matches JSR2 DUP #08 AND ,&do-8 JCN ,&skip-8 JMP &do-8 ;draw-matches JSR2
&skip-8 DUP #04 AND ,&do-4 JCN ,&skip-4 JMP &do-4 ;draw-prompt JSR2 &skip-8 DUP #04 AND ,&do-4 JCN ,&skip-4 JMP &do-4 ;draw-prompt JSR2
&skip-4 DUP #02 AND ,&do-2 JCN ,&skip-2 JMP &do-2 ;draw-statusbar JSR2 &skip-4 DUP #02 AND ,&do-2 JCN ,&skip-2 JMP &do-2 ;draw-statusbar JSR2
&skip-2 DUP #01 AND ,&do-1 JCN ,&skip-1 JMP &do-1 ;draw-cursor JSR2 &skip-2 DUP #01 AND ,&do-1 JCN ,&finish JMP &do-1 ;draw-cursor JSR2 ,&finish JMP
&draw-all ;draw-all JSR2 &draw-all .counter LDZ2k INC2 ROT STZ2 ;draw-all JSR2
&skip-1 POP #00 .state/redraw STZ BRK &finish POP #00 .state/redraw STZ BRK
@str-copy ( src* dst* -> ) @str-copy ( src* dst* -> )
STH2 ( src [dst] ) STH2 ( src [dst] )
@ -1324,7 +1310,7 @@
&goto-line "Go 20 "to 20 "line: 20 00 &goto-line "Go 20 "to 20 "line: 20 00
&save-prompt "File 20 "Name 20 "to 20 "Write: 20 00 &save-prompt "File 20 "Name 20 "to 20 "Write: 20 00
&search-prompt "Text 20 "to 20 "Search 20 "for: 20 00 &search-prompt "Text 20 "to 20 "Search 20 "for: 20 00
( &regex-search-prompt "Regex 20 "to 20 "Search 20 "for: 20 00 ) &regex-search-prompt "Regex 20 "to 20 "Search 20 "for: 20 00
&quit-prompt "Save 20 "modified 20 "file 20 "(y/n)? 20 00 &quit-prompt "Save 20 "modified 20 "file 20 "(y/n)? 20 00
&unknown-input "Unknown 20 "input: 20 00 &unknown-input "Unknown 20 "input: 20 00
&no-matches-found "No 20 "matches 20 "found 00 &no-matches-found "No 20 "matches 20 "found 00