diff --git a/gui/notepad/src/notepad.tal b/gui/notepad/src/notepad.tal index cf5aae5..09dc57a 100644 --- a/gui/notepad/src/notepad.tal +++ b/gui/notepad/src/notepad.tal @@ -5,15 +5,15 @@ |80 @Controller &vector $2 &button $1 &key $1 |90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1 |a0 @File &vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 - |000 @page $1 @collapsed $1 @selection &a $2 &b $2 &length $2 -|100 @on-reset ( -> ) +|100 +@on-reset ( -> ) ( | meta ) ;meta #06 DEO2 ( | theme ) @@ -29,40 +29,39 @@ ;on-frame .Screen/vector DEO2 ;on-control .Controller/vector DEO2 ( | let's go! ) - file-init - draw-header - #00 change-page - -BRK + file-init + #00 change-page BRK @meta 00 ( name ) "Note 20 "Pad 0a ( details ) "Original 20 "by 20 "Donn 20 "Denman 0a ( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a - ( date ) "May 20 "28, 20 "2024 00 - 01 - ( icon ) 83 =appicon + ( date ) "May 20 "28, 20 "2024 00 01 + ( icon ) 83 =appicon ( @|vectors ) @on-control ( -> ) - .Controller/key DEI .Controller/button DEI ( | shortcuts ) - DUP2 [ LIT2 "a 01 ] NEQ2 ?{ POP2 select-all BRK } + DUP2 [ LIT2 "a 01 ] NEQ2 ?{ POP2 + BRK } DUP2 [ LIT2 "x 01 ] NEQ2 ?{ POP2 edit-cut BRK } DUP2 [ LIT2 "c 01 ] NEQ2 ?{ POP2 edit-copy BRK } DUP2 [ LIT2 "v 01 ] NEQ2 ?{ POP2 edit-paste BRK } ( | mask shift key ) #fb AND ( | arrows ) - DUP #10 NEQ ?{ get-to #0001 SUB2 find-line-start select-variable } - DUP #20 NEQ ?{ get-to INC2 find-line-end select-variable } - DUP #40 NEQ ?{ select-left } - DUP #80 NEQ ?{ select-right } - DUP #42 NEQ ?{ .selection/b LDZ2 #0001 SUB2 find-word-start select-variable } - DUP #82 NEQ ?{ .selection/b LDZ2 INC2 find-word-end select-variable } + DUP #10 NEQ ?{ + get-to #0001 SUB2 find-line-start } + DUP #20 NEQ ?{ get-to INC2 find-line-end } + DUP #40 NEQ ?{ } + DUP #80 NEQ ?{ } + DUP #42 NEQ ?{ + .selection/b LDZ2 #0001 SUB2 find-word-start } + DUP #82 NEQ ?{ + .selection/b LDZ2 INC2 find-word-end } ( | pagination ) DUP #21 NEQ OVR #81 NEQ AND ?{ next-page } DUP #11 NEQ OVR #41 NEQ AND ?{ prev-page } @@ -71,556 +70,347 @@ BRK DUP #08 NEQ ?{ erase } DUP #7f NEQ ?{ delete } DUP #09 LTH ?{ DUP insert } - POP - #00 ;on-frame/f STA - -BRK + POP #00 ;on-frame/f STA + BRK @on-mouse-head ( -> ) - - [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn update-cursor + [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn .Mouse/state DEI #01 GTH .Mouse/y DEI2 #0012 LTH2 AND ?&toggle-collapse - - trap-mouse - - [ LIT &last $1 ] - .Mouse/state DEI - DUP ,&last STR + + [ LIT &last $1 ] .Mouse/state DEI DUP ,&last STR EQU ?&unchanged - draw-header - ( release on close button ) - .Mouse/state DEI ?&unchanged + + ( release on close button ) .Mouse/state DEI ?&unchanged .Mouse/x DEI2 #0008 SUB2 #000a GTH2 ?&unchanged - ( exit ) #800f DEO - &unchanged - -BRK - -&toggle-collapse ( -> ) - - #00f8 #0011 - .collapsed LDZ ?{ SWP2 } - POP2 .Screen/height DEO2 + ( exit ) #800f DEO + &unchanged BRK + &toggle-collapse ( -> ) + #00f8 #0011 .collapsed LDZ ?{ SWP2 } + POP2 .Screen/height DEO2 [ LIT2 00 -collapsed ] LDZ EQU .collapsed STZ - draw-header - redraw - + + [ LIT2 00 -Mouse/state ] DEO - -BRK + BRK @on-mouse-body ( -> ) - - [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;caret-icn update-cursor - - trap-mouse - - [ LIT &last $1 ] .Mouse/state DEI - DUP #02 LTH ?{ get-position select-word } - DUP2 #0001 NEQ2 ?{ get-position select-variable } - DUP2 #0101 NEQ2 ?{ get-position select-to } - ,&last STR POP - -BRK + [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;caret-icn + + [ LIT &last $1 ] .Mouse/state DEI DUP #02 LTH ?{ get-position } + DUP2 #0001 NEQ2 ?{ get-position } + DUP2 #0101 NEQ2 ?{ get-position } + ,&last STR + POP BRK @on-mouse-foot ( -> ) - - [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn update-cursor - - trap-mouse - + [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn + [ LIT2 00 -Mouse/state ] DEI NEQ .Mouse/x DEI2 #0018 LTH2 AND ?&on-mouse-down - -BRK - -&on-mouse-down ( -> ) - + BRK + &on-mouse-down ( -> ) [ LIT2 00 -Mouse/state ] DEO - - .Mouse/y DEI2 #00d6 SUB2 NIP - [ LIT2 18 -Mouse/x ] DEI2 NIP SUB - ADD #18 LTH ?&go-next - prev-page BRK - &go-next - next-page - -BRK + .Mouse/y DEI2 #00d6 SUB2 NIP [ LIT2 18 -Mouse/x ] DEI2 NIP SUB ADD #18 LTH ?&go-next + prev-page BRK &go-next next-page BRK @on-frame ( -> ) - [ LIT2 &last $1 &f $1 ] INCk ,&f STR - #05 SFT DUP ,&last STR - EQU ?{ draw-note } - -BRK + #05 SFT DUP ,&last STR + EQU ?{ } + BRK ( @|editor ) @insert ( char -- ) - - get-from scap/ get-page #1000 ADD2 LTH2 ?{ - POP JMP2r - } - + get-from scap/ get-page #1000 ADD2 LTH2 ?{ POP JMP2r } ( | convert linebreaks ) - DUP #0d EQU #03 MUL SUB - - .selection/length LDZ2 #0000 EQU2 ?{ erase-selection } - - get-from STH2k #0001 SUB2 get-eof #0001 msfr + DUP #0d EQU #03 MUL SUB .selection/length LDZ2 #0000 EQU2 ?{ erase-selection } + get-from STH2k #0001 SUB2 get-eof #0001 STH2kr STA - STH2r INC2 select-from - -!file-save + STH2r INC2 + !file-save @erase ( -- ) - - .selection/length LDZ2 #0000 EQU2 ?{ - erase-selection - !select-reset } - - get-from get-page NEQ2 [ JMP JMP2r ] - - get-from #0001 SUB2 - DUP2 cut-char - select-from - -!file-save + .selection/length LDZ2 #0000 EQU2 ?{ erase-selection ! } + get-from get-page NEQ2 [ JMP JMP2r ] get-from #0001 SUB2 DUP2 cut-char + !file-save @erase-selection ( -- ) - - get-from get-eof .selection/length LDZ2 msfl - -!file-save + get-from get-eof .selection/length LDZ2 + !file-save @delete ( -- ) - - get-eof get-from SUB2 ORA #01 [ JCN JMP2r ] - - .selection/length LDZ2 #0000 EQU2 ?{ - erase-selection - !select-reset } - - get-from cut-char - redraw - -!file-save + get-eof get-from SUB2 ORA #01 [ JCN JMP2r ] .selection/length LDZ2 #0000 EQU2 ?{ erase-selection ! } + get-from cut-char + !file-save @get-eof ( -- addr* ) - - get-page - -!scap/ + get-page !scap/ @cut-char ( addr* -- ) - - get-eof #0001 - -!msfl + get-eof #0001 ! ( @|selection ) -@select-variable ( addr* -- ) - - [ LIT2 04 -Controller/button ] DEI AND ?select-to - -!select-from - -@select-reset ( -- ) +@ ( addr* -- ) + [ LIT2 04 -Controller/button ] DEI AND ? + ! +@ ( -- ) get-from + ( >> ) -( >> ) - -@select-from ( addr* -- ) - - clamp-selection - DUP2 .selection/a STZ2 - .selection/b STZ2 - -!select - -@select-to ( addr* -- ) - - clamp-selection +@ ( addr* -- ) + clamp-selection DUP2 .selection/a STZ2 .selection/b STZ2 + !select -!select +@ ( addr* -- ) + clamp-selection .selection/b STZ2 + !select -@select-word ( addr* -- ) +@ ( addr* -- ) + DUP2 &back #0001 SUB2 LDAk #20 GTH ?&back + INC2 .selection/a STZ2 + &next INC2 LDAk #20 GTH ?&next + .selection/b STZ2 + !select - DUP2 - &back #0001 SUB2 LDAk #20 GTH ?&back INC2 .selection/a STZ2 - &next INC2 LDAk #20 GTH ?&next .selection/b STZ2 - -!select - -@select-all ( -- ) - - get-page - DUP2 .selection/a STZ2 - scap/ #0001 SUB2 .selection/b STZ2 - -( >> ) +@ ( -- ) + get-page DUP2 .selection/a STZ2 + scap/ #0001 SUB2 .selection/b STZ2 + ( >> ) @select ( -- ) - get-to get-from SUB2 .selection/length STZ2 #00 ;on-frame/f STA + ! -!redraw +@ ( -- ) + .selection/length LDZ2 #0000 EQU2 [ LIT2 04 -Controller/button ] DEI AND #00 NEQ ORA ?{ get-from ! } + .selection/b LDZ2 #0001 SUB2 ! -@select-left ( -- ) - - .selection/length LDZ2 #0000 EQU2 - [ LIT2 04 -Controller/button ] DEI AND #00 NEQ - ORA ?{ - get-from !select-from - } - .selection/b LDZ2 #0001 SUB2 - -!select-variable - -@select-right ( -- ) - - .selection/length LDZ2 #0000 EQU2 - [ LIT2 04 -Controller/button ] DEI AND #00 NEQ - ORA ?{ - get-to !select-from - } - .selection/b LDZ2 INC2 - -!select-variable +@ ( -- ) + .selection/length LDZ2 #0000 EQU2 [ LIT2 04 -Controller/button ] DEI AND #00 NEQ ORA ?{ get-to ! } + .selection/b LDZ2 INC2 ! @get-from ( -- addr* ) - - .selection/b LDZ2 .selection/a LDZ2 LTH2k [ JMP SWP2 POP2 ] - -JMP2r + .selection/b LDZ2 .selection/a LDZ2 LTH2k [ JMP SWP2 POP2 ] JMP2r @get-to ( -- addr* ) - - .selection/a LDZ2 .selection/b LDZ2 GTH2k [ JMP SWP2 POP2 ] - -JMP2r + .selection/a LDZ2 .selection/b LDZ2 GTH2k [ JMP SWP2 POP2 ] JMP2r @clamp-selection ( addr* -- addr* ) - ( min ) get-page GTH2k [ JMP SWP2 POP2 ] - ( max ) get-eof #0001 SUB2 LTH2k [ JMP SWP2 POP2 ] - -JMP2r + ( max ) get-eof #0001 SUB2 LTH2k [ JMP SWP2 POP2 ] JMP2r @is-selected ( addr* -- addr* f ) - DUP2 get-from LTH2 ?&false DUP2 get-to #0001 SUB2 GTH2 ?&false - #01 - -JMP2r + #01 JMP2r &false #00 JMP2r ( @|file ) @file-init ( -- ) - ;notepad-txt file-size #0000 EQU2 ?file-new - ( | load file ) - ;notepad-txt .File/name DEO2 #8000 .File/length DEO2 ;mem .File/read DEO2 - -JMP2r + JMP2r @file-new ( -- ) - #0801 &>l ( -- ) - #00 OVR #c0 SFT2 ;mem ADD2 STH2 #20 STH2r STA + #00 OVR #c0 SFT2 ;mem ADD2 STH2 + #20 STH2r STA INC GTHk ?&>l - POP2 - -JMP2r + POP2 JMP2r @file-save ( -- ) - ;notepad-txt .File/name DEO2 #8000 .File/length DEO2 ;mem .File/write DEO2 + JMP2r -JMP2r - @notepad-txt ".notepad $1 +@notepad-txt ".notepad $1 @file-size ( path* -- size* ) - .File/name DEO2 #0001 .File/length DEO2 [ LIT2r 0000 ] &>s ( -- ) ;&b .File/read DEO2 [ LIT2 00 -File/success-lb ] DEI EQU ?&eof - INC2r !&>s &eof - STH2r - -JMP2r + INC2r !&>s + &eof STH2r JMP2r &b $1 @file-inject ( name* -- ) - - DUP2 file-size - ORAk ?{ - POP2 POP2 JMP2r - } - STH2 + DUP2 file-size ORAk ?{ POP2 POP2 JMP2r } + STH2 .File/name DEO2 STH2kr .File/length DEO2 ( | erase when selection length ) .selection/length LDZ2 #0000 EQU2 ?{ - get-from get-eof .selection/length LDZ2 msfl - } - ( push right ) get-from #0001 SUB2 - get-eof STH2kr msfr + get-from get-eof .selection/length LDZ2 } + ( push right ) get-from #0001 SUB2 get-eof STH2kr get-from .File/read DEO2 - get-from STH2r ADD2 - -!select-from + get-from STH2r ADD2 ! @edit-cut ( -- ) - - .selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ] - - edit-copy - erase-selection - select-reset - -!file-save + .selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ] edit-copy erase-selection + !file-save @edit-copy ( -- ) - - .selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ] - - ;snarf-txt .File/name DEO2 + .selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ] ;snarf-txt .File/name DEO2 .selection/length LDZ2 .File/length DEO2 get-from .File/write DEO2 - -JMP2r + JMP2r @edit-paste ( -- ) + ;snarf-txt file-inject !file-save - ;snarf-txt file-inject - -!file-save - @snarf-txt ".snarf $1 +@snarf-txt ".snarf $1 ( @|core ) -@trap-mouse ( -- ) - - .Mouse/y DEI2 - DUP2 #0018 GTH2 ?{ - POP2 ;on-mouse-head .Mouse/vector DEO2 JMP2r - } +@ ( -- ) + .Mouse/y DEI2 DUP2 #0018 GTH2 ?{ + POP2 ;on-mouse-head .Mouse/vector DEO2 + JMP2r } DUP2 #00d6 LTH2 ?{ - POP2 ;on-mouse-foot .Mouse/vector DEO2 JMP2r - } - POP2 - ;on-mouse-body .Mouse/vector DEO2 - -JMP2r + POP2 ;on-mouse-foot .Mouse/vector DEO2 + JMP2r } + POP2 ;on-mouse-body .Mouse/vector DEO2 + JMP2r @change-page ( id -- ) - .page STZ - get-page scap/ #0001 SUB2 - -!select-from + get-page scap/ #0001 SUB2 ! @prev-page ( -- ) - - .page LDZ #01 SUB #07 AND - -!change-page + .page LDZ #01 SUB #07 AND !change-page @next-page ( -- ) - - .page LDZ INC #07 AND - -!change-page + .page LDZ INC #07 AND !change-page @pos-to-line ( y* -- line ) - - #0012 SUB2 #04 SFT2 NIP - -JMP2r + #0012 SUB2 #04 SFT2 NIP JMP2r @get-position ( -- addr* ) - #0008 .Screen/x DEO2 #0018 .Screen/y DEO2 ( | walk to line ) .Mouse/y DEI2 pos-to-line ,&line STR get-page - &>walk-line + &>walk-line ( -- ) .Screen/y DEI2 pos-to-line [ LIT &line $1 ] EQU ?&end-line - walk-char POP - INC2 LDAk ?&>walk-line - &end-line - ( | walk to char ) + walk-char POP INC2 LDAk ?&>walk-line + &end-line ( walk to char ) .Mouse/x DEI2 #0001 SUB2 ,&x STR2 - &>walk-char + &>walk-char ( -- ) .Screen/x DEI2 [ LIT2 &x $2 ] GTH2 ?&end-char walk-char ?&end-char INC2 LDAk ?&>walk-char - &end-char - -JMP2r + &end-char JMP2r @walk-char ( addr* -- addr* lb ) - ( | wrap ) LDAk #20 GTH ?&no-wrap - DUP2 word-width .Screen/x DEI2 ADD2 #00d0 LTH2 ?&no-wrap - ( | tabbed ) - DUP2 find-line-start LDA2 - DUP2 #093e NEQ2 ?{ - POP2 #01 #0021 !draw-linebreak } - DUP2 #092d NEQ2 ?{ - POP2 #01 #0022 !draw-linebreak } - POP2 - #01 #0008 !draw-linebreak - &no-wrap - ( | char ) - LDAk char-width .Screen/x DEI2 ADD2 - .Screen/x DEO2 + DUP2 word-width .Screen/x DEI2 ADD2 #00d0 LTH2 ?&no-wrap + ( | tabbed ) + DUP2 find-line-start LDA2 DUP2 #093e NEQ2 ?{ POP2 #01 #0021 ! } + DUP2 #092d NEQ2 ?{ POP2 #01 #0022 ! } + POP2 #01 #0008 ! + &no-wrap ( char ) + LDAk char-width .Screen/x DEI2 ADD2 .Screen/x DEO2 ( | tab ) - LDAk #09 NEQ ?{ - #00 !draw-tab - } + LDAk #09 NEQ ?{ #00 ! } ( | linebreak ) - LDAk #0a NEQ ?{ - #01 #0008 !draw-linebreak - } - #00 - -JMP2r + LDAk #0a NEQ ?{ #01 #0008 ! } + #00 JMP2r @get-page ( -- addr* ) - - ;mem [ LIT2 00 -page ] LDZ #c0 SFT2 ADD2 - -JMP2r + ;mem [ LIT2 00 -page ] LDZ #c0 SFT2 ADD2 JMP2r @char-addr ( prev char -- addr* ) - DUP #7e GTH ?&missing DUP #20 LTH ?&blank DUP2 #0a3e EQU2 ?&marker DUP2 #093e EQU2 ?&marker DUP2 #092d EQU2 ?&bullet - NIP #20 SUB - #00 SWP #50 SFT2 ;font/glyphs ADD2 - -JMP2r + NIP #20 SUB #00 SWP #50 SFT2 ;font/glyphs ADD2 JMP2r &blank POP2 ;font/glyphs JMP2r &missing POP2 ;error-icn JMP2r &marker POP2 ;marker-icn JMP2r &bullet POP2 ;bullet-icn JMP2r @char-width ( char -- width* ) - - DUP #7e GTH ?&missing - #20 SUB #00 SWP ;font ADD2 LDA #00 SWP - -JMP2r - &missing POP #0008 JMP2r + DUP #7e GTH ?{ + #20 SUB #00 SWP ;font ADD2 LDA #00 SWP JMP2r } + POP #0008 JMP2r @word-width ( str* -- length* ) - [ LIT2r 0000 ] &>w ( -- ) - LDAk char-width STH2 ADD2r - INC2 LDAk #20 GTH ?&>w - POP2 - STH2r - -JMP2r + LDAk char-width STH2 + ADD2r INC2 LDAk #20 GTH ?&>w + POP2 STH2r JMP2r @find-line-start ( addr* -- addr* ) - ;mem SWP2 &>l ( -- ) - #0001 SUB2 LDAk - DUP #0a EQU SWP #00 EQU ORA ?&end + #0001 SUB2 LDAk DUP #0a EQU SWP #00 EQU ORA ?&end LTH2k ?&>l - &end - NIP2 INC2 - -JMP2r + &end NIP2 INC2 JMP2r @find-line-end ( addr* -- addr* ) - get-eof SWP2 &>l ( -- ) LDAk #0a EQU ?&end LDAk #00 EQU ?&end INC2 GTH2k ?&>l - &end - NIP2 - -JMP2r + &end NIP2 JMP2r @find-word-start ( addr* -- addr* ) - ;mem SWP2 &>l ( -- ) #0001 SUB2 LDAk #21 LTH ?&end LTH2k ?&>l - &end - NIP2 INC2 - -JMP2r + &end NIP2 INC2 JMP2r @find-word-end ( addr* -- addr* ) - get-eof SWP2 &>l ( -- ) LDAk #21 LTH ?&end INC2 GTH2k ?&>l - &end - NIP2 - -JMP2r + &end NIP2 JMP2r ( @|drawing ) -@draw-header ( -- ) - +@ ( -- ) ( | a ) - #0000 - DUP2 .Screen/x DEO2 - .Screen/y DEO2 + #0000 DUP2 .Screen/x DEO2 + .Screen/y DEO2 [ LIT2 15 -Screen/auto ] DEO ;bar-icn/a .Screen/addr DEO2 [ LIT2 01 -Screen/sprite ] DEO ( | close ) - ;close-icn - #00 [ LIT2 00 -Mouse/state ] DEI NEQ .Mouse/x DEI2 #0008 SUB2 #000a LTH2 AND - #50 SFT2 ADD2 .Screen/addr DEO2 + ;close-icn #00 [ LIT2 00 -Mouse/state ] DEI NEQ .Mouse/x DEI2 #0008 SUB2 #000a LTH2 AND #50 SFT2 ADD2 .Screen/addr DEO2 [ LIT2 01 -Screen/sprite ] DEOk DEO ( | lead ) - #e9 &>l ( -- ) + #e9 + &>l ( -- ) ;bar-icn/b .Screen/addr DEO2 [ LIT2 01 -Screen/sprite ] DEO INC DUP ?&>l - POP - ;bar-icn/b .Screen/addr DEO2 + POP ;bar-icn/b .Screen/addr DEO2 [ LIT2 01 -Screen/sprite ] DEOk DEO ( | title ) #004b .Screen/x DEO2 @@ -636,18 +426,15 @@ JMP2r #0070 .Screen/x DEO2 #0010 .Screen/y DEO2 [ LIT2 01 -Screen/sprite ] DEO + JMP2r -JMP2r - -@redraw ( -- ) - +@ ( -- ) #0000 .Screen/x DEO2 #0018 .Screen/y DEO2 [ LIT2 80 -Screen/pixel ] DEO ( >> ) -@draw-note ( -- ) - +@ ( -- ) [ LIT2 15 -Screen/auto ] DEO #0008 .Screen/x DEO2 #0018 .Screen/y DEO2 @@ -655,25 +442,21 @@ JMP2r &>w ( -- ) ( | draw char ) DUP2 #0001 SUB2 LDA2 char-addr .Screen/addr DEO2 - is-selected STH #0701 STHr [ JMP SWP POP ] .Screen/sprite DEOk DEO + is-selected STH + #0701 STHr [ JMP SWP POP ] .Screen/sprite DEOk DEO .Screen/x DEI2k #0010 SUB2 ROT DEO2 ( | draw selector ) get-from get-to NEQ2 ?&block DUP2 get-from NEQ2 ?&block ;on-frame/last LDA #01 AND ?&block - ;blink-icn .Screen/addr DEO2 - [ LIT2 05 -Screen/sprite ] DEO - .Screen/x DEI2k #0008 SUB2 ROT DEO2 - &block - walk-char POP - INC2 LDAk ?&>w + ;blink-icn .Screen/addr DEO2 + [ LIT2 05 -Screen/sprite ] DEO + .Screen/x DEI2k #0008 SUB2 ROT DEO2 + &block walk-char POP INC2 LDAk ?&>w POP2 -@draw-footer ( -- ) - - .Screen/height DEI2 #0020 GTH2 ?{ - JMP2r - } +@ ( -- ) + .Screen/height DEI2 #0020 GTH2 ?{ JMP2r } [ LIT2 26 -Screen/auto ] DEO #0000 .Screen/x DEO2 .Screen/height DEI2 #0020 SUB2 .Screen/y DEO2 @@ -684,7 +467,8 @@ JMP2r #0018 .Screen/x DEO2 .Screen/height DEI2 #0008 SUB2 .Screen/y DEO2 ;page-icn/bottom .Screen/addr DEO2 - #e7 &>l ( -- ) + #e7 + &>l ( -- ) [ LIT2 01 -Screen/sprite ] DEO INC DUP ?&>l POP @@ -694,39 +478,31 @@ JMP2r .Screen/height DEI2 #0020 SUB2 .Screen/y DEO2 #0011 .page LDZ ADD #50 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2 [ LIT2 01 -Screen/sprite ] DEOk DEO + JMP2r -JMP2r - -@draw-tab ( -- ) - +@ ( -- ) .Screen/x DEI2k #0010 ADD2 #33 SFT2 ROT DEO2 + JMP2r -JMP2r - -@draw-linebreak ( x* -- ) - +@ ( x* -- ) .Screen/x DEO2 .Screen/y DEI2k #0010 ADD2 ROT DEO2 + JMP2r -JMP2r - -@update-cursor ( color addr* -- ) - +@ ( color addr* -- ) [ LIT2 15 -Screen/auto ] DEO ;fill-icn .Screen/addr DEO2 - #40 draw-cursor - .Mouse/x DEI2 ,draw-cursor/x STR2 - .Mouse/y DEI2 ,draw-cursor/y STR2 + #40 + .Mouse/x DEI2 ,/x STR2 + .Mouse/y DEI2 ,/y STR2 .Screen/addr DEO2 ( >> ) -@draw-cursor ( color -- ) - +@ ( color -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 .Screen/sprite DEO - -JMP2r + JMP2r ( @|stdlib ) @@ -739,13 +515,12 @@ JMP2r @ ( short* -: ) SWP /b &b ( byte -: ) - DUP #04 SFT /c + DUP #04 SFT /c &c ( byte -: ) - #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO - JMP2r + #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO + JMP2r @load-theme ( -- ) - ;&path .File/name DEO2 #0002 .File/length DEO2 ;&r .File/read DEO2 @@ -754,15 +529,25 @@ JMP2r [ LIT2 00 -File/success-lb ] DEI EQU ?{ [ LIT2 &r $2 ] .System/r DEO2 [ LIT2 &g $2 ] .System/g DEO2 - [ LIT2 &b $2 ] .System/b DEO2 - } - -JMP2r + [ LIT2 &b $2 ] .System/b DEO2 } + JMP2r &path ".theme $1 -@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 +@ ( b* a* len* -- ) + STH2 + SWP2 EQU2k ?&e + &>l ( -- ) + DUP2k STH2kr ADD2 LDA ROT ROT STA + INC2 GTH2k ?&>l + POP2 POP2 &e POP2r JMP2r +@ ( b* a* len* -- ) + STH2 + EQU2k ?&e + &>l ( -- ) + DUP2 LDAk ROT ROT STH2kr ADD2 STA + #0001 SUB2 LTH2k ?&>l + POP2 POP2 &e POP2r JMP2r ~src/assets.tal