uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 7d2a48a0a0fde4fc4b9ee17ab6c51191ef923a8b
parent c21c2d95aadc17af1f02daa455ebeb6096e40a5a
Author: neauoire <aliceffekt@gmail.com>
Date:   Tue,  9 Mar 2021 11:33:31 -0800

Progress on movements

Diffstat:
Mprojects/software/left.usm | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
1 file changed, 83 insertions(+), 21 deletions(-)

diff --git a/projects/software/left.usm b/projects/software/left.usm @@ -59,12 +59,12 @@ BRK ,ctrl-end ~dev/ctrl #00 EQU JMP? POP2 ,no-ctrl-down ~dev/ctrl #04 ROR #01 NEQ JMP? POP2 - ~position.y #0001 SUB2 =position.y - ,select JSR ,ctrl-end JMP + ,move-up JSR + ,clamp-selection JSR ,redraw JSR ,ctrl-end JMP @no-ctrl-down ,no-ctrl-up ~dev/ctrl #04 ROR #02 NEQ JMP? POP2 - ~position.y #0001 ADD2 =position.y - ,select JSR ,ctrl-end JMP + ,get-position JSR ~position.y #0001 SUB2 =position.y ,select JSR + ,clamp-selection JSR ,redraw JSR ,ctrl-end JMP @no-ctrl-up ,no-ctrl-left ~dev/ctrl #40 NEQ JMP? POP2 ~selection.from #0001 SUB2 DUP2 =selection.from =selection.to @@ -85,6 +85,17 @@ BRK ,clamp-selection JSR ,redraw JSR ,ctrl-end JMP @no-aright @no-alt + ( ctrl ) + ,no-ctrl ~dev/ctrl #0f AND #01 NEQ JMP? POP2 + ,no-cleft ~dev/ctrl #04 ROR #04 NEQ JMP? POP2 + ,find-linestart JSR #0001 ADD2 DUP2 =selection.from =selection.to + ,clamp-selection JSR ,redraw JSR ,ctrl-end JMP + @no-cleft + ,no-cright ~dev/ctrl #04 ROR #08 NEQ JMP? POP2 + ,find-lineend JSR #0001 SUB2 DUP2 =selection.from =selection.to + ,clamp-selection JSR ,redraw JSR ,ctrl-end JMP + @no-cright + @no-ctrl @ctrl-end @@ -193,33 +204,79 @@ RTS RTS -@select +@find-linestart + + ~selection.from =j + @goto-linestart-loop + ~j + ~j LDR #0a EQU RTS? + ~j LDR #0d EQU RTS? + POP2 + ( decr ) ~j #0001 SUB2 =j + ,goto-linestart-loop ~j LDR #00 NEQ JMP? POP2 + +RTS + +@find-lineend + + ~selection.from =j + @goto-lineend-loop + ( incr ) ~j #0001 ADD2 =j + ~j + ~j LDR #0a EQU RTS? + ~j LDR #0d EQU RTS? + POP2 + ,goto-lineend-loop ~j LDR #00 NEQ JMP? POP2 + +RTS + +@move-up - ,document.body =j #0000 =pt.x #0000 =pt.y + ,find-linestart JSR =selection.from + ,find-lineend JSR =selection.to - @select-loop +RTS - ,no-reached ~pt.y ~position.y NEQ2 JMP? POP2 - ,no-reached ~pt.x ~position.x NEQ2 JMP? POP2 +@get-position ( selection -> position ) - ,no-ctrl-yes ~dev/ctrl #0f AND #01 NEQ JMP? POP2 - ~j =selection.to - RTS - @no-ctrl-yes + ,document.body =j #0000 =position.x #0000 =position.y - ~j =selection.from - ~j #0001 ADD2 =selection.to - RTS - @no-reached + @get-position-loop + + ,no-position-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 + ( incr ) ~position.y #0001 ADD2 =position.y + #0000 =position.x + @no-position-space - ,no-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 + ,no-position-reached ~j ~selection.from NEQ2 JMP? POP2 + RTS + @no-position-reached + + ( incr ) ~position.x #0001 ADD2 =position.x + ( incr ) ~j #0001 ADD2 =j + ,get-position-loop ~j LDR #00 NEQ JMP? POP2 + +RTS + +@select ( position -> selection ) + + ,document.body =selection.from #0000 =pt.x #0000 =pt.y + + @select-loop + + ,no-space ~selection.from LDR #0a NEQ ~selection.from LDR #0d NEQ #0101 EQU2 JMP? POP2 ( incr ) ~pt.y #0001 ADD2 =pt.y #0000 =pt.x @no-space + ,no-reached ~pt.y ~position.y #0001 SUB2 GTH2 ~pt.x ~position.x #0001 SUB2 GTH2 #0101 NEQ2 JMP? POP2 + ~selection.from #0001 ADD2 =selection.to + RTS + @no-reached + ( incr ) ~pt.x #0001 ADD2 =pt.x - ( incr ) ~j #0001 ADD2 =j - ,select-loop ~j LDR #00 NEQ JMP? POP2 + ( incr ) ~selection.from #0001 ADD2 =selection.from + ,select-loop ~selection.from LDR #00 NEQ JMP? POP2 RTS @@ -333,11 +390,15 @@ RTS @draw-textarea-loop ,no-linebreak ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 + ( draw linebreak ) + ,linebreak_icn =dev/sprite.addr + #02 =dev/sprite.color + ( fill clear ) @fill-clear + ( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x ,font =dev/sprite.addr #01 =dev/sprite.color - ( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x ,fill-clear ~dev/sprite.x ~dev/screen.width #0008 SUB2 LTH2 JMP? POP2 #0010 =dev/sprite.x ( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y @@ -475,6 +536,7 @@ RTS ] +@linebreak_icn [ 003e 7474 3414 1400 ] @blank_icn [ 0000 0000 0000 0000 ] @cursor_icn [ 80c0 e0f0 f8e0 1000 ] @scrollbar_bg [ aa55 aa55 aa55 aa55 ]