Added notepad

This commit is contained in:
Devine Lu Linvega 2024-05-26 19:35:57 -07:00
parent 75726492b6
commit a2f299292c
4 changed files with 1041 additions and 6 deletions

11
.gitignore vendored
View File

@ -3,11 +3,10 @@
*png
*bmp
*/bin
*snarf
*notepad
*theme
*nametable
*rom
*sym
*.rom
*.rom.sym
.snarf
.theme
.notepad

29
gui/notepad/makefile Normal file
View File

@ -0,0 +1,29 @@
ID=notepad
DIR=~/roms
ASM=uxncli ${DIR}/drifblim.rom
LIN=uxncli ${DIR}/uxnlin.rom
EMU=uxn11
ROM=bin/${ID}.rom
all: ${ROM} src/assets.tal
lint:
@ ${LIN} src/${ID}.tal
run: all
@ ${EMU} ${ROM}
clean:
@ rm -f ${ROM} ${ROM}.sym
install: ${ROM}
@ cp ${ROM} ${DIR}
uninstall:
@ rm -f ${DIR}/${ID}.rom
archive: all
@ cat src/${ID}.tal src/assets.tal | sed 's/~[^[:space:]]\+//' > bin/res.tal
@ ${ASM} bin/res.tal bin/res.rom && ${EMU} bin/res.rom
@ cp bin/res.tal ../oscean/etc/${ID}.tal.txt
.PHONY: all clean lint run install uninstall archive
${ROM}: src/*
@ mkdir -p bin
@ ${ASM} src/${ID}.tal ${ROM}

262
gui/notepad/src/assets.tal Normal file
View File

@ -0,0 +1,262 @@
@fill-icn [
ffff ffff ffff ffff ffff ffff ffff ffff ]
@error-icn [
aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 ]
@blink-icn [
8080 8080 8080 8080 8080 8080 8080 8080 ]
@caret-icn [
c628 1010 1010 1010 1010 1010 1010 28c6 ]
@mouse-icn [
80c0 e0f0 f8fc feff f8d8 8c0c 0606 0000 ]
@bar-icn
&a [
0000 007e 007e 007e 007e 007e 007e 0000 ]
&b [
0000 00ff 00ff 00ff 00ff 00ff 00ff 0000 ]
&c [
0000 00fe 00fe 00fe 00fe 00fe 00fe 0000 ]
@close-icn
0000 00ff 8080 8080 8080 8080 80ff 0000
0000 00ef 202f 202f 202f 202f 20ef 0000
0000 00ff 84a4 9580 f180 95a4 84ff 0000
0000 00ef 20af 202f e02f 20af 20ef 0000 ]
@title-icn [
0000 0080 0080 0080 0000 0000 82c2 e2f2
0000 0000 0000 3c66 0000 0000 3030 7831
0000 0000 0000 f098 0000 0000 1f19 1919
0000 0000 0080 8f91 0000 0000 0101 0f99
0000 0000 8080 8080 0080 0080 0080 0000
ba9e 8e86 8200 0000 6666 6666 3c00 0000
3131 3131 1800 0000 98f8 8088 f000 0000
1f18 1818 1800 0000 0f19 1919 0f00 0000
9999 9999 8f00 0000 8080 8080 8000 0000 ]
@page-icn [
00ff 4020 1008 0402 00ff 0000 0000 0000
00ff 0101 0101 0101 0100 0000 0000 0000
0080 4020 1008 0402 0101 0101 0101 0101
0000 0000 0000 0000 0100 0000 0000 0000
0181 4121 1109 0503 0000 ff00 ff00 ffff
0000 ff00 ff00 ffff 0100 ff00 ff00 ffff ]
&bottom [
ff00 ff00 ff00 ffff ]
@line-icn [
00ff 0000 0000 0000 ]
@appicon ( 24x24 ) [
0009 161f 1f1f 1f1f 093f 3f3f 3f3f 3f3f 0024 dbff ffff ffff 24ff ffff ffff ffff
0090 68f8 f8f8 f8f8 90fc fcfc fcfc fcfc 1f1f 1f1f 1f1f 0016 3f3f 3f3f 3f3f 3f3f
ffff ffff ffff ffff ffff ffff ffff ffff f8f8 f8f8 f8f8 f8f8 fcfc fcfc fcfc fcfc
1a1c 1e1f 001f 0000 3f3f 3f3f 3f20 3f00 ffff 00ff 00ff 0000 ffff ffff ff00 ff00
f8f8 00f8 00f8 0000 fcfc fcfc fc04 fc00 ]
@font ( newyork12 - removed 0x20 down ) [
0404 0508 0709 0a03 0505 0606 0306 0307
0807 0808 0808 0808 0808 0303 0507 0507
0a0a 0807 0807 0708 0906 0508 080c 0908
0808 0807 0809 0a0d 0808 0604 0704 0407
0407 0806 0807 0507 0804 0408 040c 0807
0808 0606 0508 080b 0708 0605 0305 0601
0a0a 0707 0908 0907 0707 0707 0706 0707
0707 0404 0404 0807 0707 0707 0808 0808
0405 0708 0708 0907 0909 0904 0400 0c08
0000 0000 0800 0000 0000 0007 0600 0a07
0704 0000 0000 0007 0709 080a 0a08 0c0b
0509 0505 0303 0009 080a 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
&glyphs
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0020 2020 2020 2020 0020 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0050 5000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0014 7e28 fc50 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1038 5450 3010 1814 5438 1000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 003e 494a 3408 1629 4946 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0018 2428 1029 4542 4539 0000 0000
0000 0000 0000 0080 0000 0080 0000 0000
0000 0040 4000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1020 2040 4040 4040 2020 1000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 4020 2010 1010 1010 2020 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 20a8 7070 a820 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 2020 f820 2000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0040 4080 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 7800 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0040 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0004 0408 0810 1020 2040 4000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0018 2442 4242 4242 2418 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0010 3010 1010 1010 1038 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0038 4404 0408 1020 447c 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0018 2404 0818 0402 0202 4438 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0004 0810 2444 7e04 040e 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 007c 4040 7804 0202 0204 0870 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 1820 4058 6442 4242 2418 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 007e 4204 0408 0810 1010 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0018 2424 1824 4242 4224 1800 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0018 2442 4242 261a 0204 1800 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 4000 0000 0040 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 4000 0000 0040 4080 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 1020 4020 1000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 007c 007c 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 4020 1020 4000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0038 4404 0408 1010 0010 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 001e 214c 5252 4d20 1e00 0000
0000 0000 0000 0080 8080 0000 0000 0000
0000 0008 0814 1422 3e41 41e3 0000 0000
0000 0000 0000 0000 0000 0080 0000 0000
0000 00f8 4444 7844 4242 44f8 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0038 4480 8080 8080 4438 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00f8 4442 4242 4242 44f8 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00fc 4440 4878 4840 44fc 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00fc 4440 4878 4840 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 003c 4480 808e 8484 4438 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00e7 4242 427e 4242 42e7 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0070 2020 2020 2020 2070 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0070 2020 2020 2020 2020 2020 c000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00ee 4448 5060 5048 44ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0070 2020 2020 2020 227e 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00e0 6060 5151 4a4a 44e4 0000 0000
0000 00e0 c0c0 4040 4040 40e0 0000 0000
0000 00e7 6252 524a 4a46 46e2 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0038 4482 8282 8282 4438 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00f8 4442 4244 7840 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0038 4482 8282 8282 4438 100c 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00f8 4444 4478 5048 44e6 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 003c 4440 2010 0804 4478 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00fe 9210 1010 1010 1038 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00e7 4242 4242 4242 2418 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00e3 4141 2222 1414 0808 0000 0000
0000 0080 0000 0000 0000 0000 0000 0000
0000 0077 2222 1515 1508 0808 0000 0000
0000 0070 2020 4040 4080 8080 0000 0000
0000 00ee 4428 2810 2828 44ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00ee 4428 2810 1010 1038 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 00f8 8810 1020 4040 88f8 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 6040 4040 4040 4040 4040 6000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 4020 2010 1008 0804 0400 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 6020 2020 2020 2020 2020 6000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 a000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 00fe 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0080 4020 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0070 8818 6888 8874 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 c058 6442 4242 6458 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0030 4880 8080 4830 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 000c 0434 4c84 8484 4e34 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0030 4884 fc80 4830 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0030 40e0 4040 4040 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0074 8888 8870 8078 8484 7800
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 c058 6444 4444 44ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 0040 c040 4040 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 0040 c040 4040 4040 4040 8000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 c04c 4850 6050 48ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 c040 4040 4040 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0059 e644 4444 44ee 0000 0000
0000 0000 0080 4040 4040 40e0 0000 0000
0000 0000 0058 e444 4444 44ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0030 4884 8484 4830 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00f8 4442 4242 6458 4040 e000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0034 4c84 8484 4c34 0404 0e00
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0058 e040 4040 40e0 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0070 8880 7008 8870 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0040 40f0 4040 4040 4830 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00cc 4444 4444 443a 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00ee 4444 2828 1010 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00e0 4444 2a2a 1111 0000 0000
0000 0000 00e0 4040 8080 0000 0000 0000
0000 0000 00ee 4428 1028 44ee 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00ee 4444 2828 1010 2020 4000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 00f8 8810 2040 88f8 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0010 2020 2020 2040 2020 2020 2010 0000
0000 0000 0000 0000 0000 0000 0000 0000
0040 4040 4040 4040 4040 4040 4040 0000
0000 0000 0000 0000 0000 0000 0000 0000
0040 2020 2020 2010 2020 2020 2040 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0068 b000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 00ff
0000 0000 0000 0000 ffff ffff ffff ffff ] $1
@mem ( placeholder )
"Keep 20 "up 20 "to 20 "eight 20 "pages 20 "of 20 "notes 20 "in 20 "the 20 "Note 20 "Pad. 20
"Click 20 "on 20 "the 20 "dog-ear 20 "to 20 "turn 20 "to 20 "the 20 "next 20 "following 20 "page. 20
"Click 20 "in 20 "the 20 "lower 20 "left 20 "corner 20 "to 20 "turn 20 "to 20 "the 20 "next 20 "previous 20 "page. 20 $1

745
gui/notepad/src/notepad.tal Normal file
View File

@ -0,0 +1,745 @@
|00 @System &vector $2 &pad $6 &r $2 &g $2 &b $2
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|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 $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
|0000
@page $1
@collapsed $1
@selection &a $2 &b $2 &length $2
|0100
( meta )
;meta #06 DEO2
( theme )
#f00f .System/r DEO2
#f00f .System/g DEO2
#f00f .System/b DEO2
load-theme
( size )
#00e0 .Screen/width DEO2
#00f8 .Screen/height DEO2
( unlock )
;on-mouse-body .Mouse/vector DEO2
;on-frame .Screen/vector DEO2
;on-control .Controller/vector DEO2
( let's go! )
file-init
draw-header
#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 ) "Jul 20 "27, 20 "2023 00
01
( icon ) 83 =appicon
(
@|vectors )
@on-control ( -> )
.Controller/key DEI .Controller/button DEI
( shortcuts )
DUP2 [ LIT2 "a 01 ] NEQ2 ?&no-ca POP2 select-all BRK &no-ca
DUP2 [ LIT2 "x 01 ] NEQ2 ?&no-cx POP2 edit-cut BRK &no-cx
DUP2 [ LIT2 "c 01 ] NEQ2 ?&no-cc POP2 edit-copy BRK &no-cc
DUP2 [ LIT2 "v 01 ] NEQ2 ?&no-cv POP2 edit-paste BRK &no-cv
( mask shift key )
#fb AND
( arrows )
DUP #10 NEQ ?&no-u get-to #0001 SUB2 find-line-start select-variable &no-u
DUP #20 NEQ ?&no-d get-to INC2 find-line-end select-variable &no-d
DUP #40 NEQ ?&no-l select-left &no-l
DUP #80 NEQ ?&no-r select-right &no-r
DUP #42 NEQ ?&no-sbl .selection/b LDZ2 #0001 SUB2 find-word-start select-variable &no-sbl
DUP #82 NEQ ?&no-sbr .selection/b LDZ2 INC2 find-word-end select-variable &no-sbr
POP
( key )
DUP #08 NEQ ?&no-bs erase &no-bs
DUP #7f NEQ ?&no-del delete &no-del
DUP #09 LTH ?&no-ascii DUP insert &no-ascii
POP
#00 ;on-frame/f STA
BRK
@on-mouse-head ( -> )
[ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn update-cursor
.Mouse/state DEI #01 GTH .Mouse/y DEI2 #0012 LTH2 AND ?&toggle-collapse
trap-mouse
[ LIT &last $1 ]
.Mouse/state DEI
DUP ,&last STR
EQU ?&unchanged
draw-header
( 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
.collapsed LDZ #00 EQU .collapsed STZ
draw-header
redraw
[ LIT2 00 -Mouse/state ] DEO
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 ?&no-mouse2
get-position select-word
&no-mouse2
DUP2 #0001 NEQ2 ?&no-down
get-position select-variable
&no-down
DUP2 #0101 NEQ2 ?&no-drag
get-position select-to
&no-drag
,&last STR POP
BRK
@on-mouse-foot ( -> )
[ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ;mouse-icn update-cursor
trap-mouse
.Mouse/state DEI #00 NEQ .Mouse/x DEI2 #0018 LTH2 AND ?&on-mouse-down
BRK
&on-mouse-down ( -> )
[ LIT2 00 -Mouse/state ] DEO
.Mouse/y DEI2 #00d6 SUB2 NIP
#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 ?&unchanged
draw-note
&unchanged
BRK
(
@|editor )
@insert ( char -- )
get-from scap get-page #1000 ADD2 LTH2 ?&has-space
POP JMP2r
&has-space
( convert linebreaks )
DUP #0d EQU #03 MUL SUB
.selection/length LDZ2 #0000 EQU2 ?&no-block
erase-selection
&no-block
get-from STH2k #0001 SUB2 get-eof #0001 msfr
STH2kr STA
STH2r INC2 select-from
!file-save
@erase ( -- )
.selection/length LDZ2 #0000 EQU2 ?&no-block
erase-selection
!select-reset
&no-block
get-from get-page NEQ2 [ JMP JMP2r ]
get-from #0001 SUB2
DUP2 cut-char
select-from
!file-save
@erase-selection ( -- )
get-from get-eof .selection/length LDZ2 msfl
!file-save
@delete ( -- )
get-eof get-from SUB2 ORA #01 [ JCN JMP2r ]
.selection/length LDZ2 #0000 EQU2 ?&no-block
erase-selection
!select-reset
&no-block
get-from cut-char
redraw
!file-save
@get-eof ( -- addr* )
get-page
!scap
@cut-char ( addr* -- )
get-eof #0001
!msfl
(
@|selection )
@select-variable ( addr* -- )
.Controller/button DEI #04 AND ?select-to
!select-from
@select-reset ( -- )
get-from
( >> )
@select-from ( addr* -- )
clamp-selection
DUP2 .selection/a STZ2
.selection/b STZ2
!select
@select-to ( addr* -- )
clamp-selection
.selection/b STZ2
!select
@select-word ( addr* -- )
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
( >> )
@select ( -- )
get-to get-from SUB2 .selection/length STZ2
#00 ;on-frame/f STA
!redraw
@select-left ( -- )
.selection/length LDZ2 #0000 EQU2
.Controller/button DEI #04 AND #00 NEQ
ORA ?&no-block
get-from !select-from
&no-block
.selection/b LDZ2 #0001 SUB2
!select-variable
@select-right ( -- )
.selection/length LDZ2 #0000 EQU2
.Controller/button DEI #04 AND #00 NEQ
ORA ?&no-block
get-to !select-from
&no-block
.selection/b LDZ2 INC2
!select-variable
@get-from ( -- addr* )
.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
@clamp-selection ( addr* -- addr* )
( min ) get-page GTH2k [ JMP SWP2 POP2 ]
( 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
&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
@file-new ( -- )
#0801
&l
#00 OVR #c0 SFT2 ;mem ADD2 STH2 #20 STH2r STA
INC GTHk ?&l
POP2
JMP2r
@file-save ( -- )
;notepad-txt .File/name DEO2
#8000 .File/length DEO2
;mem .File/write DEO2
JMP2r
@notepad-txt ".notepad $1
@file-size ( path* -- size* )
.File/name DEO2
#0001 .File/length DEO2
[ LIT2r 0000 ]
&s
;&b .File/read DEO2
.File/success DEI2 #0000 EQU2 ?&eof
INC2r !&s &eof
STH2r
JMP2r
&b $1
@file-inject ( name* -- )
DUP2 file-size
ORAk ?&exists
POP2 POP2 JMP2r
&exists
STH2
.File/name DEO2
STH2kr .File/length DEO2
( erase when selection length )
.selection/length LDZ2 #0000 EQU2 ?&no-selection
get-from get-eof .selection/length LDZ2 msfl
&no-selection
( push right ) get-from #0001 SUB2
get-eof STH2kr msfr
get-from .File/read DEO2
get-from STH2r ADD2
!select-from
@edit-cut ( -- )
.selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ]
edit-copy
erase-selection
select-reset
!file-save
@edit-copy ( -- )
.selection/length LDZ2 #0001 GTH2 [ JMP JMP2r ]
;snarf-txt .File/name DEO2
.selection/length LDZ2 .File/length DEO2
get-from .File/write DEO2
JMP2r
@edit-paste ( -- )
;snarf-txt file-inject
!file-save
@snarf-txt ".snarf $1
(
@|core )
@trap-mouse ( -- )
.Mouse/y DEI2
DUP2 #0018 GTH2 ?&no-head
POP2 ;on-mouse-head .Mouse/vector DEO2 JMP2r
&no-head
DUP2 #00d6 LTH2 ?&no-foot
POP2 ;on-mouse-foot .Mouse/vector DEO2 JMP2r
&no-foot
POP2
;on-mouse-body .Mouse/vector DEO2
JMP2r
@change-page ( id -- )
.page STZ
get-page scap #0001 SUB2
!select-from
@prev-page ( -- )
.page LDZ #01 SUB #07 AND
!change-page
@next-page ( -- )
.page LDZ INC #07 AND
!change-page
@pos-to-line ( y* -- line )
#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
.Screen/y DEI2 pos-to-line [ LIT &line $1 ] EQU ?&end-line
walk-char POP
INC2 LDAk ?&walk-line
&end-line
( walk to char )
.Mouse/x DEI2 #0001 SUB2 ,&x STR2
&walk-char
.Screen/x DEI2 [ LIT2 &x $2 ] GTH2 ?&end-char
walk-char ?&end-char
INC2 LDAk ?&walk-char
&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
#01 !draw-linebreak
&no-wrap
( char )
LDAk char-width .Screen/x DEI2 ADD2
.Screen/x DEO2
( tab )
LDAk #09 NEQ ?&no-tab
#00 !draw-tab
&no-tab
( linebreak )
LDAk #0a NEQ ?&no-lb
#01 !draw-linebreak
&no-lb
#00
JMP2r
@get-page ( -- addr* )
;mem #00 .page LDZ #c0 SFT2 ADD2
JMP2r
@char-addr ( char -- addr* )
DUP #7e GTH ?&missing
DUP #20 LTH ?&blank
#20 SUB
#00 SWP #50 SFT2 ;font/glyphs ADD2
JMP2r
&blank POP ;font/glyphs JMP2r
&missing POP ;error-icn JMP2r
@char-width ( char -- width* )
DUP #7e GTH ?&missing
#20 SUB #00 SWP ;font ADD2 LDA #00 SWP
JMP2r
&missing POP #0008 JMP2r
@word-width ( str* -- length* )
[ LIT2r 0000 ]
&while
LDAk char-width STH2 ADD2r
INC2 LDAk #20 GTH ?&while
POP2
STH2r
JMP2r
@find-line-start ( addr* -- addr* )
;mem SWP2
&l
#0001 SUB2 LDAk #0a EQU ?&end
LTH2k ?&l
&end
NIP2 INC2
JMP2r
@find-line-end ( addr* -- addr* )
get-eof SWP2
&l
LDAk #0a EQU ?&end
INC2 GTH2k ?&l
&end
NIP2
JMP2r
@find-word-start ( addr* -- addr* )
;mem SWP2
&l
#0001 SUB2 LDAk #21 LTH ?&end
LTH2k ?&l
&end
NIP2 INC2
JMP2r
@find-word-end ( addr* -- addr* )
get-eof SWP2
&l
LDAk #21 LTH ?&end
INC2 GTH2k ?&l
&end
NIP2
JMP2r
(
@|drawing )
@draw-header ( -- )
( a )
#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 .Mouse/state DEI #00 NEQ .Mouse/x DEI2 #0008 SUB2 #000a LTH2 AND
#50 SFT2 ADD2 .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEOk DEO
( lead )
#e9 &l
;bar-icn/b .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEO
INC DUP ?&l
POP
;bar-icn/b .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEOk DEO
( title )
#004b .Screen/x DEO2
[ LIT2 86 -Screen/auto ] DEO
;title-icn .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEOk DEO
( line )
[ LIT2 d2 -Screen/auto ] DEO
#0000 .Screen/x DEO2
#0010 .Screen/y DEO2
;line-icn .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEO
#0070 .Screen/x DEO2
#0010 .Screen/y DEO2
[ LIT2 01 -Screen/sprite ] DEO
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
get-page
&while
( draw char )
LDAk char-addr .Screen/addr DEO2
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 ?&while
POP2
@draw-footer ( -- )
.Screen/height DEI2 #0020 GTH2 ?&visible
JMP2r
&visible
[ LIT2 26 -Screen/auto ] DEO
#0000 .Screen/x DEO2
.Screen/height DEI2 #0020 SUB2 .Screen/y DEO2
;page-icn .Screen/addr DEO2
[ LIT2 01 -Screen/sprite ] DEOk DEOk DEOk DEO
( across )
[ LIT2 01 -Screen/auto ] DEO
#0018 .Screen/x DEO2
.Screen/height DEI2 #0008 SUB2 .Screen/y DEO2
;page-icn/bottom .Screen/addr DEO2
#e7 &l
[ LIT2 01 -Screen/sprite ] DEO
INC DUP ?&l
POP
( page number )
[ LIT2 15 -Screen/auto ] DEO
.Screen/width DEI2 #01 SFT2 #0003 SUB2 .Screen/x DEO2
.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
@draw-tab ( -- )
.Screen/x DEI2k #0010 ADD2 #33 SFT2 ROT DEO2
JMP2r
@draw-linebreak ( -- )
#0008 .Screen/x DEO2
.Screen/y DEI2k #0010 ADD2 ROT DEO2
JMP2r
@update-cursor ( 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
.Screen/addr DEO2
@draw-cursor ( color -- )
[ LIT2 &x $2 ] .Screen/x DEO2
[ LIT2 &y $2 ] .Screen/y DEO2
.Screen/sprite DEO
JMP2r
(
@|stdlib )
@load-theme ( -- )
;&path .File/name DEO2
#0002 .File/length DEO2
;&r .File/read DEO2
;&g .File/read DEO2
;&b .File/read DEO2
.File/success DEI2 ORA [ #01 JCN JMP2r ]
LIT2 &r $2 .System/r DEO2
LIT2 &g $2 .System/g DEO2
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
@scap ( str* -- end* ) LDAk #00 NEQ [ JMP JMP2r ] &w INC2 LDAk ?&w JMP2r
~src/assets.tal