@@ 156,6 156,101 @@ JMP2r
BRK
+@get-cat ( cat -- cat* )
+
+ STH
+ #00 ,&id STR
+ ;manifest/menu
+ &cat
+ [ LIT &id 00 ] STHkr EQU ,&end JCN
+ ;skip-sub JSR2
+ ,&id LDR INC ,&id STR
+ LDAk ,&cat JCN
+ POP2
+ #0000
+ &end
+ POPr
+
+JMP2r
+
+@get-sub ( sub -- sub* )
+
+ STH
+ ;draw-menu/sel LDA ;get-cat JSR2
+ LDAk STH INC2 ;skip-str JSR2
+ STHr #00
+ &subcat
+ DUP STHkr EQU ,&end JCN
+ SWP2 #0004 ADD2 ;skip-str JSR2 SWP2
+ INC GTHk ,&subcat JCN
+ POP2 POP2
+ ( TODO: merge tails )
+ POPr
+ #0000
+ JMP2r
+ &end
+ POP2
+ INC2 INC2 LDA2
+ POPr
+
+JMP2r
+
+@get-anchor ( cat -- x* )
+
+ LIT2r 0000
+ ,&target STR
+ #00 ,&id STR
+ ;manifest/menu
+ &cat
+ [ LIT &id 00 ] [ LIT &target $1 ] EQU ,&end JCN
+ INC2k ;slen JSR2 INC2 STH2 ADD2r
+ ;skip-sub JSR2
+ ,&id LDR INC ,&id STR
+ LDAk ,&cat JCN
+ POP2
+ &end
+ STH2r
+ INC2 INC2 #30 SFT2
+
+JMP2r
+
+@find-modkey ( mod key -- fn* )
+
+ ,&mk STR2
+ ;manifest/menu
+ &cat
+ LDAk STH INC2 ,skip-str JSR
+ STHr #00
+ &subcat
+ OVR2 LDA2 [ LIT2 &mk $2 ] NEQ2 ,&continue JCN
+ POP2 INC2 INC2 LDA2 JMP2r
+ &continue
+ SWP2 #0004 ADD2 ,skip-str JSR SWP2
+ INC GTHk ,&subcat JCN
+ POP2
+ LDAk ,&cat JCN
+ POP2
+ #0000
+
+JMP2r
+
+@skip-sub ( sub* -- sub* )
+
+ LDAk STH INC2 ;skip-str JSR2
+ STHr #00
+ &subcat
+ SWP2 #0004 ADD2 ,skip-str JSR SWP2
+ INC GTHk ,&subcat JCN
+ POP2
+
+JMP2r
+
+@skip-str ( str* -- str* )
+
+ &skip INC2 LDAk ,&skip JCN INC2
+
+JMP2r
+
@draw-menu ( -- )
#0010 .Screen/x DEO2
@@ 229,16 324,6 @@ JMP2r
JMP2r
-@buttons-icns
- 387c fefe fe7c 3800
- 3844 8282 8244 3800
- 1038 7cfe 7c38 1000
- 1028 4482 4428 1000
- 1038 7cfe 1010 1000
- 1010 10fe 7c38 1000
- 1030 70fe 7030 1000
- 1018 1cfe 1c18 1000
-
@draw-key ( mod key -- )
( key )
@@ 259,75 344,6 @@ JMP2r
&spc "spc $1
&esc "esc $1
-@get-cat ( cat -- cat* )
-
- STH
- #00 ,&id STR
- ;manifest/menu
- &cat
- [ LIT &id 00 ] STHkr EQU ,&end JCN
- ;skip-sub JSR2
- ,&id LDR INC ,&id STR
- LDAk ,&cat JCN
- POP2
- #0000
- &end
- POPr
-
-JMP2r
-
-@get-sub ( sub -- sub* )
-
- STH
- ;draw-menu/sel LDA ;get-cat JSR2
- LDAk STH INC2 ;skip-str JSR2
- STHr #00
- &subcat
- DUP STHkr EQU ,&end JCN
- SWP2 #0004 ADD2 ;skip-str JSR2 SWP2
- INC GTHk ,&subcat JCN
- POP2 POP2
- ( TODO: merge tails )
- POPr
- #0000
- JMP2r
- &end
- POP2
- INC2 INC2 LDA2
- POPr
-
-JMP2r
-
-@skip-sub ( sub* -- sub* )
-
- LDAk STH INC2 ;skip-str JSR2
- STHr #00
- &subcat
- SWP2 #0004 ADD2 ;skip-str JSR2 SWP2
- INC GTHk ,&subcat JCN
- POP2
-
-JMP2r
-
-@get-anchor ( cat -- x* )
-
- LIT2r 0000
- ,&target STR
- #00 ,&id STR
- ;manifest/menu
- &cat
- [ LIT &id 00 ] [ LIT &target $1 ] EQU ,&end JCN
- INC2k ;slen JSR2 INC2 STH2 ADD2r
- ;skip-sub JSR2
- ,&id LDR INC ,&id STR
- LDAk ,&cat JCN
- POP2
- &end
- STH2r
- INC2 INC2 #30 SFT2
-
-JMP2r
-
@draw-str ( str* -- str* )
&while
@@ 344,95 360,13 @@ JMP2r
JMP2r
-@print-manifest ( -- )
-
- ;manifest/name ;print-str JSR2
- LIT '( #18 DEO ;print-str JSR2 POP2 LIT ') #18 DEO
- #0a18 DEOk DEO
- ( menu )
- ;manifest/menu
- &cat
- LDAk STH INC2 ;print-str JSR2 #0a18 DEO
- STHr #00
- &subcat
- SWP2
- ( modkey ) #0918 DEO ;print-mod JSR2 ;print-key JSR2
- ( spacer ) #2018 DEOk LIT ': #18 DEO DEO
- ( name ) INC2 INC2 ;print-str JSR2 #0a18 DEO
- SWP2
- INC GTHk ,&subcat JCN
- POP2
- LDAk ,&cat JCN
- POP2
-
-JMP2r
-
-@print-mod ( addr* -- addr* )
-
- LDAk STH
- #0800
- &loop
- STHkr OVR SFT #01 AND #00 EQU ,&no-button JCN
- #00 OVR ;&buttons ADD2 LDA #18 DEO
- &no-button
- INC GTHk ,&loop JCN
- POP2
- POPr
- INC2
-
-JMP2r
- &buttons
- "ABsSUDLR $1
-
-@print-key ( addr* -- addr* )
-
- LDAk
- DUP #08 NEQ ,&no-del JCN ;&del ,&inv JMP &no-del
- DUP #09 NEQ ,&no-tab JCN ;&tab ,&inv JMP &no-tab
- DUP #20 NEQ ,&no-spc JCN ;&spc ,&inv JMP &no-spc
- DUP #1b NEQ ,&no-esc JCN ;&esc ,&inv JMP &no-esc
- #18 DEO
- INC2
-
-JMP2r
- &inv ROT POP ;print-str JSR2 POP2 INC2 JMP2r
- &del "del $1
- &tab "tab $1
- &spc "spc $1
- &esc "esc $1
-
-@print-str ( addr* -- addr* )
-
- &while
- LDAk #18 DEO
- INC2 LDAk ,&while JCN
- INC2
-
-JMP2r
-
-@find-modkey ( mod key -- fn* )
-
- ,&mk STR2
- ;manifest/menu
- &cat
- LDAk STH INC2 ,skip-str JSR
- STHr #00
- &subcat
- OVR2 LDA2 [ LIT2 &mk $2 ] NEQ2 ,&continue JCN
- POP2 INC2 INC2 LDA2 JMP2r
- &continue
- SWP2 #0004 ADD2 ,skip-str JSR SWP2
- INC GTHk ,&subcat JCN
- POP2
- LDAk ,&cat JCN
- POP2
- #0000
-
-JMP2r
-
-@skip-str ( str* -- str* )
-
- &skip INC2 LDAk ,&skip JCN INC2
-
-JMP2r
+@buttons-icns
+ 387c fefe fe7c 3800
+ 3844 8282 8244 3800
+ 1038 7cfe 7c38 1000
+ 1028 4482 4428 1000
+ 1038 7cfe 1010 1000
+ 1010 10fe 7c38 1000
+ 1030 70fe 7030 1000
+ 1018 1cfe 1c18 1000