( 54K . Orca ) |00 @System/vector $2 &expansion $2 &wst $1 &rst $1 &metadata $2 &r $2 &g $2 &b $2 &debug $1 &state $1 |10 @Console/vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |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 &pad $4 &scrolly &scrolly-hb $1 &scrolly-lb $1 |a0 @File/vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |c0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ( @|Enums ) |10 @Types/lock-default |12 @Types/lock-lut |10 @Types/lock-output |1c @Types/lock-distant |01 @Types/pl |02 @Types/nil |07 @Types/op |04 @Styles/selected |000 @timer &beat $1 &speed $1 &frame $1 &frame-lb $1 @help $1 @src/buf $3f &cap $1 @grid/length $2 &x2 $2 &y2 $2 &size &width $1 &height $1 @select/from &x1 $1 &y1 $1 &to &x2 $1 &y2 $1 @head/pos &x $1 &y $1 &addr $2 @variables/buf $24 @voices/buf ( len vel chn pitch ) $40 &cap |100 @on-reset ( -> ) ( | meta ) ;meta #06 DEO2 ( | theme ) #0f75 .System/r DEO2 #0fe5 .System/g DEO2 #0fc5 .System/b DEO2 theme/ random/ ( | resize ) #02a8 .Screen/width DEO2 #01c8 .Screen/height DEO2 grid/ [ LIT2 15 -Screen/auto ] DEO ( | cache positions ) #0010 ( ) DUP2 #0058 ADD2 ;src/x STA2 ( ) DUP2 ;select/x STA2 ( ) #0030 ADD2 ;timer/x STA2 .grid/x2 LDZ2 ( ) #0040 SUB2 ;voices/x STA2 .grid/y2 LDZ2 #0008 ADD2 ( ) DUP2 ;select/y STA2 ( ) DUP2 ;timer/y STA2 ( ) DUP2 ;src/y STA2 ( ) ;voices/y STA2 ( | Unlock ) file/ help/ select/ voices/ ( | vectors ) ;on-button .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 ;timer/on-play .Screen/vector DEO2 timer/ .Console/type DEI ?{ ;grid/on-console .Console/vector DEO2 BRK } ;src/on-console .Console/vector DEO2 BRK @meta 00 ( name ) "Orca 0a ( details ) "A 20 "Livecoding 20 "Playground 0a ( author ) "By 20 "Hundred 20 "Rabbits 0a ( date ) "16 20 "May 20 "2026 00 01 ( icon ) 83 =appicon @manifest/dat ( . ) ={ =dict/orca ( - ) 01 "n =file/ =dict ( - ) 01 0d =file/ =dict ( - ) 01 "o =file/ =dict ( - ) 01 "s =file/ =dict ( - ) 01 "q =file/ =dict } ={ =dict/edit ( - ) 01 "i =insert/ =dict ( - ) 01 "c =edit/ =dict ( - ) 01 "v =edit/ =dict ( - ) 01 "x =edit/ =dict ( - ) 01 "/ =edit/ =dict ( - ) 00 08 =edit/ =dict } ={ =dict/play ( - ) 01 ", =timer/ =dict ( - ) 01 ". =timer/ =dict ( - ) 00 20 =timer/ =dict ( - ) 00 0d =timer/ =dict } ={ =dict/view ( - ) 01 "h =help/ =dict } ={ =dict/select ( - ) 01 "a =select/ =dict ( - ) 00 1b =select/ =dict } $1 @manifest/scan ( but key -- fn* ) ORAk ?{ POP2 #ffff JMP2r } ,&bk STR2 ;&dat &>cat LDA2k OVR2 #0004 ADD2 &>opt LDA2k [ LIT2 &bk $2 ] NEQ2 ?{ NIP2 NIP2 INC2 INC2 LDA2 JMP2r } #0006 ADD2 GTH2k ?&>opt POP2 POP2 LDA2 LDAk ?&>cat POP2 #ffff JMP2r ( @|Macros ) %grid/get ( addr* -- cell ) { ;grid/buf ADD2 LDA } %grid/ ( cell addr* -- ) { ;grid/buf ADD2 STA } %MOD ( a b -- res ) { DIVk MUL SUB } %MOD2 ( a* b* -- res* ) { DIV2k MUL2 SUB2 } %MIN1 ( a -- 1|+ ) { DUP #00 EQU ADD } %POP? ( a b bool -- a/b ) { [ JMP SWP ] POP } %ciuc ( char -- bool ) { LIT "A SUB #1a LTH } %chrb36 ( char -- b36 ) { #00 SWP ;chr/b36 ADD2 LDA } %b36chr ( value -- res ) { #00 SWP #24 MOD ;b36/chr ADD2 LDA } %chrmid ( char -- midi ) { DUP chrb36 SWP ciuc #24 MUL ADD #00 SWP ;midi/lut ADD2 LDA } %below ( addr* -- next-row* ) { ;grid/width LDZ ADD2 } %above ( addr* -- prev-row* ) { ;grid/width LDZ SUB2 } %get-row ( row -- addr* ) { #00 SWP ;grid/width LDZ MUL2 } %get-addr ( x y -- addr* ) { get-row ROT #00 SWP ADD2 } ( @|Ports ) %types/set-op ( addr* -- addr* ) { LITr -Types/op STH2k LIT2r =types/buf ADD2r STAr } %types/set-pl ( addr* -- addr* ) { LITr -Types/pl STH2k LIT2r =types/buf ADD2r STAr } %types/ ( addr* -- ) { LITr -Types/op STH2 LIT2r =types/buf ADD2r STAr } %types/ ( addr* -- ) { LITr -Types/pl STH2 LIT2r =types/buf ADD2r STAr } %types/lock-lut ( addr* -- addr* ) { LITr -Types/lock-lut STH2k LIT2r =types/buf ADD2r STAr } %types/lock-default ( addr* -- addr* ) { LITr -Types/lock-default STH2k LIT2r =types/buf ADD2r STAr } %types/lock-distant ( addr* -- addr* ) { LITr -Types/lock-distant STH2k LIT2r =types/buf ADD2r STAr } %types/lock-output ( addr* -- addr* ) { LITr -Types/lock-output STH2k LIT2r =types/buf ADD2r STAr } %types/ ( addr* -- ) { LITr -Types/lock-lut STH2 LIT2r =types/buf ADD2r STAr } %ports/w ( addr* -- value ) { types/set-pl grid/get } %ports/w1 ( addr* -- value ) { #0001 SUB2 ports/w } %ports/w-val ( addr* -- value ) { ports/w chrb36 } %ports/w1-val ( addr* -- value ) { #0001 SUB2 ports/w-val } %ports/e-val ( addr* -- value ) { ports/e chrb36 } %ports/e1-val ( addr* -- value ) { INC2 ports/e-val } %ports/e ( addr* -- value ) { types/lock-default grid/get } %ports/e1 ( addr* -- value ) { INC2 ports/e } %ports/e1-case ( addr* case -- value ) { ports/e1 DUP chrb36 SWP ciuc } %ports/ ( value addr* -- ) { types/lock-default grid/ } %ports/ ( value addr* -- ) { types/lock-output grid/ } %ports/ ( value addr* -- ) { types/lock-distant grid/ } %ports/ ( addr* -- ) { LIT "* ROT ROT ports/ } %ports/s ( addr* -- value ) { below grid/get } %ports/ ( value addr* -- ) { below ports/ } %ports/ ( bool . addr* -- ) { [ LIT2 "*. ] ROT POP? STH2r ports/ } ( @|Src ) @src/on-console ( -> ) .Console/read DEI ( ) DUP #20 GTH ?{ POP file/ ;grid/on-console .Console/vector DEO2 BRK } / BRK @src/ ( -- ) [ LIT2 -&buf _&ptr ] STR JMP2r @src/ ( -- ) [ LIT2 -&buf _&ptr ] STR ;&default-path &>lr LDAk DUP ?{ POP POP2 / #00 !/ } / INC2 !&>lr @src/ ( c -- ) [ LIT2 00 &ptr -&buf ] INCk ,&ptr STR STZ2 JMP2r @src/ ( -- ) #00 !/ @src/ ( -- ) #01 ( >> ) @src/ ( value -- ) DUP LIT &last 00 NEQ ?{ POP JMP2r } ( >> ) @src/ ( value -- ) DUP ,&last STR [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 ;&buf #01 font/ ?{ !/ } [ LIT2 "* 02 ] font/ ( >> ) @src/ ( -- ) ;voices/x LDA2 .Screen/x DEI2 SUB2 #03 SFT2 SUB &>lf #20 font/ INC DUP ?&>lf POP JMP2r @src/ ( to* from* -- ) ( validate ) SUB2k #0003 LTH2 ?{ / &>l DUP2 grid/get / INC2 GTH2k ?&>l #00 / } POP2 POP2 JMP2r @src/default-path "lobby.orca $1 ( @|Vectors ) @on-button ( -> ) .Controller/button DEI2 ( | handlers ) DUP2 manifest/scan INC2k ORA ?{ ( | not in manifest ) POP2 OVR #f0 AND ?on-button-arrow select/ POP BRK } JSR2 POP2 BRK @on-button-arrow ( button key -> ) POP STHk #f1 AND button-mod STHr select/ POP BRK @button-mod ( button -- button x y ) DUP #11 NEQ ?{ #00fc JMP2r } DUP #21 NEQ ?{ #0004 JMP2r } DUP #41 NEQ ?{ #f800 JMP2r } DUP #81 NEQ ?{ #0800 JMP2r } DUP #10 NEQ ?{ #00ff JMP2r } DUP #20 NEQ ?{ #0001 JMP2r } DUP #40 NEQ ?{ #ff00 JMP2r } DUP #80 NEQ ?{ #0100 JMP2r } #0000 JMP2r @on-mouse ( -> ) #41 cursor/ [ LIT2 &last $1 -Mouse/state ] DEI DUP ,&last STR ( | handlers ) DUP2 #0001 EQU2 ?/down DUP2 #0101 EQU2 ?/drag POP2 BRK @on-mouse/down ( mouse* -> ) POP2 ( | check for menubar ) .Mouse/y DEI2 .grid/y2 LDZ2 #0008 ADD2 SUB2 #04 SFT2 ORA ?{ .Mouse/x DEI2 #0010 SUB2 #03 SFT2 #0006 DIV2 ( | handlers ) DUP ?{ insert/ } DUP #01 NEQ ?{ timer/ } POP2 BRK } get-pos select/ insert/ BRK @on-mouse/drag ( mouse* -> ) POP2 get-pos select/ BRK @get-pos ( -- x y ) ( x ) .Mouse/x DEI2 #0010 SUB2 #83 SFT2 ( y ) .Mouse/y DEI2 #0010 SUB2 #04 SFT2 ORA2 JMP2r ( @|core ) %types/get ( addr* -- cell ) { ;types/buf ADD2 LDA } @types/ ( -- ) ;grid/width LDZ ;grid/height LDZ MUL2 ,&len STR2 ;&mmu .System/expansion DEO2 JMP2r &mmu [ 00 &len $2 0000 =&buf -Types/nil ] @variables/ ( -- ) ;&mmu .System/expansion DEO2 JMP2r &mmu [ 00 0024 0000 =&buf ". ] %variables/get ( chr -- value ) { chrb36 .variables/buf ADD LDZ } %variables/ ( chr -- value ) { chrb36 .variables/buf ADD STZ } ( @|Grid ) @grid/on-console ( -> ) .Console/read DEI insert/ BRK @ ( -- ) types/ variables/ .grid/height LDZ #00 ( | reset head ) &>ver DUP .head/y STZ ( row ) LITr 00 STHk [ LIT2r =grid/width ] LDZr MUL2r ( ) .grid/width LDZ #00 &>hor DUP .head/x STZ DUP2r LITr -head/addr STZ2r STH2kr types/get #f0 AND ?{ STH2kr #00 STH2kr grid/get DUP ADD ;library/lut ADD2 LDA2 JSR2 } INC2r INC GTHk ?&>hor POP2r POP2 INC GTHk ?&>ver POP2 ( | end ) grid/ timer/ .timer/frame LDZ2 INC2 .timer/frame STZ2 [ LIT2 00 -timer/beat ] STZ !voices/ @grid/ ( -- ) ( | x ) .Screen/width DEI2 ( ) DUP2 #03 SFT2 NIP #04 SUB .&width STZ ( ) #01 SFT2 .&width LDZ #01 SFT #00 SWP #30 SFT2 ADD2 #0004 ADD2 .&x2 STZ2 ( | y ) .Screen/height DEI2 ( ) DUP2 #04 SFT2 NIP #03 SUB .&height STZ ( ) #01 SFT2 .&height LDZ #01 SFT #00 SWP #40 SFT2 ADD2 .&y2 STZ2 ( | length ) ;&height LDZ ;&width LDZ ( ) MUL2 .&length STZ2 JMP2r @grid/ ( -- ) ;&width LDZ ;&height LDZ MUL2 ,&len STR2 ;&mmu .System/expansion DEO2 JMP2r &mmu [ 00 &len $2 0000 =&buf ". ] @grid/ ( -- ) [ LIT2 01 _&req ] STR JMP2r @grid/ ( -- ) LIT &req $1 ?{ JMP2r } [ LIT2 00 _&req ] STR ( | clear ) #0010 .Screen/x DEO2 .Screen/height DEI2 #0020 SUB2 .Screen/y DEO2 [ LIT2 a0 -Screen/pixel ] DEO ( | draw ) #0010 .Screen/y DEO2 [ LIT2r 0000 ] ( | col ) .&height LDZ #00 &>ver #0010 .Screen/x DEO2 ( | col ) .&width LDZ #00 &>hor ROTk STH2kr / POP INC2r INC GTHk ?&>hor POP2 .Screen/y DEI2 #0010 ADD2 .Screen/y DEO2 INC GTHk ?&>ver POP2 POP2r ( guide ) .help LDZ ?help/ JMP2r @grid/ ( x y addr* -- ) OVR2 select/is-within ?/ DUP2 types/get STHk .Types/nil NEQ ?/ /get DUP LIT ". EQU ?/ #00 SWP #40 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2 ( draw ) #0f STHr AND INC .Screen/sprite DEO POP2 JMP2r @grid/ ( x y value . type -- ) POP POPr #0703 AND2 ORA ?{ ;font/dot .Screen/addr DEO2 [ LIT2 03 -Screen/sprite ] DEO JMP2r } .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 JMP2r @grid/ ( x y addr* . type -- ) /get #00 SWP #40 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2 ( draw ) #0f STHr AND INC .Screen/sprite DEO POP2 JMP2r @grid/ ( x y addr* -- ) /get #00 SWP #40 SFT2 ;font/glyphs ADD2 .Screen/addr DEO2 [ LIT2 -Styles/selected -Screen/sprite ] DEO POP2 JMP2r @help/ ( -- ) .help LDZk #00 EQU SWP STZ !grid/ @help/ ( -- ) .Screen/width DEI2 #0200 GTH2 ?{ JMP2r } #0020 #0000 &>l ( x ) DUP2 #84 SFT2 #0010 ADD2 #0020 ADD2 .Screen/x DEO2 ( y ) DUP2 #000f AND2 #40 SFT2 #0010 ADD2 #0020 ADD2 .Screen/y DEO2 .Screen/y DEI2 .grid/y2 LDZ2 #0030 SUB2 GTH2 ?{ DUP2k ADD2 ;&lut ADD2 LDA2 ( glyph ) LDAk #03 font/ ( space ) ;Screen/sprite DEO ( text ) INC2 #01 font/ } INC2 GTH2k ?&>l POP2 POP2 ( | toggle message ) ( x ) #0040 .Screen/x DEO2 ( y ) #0140 .Screen/y DEO2 ;dict/guide #02 !font/ @get-bang ( -- bang ) .head/addr LDZ2 ;grid/buf ADD2 ( l ) STH2k #0001 SUB2 LDA LIT "* EQU ?&bang ( t ) STH2kr above LDA LIT "* EQU ?&bang ( r ) STH2kr INC2 LDA LIT "* EQU ?&bang ( b ) STH2kr below LDA LIT "* EQU ?&bang POP2r #00 JMP2r &bang POP2r #01 JMP2r ( @|Voices ) ( len vel chn note ) @voices/find ( chn pitch -- ) ,&t STR2 [ LIT2 -&cap -&buf ] &>lf LDZk #00 EQU ?{ INCk INC LDZ2 [ LIT2 &t $2 ] NEQ2 ?{ NIP JMP2r } } #04 ADD GTHk ?&>lf POP2 #ff JMP2r @voices/next ( -- voice ) [ LIT2 -&cap -&buf ] &>ln LDZk #00 EQU ?{ #04 ADD GTHk ?&>ln } NIP JMP2r @voices/count ( -- count ) LITr 00 [ LIT2 -&cap -&buf ] &>lc LDZk #00 NEQ STH ADDr #04 ADD GTHk ?&>lc POP2 STHr JMP2r @voices/ ( voice -- ) ( chn ) INC INC LDZ2 SWP .Console/write DEO ( note ) .Console/write DEO ( vel ) [ LIT2 00 -Console/write ] DEO JMP2r @voices/ ( chn pitch len vel -- ) OVR2 /find DUP #ff EQU ?{ DUP / #00 OVR STZ } POP ( save ) /next STHk STZ2 INCkr INCr STHr STZ2 INCr STHr ( chn ) INCk LDZ2 SWP .Console/write DEO ( note ) .Console/write DEO ( vel ) LDZ .Console/write DEO !/ @voices/ ( -- ) #1000 ( record changes ) LITr 00 &>lu DUP #20 SFT .&buf ADD LDZk #00 EQU ?{ ( decrement ) LDZk #01 SUB OVR STZ LDZk ?{ DUP / } INCr } POP INC GTHk ?&>lu POP2 STHr ?{ JMP2r } ( >> ) @voices/ ( -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 #01 ;font/color STA /count STH #0800 &>wd INCk STHkr GTH [ LIT2 ".| ] ROT POP? font/ INC GTHk ?&>wd POP2 POPr JMP2r ( @|Font ) @font/ ( char color -- ) ,&color STR ( >> ) @font/ ( char -- ) #00 SWP #40 SFT2 ;&glyphs ADD2 .Screen/addr DEO2 [ LIT2 &color 01 -Screen/sprite ] DEO JMP2r @font/ ( str* color -- ) ,&color STR &>while LDAk DUP ?{ POP POP2 JMP2r } / INC2 !&>while @font/ ( short* -- ) DUP2 #0064 DIV2 / ( >> ) @font/ ( short* -- ) DUP2 #000a DIV2 / ( >> ) @font/ ( value* -- ) #000a DIV2k MUL2 SUB2 LIT "0 ADD / POP JMP2r ( @|File ) @file/ ( -- ) grid/ types/ variables/ src/ timer/ ( | default speed ) #0f timer/ ! @file/ ( -- ) ( b ) .select/x2 LDZ .select/y1 LDZ get-addr INC2 ( a ) .select/from LDZ2 get-addr src/ grid/ types/ #0000 ;src/buf / !select/ @file/ ( -- ) #0000 ;src/buf / src/ grid/ timer/ #00 !src/ @file/ ( x y path* -- ) .File/name DEO2 #0001 .File/length DEO2 STH2k POP ,&anchor-x STR &>stream ;&b .File/read DEO2 .File/success-lb DEI ?{ POP2r JMP2r } [ LIT2 0a &b $1 ] NEQk ?{ ( pop chars ) POP2 ( reset x ) NIPr LITr &anchor-x $1 SWPr ( incr y ) INCr !&>stream } STH2kr get-addr grid/ [ LIT2r 0100 ] ADD2r POP !&>stream @file/ ( -- ) ;src/buf .File/name DEO2 #0001 .File/length DEO2 .grid/height LDZ #00 &>ver .grid/width LDZ #00 &>hor OVR2 NIP OVR SWP get-addr ;grid/buf ADD2 .File/write DEO2 INC GTHk ?&>hor POP2 ( linebreak ) ;&lb .File/write DEO2 INC GTHk ?&>ver POP2 !src/ &lb 0a @file/ ( -- ) #800f DEO JMP2r ( @|Edit ) @edit/ ( -- ) / LIT ". !select/ @edit/ ( -- ) ;&buf DUP2 ,&ptr STR2 .select/y2 LDZ INC .select/y1 LDZ &>ver STHk .select/x2 LDZ INC .select/x1 LDZ &>hor DUP STHkr get-addr grid/get / INC GTHk ?&>hor POP2 POPr ( linebreak ) #0a / INC GTHk ?&>ver POP2 ( | write snarf ) ;dict/snarf .File/name DEO2 ,&ptr LDR2 OVR2 SUB2 .File/length DEO2 .File/write DEO2 JMP2r @edit/ ( c -- ) #00 [ LIT2 &ptr =&buf ] INC2k ,&ptr STR2 STA2 JMP2r @edit/ ( -- ) ;dict/snarf .File/name DEO2 .grid/length LDZ2 .File/length DEO2 ;&buf .File/read DEO2 .File/success DEI2 ;&buf ADD2 ,&ptr STR2 ( | write ) ,&ptr LDR2 ;&buf .select/from LDZ2 OVR ,&anchor STR STH2 &>lp GTH2k ?{ POP2 POP2 POP2r !grid/ } LDAk DUP #0a NEQ ?{ ( linebreak ) POP NIPr LITr &anchor 00 SWPr INCr INC2 !&>lp } ( insert ) STH2kr get-addr grid/ ( move ) LIT2r 0100 ADD2r INC2 !&>lp @edit/ ( -- ) LIT ". !select/ @edit/ ( -- ) [ LIT2 "#. ] ( get cell ) .select/from LDZ2 get-addr grid/get ( toggle ) LIT "# NEQ POP? ,&c STR ( | apply ) .select/y2 LDZ INC .select/y1 LDZ &>l STHk LIT &c $1 ( l ) DUP .select/x1 LDZ STHkr get-addr grid/ ( r ) .select/x2 LDZ STHr get-addr grid/ INC GTHk ?&>l POP2 JMP2r ( @|Timer ) @timer/on-play ( -> ) ( on beat ) .timer LDZ2 NEQ ?{ } ( inc beat ) .&beat LDZk INC SWP STZ ( >> ) @timer/on-pause ( -> ) grid/ BRK @timer/ ( -- ) .Screen/vector DEI2 ;&on-play EQU2 ?{ ;&on-play .Screen/vector DEO2 !/ } ;&on-pause .Screen/vector DEO2 / !/ @timer/ ( -- ) ;&on-pause .Screen/vector DEO2 !/ @timer/ ( -- ) #0000 .&frame STZ2 JMP2r @timer/ ( -- ) .&speed LDZ #04 GTH ?{ JMP2r } #ff !/ @timer/ ( -- ) .&speed LDZ #3c LTH ?{ JMP2r } #01 !/ @timer/ ( mod -- ) .&speed LDZ ADD ( >> ) @timer/ ( speed -- ) .&speed STZ [ LIT2 00 -&beat ] STZ !/ @timer/ ( -- ) ,&x LDR2 #0008 ADD2 .Screen/x DEO2 ,&y LDR2 .Screen/y DEO2 .Screen/vector DEI2 ;&on-play NEQ2 INC ;font/color STA #0e10 ;&speed LDZ DIV2 !font/ @timer/ ( -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 ( | icon ) ;beat-icn .Screen/addr DEO2 [ LIT2 01 -&frame-lb ] LDZ AND INC .Screen/sprite DEO JMP2r ( @|Select ) %add-pos ( xy xy -- xy ) { ROT ADD STH ADD STHr } @select/ ( x y mod -- ) #0e AND DUP ( | handlers ) #04 EQU ?/ #02 EQU ?/ / !insert/ @select/ ( x y -- ) /validate-from ?{ POP2 JMP2r } /validate-to ?{ POP2 JMP2r } STH2k .&from LDZ2 add-pos STH2r .&to LDZ2 add-pos !/ @select/ ( x y mod -- ) /validate-from ?{ POP2 JMP2r } /validate-to ?{ POP2 JMP2r } edit/ STH2k .&from LDZ2 add-pos STH2r .&to LDZ2 add-pos / !edit/ @select/ ( x y mod -- ) POP /validate-to ?{ POP2 JMP2r } .&to LDZ2 add-pos !/ @select/validate-from ( x y -- x y bool ) DUP .&y1 LDZ ADD #80 LTH ?{ #00 JMP2r } OVR .&x1 LDZ ADD #80 LTH JMP2r @select/validate-to ( x y -- x y bool ) DUP .&y2 LDZ ADD .grid/height LDZ LTH ?{ #00 JMP2r } OVR .&x2 LDZ ADD .grid/width LDZ LTH JMP2r @select/is-within ( x y -- bool ) DUP .&y1 LDZ LTH ?&outside DUP .&y2 LDZ GTH ?&outside OVR .&x1 LDZ LTH ?&outside OVR .&x2 LDZ GTH ?&outside POP2 #01 JMP2r &outside POP2 #00 JMP2r @select/ ( -- ) .&from LDZ2 !/ @select/ ( -- ) #0000 .grid/size LDZ2 !/ @select/ ( x y -- ) DUP .grid/height LDZ LTH ?{ POP2 JMP2r } OVR .grid/width LDZ LTH ?{ POP2 JMP2r } DUP2 !/ @select/ ( x y -- ) DUP .grid/height LDZ LTH ?{ POP2 JMP2r } INCk .&y1 LDZ GTH ?{ POP2 JMP2r } OVR .grid/width LDZ LTH ?{ POP2 JMP2r } OVR INC .&x1 LDZ GTH ?{ POP2 JMP2r } .&from LDZ2 SWP2 ( >> ) @select/ ( from* to* -- ) DUP2 .&to LDZ2 NEQ2 ?{ POP2 POP2 JMP2r } .&to STZ2 .&from STZ2 [ LIT2 00 -help ] STZ grid/ !/ @select/ ( char -- ) DUP ?{ POP JMP2r } DUP #20 SUB #5f LTH ?{ POP LIT ". } ,&c STR .&y2 LDZ INC .&y1 LDZ &>ver STHk .&x2 LDZ INC .&x1 LDZ &>hor LIT &c $1 OVR STHkr get-addr grid/ INC GTHk ?&>hor POP2 POPr INC GTHk ?&>ver POP2 grid/ !src/ @select/ ( -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 ( | icon ) [ LIT2 00 -Controller/vector ] DEI2 ;insert/on-button EQU2 STHk ( get addr ) #40 SFT2 ;&icns ADD2 .Screen/addr DEO2 ( draw ) INCr DUPr [ LITr -Screen/sprite ] DEOr ( set color ) [ LIT2r =font/color ] STAr ( | draw size ) .&from LDZ2 .&to LDZ2 EQU2k ?{ SWP2 SUB2 DUP2 } ( | value ) POP2 #00 ROT font/ #00 SWP !font/ @insert/ ( -- ) select/ / ;on-button ;&on-button .Controller/vector DEI2 ;&on-button EQU2 [ JMP SWP2 POP2 ] .Controller/vector DEO2 !select/ @insert/on-button ( -> ) .Controller/key DEI / BRK @insert/ ( -- ) .select/to LDZ2 INC ,&anchor STR2 JMP2r @insert/ ( -- ) [ LIT2 &anchor $2 ] INC2k ,&anchor STR2 !select/ @insert/ ( char -- ) DUP ?{ POP JMP2r } DUP #08 NEQ ?{ #ff00 select/ LIT ". select/ POP JMP2r } DUP #0a NEQ ?{ / POP JMP2r } DUP #0d NEQ ?{ / POP JMP2r } DUP #1b NEQ ?{ / POP JMP2r } DUP #20 NEQ ?{ #0100 select/ POP JMP2r } select/ #0100 !select/ @text/ ( addr* -- ) ;&buf ,&ptr STR2 &>w INC2 DUP2 ;grid/buf ADD2 LDA2 LIT2 ".. EQU2 ?{ DUP2 ports/e DUP / ?&>w } POP2 #00 ( >> ) @text/ ( c -- ) [ LIT2 &ptr =&buf ] INC2k ,&ptr STR2 STA JMP2r @text/ ( -- ) ;&buf &>ws LDAk DUP ?{ POP POP2 JMP2r } .Console/write DEO INC2 !&>ws ( @|Cursor ) @cursor/ ( color -- ) ;fill-icn .Screen/addr DEO2 #40 / ;&sprite-icn .Screen/addr DEO2 .Mouse/x DEI2 ,&x STR2 .Mouse/y DEI2 ,&y STR2 ( >> ) @cursor/ ( color -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 .Screen/sprite DEO JMP2r @cursor/sprite-icn [ 80c0 e0f0 f8fc feff f8d8 8c0c 0606 0000 ] ( @|Random ) @random/ ( -- ) ( seed ) [ LIT2 00 -DateTime/second ] DEI [ LIT2 00 -DateTime/minute ] DEI #60 SFT2 EOR2 [ LIT2 00 -DateTime/hour ] DEI #c0 SFT2 EOR2 ,&x STR2 [ LIT2 00 -DateTime/hour ] DEI #04 SFT2 [ LIT2 00 -DateTime/day ] DEI DUP2 ADD2 EOR2 [ LIT2 00 -DateTime/month ] DEI #60 SFT2 EOR2 .DateTime/year DEI2 #a0 SFT2 EOR2 ,&y STR2 JMP2r @random/generate ( -- number* ) [ LIT2 &x $2 ] DUP2 #50 SFT2 EOR2 DUP2 #03 SFT2 EOR2 [ LIT2 &y $2 ] DUP2 ,&x STR2 DUP2 #01 SFT2 EOR2 EOR2 ,&y STR2k POP JMP2r @random/from-range ( a b -- num ) EQUk ?{ OVR SUB /generate ADD SWP INC MOD ADD JMP2r } POP JMP2r ( @|Theme ) @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 ?{ JMP2r } LIT2 &r $2 .System/r DEO2 LIT2 &g $2 .System/g DEO2 LIT2 &b $2 .System/b DEO2 JMP2r &path ".theme $1 ( @|Stdlib ) @chr/capitalize ( num case -- ) ?{ b36chr JMP2r } DUP #09 GTH ?{ b36chr JMP2r } b36chr #20 SUB JMP2r @chr/vel ( char -- vel ) DUP LIT "0 EQU ?{ chrb36 #03 MUL DUP ?{ POP #7f } JMP2r } POP #00 JMP2r @lerp ( rate target val -- val ) DUP2 GTHk [ JMP SWP SUB ] STH ( if rate GTH target ) ROT DUP STHr LTH ?{ POP2 JMP2r } ( target val rate ) STH GTHk ?&no-below NIP STHr SUB JMP2r &no-below NIP STHr ADD JMP2r @move ( from* to* -- ) DUP2 grid/get LIT ". EQU ?{ POP2 ports/ JMP2r } STH2 DUP2 grid/get STH2r ports/ LIT ". ROT ROT ports/ JMP2r @dict &orca "Orca $1 &view "View $1 &edit "Edit $1 &play "Play $1 &select "Select $1 &guide "Ctrl+h 20 "to 20 "toggle 20 "guide. $1 &snarf ".snarf $1 ( Operators ) @op-a "A "Outputs 20 "sum 20 "of 20 "inputs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a ) ports/w1-val ( b ) STH2kr ports/e1-case STH ( res ) ADD STHr chr/capitalize STH2r ports/ JMP2r @op-b "B "Outputs 20 "difference 20 "of 20 "inputs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a ) ports/w1-val ( b ) STH2kr ports/e1-case STH ( sort ) GTHk [ JMP SWP ] ( res ) SUB STHr chr/capitalize STH2r ports/ JMP2r @op-c "C "Outputs 20 "modulo 20 "of 20 "frame $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2 .timer/frame LDZ2 ( rate* ) #00 STH2kr ports/w1-val EQUk ADD DIV2 ( mod* ) #00 STH2kr ports/e1-case STH ( res ) EQUk ADD MOD2 NIP STHr chr/capitalize STH2r ports/ JMP2r @op-d "D "Bangs 20 "on 20 "modulo 20 "of 20 "frame $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2 .timer/frame LDZ2 ( rate* ) #00 STH2kr ports/w1-val EQUk ADD ( mod* ) #00 STH2kr ports/e1-val EQUk ADD ( res ) MUL2 MOD2 #0000 EQU2 ports/ JMP2r @op-e "E "Moves 20 "eastward 20 "or 20 "bangs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) .head/x LDZ INC .grid/width LDZ EQU ?{ INC2k !move } ports/ JMP2r @op-f "F "Bangs 20 "if 20 "inputs 20 "are 20 "equal $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a ) ports/w1 ( b ) STH2kr ports/e1 ( res ) EQU ports/ JMP2r @op-g "G "Writes 20 "operands 20 "with 20 "offset $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( x ) STH2kr #0003 SUB2 ports/w-val ( load ) #00 SWP ADD2 ( y ) STH2kr #0002 SUB2 ports/w-val ( load ) INC get-row ADD2 ,&save STR2 ( len ) STH2kr ports/w1-val MIN1 #00 &>l ( load ) #00 OVR STH2kr INC2 ADD2 ports/e ( save ) OVR #00 SWP [ LIT2 &save $2 ] ADD2 ports/ INC GTHk ?&>l POP2 POP2r JMP2r @op-h "H "Holds 20 "southward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( res ) ports/s STH2r ports/ JMP2r @op-i "I "Increments 20 "southward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( step ) ports/w1-val ( value ) STH2kr ports/s chrb36 ADD ( mod ) STH2kr ports/e1-case STH ( res ) MIN1 MOD STHr chr/capitalize STH2r ports/ JMP2r @op-j "J "Outputs 20 "northward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( get above ) above ports/w ( ignore cable ) DUP [ LIT "J ] NEQ ?{ POP POP2r JMP2r } ( skip down ) STH2r &>w below DUP2 grid/get chrb36 #13 EQU ?&>w ports/ JMP2r @op-k "K "Reads 20 "multiple 20 "variables $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ports/w1-val #00 &>l #00 OVR STH2kr INC2 ADD2 STH2k ports/e DUP LIT ". EQU ?{ ( load ) DUP variables/get ( save ) STH2kr ports/ } POP POP2r INC GTHk ?&>l POP2 POP2r JMP2r @op-l "L "Outputs 20 "smallest 20 "of 20 "inputs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a ) ports/w1-val ( b ) STH2kr ports/e1-case STH ( res ) LTHk POP? STHr chr/capitalize STH2r ports/ JMP2r @op-m "M "Outputs 20 "product 20 "of 20 "inputs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a ) ports/w1-val ( b ) STH2kr ports/e1-case STH ( res ) MUL STHr chr/capitalize STH2r ports/ JMP2r @op-n "N "Moves 20 "Northward 20 "or 20 "bangs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) ;head/y LDZ EQU ?{ DUP2 above !move } ports/ JMP2r @op-o "O "Reads 20 "operand 20 "with 20 "offset $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( x ) STH2kr #0002 SUB2 ports/w-val INC #00 SWP ADD2 ( y ) STH2kr ports/w1-val get-row ADD2 ( val ) ports/e STH2r ports/ JMP2r @op-p "P "Writes 20 "eastward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( key ) #0002 SUB2 ports/w-val ( len ) STH2kr ports/w1-val MIN1 #00 &>l #00 OVR STH2kr below ADD2 types/ INC GTHk ?&>l POP ( read ) STH2kr ports/e1 ROT ROT MOD #00 SWP STH2r below ADD2 ports/ JMP2r @op-q "Q "Reads 20 "operands 20 "with 20 "offset $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( x ) STH2kr #0003 SUB2 ports/w-val ( load ) #00 SWP INC2 ADD2 ( y ) STH2kr #0002 SUB2 ports/w-val ( load ) get-row ADD2 ,&load STR2 ( len ) STH2kr ports/w1-val MIN1 ( save ) #00 OVR STH2kr below SWP2 SUB2 INC2 ,&save STR2 #00 &>l ( load ) #00 OVR [ LIT2 &load $2 ] ADD2 ports/e ( save ) OVR #00 SWP [ LIT2 &save $2 ] ADD2 ports/ INC GTHk ?&>l POP2 POP2r JMP2r @op-r "R "Outputs 20 "random 20 "value $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( a-min ) ports/w1-val ( b-max ) STH2kr ports/e1-case STH ( sort ) LTHk [ JMP SWP ] ( res ) random/from-range STHr chr/capitalize STH2r ports/ JMP2r @op-s "S "Moves 20 "southward 20 "or 20 "bangs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) .head/y LDZ INC .grid/height LDZ EQU ?{ DUP2 below !move } ports/ JMP2r @op-t "T "Reads 20 "eastward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( key ) #0002 SUB2 ports/w-val ( len ) STH2kr ports/w1-val MIN1 #00 &>l #00 OVR STH2kr INC2 ADD2 types/ INC GTHk ?&>l POP ( read ) MOD #00 SWP STH2kr INC2 ADD2 ports/e STH2r ports/ JMP2r @op-u "U "Bangs 20 "on 20 "Euclidean 20 "rhythm $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( step ) ports/w1-val ( max ) STH2kr ports/e1-val MIN1 STH2 ( frame ADD max SUB 1 ) .timer/frame LDZ2 #00 STHkr ADD2 #0001 SUB2 ( MUL step ) OVRr #00 STHr MUL2 ( % max ) #00 STHkr MOD2 ( ADD step ) SWPr #00 STHr ADD2 ( bucket GTH= max ) #00 STHr LTH2 #01 NEQ ports/ JMP2r @op-v "V "Reads 20 "and 20 "writes 20 "variable $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( key ) ports/w1 ( val ) STH2kr ports/e1 DUP LIT ". EQU ?&idle OVR LIT ". EQU ?&load ( save ) SWP variables/ POP2r JMP2r &load NIP variables/get STH2r ports/ JMP2r &idle POP2 POP2r JMP2r @op-w "W "Moves 20 "westward 20 "or 20 "bangs $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) ;head/x LDZ EQU ?{ DUP2 #0001 SUB2 !move } ports/ JMP2r @op-x "X "Writes 20 "operand 20 "with 20 "offset $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( x ) STH2kr #0002 SUB2 ports/w-val #00 SWP ADD2 ( y ) STH2kr ports/w1-val INC get-row ADD2 ( val ) STH2r ports/e1 ROT ROT ports/ JMP2r @op-y "Y "Outputs 20 "westward 20 "operand $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( get above ) ports/w1 ( ignore cable ) DUP [ LIT "Y ] NEQ ?{ POP POP2r JMP2r } ( skip down ) STH2r &>w INC2 DUP2 grid/get chrb36 #22 EQU ?&>w ports/ JMP2r @op-z "Z "Transitions 20 "operand 20 "to 20 "input $1 &lc ( addr* -- ) get-bang [ ?&* POP2 ] JMP2r &* ( addr* -- ) types/set-op STH2k ( rate ) ports/w1-val ( val ) STH2kr ports/s chrb36 ( target ) STH2kr ports/e1-case STH ( res ) SWP lerp STHr chr/capitalize STH2r ports/ JMP2r ( @|special ) @op-bang "* "Bangs 20 "neighboring 20 "operands $1 &* ( addr* -- ) LIT ". ROT ROT grid/ JMP2r @op-comment "# "Comments 20 "line $1 &* ( addr* -- ) STH2k ( set itself ) types/lock-lut ( get edge ) [ LIT2 00 -grid/width ] LDZ .head/x LDZ SUB ADD2 INC2r STH2r &>l types/lock-lut ( stop at hash ) DUP2 grid/get LIT "# EQU ?&end INC2 GTH2k ?&>l &end POP2 POP2 JMP2r @op-midi ": "Sends 20 "midi 20 "bytes $1 &* ( addr* -- ) INC2k STH2k ( channel ) ports/e-val #90 ORA ;&chn STA ( octave ) INC2r STH2kr ports/e-val INC #0c MUL ( note ) INC2r STH2kr ports/e DUP ,¬e STR chrmid ADD ,&pitch STR ( velocity ) INC2r STH2kr ports/e chr/vel ,&vel STR ( length ) INC2r STH2r ports/e-val MIN1 INC ,&len STR [ LIT2 ". ¬e $1 ] NEQ ?{ POP2 JMP2r } get-bang ?{ types/ JMP2r } ( bang ) types/ [ LIT2 &chn $1 &pitch $1 ] [ LIT2 &len $1 &vel $1 ] !voices/ @op-pitch "; "Sends 20 "pitch 20 "byte $1 &* ( addr* -- ) STH2k ( octave ) ports/e1-val ( note ) STH2kr INC2 ports/e1 ( has note ) DUP LIT ". NEQ ?{ POP2 POP2r JMP2r } get-bang ?{ POP2 STH2r types/ JMP2r } ( bang ) STH2r types/ chrmid SWP INC #0c MUL ADD .Console/write DEO JMP2r @op-byte "/ "Sends 20 "hexadecimal 20 "byte $1 &* ( addr* -- ) STH2k ( hn ) ports/e1 ( ln ) STH2kr INC2 ports/e1 ( hv ) OVR LIT ". NEQ ?{ POP2 POP2r JMP2r } ( lv ) DUP LIT ". NEQ ?{ POP2 POP2r JMP2r } get-bang ?{ POP2 STH2r types/ JMP2r } ( bang ) STH2r types/ chrb36 #0f AND SWP chrb36 #0f AND #40 SFT ADD .Console/write DEO JMP2r @op-string "" "Sends 20 "string 20 "bytes $1 &* ( addr* -- ) STH2k ports/e1 LIT ". NEQ ?{ POP2r JMP2r } STH2kr text/ get-bang ?{ STH2r types/ JMP2r } ( bang ) STH2r types/ !text/ @op-self "$ "Loads 20 "orca 20 "file $1 &* ( addr* -- ) STH2k ports/e1 LIT ". NEQ ?{ POP2r JMP2r } STH2kr text/ get-bang ?{ STH2r types/ JMP2r } ( bang ) STH2r types/ .head/pos LDZ2 INC ;text/buf !file/ @op-null POP2 JMP2r ( @|tables ) @help/lut [ =op-a =op-b =op-c =op-d =op-e =op-f =op-g =op-h =op-i =op-j =op-k =op-l =op-m =op-n =op-o =op-p =op-q =op-r =op-s =op-t =op-u =op-v =op-w =op-x =op-y =op-z =op-comment =op-self =op-midi =op-pitch =op-byte =op-string ] @midi/lut [ ( lc ) 00 00 00 00 00 00 00 00 00 00 0a 0c 01 03 05 06 08 0a 0c 0d 0f 11 12 14 16 18 19 1b 1d 1e 20 22 24 25 27 29 ( uc ) 00 00 00 00 00 00 00 00 00 00 09 0b 00 02 04 05 07 09 0b 0c 0e 10 11 13 15 17 18 1a 1c 1d 1f 21 23 24 26 28 ] @chr/b36 ( char to b36 ) [ ( padding ) $20 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/chr ( b36 to char-lc ) [ 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 ] @library/lut ( 00 _ ) =op-null ( 01 _ ) =op-null ( 02 _ ) =op-null ( 03 _ ) =op-null ( 04 _ ) =op-null ( 05 _ ) =op-null ( 06 _ ) =op-null ( 07 _ ) =op-null ( 08 _ ) =op-null ( 09 _ ) =op-null ( 0a _ ) =op-null ( 0b _ ) =op-null ( 0c _ ) =op-null ( 0d _ ) =op-null ( 0e _ ) =op-null ( 0f _ ) =op-null ( 10 _ ) =op-null ( 11 _ ) =op-null ( 12 _ ) =op-null ( 13 _ ) =op-null ( 14 _ ) =op-null ( 15 _ ) =op-null ( 16 _ ) =op-null ( 17 _ ) =op-null ( 18 _ ) =op-null ( 19 _ ) =op-null ( 1a _ ) =op-null ( 1b _ ) =op-null ( 1c _ ) =op-null ( 1d _ ) =op-null ( 1e _ ) =op-null ( 1f _ ) =op-null ( 20 _ ) =op-null ( 21 ! ) =op-null ( 22 " ) =op-string/* ( 23 # ) =op-comment/* ( 24 $ ) =op-self/* ( 25 % ) =op-null ( 26 & ) =op-null ( 27 ' ) =op-null ( 28 _ ) =op-null ( 29 _ ) =op-null ( 2A * ) =op-bang/* ( 2B + ) =op-null ( 2C , ) =op-null ( 2D - ) =op-null ( 2E . ) =op-null ( 2F / ) =op-byte/* ( 30 0 ) =op-null ( 31 1 ) =op-null ( 32 2 ) =op-null ( 33 3 ) =op-null ( 34 4 ) =op-null ( 35 5 ) =op-null ( 36 6 ) =op-null ( 37 7 ) =op-null ( 38 8 ) =op-null ( 39 9 ) =op-null ( 3A : ) =op-midi/* ( 3B ; ) =op-pitch/* ( 3C < ) =op-null ( 3D = ) =op-null ( 3E > ) =op-null ( 3F ? ) =op-null ( 40 @ ) =op-null ( 41 A ) =op-a/* ( 42 B ) =op-b/* ( 43 C ) =op-c/* ( 44 D ) =op-d/* ( 45 E ) =op-e/* ( 46 F ) =op-f/* ( 47 G ) =op-g/* ( 48 H ) =op-h/* ( 49 I ) =op-i/* ( 4A J ) =op-j/* ( 4B K ) =op-k/* ( 4C L ) =op-l/* ( 4D M ) =op-m/* ( 4E N ) =op-n/* ( 4F O ) =op-o/* ( 50 P ) =op-p/* ( 51 Q ) =op-q/* ( 52 R ) =op-r/* ( 53 S ) =op-s/* ( 54 T ) =op-t/* ( 55 U ) =op-u/* ( 56 V ) =op-v/* ( 57 W ) =op-w/* ( 58 X ) =op-x/* ( 59 Y ) =op-y/* ( 5A Z ) =op-z/* ( 5B ) =op-null ( 5C \ ) =op-null ( 5D ) =op-null ( 5E ^ ) =op-null ( 5F _ ) =op-null ( 60 ` ) =op-null ( 61 a ) =op-a/lc ( 62 b ) =op-b/lc ( 63 c ) =op-c/lc ( 64 d ) =op-d/lc ( 65 e ) =op-e/lc ( 66 f ) =op-f/lc ( 67 g ) =op-g/lc ( 68 h ) =op-h/lc ( 69 i ) =op-i/lc ( 6A j ) =op-j/lc ( 6B k ) =op-k/lc ( 6C l ) =op-l/lc ( 6D m ) =op-m/lc ( 6E n ) =op-n/lc ( 6F o ) =op-o/lc ( 70 p ) =op-p/lc ( 71 q ) =op-q/lc ( 72 r ) =op-r/lc ( 73 s ) =op-s/lc ( 74 t ) =op-t/lc ( 75 u ) =op-u/lc ( 76 v ) =op-v/lc ( 77 w ) =op-w/lc ( 78 x ) =op-x/lc ( 79 y ) =op-y/lc ( 7A z ) =op-z/lc ( 7B { ) =op-null ( 7C | ) =op-null ( 7D } ) =op-null ( 7E ~ ) =op-null ( 7F _ ) =op-null ( @|spritesheet ) @select/icns [ 0000 6c10 1000 0000 0010 106c 0000 0000 0000 6c10 1010 1010 1010 106c 0000 0000 ] @beat-icn [ 0000 0000 0038 7c7c 7c38 0000 0000 0000 ] @font/glyphs ( orca.816 ) $200 &space 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 1020 2020 2000 4040 0000 0000 0000 0050 5000 0000 0000 0000 0000 0000 0000 0024 24fc 4848 fc90 9000 0000 0000 0000 083c 4a50 5030 2828 48f0 4000 0000 0000 1129 2a14 0810 2854 9488 0000 0000 0000 1824 2428 3052 9488 8876 0000 0000 0000 0040 4000 0000 0000 0000 0000 0000 0004 0808 1010 2020 2020 2010 1000 0000 0020 2010 1010 1010 2020 4040 8000 0000 0000 0024 187e 1824 0000 0000 0000 0000 0000 0000 0010 107c 1010 0000 0000 0000 0000 0000 0000 0000 0000 0020 2040 0000 0000 0000 0000 007c 0000 0000 0000 0000 &dot 0000 0000 0000 0000 0000 0010 0000 0000 0001 0102 0404 0810 2020 4080 8000 0000 0000 1824 4444 8484 8888 9060 0000 0000 0000 0818 2810 1010 1020 2070 0000 0000 0000 1c22 0204 0810 2040 80f8 0000 0000 0000 1c22 0204 1804 0404 8870 0000 0000 0000 0408 0810 2848 fc10 1010 0000 0000 0000 3e20 2078 4404 0404 8870 0000 0000 0000 0c10 2040 58e4 8484 8870 0000 0000 0000 3e02 0408 1010 2020 4040 0000 0000 0000 1c22 4244 3844 8484 8870 0000 0000 0000 1c22 4242 463c 0408 1060 0000 0000 0000 0000 0000 4000 0000 0040 0000 0000 0000 0000 0000 2000 0000 0020 2040 0000 0000 0000 0008 1020 4020 1008 0000 0000 0000 0000 0000 007c 0000 7c00 0000 0000 0000 0000 0040 2010 0810 2040 0000 0000 0000 003c 4242 0408 1010 0010 0000 0000 0000 0000 1e21 4e52 524f 201c 0000 0000 0000 0c0c 1414 2424 7c44 8484 0000 0000 0000 1e11 1122 3c22 2242 4478 0000 0000 0000 0e11 2020 4040 4040 4438 0000 0000 0000 3c22 2242 4242 4484 88f0 0000 0000 0000 1f10 1020 3c20 2040 407c 0000 0000 0000 1f10 1020 3c20 2040 4040 0000 0000 0000 0e11 2020 404e 4244 443c 0000 0000 0000 2121 2142 7e42 4284 8484 0000 0000 0000 1f04 0408 0808 0810 107c 0000 0000 0000 0702 0204 0404 0488 8870 0000 0000 0000 2122 2448 7050 4888 8484 0000 0000 0000 1010 1020 2020 2040 407c 0000 0000 0000 2121 3356 5a5a 4284 8484 0000 0000 0000 2121 3152 524a 4a8c 8484 0000 0000 0000 0e11 2121 4141 4242 4438 0000 0000 0000 1e11 1121 223c 2040 4040 0000 0000 0000 0e11 2121 4141 4252 5438 0600 0000 0000 1e11 1122 3c30 2848 4444 0000 0000 0000 1e21 2020 1008 0404 8478 0000 0000 0000 7f08 0810 1010 1020 2020 0000 0000 0000 2121 4142 4242 8284 8478 0000 0000 0000 2121 2222 2424 2828 3030 0000 0000 0000 2121 2122 2a5a 6a6c 4444 0000 0000 0000 2121 1214 1818 2848 8484 0000 0000 0000 2121 1212 1408 0810 1010 0000 0000 0000 3f01 0204 0810 2040 80fc 0000 0000 001e 1010 1020 2020 2040 4040 7800 0000 0040 4040 2020 2010 1010 0808 0800 0000 0078 0808 0810 1010 1020 2020 e000 0000 0000 0020 5000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00f8 0000 0000 0000 0040 2000 0000 0000 0000 0000 0000 0000 0000 001e 2222 4444 4c32 0000 0000 0000 3010 102c 3222 2244 4438 0000 0000 0000 0000 001c 2220 4040 4438 0000 0000 0000 0101 011e 2222 4244 4c32 0000 0000 0000 0000 001c 2224 7840 4438 0000 0000 0000 0304 0808 3e08 1010 1010 2020 4000 0000 0000 001e 2222 4444 4c34 0848 7000 0000 3010 102e 3222 2244 4446 0000 0000 0000 0404 000c 1808 0810 121c 0000 0000 0000 0404 000c 1808 0808 1010 1020 c000 0000 1010 102e 3222 3c48 4442 0000 0000 0000 0c04 0408 0808 0810 1418 0000 0000 0000 0000 00b7 4949 4992 9293 0000 0000 0000 0000 006e 3222 2244 4446 0000 0000 0000 0000 001c 2222 4244 4438 0000 0000 0000 0000 002c 7222 2244 4478 4080 8000 0000 0000 001a 2622 4244 4c34 0808 0800 0000 0000 0016 3a10 1020 2020 0000 0000 0000 0000 001c 2220 1804 4438 0000 0000 0000 0008 083e 0810 1010 2418 0000 0000 0000 0000 0062 2222 4244 4c32 0000 0000 0000 0000 0062 2222 2224 2830 0000 0000 0000 0000 0061 2141 495a 6644 0000 0000 0000 0000 0031 120c 0818 2446 0000 0000 0000 0000 0062 2222 4444 4c34 0848 7000 0000 0000 001d 2204 0810 2052 0c00 0000 0006 0808 0810 6010 1020 2020 1800 0000 0000 1010 1020 2020 2040 4040 0000 0000 0030 0808 0810 100c 1020 2020 c000 0000 0000 0032 4c00 0000 0000 0000 0000 0000 @fill-icn [ ffff ffff ffff ffff ffff ffff ffff ffff ] @appicon [ 0000 0000 0000 0000 0000 0000 0001 0100 0007 0f0f 0fcf ce6d 070f 1f1f dfff ffff 0080 8080 8000 00c0 80c0 c0c0 c080 c0e0 0000 0000 0107 0f0f 0000 0001 0608 1011 7f38 2000 feff ffff ff7f 78fe 0100 f0f8 c000 0000 0080 c0c0 e0c0 0000 8040 2020 0f0f 0f07 0300 0000 1111 1108 0403 0000 ffff ffff fffc 1000 9898 f8f0 0003 ec10 c0c0 c080 0000 0000 2020 2040 8000 0000 ] @types/buf $4000 @grid/buf $4000 @text/buf $80 @edit/buf