From a9b2983347be203edc2c903f6cb0de5824c7cad8 Mon Sep 17 00:00:00 2001 From: d6 Date: Thu, 9 Feb 2023 21:55:46 -0500 Subject: [PATCH] selection pretty much working --- term.tal | 91 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 38 deletions(-) diff --git a/term.tal b/term.tal index a39c6c6..2b7f1af 100644 --- a/term.tal +++ b/term.tal @@ -103,10 +103,11 @@ @lastmouse-y $2 ( last mouse y ) @lastmouse-st $1 ( last mouse press ) @is-lit $1 - @lit-first-x $2 - @lit-first-y $2 - @lit-last-x $2 - @lit-last-y $2 + @is-lit-flip $1 + @lit-click-x $2 + @lit-click-y $2 + @lit-drag-x $2 + @lit-drag-y $2 ( terminal settings ) @irm $1 ( 01: insert and move right, 00: replace and overwrite ) @@ -254,8 +255,9 @@ INC2 GTH2k ?&yloop POP2 POP2 POP2r - .is-lit LDZ #00 EQU ?&cursor redraw-selection - &cursor draw-cursor #00 .dirty STZ + .is-lit LDZ #00 EQU ?&cursor redraw-selection draw-cursor !&finally + &cursor draw-cursor draw-pointer + &finally #00 .dirty STZ &done BRK @screen-to-cell ( row* col* -> ) @@ -323,17 +325,25 @@ .paste LDZ #00 EQU ?&end LIT "1 ;bracket-paste JSR2 &end JMP2r [ &path ".snarf 00 ] +@lit-first-y + .is-lit-flip LDZ ?&flip .lit-click-y LDZ2 JMP2r &flip .lit-drag-y LDZ2 JMP2r +@lit-first-x + .is-lit-flip LDZ ?&flip .lit-click-x LDZ2 JMP2r &flip .lit-drag-x LDZ2 JMP2r +@lit-last-y + .is-lit-flip LDZ ?&flip .lit-drag-y LDZ2 JMP2r &flip .lit-click-y LDZ2 JMP2r +@lit-last-x + .is-lit-flip LDZ ?&flip .lit-drag-x LDZ2 JMP2r &flip .lit-click-x LDZ2 JMP2r + @redraw-selection ( -> ) - #010e DEO - .lit-first-y LDZ2 .cols LDZ2 MUL2 ( y0*cols* ) - .lit-first-x LDZ2 ADD2 #0002 MUL2 ( 2(y0*cols+x0)* ) + lit-first-y .cols LDZ2 MUL2 ( y0*cols* ) + lit-first-x ADD2 #0002 MUL2 ( 2(y0*cols+x0)* ) ;cells ADD2 STH2 ( [addr*] ) - .lit-last-y LDZ2 INC2 .lit-first-y LDZ2 ( yn* y0* [addr*] ) - DUP2 .lit-first-x LDZ2 STH2k ( yn* y0* x0* [addr* x0*] ) + lit-last-y INC2 lit-first-y ( yn* y0* [addr*] ) + DUP2 lit-first-x STH2k ( yn* y0* x0* [addr* x0*] ) screen-to-cell ( yn* y0* [addr* x0*] ) &yloop ( yn* y* [addr* x*] ) OVR2 OVR2 INC2 GTH2 STH .cols LDZ2 ( yn* y* cols* [addr* x* last^] ) - .lit-last-x LDZ2 INC2 ( yn* y* cols* xn* [addr* x* last^] ) + lit-last-x INC2 ( yn* y* cols* xn* [addr* x* last^] ) STHr JMP SWP2 POP2 STH2r ( yn* y* xlim* x* [addr*] ) &xloop ( yn* y* xlim* x* [addr*] ) STH2kr LDA2 highlight-cell ( yn* y* xlim* x* [addr*] ) @@ -345,7 +355,6 @@ #0008 .Screen/x DEO2 ( yn* y* [addr+2*] ) LIT2r 0000 INC2 GTH2k ?&yloop ( yn* y+1* [addr+2* 0*] ) POP2 POP2 POP2r POP2r ( ) - #010e DEO JMP2r ( ) @point-to-coord ( x* y* -> row* col* ) @@ -353,42 +362,42 @@ DUP2 #0008 SUB2 min #0008 DIV2 #004f min JMP2r ( row* col=(x-8)/8* ) @start-selection ( -> ) - #01 .is-lit STZ ( ) - .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) - point-to-coord OVR2 OVR2 ( row* col* row* col* ) - .lit-first-x STZ2 .lit-first-y STZ2 ( row* col* ) - .lit-last-x STZ2 .lit-last-y STZ2 ( ) - redraw-selection !draw-cursor ( ) + #01 .is-lit STZ ( ) + .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) + #00 .is-lit-flip STZ ( x* y* ) + point-to-coord ( row* col* ) + DUP2 .lit-click-x STZ2 .lit-drag-x STZ2 ( row* ) + DUP2 .lit-click-y STZ2 .lit-drag-y STZ2 ( ) + redraw-selection !draw-cursor ( ) @selection-is-empty ( -> bool^ ) - .lit-first-y LDZ2 .lit-last-y LDZ2 EQU2 - .lit-first-x LDZ2 .lit-last-x LDZ2 EQU2 AND JMP2r + .lit-click-y LDZ2 .lit-drag-y LDZ2 EQU2 + .lit-click-x LDZ2 .lit-drag-x LDZ2 EQU2 AND JMP2r @handle-selection ( -> ) selection-is-empty ?&skip -( .lit-first-y LDZ2 .lit-first-x LDZ2 - .lit-last-y LDZ2 .lit-last-x LDZ2 - #010e DEO POP2 POP2 POP2 POP2 ) &skip !clear-selection @clear-selection ( -> ) #00 .is-lit STZ + #00 .is-lit-flip STZ #01 .dirty STZ - #0000 DUP2 .lit-first-y STZ2 - DUP2 .lit-first-x STZ2 - DUP2 .lit-last-y STZ2 - .lit-last-x STZ2 JMP2r + #0000 DUP2 .lit-click-y STZ2 + DUP2 .lit-click-x STZ2 + DUP2 .lit-drag-y STZ2 + .lit-drag-x STZ2 JMP2r @update-selection ( -> ) - .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) - point-to-coord OVR2 ( row* col* row* ) - .lit-first-y LDZ2 LTH2 ?&earlier ( row* col* ) - .lit-last-x STZ2 .lit-last-y STZ2 JMP2r ( ) - &earlier ( row* col* ) - .lit-first-x STZ2 .lit-first-y STZ2 JMP2r ( ) + .Mouse/x DEI2 .Mouse/y DEI2 point-to-coord ( row* col* ) + OVR2 .lit-drag-y STZ2 DUP2 .lit-drag-x STZ2 ( row* col* ) + OVR2 .lit-click-y LDZ2 LTH2 ?&earlier ( row* col* ) + DUP2 .lit-click-x LDZ2 LTH2 ?&earlier ( row* col* ) + #00 !&done &earlier #01 ( row* col* ) + &done .is-lit-flip STZ POP2 POP2 JMP2r ( ) @end-selection ( -> ) - update-selection redraw-selection ( ) + update-selection ( redraw-selection ( ) ) +( draw-pointer ) draw-cursor !handle-selection ( ) @on-click-down ( click^ -> ) @@ -415,18 +424,24 @@ ( 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 ( ) + @on-move ( -> ) .Mouse/x DEI2 .lastmouse-x LDZ2 NEQ2 ?&redraw ( ) .Mouse/y DEI2 .lastmouse-y LDZ2 NEQ2 ?&redraw ( ) JMP2r ( ) &redraw ( ) - .is-lit LDZ #00 EQU ?&next redraw-selection &next - update-selection ( ) .lastmouse-x LDZ2 .lastmouse-y LDZ2 ( lx* ly* ) #0200 ;cp437 ADD2 draw-at ( ) + .is-lit LDZ #00 EQU ?&next + update-selection ( redraw-selection ) + #01 .dirty STZ + &next .Mouse/x DEI2 .Mouse/y DEI2 ( x* y* ) - OVR2 OVR2 #01e0 ;cp437 ADD2 draw-at ( x* y* ) .lastmouse-y STZ2 .lastmouse-x STZ2 ( ) + draw-pointer screen-to-cursor ( ) JMP2r ( )