optimize some labels, optimize redrawing
This commit is contained in:
parent
17ed894126
commit
5ef9b333c9
84
femto.tal
84
femto.tal
|
@ -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 )
|
||||||
( ®ex $2 ( regex to be stored if any ) )
|
®ex $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 @@
|
||||||
¬-end
|
¬-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
|
||||||
( ®ex-search-prompt "Regex 20 "to 20 "Search 20 "for: 20 00 )
|
®ex-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
|
||||||
|
|
Loading…
Reference in New Issue