uxn

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

commit 15ffab9d84273ab91918bfe49c91e66d1af0504f
parent e71817759bc2a6fd49cb430421de59d3eb0e1da9
Author: neauoire <aliceffekt@gmail.com>
Date:   Mon, 24 May 2021 20:53:08 -0700

Removed left/orca from the repo

Diffstat:
Rprojects/software/neralie.usm -> projects/demos/neralie.usm | 0
Dprojects/software/left.usm | 718-------------------------------------------------------------------------------
Dprojects/software/orca.usm | 666-------------------------------------------------------------------------------
3 files changed, 0 insertions(+), 1384 deletions(-)

diff --git a/projects/software/neralie.usm b/projects/demos/neralie.usm diff --git a/projects/software/left.usm b/projects/software/left.usm @@ -1,718 +0,0 @@ -( - app/left : text editor - - TODO - - Rename icon in titlebar - - Save/Load - - Double-click select word - - Right-click find next instance of selection - - Draw tab characters - - Don't redraw if nothing has changed - - Input on selection should erase selection range - - Erase on selection should erase selection range - - Scrollbar - - Don't scroll past oef - - Hor scroll - - Real scrolling distance - FIXME - - Imperfect port from previous assembler syntax -) - - -%RTN { JMP2r } -%RTN? { #00 EQU #02 JCN STH2r JMP2 } - -%++ { #0001 ADD2 } %-- { #0001 SUB2 } -%8/ { #03 SFT2 } %8* { #30 SFT2 } -%8- { #0008 SUB2 } %8+ { #0008 ADD2 } - -( devices ) - -|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] -|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $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 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] - -( variables ) - -|0000 - -@lock [ &byte $1 ] -@k [ &byte $1 ] -@l [ &byte $1 ] -@i [ &short $2 ] -@j [ &short $2 ] -@addr [ &short $2 ] -@selection [ &from $2 &to $2 ] -@position [ &x $2 &y $2 ] -@scroll [ &x $2 &y $2 ] -@pt [ &x $2 &y $2 ] -@mouse [ &x $2 &y $2 ] -@touch [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &state $1 ] -@textarea [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &addr $2 &cursor $1 ] -@label [ &x $2 &y $2 &color $1 &addr $2 ] ( remove ) - -( program ) - -|0100 @RESET - - ( theme ) #e0fa .System/r DEO2 #30fa .System/g DEO2 #30fa .System/b DEO2 - ( vectors ) ;on-mouse .Mouse/vector DEO2 - ( vectors ) ;on-button .Controller/vector DEO2 - - ( load file ) - ;filepath ;load-file JSR2 - - ( place textarea ) - #0018 .textarea/x1 STZ2 .Screen/height DEI2 8- .textarea/y2 STZ2 - - ;select JSR2 - ;redraw JSR2 - -BRK - -@on-button ( -> ) - - ( alt + arrow ) - .Controller/button DEI #0f AND #02 NEQ ,&no-alt JCN - .Controller/button DEI #04 SFT - DUP #01 NEQ ,&no-aup JCN - ( sel word ) ;find-wordstart JSR2 .selection/to STZ2 &no-aup - DUP #02 NEQ ,&no-adown JCN - ( sel word ) ;find-wordend JSR2 .selection/to STZ2 &no-adown - DUP #04 NEQ ,&no-aleft JCN - ( sel decr ) .selection/to LDZ2 -- .selection/to STZ2 &no-aleft - DUP #08 NEQ ,&no-aright JCN - ( sel incr ) .selection/to LDZ2 ++ .selection/to STZ2 &no-aright - POP - ;clamp-selection JSR2 - ;redraw JSR2 - BRK - &no-alt - - ( ctrl + arrow ) - .Controller/button DEI #0f AND #01 NEQ ,&no-ctrl JCN - .Controller/button DEI #04 SFT - DUP #01 NEQ ,&no-cup JCN - ( jump scroll ) #0004 ;scroll-up JSR2 &no-cup - DUP #02 NEQ ,&no-cdown JCN - ( jump scroll ) #0004 ;scroll-down JSR2 &no-cdown - DUP #04 NEQ ,&no-cleft JCN - ( jump line ) ;goto-linestart JSR2 &no-cleft - DUP #08 NEQ ,&no-cright JCN - ( jump line ) ;goto-lineend JSR2 &no-cright - POP - ;redraw JSR2 - BRK - &no-ctrl - - ( arrow ) - .Controller/button DEI #f0 AND #00 EQU ;&no-arrow JCN2 - .Controller/button DEI #f0 AND - DUP #10 NEQ ,&no-arrowup JCN - ( clamp ) .position/y LDZ2 #0000 EQU2 ,&no-arrowup JCN - ;find-lineoffset JSR2 .position/x STZ2 .position/y LDZ2 -- .position/y STZ2 - ;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowup - DUP #20 NEQ ,&no-arrowdown JCN - ( clamp:TODO ) - ;find-lineoffset JSR2 .position/x STZ2 .position/y LDZ2 ++ .position/y STZ2 - ;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowdown - DUP #40 NEQ ,&no-arrowleft JCN - ( clamp ) .selection/from LDZ2 ;document/body EQU2 ,&no-arrowleft JCN - .selection/from LDZ2 -- DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowleft - DUP #80 NEQ ,&no-arrowright JCN - ( clamp:TODO ) - #aa .Console/byte DEO - .selection/from LDZ2 ++ DUP2 .selection/from STZ2 ++ .selection/to STZ2 &no-arrowright - POP - ;clamp-selection JSR2 - ;follow-selection JSR2 - ;redraw JSR2 - &no-arrow - - .Controller/key DEI #08 NEQ ,&no-backspace JCN - ( erase ) - .selection/to LDZ2 .selection/from LDZ2 SUB2 #0001 NEQ2 ,&erase-multiple JCN - .selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-left JSR2 - ;&erase-end JMP2 - &erase-multiple - .selection/from LDZ2 ++ .selection/from STZ2 - .selection/to LDZ2 .selection/from LDZ2 SUB2 ++ ;shift-left JSR2 - &erase-end - .selection/from LDZ2 -- .selection/from STZ2 - .selection/from LDZ2 ++ .selection/to STZ2 - ;redraw JSR2 - BRK - &no-backspace - - ( insert ) - .selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-right JSR2 - .Controller/key DEI .selection/from LDZ2 STA - .selection/from LDZ2 ++ .selection/from STZ2 - .selection/from LDZ2 ++ .selection/to STZ2 - ;redraw JSR2 - -BRK - -@on-mouse ( -> ) - - .Mouse/state DEI #00 EQU ,&touch-end JCN - .Mouse/x DEI2 #0010 LTH2 ;touch-linebar JCN2 - .Mouse/x DEI2 .Screen/width DEI2 8- LTH2 ;touch-body JCN2 - ;touch-scrollbar JMP2 - &touch-end - - .Mouse/state DEI .touch/state STZ - - ;draw-cursor JSR2 - -BRK - -@touch-linebar ( -- ) - - #0000 .position/x STZ2 - .Mouse/y DEI2 8/ .scroll/y LDZ2 ADD2 .position/y STZ2 - ;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 - ;goto-linestart JSR2 - ;redraw JSR2 - ;draw-cursor JSR2 - -BRK - -@touch-body ( -- ) - - .Mouse/y DEI2 8/ .scroll/y LDZ2 ADD2 .position/y STZ2 - .Mouse/x DEI2 .textarea/x1 LDZ2 SUB2 #0007 ADD2 #0007 DIV2 .position/x STZ2 - ( chords ) - .Mouse/chord DEI #00 EQU ,&no-chords JCN - .Mouse/chord DEI - DUP #01 NEQ ,&no-chord-cut JCN - ;cut JSR2 ( release ) #00 DUP .Mouse/state DEO .Mouse/chord DEO &no-chord-cut - DUP #10 NEQ ,&no-chord-paste JCN - ;paste JSR2 ( release ) #00 DUP .Mouse/state DEO .Mouse/chord DEO &no-chord-paste - POP - ;redraw JSR2 - BRK - &no-chords - ( drag ) - .Mouse/state DEI .touch/state LDZ NEQ .Controller/button DEI #0f AND #02 NEQ #0101 EQU2 ,&no-drag JCN - ( on drag ) - ;find-selection JSR2 ++ .selection/to STZ2 - ;clamp-selection JSR2 - ,&end JMP - &no-drag - ( on click ) - ;find-selection JSR2 DUP2 .selection/from STZ2 ++ .selection/to STZ2 - &end - .Mouse/state DEI .touch/state STZ - ;draw-cursor JSR2 - ;redraw JSR2 - -BRK - -@touch-scrollbar ( -- ) - - .Mouse/y DEI2 #0008 GTH2 ,&no-up JCN - ( decr ) .scroll/y LDZ2 #00 .scroll/y LDZ2 #0000 NEQ2 SUB2 .scroll/y STZ2 - ,&end JMP - &no-up - .Mouse/y DEI2 .Screen/height DEI2 8- LTH2 ,&no-down JCN - ( incr ) .scroll/y LDZ2 ++ .scroll/y STZ2 - ,&end JMP - &no-down - .Mouse/y DEI2 8- .scroll/y STZ2 - &end - .Mouse/state DEI .touch/state STZ - ;draw-cursor JSR2 - ;redraw JSR2 - -BRK - -@load-file ( path ) - - .File/name DEO2 #8000 .File/length DEO2 ;document/body .File/load DEO2 - ( get file length ) - ;document/body ;document/eof STA2 - &loop - ( incr ) ;document/eof LDA2 ++ ;document/eof STA2 - ;document/eof LDA2 LDA ,&loop JCN - -RTN - -@scroll-up ( length -- ) - - DUP2 .scroll/y LDZ2 LTH2 ,&clamp JCN - #0000 .scroll/y STZ2 POP2 RTN - &clamp - .scroll/y LDZ2 SWP2 SUB2 .scroll/y STZ2 - -RTN - -@scroll-down ( length -- ) - - ( TODO: Clamp ) - .scroll/y LDZ2 SWP2 ADD2 .scroll/y STZ2 - -RTN - -@shift-left ( length -- ) - - .i STZ2 - .selection/from LDZ2 -- .j STZ2 ( start -> end ) - &loop - ( move ) .j LDZ2 .i LDZ2 ADD2 LDA .j LDZ2 STA - ( incr ) .j LDZ2 ++ .j STZ2 - .j LDZ2 ;document/eof LDA2 LTH2 ,&loop JCN - ;document/eof LDA2 .i LDZ2 SUB2 ;document/eof STA2 - -RTN - -@shift-right ( length -- ) - - .i STZ2 - ;document/eof LDA2 .j STZ2 ( end -> start ) - &loop - ( move ) .j LDZ2 .i LDZ2 SUB2 LDA .j LDZ2 STA - ( decr ) .j LDZ2 -- .j STZ2 - .j LDZ2 .selection/from LDZ2 GTH2 ,&loop JCN - ;document/eof LDA2 .i LDZ2 ADD2 ;document/eof STA2 - -RTN - -@follow-selection ( -- ) - - .position/y LDZ2 .scroll/y LDZ2 GTH2 ,&no-up JCN - .position/y LDZ2 .scroll/y STZ2 RTN - &no-up - .position/y LDZ2 .Screen/height DEI2 #0010 SUB2 8/ .scroll/y LDZ2 ADD2 LTH2 ,&no-down JCN - .position/y LDZ2 .Screen/height DEI2 #0010 SUB2 8/ SUB2 .scroll/y STZ2 RTN - &no-down - -RTN - -@clamp-selection ( -- ) - - .selection/from LDZ2 .selection/to LDZ2 LTH2 RTN? - .selection/from LDZ2 ++ .selection/to STZ2 - -RTN - -@goto-linestart ( -- ) - - &loop - .selection/from LDZ2 -- LDA #0a EQU RTN? - .selection/from LDZ2 -- LDA #0d EQU RTN? - ( decr ) .selection/from LDZ2 DUP2 .selection/to STZ2 -- .selection/from STZ2 - .selection/from LDZ2 LDA ,&loop JCN - ( clamp at document body ) - .selection/from LDZ2 ;document/body GTH2 RTN? - ;document/body DUP2 .selection/from STZ2 ++ .selection/to STZ2 - -RTN - -@goto-lineend ( -- ) - - &loop - .selection/from LDZ2 LDA #0a EQU RTN? - .selection/from LDZ2 LDA #0d EQU RTN? - ( incr ) .selection/from LDZ2 ++ DUP2 ++ .selection/to STZ2 .selection/from STZ2 - .selection/from LDZ2 LDA ,&loop JCN - ( clamp at document body ) - .selection/from LDZ2 ;document/eof LTH2 RTN? - ;document/eof -- DUP2 .selection/from STZ2 ++ .selection/to STZ2 - -RTN - -@find-wordstart ( -- ) - - .selection/to LDZ2 .j STZ2 - &loop - ( decr ) .j LDZ2 -- .j STZ2 - .j LDZ2 LDA #20 EQU ,&end JCN - .j LDZ2 LDA #0a EQU ,&end JCN - .j LDZ2 LDA #0d EQU ,&end JCN - .j LDZ2 ;document/body GTH2 ,&loop JCN - &end - ( return ) .j LDZ2 -- - -RTN - -@find-wordend ( -- ) - - .selection/to LDZ2 .j STZ2 - &loop - ( incr ) .j LDZ2 ++ .j STZ2 - .j LDZ2 LDA #20 EQU ,&end JCN - .j LDZ2 LDA #0a EQU ,&end JCN - .j LDZ2 LDA #0d EQU ,&end JCN - .j LDZ2 ;document/body GTH2 ,&loop JCN - &end - ( return ) .j LDZ2 ++ - -RTN - -@find-lineoffset ( return character offset from linestart ) - - #0000 .j STZ2 - &loop - ( incr ) .j LDZ2 ++ .j STZ2 - .selection/from LDZ2 .j LDZ2 SUB2 LDA #0a EQU ,&end JCN - .selection/from LDZ2 .j LDZ2 SUB2 LDA #0d EQU ,&end JCN - .selection/from LDZ2 .j LDZ2 SUB2 ;document/body GTH2 ,&loop JCN - &end - ( return ) .j LDZ2 - -RTN - -@find-line ( position -> addr ) - - ;document/body .j STZ2 #0000 .pt/y STZ2 - &loop - .pt/y LDZ2 .position/y LDZ2 -- GTH2 ,&end JCN - .j LDZ2 LDA #0a NEQ .j LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-space JCN - ( incr ) .pt/y LDZ2 ++ .pt/y STZ2 - &no-space - ( incr ) .j LDZ2 ++ .j STZ2 - .j LDZ2 LDA ,&loop JCN - &end - ( return ) .j LDZ2 - -RTN - -@find-selection ( position -> addr ) - - ;find-line JSR2 ( find line ) - #0000 .pt/x STZ2 - &loop - .j LDZ2 .pt/x LDZ2 ADD2 LDA #0a EQU ,&end JCN - .j LDZ2 .pt/x LDZ2 ADD2 LDA #0d EQU ,&end JCN - ( incr ) .pt/x LDZ2 ++ .pt/x STZ2 - .pt/x LDZ2 .position/x LDZ2 -- LTH2 ,&loop JCN - &end - ( return ) .pt/x LDZ2 ADD2 - -RTN - -@cut ( -- ) - - ;copy JSR2 - .selection/to LDZ2 .selection/from LDZ2 SUB2 ;shift-left JSR2 - .selection/from LDZ2 ++ .selection/to STZ2 - -RTN - -@copy ( -- ) - - #0000 .i STZ2 ( start ) - .selection/to LDZ2 .selection/from LDZ2 SUB2 .j STZ2 ( end ) - .j LDZ2 ;clip/len STA2 - &loop - .selection/from LDZ2 .i LDZ2 ADD2 LDA ;clip/body .i LDZ2 ADD2 STA - ( incr ) .i LDZ2 ++ .i STZ2 - .i LDZ2 .j LDZ2 LTH2 ,&loop JCN - -RTN - -@paste ( -- ) - - ;clip/len LDA2 ;shift-right JSR2 - #0000 .i STZ2 ( start ) - ;clip/len LDA2 .j STZ2 ( end ) - &loop - ;clip/body .i LDZ2 ADD2 LDA .selection/from LDZ2 .i LDZ2 ADD2 STA - ( incr ) .i LDZ2 ++ .i STZ2 - .i LDZ2 .j LDZ2 LTH2 ,&loop JCN - -RTN - -@select ( position -> selection ) - - ;document/body .selection/from STZ2 #0000 .pt/x STZ2 #0000 .pt/y STZ2 - &loop - .selection/from LDZ2 LDA #0a NEQ .selection/from LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-space JCN - ( incr ) .pt/y LDZ2 ++ .pt/y STZ2 - #0000 .pt/x STZ2 - &no-space - .pt/y LDZ2 .position/y LDZ2 -- GTH2 .pt/x LDZ2 .position/x LDZ2 -- GTH2 #0101 NEQ2 ,&no-reached JCN - .selection/from LDZ2 ++ .selection/to STZ2 - RTN - &no-reached - ( incr ) .pt/x LDZ2 ++ .pt/x STZ2 - ( incr ) .selection/from LDZ2 ++ .selection/from STZ2 - .selection/from LDZ2 LDA ,&loop JCN - -RTN - -( drawing functions ) - -@redraw - - ;draw-textarea JSR2 - ;draw-scrollbar JSR2 - ;draw-titlebar JSR2 - - ( save/load icons ) - .Screen/height DEI2 8- .Screen/y DEO2 - - .Screen/width DEI2 #0030 SUB2 .Screen/x DEO2 - ;eye_icn .Screen/addr DEO2 - #22 .Screen/color DEO - - .Screen/width DEI2 #0028 SUB2 .Screen/x DEO2 - ;name_icn .Screen/addr DEO2 - #22 .Screen/color DEO - - .Screen/width DEI2 #0020 SUB2 .Screen/x DEO2 - ;load_icn .Screen/addr DEO2 - #22 .Screen/color DEO - - .Screen/width DEI2 #0018 SUB2 .Screen/x DEO2 - ;save_icn .Screen/addr DEO2 - #22 .Screen/color DEO - -RTN - -@draw-short ( short ) - - .addr STZ2 - ;font_hex #00 ;addr LDA #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) #2e .Screen/color DEO - .Screen/x DEI2 8+ .Screen/x DEO2 - ;font_hex #00 ;addr LDA #0f AND #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) #2e .Screen/color DEO - .Screen/x DEI2 8+ .Screen/x DEO2 - ;font_hex #00 ;addr ++ LDA #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) #2e .Screen/color DEO - .Screen/x DEI2 8+ .Screen/x DEO2 - ;font_hex #00 ;addr ++ LDA #0f AND #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) #2e .Screen/color DEO - -RTN - -@draw-cursor - - ( clear last cursor ) - .mouse/x LDZ2 .Screen/x DEO2 - .mouse/y LDZ2 .Screen/y DEO2 - ;blank_icn .Screen/addr DEO2 - #30 .Screen/color DEO - - ( record mouse positions ) - .Mouse/x DEI2 .mouse/x STZ2 - .Mouse/y DEI2 .mouse/y STZ2 - - ( draw new cursor ) - .mouse/x LDZ2 .Screen/x DEO2 - .mouse/y LDZ2 .Screen/y DEO2 - ;cursor_icn .Screen/addr DEO2 - #3f .Mouse/state DEI #01 EQU #0a MUL SUB .Screen/color DEO - -RTN - -@draw-textarea ( x y color addr ) - - ;document/body .textarea/addr STZ2 - - ( scroll to position ) - #0000 .j STZ2 ( j is linebreaks ) - &find-offset - .scroll/y LDZ2 .j LDZ2 EQU2 ,&find-offset-end JCN - .textarea/addr LDZ2 LDA #0a NEQ .textarea/addr LDZ2 LDA #0d NEQ #0101 EQU2 ,&no-break JCN - ( incr ) .j LDZ2 ++ .j STZ2 &no-break - ( incr ) .textarea/addr LDZ2 ++ .textarea/addr STZ2 - .textarea/addr LDZ2 LDA ,&find-offset JCN - &find-offset-end - - #0018 .Screen/x DEO2 #0000 .Screen/y DEO2 - .textarea/addr LDZ2 .i STZ2 - - &loop - - .Screen/y DEI2 .Screen/height DEI2 #0010 SUB2 GTH2 ;&end JCN2 - - - .i LDZ2 LDA #0a NEQ .i LDZ2 LDA #0d NEQ #0101 EQU2 ;&no-linebreak JCN2 - ( draw linebreak ) - ;linebreak_icn .Screen/addr DEO2 - ( draw ) #02 - .i LDZ2 .selection/from LDZ2 -- GTH2 - .i LDZ2 .selection/to LDZ2 LTH2 #0101 EQU2 - #26 MUL ADD .Screen/color DEO - ( fill clear ) - &fill-clear - ( incr ) .Screen/x DEI2 8+ .Screen/x DEO2 - ;font .Screen/addr DEO2 - #21 .Screen/color DEO - .Screen/x DEI2 .Screen/width DEI2 8- LTH2 ,&fill-clear JCN - - ( draw line number ) - #0000 .Screen/x DEO2 - .scroll/y LDZ2 .Screen/y DEI2 8/ ADD2 DUP2 SWP POP .k STZ - .position/y LDZ2 EQU2 #05 MUL .l STZ - ;font_hex #00 .k LDZ #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2 - #24 .l LDZ ADD .Screen/color DEO - #0008 .Screen/x DEO2 - ;font_hex #00 .k LDZ #0f AND #08 MUL ADD2 .Screen/addr DEO2 - #24 .l LDZ ADD .Screen/color DEO - - #0010 .Screen/x DEO2 - ( incr ) .Screen/y DEI2 8+ .Screen/y DEO2 - &no-linebreak - - - ( get character ) - ;font #00 .i LDZ2 LDA #20 SUB 8* ADD2 .Screen/addr DEO2 - ( is a special character ) - .i LDZ2 LDA #20 GTH ,&no-tab JCN ;font .Screen/addr DEO2 &no-tab - - ( draw ) #21 - .i LDZ2 .selection/from LDZ2 -- GTH2 - .i LDZ2 .selection/to LDZ2 LTH2 #0101 EQU2 - #05 MUL ADD .Screen/color DEO - - ( incr ) .i LDZ2 ++ .i STZ2 - ( incr ) .Screen/x DEI2 #0007 ADD2 .Screen/x DEO2 - - .i LDZ2 LDA ;&loop JCN2 - - &end - -RTN - -@draw-scrollbar ( -- ) - - ;scrollbar_icn ( keeping a copy on stack ) - - .Screen/width DEI2 8- .Screen/x DEO2 - #0008 .Screen/y DEO2 - DUP2 .Screen/addr DEO2 - - #0008 .Screen/height DEI2 8- - &loop - ( draw ) #21 .Screen/color DEO - ( incr ) SWP2 8+ DUP2 .Screen/y DEO2 SWP2 - OVR2 OVR2 LTH2 ,&loop JCN - POP2 POP2 - - .scroll/y LDZ2 8+ .Screen/y DEO2 - DUP2 #0008 ADD2 .Screen/addr DEO2 - ( draw ) #21 .Screen/color DEO - - #0000 .Screen/y DEO2 - DUP2 #0010 ADD2 .Screen/addr DEO2 - ( draw ) #24 .Screen/color DEO - - .Screen/height DEI2 8- .Screen/y DEO2 - #0018 ADD2 .Screen/addr DEO2 - ( draw ) #24 .Screen/color DEO - -RTN - -@draw-titlebar - - #0018 .Screen/height DEI2 8- #29 ;filepath - ( load ) .label/addr STZ2 .label/color STZ .Screen/y DEO2 .Screen/x DEO2 - .label/addr LDZ2 - &loop - ( draw ) DUP2 LDA #00 SWP #20 SUB 8* ;font ADD2 .Screen/addr DEO2 .label/color LDZ .Screen/color DEO - ( incr ) ++ - ( incr ) .Screen/x DEI2 8+ .Screen/x DEO2 - DUP2 LDA ,&loop JCN - POP2 - ( selection ) - .selection/from LDZ2 ;document/body SUB2 ;draw-short JSR2 - -RTN - -@font_hex ( 0-F TODO: should pull from @font instead.. ) -[ - 003c 464a 5262 3c00 0018 0808 0808 1c00 - 003c 4202 3c40 7e00 003c 421c 0242 3c00 - 000c 1424 447e 0400 007e 407c 0242 3c00 - 003c 407c 4242 3c00 007e 0204 0810 1000 - 003c 423c 4242 3c00 003c 4242 3e02 3c00 - 003c 4242 7e42 4200 007c 427c 4242 7c00 - 003c 4240 4042 3c00 007c 4242 4242 7c00 - 007e 4078 4040 7e00 007e 4078 4040 4000 -] - -@font ( specter8-frag font ) -[ - 0000 0000 0000 0000 0008 0808 0800 0800 - 0014 1400 0000 0000 0024 7e24 247e 2400 - 0008 1e28 1c0a 3c08 0000 2204 0810 2200 - 0030 4832 4c44 3a00 0008 1000 0000 0000 - 0004 0808 0808 0400 0020 1010 1010 2000 - 0000 2214 0814 2200 0000 0808 3e08 0800 - 0000 0000 0000 0810 0000 0000 3e00 0000 - 0000 0000 0000 0800 0000 0204 0810 2000 - 003c 464a 5262 3c00 0018 0808 0808 1c00 - 003c 4202 3c40 7e00 003c 421c 0242 3c00 - 000c 1424 447e 0400 007e 407c 0242 3c00 - 003c 407c 4242 3c00 007e 0204 0810 1000 - 003c 423c 4242 3c00 003c 4242 3e02 3c00 - 0000 0010 0000 1000 0000 1000 0010 1020 - 0000 0810 2010 0800 0000 003e 003e 0000 - 0000 1008 0408 1000 003c 420c 1000 1000 - 003c 4232 4a42 3c00 003c 4242 7e42 4200 - 007c 427c 4242 7c00 003c 4240 4042 3c00 - 007c 4242 4242 7c00 007e 4078 4040 7e00 - 007e 4078 4040 4000 003c 4240 4642 3c00 - 0042 427e 4242 4200 001c 0808 0808 1c00 - 007e 0202 0242 3c00 0042 4478 4442 4200 - 0040 4040 4040 7e00 0042 665a 4242 4200 - 0042 6252 4a46 4200 003c 4242 4242 3c00 - 007c 4242 7c40 4000 003c 4242 4244 3a00 - 007c 4242 7c44 4200 003e 403c 0242 3c00 - 007e 0808 0808 1000 0042 4242 4244 3a00 - 0042 4242 4224 1800 0042 4242 5a66 4200 - 0042 423c 4242 4200 0042 423e 0242 3c00 - 007e 020c 3040 7e00 000c 0808 0808 0c00 - 0040 2010 0804 0200 0030 1010 1010 3000 - 0008 1400 0000 0000 0000 0000 0000 7e00 - 0008 0400 0000 0000 0000 3c02 3e42 3a00 - 0040 407c 4242 7c00 0000 3c42 4042 3c00 - 0002 023e 4242 3e00 0000 3c42 7e40 3e00 - 0000 3e40 7840 4000 0000 3c42 3e02 3c00 - 0040 405c 6242 4200 0008 0018 0808 0400 - 0008 0018 0808 4830 0040 4244 7844 4200 - 0010 1010 1010 0c00 0000 6c52 5252 5200 - 0000 5c62 4242 4200 0000 3c42 4242 3c00 - 0000 7c42 427c 4040 0000 3e42 423e 0202 - 0000 5c62 4040 4000 0000 3e40 3c02 7c00 - 0008 7e08 0808 1000 0000 4242 4244 3a00 - 0000 4242 4224 1800 0000 5252 5252 2e00 - 0000 4224 1824 4200 0000 4242 3e02 7c00 - 0000 7e02 3c40 7e00 000c 0810 1008 0c00 - 0008 0808 0808 0800 0030 1008 0810 3000 - 0000 0032 4c00 0000 3c42 99a1 a199 423c -] - -( interface ) -@eye_icn - [ 0038 4492 2810 0000 ] ( open ) - [ 0000 0082 4438 0000 ] ( closed ) - -@scrollbar_icn - [ aa55 aa55 aa55 aa55 ] ( bg ) - [ ffff ffff ffff ffff ] ( fg ) - [ 0010 387c fe10 1010 ] ( up ) - [ 0010 1010 fe7c 3810 ] ( down ) - -@name_icn [ 1054 28c6 2854 1000 ] -@load_icn [ feaa d6aa d4aa f400 ] -@save_icn [ fe82 8282 848a f400 ] - -@linebreak_icn [ 003e 7474 3414 1400 ] - -@blank_icn [ 0000 0000 0000 0000 ] -@cursor_icn [ 80c0 e0f0 f8e0 1000 ] - -@filepath1 [ "projects/examples/gui.hover.usm 00 ] -@filepath [ "README.md 00 ] - -@clip [ &len $2 &body $100 ] -@document [ &eof $2 &body $0 ] - diff --git a/projects/software/orca.usm b/projects/software/orca.usm @@ -1,665 +0,0 @@ -( Orca - - TODO - - Synthax highlight - - B operating doesn't loop around - - Detect capitalization - - Comments - - Scale selection - - Load/Save - - Copy/Paste - - Copy/paste(chorded) -) - -%RTN { JMP2r } -%++ { #01 ADD } %-- { #01 SUB } -%8++ { #0008 ADD2 } -%8** { #30 SFT2 } %8// { #03 SFT2 } -%MOD { DUP2 DIV MUL SUB } -%MOD8 { #07 AND } -%MOD2 { #01 AND } - -%DATA-CELLS { #2000 } -%DATA-LOCKS { #3000 } -%DATA-TYPES { #4000 } - -%LDA-CHAR { #24 MOD #00 SWP ;b36clc ADD2 LDA } ( b36 -- char ) -%LDA-VALUE { #20 SUB #00 SWP ;values ADD2 LDA } ( char -- b36 ) - -%LDA-INDEX { #00 SWP #00 .grid/width LDZ MUL2 ROT #00 SWP ADD2 } ( x y -- index ) -%LDA-CELL { LDA-INDEX DATA-CELLS ADD2 LDA } ( x y -- char ) -%SET-CELL { ROT ROT LDA-INDEX DATA-CELLS ADD2 STA } ( x y char -- ) -%LDA-TYPE { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type ) -%SET-TYPE { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- ) -%LDA-LOCK { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type ) -%SET-LOCK { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- ) -%LDA-PORT { } ( x y lock -- char ) -%SET-PORT { } ( x y char -- ) - -%LDA-CELL-VALUE { LDA-CELL LDA-VALUE } ( x y -- b36 ) - -( devices ) - -|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] -|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] -|80 @Controller [ &vector $2 &button $1 &key $1 ] -|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] - -( variables ) - -@timer [ &byte $1 &frame $1 &speed $1 ] -@grid [ &width $1 &height $1 ] -@selection [ &x1 $1 &y1 $1 &x2 $1 &y2 $1 ] -@cursor [ &x $2 &y $2 ] - -|0100 - - ( theme ) #08f3 .System/r DEO2 #08fc .System/g DEO2 #08f9 .System/b DEO2 - ( vectors ) ;on-button .Controller/vector DEO2 - ( vectors ) ;on-mouse .Mouse/vector DEO2 - ( vectors ) ;on-frame .Screen/vector DEO2 - - ( find size ) - .Screen/width DEI2 8// SWP POP .grid/width STZ - .Screen/height DEI2 8// SWP POP #02 SUB .grid/height STZ - - ( fill grid with dots ) - - ;start JSR2 - ;redraw JSR2 - -BRK - -@on-frame - - .timer LDZ ++ DUP .timer STZ - - ( skip ) #08 EQU ,&tick JCN BRK &tick - - .timer/frame LDZ ++ .timer/frame STZ - - ;run JSR2 - - #00 .timer STZ - -BRK - -@on-button - - .Controller/key DEI #00 EQU ,&no-key JCN - .selection/x1 LDZ .selection/y1 LDZ .Controller/key DEI SET-CELL - ;redraw JSR2 - &no-key - - ( arrows ) - .Controller/button DEI #f0 AND - DUP #04 SFT #01 AND #01 NEQ ,&no-up JCN - .selection/y1 LDZ #00 EQU ,&no-up JCN - .selection/y1 LDZ -- .selection/y1 STZ - .selection/y2 LDZ -- .selection/y2 STZ &no-up - DUP #05 SFT #01 AND #01 NEQ ,&no-down JCN - .selection/y1 LDZ .grid/height LDZ -- EQU ,&no-down JCN - .selection/y1 LDZ ++ .selection/y1 STZ - .selection/y2 LDZ ++ .selection/y2 STZ &no-down - DUP #06 SFT #01 AND #01 NEQ ,&no-left JCN - .selection/x1 LDZ #00 EQU ,&no-left JCN - .selection/x1 LDZ -- .selection/x1 STZ - .selection/x2 LDZ -- .selection/x2 STZ &no-left - DUP #07 SFT #01 AND #01 NEQ ,&no-right JCN - .selection/x1 LDZ .grid/width LDZ -- EQU ,&no-right JCN - .selection/x1 LDZ ++ .selection/x1 STZ - .selection/x2 LDZ ++ .selection/x2 STZ &no-right - POP - - .Controller/key DEI #08 NEQ ,&no-backspace JCN - .selection/x1 LDZ .selection/y1 LDZ #2e SET-CELL ( put . char ) - &no-backspace - - ;redraw JSR2 - -BRK - -@on-mouse - - .Mouse/state DEI #00 EQU ,&no-touch JCN - .Mouse/x DEI2 8// SWP POP .selection/x1 STZ - .Mouse/y DEI2 8// SWP POP .selection/y1 STZ - ;redraw JSR2 - &no-touch - - ( clear last cursor ) - .cursor/x LDZ2 .Screen/x DEO2 - .cursor/y LDZ2 .Screen/y DEO2 - ;blank_icn .Screen/addr DEO2 - #30 .Screen/color DEO - - ( record cursor positions ) - .Mouse/x DEI2 .cursor/x STZ2 - .Mouse/y DEI2 .cursor/y STZ2 - - ( draw new cursor ) - .cursor/x LDZ2 .Screen/x DEO2 - .cursor/y LDZ2 .Screen/y DEO2 - ;cursor_icn .Screen/addr DEO2 - #32 .Mouse/state DEI #01 EQU ADD .Screen/color DEO - -BRK - -@start ( -- ) - - #00 .grid/height LDZ - &ver - #00 .grid/width LDZ - &hor - ( get x,y ) SWP2 OVR STH SWP2 OVR STHr - #2e SET-CELL - ( incr ) SWP ++ SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP ++ SWP - DUP2 LTH ,&ver JCN - POP2 - - #9a .timer/speed STZ - -RTN - -( operations ) - -@get-bang ( x y -- bang ) -RTN - -( old ) - -@is-selected ( x y -- flag ) - - .selection/x1 LDZ .selection/y1 LDZ EQU2 - -RTN - -@get-port ( x y lock -- value ) - - ( - DUP #01 NEQ ^$no-lock JCN - DUP2 #01 SET-LOCK - $no-lock - STH DUP2 #02 #02 STHr MUL ADD ,set-type JSR2 - LDA-CELL - ) - -RTN - -@get-cell-sprite ( x y -- addr ) - - DUP2 LDA-CELL - ( if character is dot ) - DUP #2e NEQ ,&no-bar JCN - ( check if x,y is grid ) - POP - DUP2 MOD8 #00 EQU SWP MOD8 #00 EQU #0101 NEQ2 ,&no-marker8 JCN POP2 ;marker8_icn RTN &no-marker8 - DUP2 MOD2 #00 EQU SWP MOD2 #00 EQU #0101 NEQ2 ,&no-marker4 JCN POP2 ;marker4_icn RTN &no-marker4 - POP2 ;font RTN - &no-bar - STH POP2 STHr - #20 SUB #00 SWP 8** ;font ADD2 - -RTN - -( operators ) - -@op-a ( x y char -- ) - - POP - ( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH - ( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH - ( incr y ) ++ - ( get result ) ADDr STHr - LDA-CHAR - SET-CELL - -RTN - -@op-b ( x y char -- ) - - POP - ( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH - ( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH - ( incr y ) ++ - ( get result ) SUBr STHr - LDA-CHAR - SET-CELL - - ( NOTE: Issue is not with modulo, but with converting ff to 36 ) - -RTN - -@op-c ( x y char -- ) - - POP - ++ - #30 .timer/frame LDZ MOD8 ADD SET-CELL - -RTN - -@op-d ( x y char -- ) - - POP POP2 - -RTN - -@op-e ( x y char -- ) - - POP POP2 - -RTN - -@op-f ( x y char -- ) - - POP POP2 - -RTN - -@op-g ( x y char -- ) - - POP POP2 - -RTN - -@op-h ( x y char -- ) - - POP POP2 - -RTN - -@op-i ( x y char -- ) - - POP POP2 - -RTN - -@op-j ( x y char -- ) - - POP POP2 - -RTN - -@op-k ( x y char -- ) - - POP POP2 - -RTN - -@op-l ( x y char -- ) - - POP POP2 - -RTN - -@op-m ( x y char -- ) - - POP POP2 - -RTN - -@op-n ( x y char -- ) - - STH - ( limit ) - DUP ,&not-edge JCN - #2a SET-CELL POP STHr RTN - &not-edge - ( collide ) - DUP2 -- LDA-CELL #2e EQU ,&not-collide JCN - #2a SET-CELL POP STHr RTN - &not-collide - ( move ) - DUP2 STHr - SWP -- SWP SET-CELL - #2e SET-CELL - -RTN - -@op-o ( x y char -- ) - - POP POP2 - -RTN - -@op-p ( x y char -- ) - - POP POP2 - -RTN - -@op-q ( x y char -- ) - - POP POP2 - -RTN - -@op-r ( x y char -- ) - - POP POP2 - -RTN - -@op-s ( x y char -- ) - - STH - ( clear ) DUP2 #2e SET-CELL - ( move ) ++ DUP2 #01 SET-LOCK - STHr SET-CELL - -RTN - -@op-t ( x y char -- ) - - POP POP2 - -RTN - -@op-u ( x y char -- ) - - POP POP2 - -RTN - -@op-v ( x y char -- ) - - POP POP2 - -RTN - -@op-w ( x y char -- ) - - STH - ( limit ) - OVR ,&not-edge JCN - #2a SET-CELL POP STHr RTN - &not-edge - ( collide ) - DUP2 SWP -- SWP LDA-CELL #2e EQU ,&not-collide JCN - #2a SET-CELL POP STHr RTN - &not-collide - ( move ) - DUP2 - SWP -- SWP STHr SET-CELL - #2e SET-CELL - -RTN - -@op-x ( x y char -- ) - - POP POP2 - -RTN - -@op-y ( x y char -- ) - - POP POP2 - -RTN - -@op-z ( x y char -- ) - - POP POP2 - -RTN - -@op-bang ( x y char -- ) - - POP - #2e SET-CELL - -RTN - -@run-char ( x y char -- ) - - ( skip dot ) - DUP #2e NEQ ,&not-dot JCN - POP POP2 RTN - &not-dot - - ( skip locked ) - ROT ROT DUP2 LDA-LOCK #00 EQU ,&not-locked JCN - POP POP2 RTN - &not-locked - ROT - - ( A ) DUP #41 EQU ;op-a JCN2 ( B ) DUP #42 EQU ;op-b JCN2 - ( C ) DUP #43 EQU ;op-c JCN2 ( D ) DUP #44 EQU ;op-d JCN2 - ( E ) DUP #45 EQU ;op-e JCN2 ( F ) DUP #46 EQU ;op-f JCN2 - ( G ) DUP #47 EQU ;op-g JCN2 ( H ) DUP #48 EQU ;op-h JCN2 - ( I ) DUP #49 EQU ;op-i JCN2 ( J ) DUP #4a EQU ;op-j JCN2 - ( K ) DUP #4b EQU ;op-k JCN2 ( L ) DUP #4c EQU ;op-l JCN2 - ( M ) DUP #4d EQU ;op-m JCN2 ( N ) DUP #4e EQU ;op-n JCN2 - ( O ) DUP #4f EQU ;op-o JCN2 ( P ) DUP #50 EQU ;op-p JCN2 - ( Q ) DUP #51 EQU ;op-q JCN2 ( R ) DUP #52 EQU ;op-r JCN2 - ( S ) DUP #53 EQU ;op-s JCN2 ( T ) DUP #54 EQU ;op-t JCN2 - ( U ) DUP #55 EQU ;op-u JCN2 ( V ) DUP #56 EQU ;op-v JCN2 - ( W ) DUP #57 EQU ;op-w JCN2 ( X ) DUP #58 EQU ;op-x JCN2 - ( Y ) DUP #59 EQU ;op-y JCN2 ( Z ) DUP #5a EQU ;op-z JCN2 - ( * ) DUP #2a EQU ;op-bang JCN2 - POP POP2 - -RTN - -@init ( -- ) - - #00 .grid/height LDZ - &ver - #00 .grid/width LDZ - &hor - ( get x,y ) SWP2 OVR STH SWP2 OVR STHr - ( unlock ) #00 SET-LOCK - ( incr ) SWP ++ SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP ++ SWP - DUP2 LTH ,&ver JCN - POP2 - -RTN - -@run ( -- ) - - ;init JSR2 - - #00 .grid/height LDZ - &ver - #00 .grid/width LDZ - &hor - ( get x,y ) SWP2 OVR STH SWP2 OVR STHr - DUP2 LDA-CELL ;run-char JSR2 - ( incr ) SWP ++ SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP ++ SWP - DUP2 LTH ,&ver JCN - POP2 - ;redraw JSR2 - -RTN - -@draw-interface ( -- ) - - .Screen/height DEI2 #0008 SUB2 .Screen/y DEO2 - - ( Positionx ) - #0000 .Screen/x DEO2 - .selection/x1 LDZ - DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - #0008 .Screen/x DEO2 - #0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - - ( Positiony ) - #0010 .Screen/x DEO2 - .selection/y1 LDZ - DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - #0018 .Screen/x DEO2 - #0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - - #0020 .Screen/x DEO2 - ;position_icn .Screen/addr DEO2 - #23 .Screen/color DEO - - ( Frame ) - #0030 .Screen/x DEO2 - .timer/frame LDZ - DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - #0038 .Screen/x DEO2 - #0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - - #0040 .Screen/x DEO2 - ;beat_icn .Screen/addr DEO2 - #21 .timer/frame LDZ MOD8 #00 EQU #02 MUL ADD .Screen/color DEO - - ( Speed ) - #0050 .Screen/x DEO2 - .timer/speed LDZ - DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - #0058 .Screen/x DEO2 - #0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2 - #22 .Screen/color DEO - - ( TODO: Signal VU ) - - ( File ) - .Screen/width DEI2 #0028 SUB2 .Screen/x DEO2 - .Screen/x DEI2 8++ .Screen/x DEO2 ;eye_icns .Screen/addr DEO2 #21 .Screen/color DEO - .Screen/x DEI2 8++ .Screen/x DEO2 ;filestate_icn .Screen/addr DEO2 #21 .Screen/color DEO - .Screen/x DEI2 8++ .Screen/x DEO2 ;load_icn .Screen/addr DEO2 #21 .Screen/color DEO - .Screen/x DEI2 8++ .Screen/x DEO2 ;save_icn .Screen/addr DEO2 #21 .Screen/color DEO - -RTN - -@redraw ( -- ) - - #00 .grid/height LDZ - &ver - ( pos-y ) OVR #00 SWP 8** .Screen/y DEO2 - #00 .grid/width LDZ - &hor - ( pos-x ) OVR #00 SWP 8** .Screen/x DEO2 - ( get x,y ) SWP2 OVR STH SWP2 OVR STHr - ( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2 - ( draw ) ;is-selected JSR2 #0d MUL #21 ADD .Screen/color DEO - ( incr ) SWP ++ SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP ++ SWP - DUP2 LTH ,&ver JCN - POP2 - - ;draw-interface JSR2 - -RTN - -( char to b36 ) - -@values [ - - 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 - - 00 01 02 03 04 05 06 07 - 08 09 00 00 00 00 00 00 - - 00 0a 0b 0c 0d 0e 0f 10 - 11 12 13 14 15 16 17 18 - 19 1a 1b 1c 1d 1e 1f 20 - 21 22 23 00 00 00 00 00 - - 00 0a 0b 0c 0d 0e 0f 10 - 11 12 13 14 15 16 17 18 - 19 1a 1b 1c 1d 1e 1f 20 - 21 22 23 00 00 00 00 00 - -] - -( b36 to char-lc ) - -@b36clc [ - 30 31 32 33 34 35 36 37 - 38 39 61 62 63 64 65 66 - 67 68 69 6a 6b 6c 6d 6e - 6f 70 71 72 73 74 75 76 - 77 78 79 7a -] - -@cursor_icn [ 80c0 e0f0 f8e0 1000 ] -@blank_icn [ 0000 0000 0000 0000 ] -@position_icn [ 0066 4200 0042 6600 ] -@beat_icn [ 0000 1038 7c38 1000 ] -@marker8_icn [ 0000 2400 0024 0000 ] -@marker4_icn [ 0000 0000 0000 1000 ] -@filestate_icn [ 1054 28c6 2854 1000 ] -@load_icn [ feaa d6aa d4aa f400 ] -@save_icn [ fe82 8282 848a f400 ] - -@eye_icns - [ 0038 4492 2810 0000 ] ( open ) - [ 0000 0082 4438 0000 ] ( closed ) - - -@font ( specter8-frag font ) -[ - 0000 0000 0000 0000 0008 0808 0800 0800 - 0014 1400 0000 0000 0024 7e24 247e 2400 - 0008 1e28 1c0a 3c08 0000 2204 0810 2200 - 0030 4832 4c44 3a00 0008 1000 0000 0000 - 0004 0808 0808 0400 0020 1010 1010 2000 - 005a 2442 4224 5a00 0000 0808 3e08 0800 - 0000 0000 0000 0810 0000 0000 3e00 0000 - 0000 0000 0000 0800 0000 0204 0810 2000 - 003c 464a 5262 3c00 0018 0808 0808 1c00 - 003c 4202 3c40 7e00 003c 421c 0242 3c00 - 000c 1424 447e 0400 007e 407c 0242 3c00 - 003c 407c 4242 3c00 007e 0204 0810 1000 - 003c 423c 4242 3c00 003c 4242 3e02 3c00 - 0000 0010 0000 1000 0000 1000 0010 1020 - 0000 0810 2010 0800 0000 003e 003e 0000 - 0000 1008 0408 1000 003c 420c 1000 1000 - 003c 4232 4a42 3c00 003c 4242 7e42 4200 - 007c 427c 4242 7c00 003c 4240 4042 3c00 - 007c 4242 4242 7c00 007e 4078 4040 7e00 - 007e 4078 4040 4000 003c 4240 4642 3c00 - 0042 427e 4242 4200 001c 0808 0808 1c00 - 007e 0202 0242 3c00 0042 4478 4442 4200 - 0040 4040 4040 7e00 0042 665a 4242 4200 - 0042 6252 4a46 4200 003c 4242 4242 3c00 - 007c 4242 7c40 4000 003c 4242 4244 3a00 - 007c 4242 7c44 4200 003e 403c 0242 3c00 - 007e 0808 0808 1000 0042 4242 4244 3a00 - 0042 4242 4224 1800 0042 4242 5a66 4200 - 0042 423c 4242 4200 0042 423e 0242 3c00 - 007e 020c 3040 7e00 000c 0808 0808 0c00 - 0040 2010 0804 0200 0030 1010 1010 3000 - 0008 1400 0000 0000 0000 0000 0000 7e00 - 0008 0400 0000 0000 0000 3c02 3e42 3a00 - 0040 407c 4242 7c00 0000 3c42 4042 3c00 - 0002 023e 4242 3e00 0000 3c42 7e40 3e00 - 0000 3e40 7840 4000 0000 3c42 3e02 3c00 - 0040 405c 6242 4200 0008 0018 0808 0400 - 0008 0018 0808 4830 0040 4244 7844 4200 - 0010 1010 1010 0c00 0000 6c52 5252 5200 - 0000 5c62 4242 4200 0000 3c42 4242 3c00 - 0000 7c42 427c 4040 0000 3e42 423e 0202 - 0000 5c62 4040 4000 0000 3e40 3c02 7c00 - 0008 7e08 0808 1000 0000 4242 4244 3a00 - 0000 4242 4224 1800 0000 5252 5252 2e00 - 0000 4224 1824 4200 0000 4242 3e02 7c00 - 0000 7e02 3c40 7e00 000c 0810 1008 0c00 - 0008 0808 0808 0800 0030 1008 0810 3000 - 0000 0032 4c00 0000 3c42 99a1 a199 423c -] - -@data [ ] -\ No newline at end of file