copying to .snarf works (max 4096 bytes)
This commit is contained in:
parent
59c6675ff2
commit
ef647e4ab9
89
term.tal
89
term.tal
|
@ -16,6 +16,7 @@
|
|||
( 10. investigate neauoire mosh flicker. theory: tmux running under non-ansi TERM )
|
||||
( 11. crawl has screen-clearing issues )
|
||||
( 12. cursor hiding for cmatrix )
|
||||
( 13. clean up super ugly selection code )
|
||||
|
||||
( ANSI sequences )
|
||||
( )
|
||||
|
@ -178,8 +179,8 @@
|
|||
( set to 01 to enable debug log )
|
||||
#00 .debug STZ
|
||||
|
||||
#99 #010e DEO
|
||||
.debug LDZ ?&continue BRK &continue
|
||||
#99 #010e DEO
|
||||
;debug-log .File1/name DEO2
|
||||
#01 .File1/append DEO
|
||||
BRK
|
||||
|
@ -224,7 +225,8 @@
|
|||
LIT2r =cells ( [addr*] )
|
||||
#0000 &yloop ( y* [addr*] y* )
|
||||
#0000 &xloop ( y* x* [addr*] )
|
||||
#0220 STH2kr STA2 ( y* x* [addr*] )
|
||||
( #0220 STH2kr STA2 ( y* x* [addr*] ) )
|
||||
#0200 STH2kr STA2 ( y* x* [addr*] )
|
||||
INC2r INC2r ( y* x* [addr+2*] )
|
||||
INC2 DUP2 .cols LDZ2 ( y* x+1* x+1* cols* [addr+2*] )
|
||||
LTH2 ?&xloop ( y* x+1* [addr+2*] )
|
||||
|
@ -311,7 +313,7 @@
|
|||
|
||||
@paste-snarf ( -> )
|
||||
.paste LDZ #00 EQU ?&start LIT "0 ;bracket-paste JSR2 &start
|
||||
;&path .File2/name DEO2 ( )
|
||||
;snarf .File2/name DEO2 ( )
|
||||
#0100 .File2/len DEO2 ( )
|
||||
&loop ( )
|
||||
;paste-buf .File2/r DEO2 ( )
|
||||
|
@ -323,7 +325,9 @@
|
|||
&failed POP2
|
||||
&done
|
||||
.paste LDZ #00 EQU ?&end LIT "1 ;bracket-paste JSR2 &end
|
||||
JMP2r [ &path ".snarf 00 ]
|
||||
JMP2r
|
||||
|
||||
@snarf ".snarf 00
|
||||
|
||||
@lit-first-y
|
||||
.is-lit-flip LDZ ?&flip .lit-click-y LDZ2 JMP2r &flip .lit-drag-y LDZ2 JMP2r
|
||||
|
@ -374,9 +378,56 @@
|
|||
.lit-click-y LDZ2 .lit-drag-y LDZ2 EQU2
|
||||
.lit-click-x LDZ2 .lit-drag-x LDZ2 EQU2 AND JMP2r
|
||||
|
||||
@find-natural-end ( y* -> xend* )
|
||||
DUP2 .cols LDZ2 MUL2 ( y* y*cols* )
|
||||
#0002 MUL2 ;cells ADD2 INC2 ( y* edge* )
|
||||
DUP2 .max-x LDZ2 #0002 MUL2 ADD2 ( y* edge* start=edge+2cols* )
|
||||
&loop ( y* edge* addr* )
|
||||
LDAk ?&done ( y* edge* addr* )
|
||||
#0002 SUB2 LTH2k ?&loop ( y* edge* addr-2* )
|
||||
&done ( y* edge* addr* )
|
||||
SWP2 SUB2 #0002 DIV2 ( y* x* )
|
||||
NIP2 JMP2r ( x* )
|
||||
|
||||
@copy-line ( y* x1* x0* -> y* )
|
||||
STH2 STH2 DUP2 find-natural-end ( y* xend* [x0* x1*] )
|
||||
STH2r min ( y* xlim=min(xend,x1)* [x0*] )
|
||||
OVR2 .cols LDZ2 MUL2 ( y* xlim* y*cols* [x0*] )
|
||||
STH2kr ADD2 #0002 MUL2 ;cells ADD2 ( y* xlim* addr* [x0*] )
|
||||
INC2 STH2 SWP2r STH2r ( y* xlim* x0* [addr+1*] )
|
||||
SUB2 INC2 #0000 SWP2 SUB2 ( y* -count* [addr+1*] )
|
||||
&loop ( y* -i* [pos*] )
|
||||
LDAkr STHr copy-char ( y* -i* [pos*] )
|
||||
INC2 INC2r INC2r ORAk ?&loop ( y* -i+1* [pos+2*] )
|
||||
POP2 POP2r JMP2r ( y* )
|
||||
|
||||
@copy-char ( c^ -> )
|
||||
DUP ?&ok POP #20 ( replace \0 with space )
|
||||
&ok STH ;paste-pos LDA2k ( pos* addr* [c^] )
|
||||
STH2k STAr INC2 SWP2 STA2 JMP2r ( )
|
||||
|
||||
@copy-selection ( -> )
|
||||
;paste-buf ;paste-pos STA2
|
||||
lit-last-y INC2 lit-first-y ( ylim* y0* )
|
||||
DUP2 lit-first-x STH2k screen-to-cell ( yn* y0* [x0*] )
|
||||
&yloop ( yn* y* [x*] )
|
||||
OVR2 OVR2 INC2 GTH2 STH .max-x LDZ2 ( yn* y* maxx* [x* last^] )
|
||||
lit-last-x ( yn* y* maxx* xlast* [x* last^] )
|
||||
STHr JMP SWP2 POP2 STH2r ( yn* y* x1* x* )
|
||||
copy-line ( yn* y* )
|
||||
LIT2r 0000 INC2 GTH2k ?&next !&done ( yn* y+1* [0*] )
|
||||
&next ( )
|
||||
#0a copy-char !&yloop ( )
|
||||
&done ( )
|
||||
POP2 POP2 POP2r ( )
|
||||
;snarf .File2/name DEO2 ( )
|
||||
;paste-pos LDA2 ;paste-buf SUB2 ( len* )
|
||||
.File2/len DEO2 ( )
|
||||
;paste-buf .File2/w DEO2 ( )
|
||||
JMP2r ( )
|
||||
|
||||
@handle-selection ( -> )
|
||||
selection-is-empty ?&skip
|
||||
&skip !clear-selection
|
||||
selection-is-empty ?&skip copy-selection &skip !clear-selection
|
||||
|
||||
@clear-selection ( -> )
|
||||
#00 .is-lit STZ
|
||||
|
@ -396,9 +447,7 @@
|
|||
&done .is-lit-flip STZ POP2 POP2 JMP2r ( )
|
||||
|
||||
@end-selection ( -> )
|
||||
update-selection ( redraw-selection ( ) )
|
||||
( draw-pointer )
|
||||
draw-cursor !handle-selection ( )
|
||||
update-selection draw-cursor !handle-selection ( )
|
||||
|
||||
@on-click-down ( click^ -> )
|
||||
DUP #01 AND ?&left-click
|
||||
|
@ -422,8 +471,6 @@
|
|||
STH2r #0008 ADD2 .Screen/addr DEO2 ( 43 sprite^ )
|
||||
DEO JMP2r ( )
|
||||
|
||||
( TODO: need to adjust first/last x/y while dragging )
|
||||
|
||||
@draw-pointer ( -> )
|
||||
.lastmouse-x LDZ2 .lastmouse-y LDZ2 ( x* y* )
|
||||
#01e0 ;cp437 ADD2 !draw-at ( )
|
||||
|
@ -699,7 +746,8 @@
|
|||
@erase ( start* end* -> )
|
||||
EQU2k ?&skip ( start* end* )
|
||||
OVR2 SWP2 ( start* start* end* )
|
||||
SUB2 STH2 #0220 SWP2 ( 4220 start* [count*] )
|
||||
( SUB2 STH2 #0220 SWP2 ( 4220 start* [count*] ) )
|
||||
SUB2 STH2 #0200 SWP2 ( 4220 start* [count*] )
|
||||
&loop ( 4220 addr* [i*] )
|
||||
STA2k INC2 INC2 INC2r INC2r ( 4220 addr+2* [i+1*] )
|
||||
ORAkr STHr ?&loop ( 4220 addr+2* [i+2*] )
|
||||
|
@ -897,7 +945,8 @@
|
|||
&loop ( bound* pos* [i*] )
|
||||
LDA2k OVR2 STH2kr ADD2 ( bound* pos* x* pos+i* [i*] )
|
||||
STA2 ( bound* pos* [i*] ; pos+i<-x )
|
||||
#0220 OVR2 STA2 ( bound* pos* [i*] ; pos<-4220 )
|
||||
( #0220 OVR2 STA2 ( bound* pos* [i*] ; pos<-4220 ) )
|
||||
#0200 OVR2 STA2 ( bound* pos* [i*] ; pos<-4220 )
|
||||
#0002 SUB2 ( bound* pos-2* [i*] )
|
||||
GTH2k #00 EQU ?&loop ( bound* pos-2* [i*] )
|
||||
POP2 POP2 POP2r ( )
|
||||
|
@ -917,7 +966,8 @@
|
|||
POP2 POP2 POP2r ( [n*] )
|
||||
&replace ( [n*] )
|
||||
LIT2r 0000 SWP2r SUB2r ( [-n*] )
|
||||
#0220 cur-addr ( 4220 cur* [-n*] )
|
||||
( #0220 cur-addr ( 4220 cur* [-n*] ) )
|
||||
#0200 cur-addr ( 4220 cur* [-n*] )
|
||||
&loop2 ( 4220 pos* [-i*] )
|
||||
STA2k INC2 INC2 INC2r ( 4220 pos+2* [-i+1*] )
|
||||
ORAkr STHr ?&loop2 ( 4220 pos+2* [-i+1*] )
|
||||
|
@ -931,7 +981,8 @@
|
|||
cur-addr ( limit* start* [i*] )
|
||||
&loop ( limit* pos* [n*] )
|
||||
DUP2 STH2kr ADD2 LDA2k ( limit* pos* pos+i* x* [i*] )
|
||||
#0220 ROT2 STA2 ( limit* pos* x* [i*] ; pos+i<-4220 )
|
||||
( #0220 ROT2 STA2 ( limit* pos* x* [i*] ; pos+i<-4220 ) )
|
||||
#0200 ROT2 STA2 ( limit* pos* x* [i*] ; pos+i<-4220 )
|
||||
OVR2 STA2 INC2 INC2 ( limit* pos+2* [i*] ; pos<-x )
|
||||
GTH2k ?&loop ( limit* pos+2* [i*] )
|
||||
POP2 POP2 POP2r ( )
|
||||
|
@ -948,7 +999,8 @@
|
|||
limit-addr STH2
|
||||
;cells .col-bytes LDZ2 ADD2 STH2
|
||||
&loop
|
||||
STH2kr LDA2 #0220 STH2kr STA2
|
||||
( STH2kr LDA2 #0220 STH2kr STA2 )
|
||||
STH2kr LDA2 #0200 STH2kr STA2
|
||||
STH2kr .col-bytes LDZ2 SUB2 STA2
|
||||
INC2r INC2r GTH2kr STHr ?&loop
|
||||
POP2r POP2r
|
||||
|
@ -1055,7 +1107,8 @@
|
|||
@args $10 &pos $2
|
||||
|
||||
( paste buffer )
|
||||
@paste-buf $100
|
||||
@paste-buf $1000
|
||||
@paste-pos $2
|
||||
|
||||
( 256 chars x 2 tiles/char x 8 bytes/tile = 4096 bytes )
|
||||
( second tile only uses top 50% )
|
||||
|
@ -1070,7 +1123,5 @@
|
|||
01
|
||||
( device mask ) 41 0d07
|
||||
|
||||
@lengths $18 ( keep consistent with .cols )
|
||||
|
||||
( store tint+char for each screen position )
|
||||
@cells
|
||||
|
|
Loading…
Reference in New Issue