Clamp selection

This commit is contained in:
Devine Lu Linvega 2023-04-26 20:08:31 -07:00
parent 6134b9d354
commit 5571680f3e
1 changed files with 64 additions and 51 deletions

View File

@ -5,6 +5,14 @@
|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1
|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
( TODOs:
> Select all
> Copy/Paste
> Clamp selection
> Mouse2 select word
> Page memory mapping
> Fix issue with multi-line selection )
|0000 |0000
@page $1 @page $1
@ -109,7 +117,7 @@ BRK
get-position select-to get-position select-to
&no-drag &no-drag
DUP2 #0100 NEQ2 ?&no-up DUP2 #0100 NEQ2 ?&no-up
#03 phex/b #0a18 DEO ( nothing )
&no-up &no-up
,&last STR POP ,&last STR POP
@ -182,7 +190,7 @@ BRK
.selection/length LDZ2 #0001 LTH2 ?&no-block .selection/length LDZ2 #0001 LTH2 ?&no-block
erase-selection erase-selection
!reset-selection !select-reset
&no-block &no-block
.selection/from LDZ2 ;mem NEQ2 [ JMP JMP2r ] .selection/from LDZ2 ;mem NEQ2 [ JMP JMP2r ]
@ -198,7 +206,7 @@ BRK
.selection/length LDZ2 #0001 EQU2 ?&no-block .selection/length LDZ2 #0001 EQU2 ?&no-block
erase-selection erase-selection
!reset-selection !select-reset
&no-block &no-block
.selection/from LDZ2 cut-char .selection/from LDZ2 cut-char
@ -225,13 +233,44 @@ JMP2r
JMP2r JMP2r
@reset-selection ( -- ) @select-reset ( -- )
.selection/from LDZ2 select-from .selection/from LDZ2 select-from
redraw redraw
JMP2r JMP2r
@select-from ( addr* -- )
( min ) ;mem GTH2k JMP SWP2 POP2
( max ) get-eof #0001 SUB2 LTH2k JMP SWP2 POP2
DUP2 .selection/from STZ2
.selection/to STZ2
.selection/to LDZ2 .selection/from LDZ2 SUB2 .selection/length STZ2
!redraw
@select-to ( addr* -- )
( min ) .selection/from LDZ2 GTH2k JMP SWP2 POP2
( max ) get-eof #0001 SUB2 LTH2k JMP SWP2 POP2
.selection/to STZ2
.selection/to LDZ2 .selection/from LDZ2 SUB2 .selection/length STZ2
!redraw
@is-selected ( addr* -- f )
DUP2 .selection/from LDZ2 LTH2 ?&false
DUP2 .selection/to LDZ2 #0001 SUB2 GTH2 ?&false
POP2 #01
JMP2r
&false POP2 #00 JMP2r
( (
@|core ) @|core )
@ -263,22 +302,6 @@ JMP2r
JMP2r JMP2r
@update-cursor ( color addr* -- )
[ LIT2 15 -Screen/auto ] DEO
#40 draw-cursor
.Mouse/x DEI2 ,draw-cursor/x STR2
.Mouse/y DEI2 ,draw-cursor/y STR2
.Screen/addr DEO2
@draw-cursor ( color -- )
[ LIT2 &x $2 ] .Screen/x DEO2
[ LIT2 &y $2 ] .Screen/y DEO2
.Screen/sprite DEO
JMP2r
@walk-on ( -- f ) @walk-on ( -- f )
.Screen/x DEI2 .Mouse/x DEI2 LTH2 .Screen/x DEI2 .Mouse/x DEI2 LTH2
@ -315,21 +338,14 @@ JMP2r
JMP2r JMP2r
@select-from ( addr* -- ) @word-length ( str* -- length* )
DUP2 .selection/from STZ2 [ LIT2r 0000 ]
.selection/to STZ2 &while
.selection/to LDZ2 .selection/from LDZ2 SUB2 .selection/length STZ2 LDAk #20 SUB #00 SWP ;font ADD2 LDA #00 SWP STH2 ADD2r
INC2 LDAk #20 GTH ?&while
redraw POP2
STH2r
JMP2r
@select-to ( addr* -- )
.selection/to STZ2
.selection/to LDZ2 .selection/from LDZ2 SUB2 .selection/length STZ2
redraw
JMP2r JMP2r
@ -465,32 +481,29 @@ JMP2r
JMP2r JMP2r
@is-selected ( addr* -- f ) @update-cursor ( color addr* -- )
DUP2 .selection/from LDZ2 LTH2 ?&false [ LIT2 15 -Screen/auto ] DEO
DUP2 .selection/to LDZ2 #0001 SUB2 GTH2 ?&false #40 draw-cursor
POP2 #01 .Mouse/x DEI2 ,draw-cursor/x STR2
.Mouse/y DEI2 ,draw-cursor/y STR2
.Screen/addr DEO2
@draw-cursor ( color -- )
[ LIT2 &x $2 ] .Screen/x DEO2
[ LIT2 &y $2 ] .Screen/y DEO2
.Screen/sprite DEO
JMP2r JMP2r
&false POP2 #00 JMP2r
@word-length ( str* -- length* ) (
@|stdlib )
[ LIT2r 0000 ]
&while
LDAk #20 SUB #00 SWP ;font ADD2 LDA #00 SWP STH2 ADD2r
INC2 LDAk #20 GTH ?&while
POP2
STH2r
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 @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 @msfr ( b* a* len* -- ) STH2 EQU2k ?&e &l DUP2 LDAk ROT ROT STH2kr ADD2 STA #0001 SUB2 LTH2k ?&l POP2 POP2 &e POP2r JMP2r
@scap ( str* -- end* ) LDAk #00 NEQ [ JMP JMP2r ] &w INC2 LDAk ?&w JMP2r @scap ( str* -- end* ) LDAk #00 NEQ [ JMP JMP2r ] &w INC2 LDAk ?&w JMP2r
@sput ( chr str* -- ) scap INC2k #00 ROT ROT STA STA JMP2r @sput ( chr str* -- ) scap INC2k #00 ROT ROT STA STA JMP2r
@phex ( short* -- ) SWP phex/b &b ( byte -- ) DUP #04 SFT phex/c &c ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r @phex ( short* -- ) SWP phex/b &b ( byte -- ) DUP #04 SFT phex/c &c ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r
( (