( Left ) |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 &pad $3 &scrollx $2 &scrolly $2 |a0 @File &vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |0178 @nav/width |0170 @nav/width-8 |0160 @nav/width-inner |000 @filepath/buf $2f &bufend $1 @search/buf $2f &bufend $1 @flen/buf $5 @nav/buf $60 &bufend $1 &scroll $1 &visible $1 &cat $1 @autocomplete/addr $2 @wrap/left $2 &right $2 @selection/a $2 &b $2 @scroll/y $2 &addr $2 @scrollbar/height $2 &ratio $2 @highlight/comment $1 @textarea/length $2 |100 @on-reset ( -> ) ( | meta ) ;meta #06 DEO2 ( | size 550x2de ) theme/ window/ .filepath/buf LDZ ?&soft ( | cache position ) .Screen/height DEI2 #0028 SUB2 ( ) DUP2 #0018 DIV2 ;textarea/max-lines STA2 ( ) .scrollbar/height STZ2 #07 get-cat-x #0004 ADD2 ;filepath/anchor STA2 #0001 .scrollbar/ratio STZ2 [ LIT2 01 -nav/cat ] STZ ( | defaults ) ;textarea/buf selection/ autocomplete/ Mouse/ .Console/type DEI ?{ ;on-console .Console/vector DEO2 file-new filepath/untrap BRK } ( | listen ) ;filepath/on-console .Console/vector DEO2 BRK &soft ( -> ) [ LIT2 01 -nav/cat ] STZ file-open filepath/untrap BRK @meta $1 ( name ) "Left 0a ( details ) "A 20 "Text 20 "Editor 0a ( author ) "By 20 "Hundred 20 "Rabbits 0a ( date ) "12 20 "Feb 20 "2025 $1 02 ( > ) 83 =appicon ( > ) 0a =manifest @manifest 07 "Left $1 ( > ) 01 "n =file-new "New $1 ( > ) 01 "r =filepath/trap "Rename $1 ( > ) 01 "o =file-reopen "Open $1 ( > ) 01 "s =file-save "Save $1 ( > ) 01 "p =file-send "Send $1 ( > ) 01 "b =file-build "Build $1 ( > ) 01 "q =exit "Exit $1 ( >>>>> ) 06 "Edit $1 ( > ) 01 "c =selection/snarf "Copy $1 ( > ) 01 "v =snarf/paste "Paste $1 ( > ) 05 "V =snarf/paste-binary "Paste 20 "Binary $1 ( > ) 01 "x =selection/cut "Cut $1 ( > ) 00 08 =erase "Erase $1 ( > ) 00 7f =delete "Delete $1 ( >>>>> ) 02 "Go $1 ( . ) 01 "/ =filepath/pop-folder "Directory $1 ( . ) 01 0d =filepath/push-selection "Selection $1 ( >>>>> ) 06 "Format $1 ( . ) 01 "t =format-strip "Strip $1 ( . ) 01 "i =selection/trim "Trim $1 ( . ) 01 "y =selection/clip "Clip $1 ( . ) 01 "j =selection/join "Join $1 ( . ) 00 09 =tab "Tab $1 ( . ) 04 09 =untab "Untab $1 ( >>>>> ) 04 "Select $1 ( . ) 01 "a =selection/set-all "All $1 ( . ) 01 09 =select-current-word "Word $1 ( . ) 01 "g =select-current-symbol "Symbol $1 ( . ) 00 1b =reset-each "Reset $1 ( >>>>> ) 01 "Find $1 ( . ) 01 "f =search/capture "Selection $1 ( >>>>> ) 05 "View $1 ( . ) 01 "h =highlight/toggle "Highlight $1 ( . ) 01 20 =search/capture-word "Symbol $1 ( . ) 01 "l =nav/toggle-categories "Categories $1 ( . ) 01 "d =nav/toggle-sidebar "Navbar $1 ( . ) 01 "m =window/toggle-expand "Expand $1 $1 ( @|macros ) % ( -- ) { .Screen/y DEI2k #0018 ADD2 ROT DEO2 } %get-to-from ( -- to* from* ) { .selection/a LDZ2 .selection/b LDZ2 [ GTH2k JMP SWP2 ] } %get-to ( -- addr* ) { get-to-from POP2 } %get-from ( -- addr* ) { .selection/b LDZ2 .selection/a LDZ2 [ LTH2k JMP SWP2 POP2 ] } %get-scroll-addr ( -- addr* ) { ;textarea/buf .scroll/addr LDZ2 ADD2 } %has-length ( -- bool ) { .selection/a LDZ2 .selection/b LDZ2 NEQ2 } %has-empty ( -- bool ) { .selection/a LDZ2 .selection/b LDZ2 EQU2 } %get-eof ( -- addr* ) { ;textarea/buf .textarea/length LDZ2 ADD2 } %sput ( chr str* -- ) { scap/ ROT #00 SWP2 STA2 } ( @|vectors ) @Mouse/ ( -- ) .&y DEI2 ( | y ) DUP2 #0020 GTH2 ?{ POP2 ;menu/on-mouse !/ } #0028 GTH2 ?{ ;null/on-mouse !/ } .&x DEI2 ( | x ) DUP2 #0010 GTH2 ?{ POP2 ;scrollbar/on-mouse !/ } #00 .nav/visible LDZ EQU ?{ DUP2 ;nav/width-8 GTH2 ?{ POP2 ;nav/on-mouse !/ } DUP2 ;nav/width GTH2 ?{ POP2 ;null/on-mouse !/ } } POP2 ;textarea/on-mouse !/ @Mouse/ ( vector * -- ) [ LIT2 &last $2 ] OVR2 NEQ2 ?{ POP2 JMP2r } DUP2 ,&last STR2 .&vector DEO2 JMP2r @on-console ( -> ) .Console/read DEI ( | handle bytes ) DUP #08 NEQ ?{ POP erase BRK } DUP #7f NEQ ?{ POP delete BRK } BRK @reqdraw-nav ( -- ) [ LIT2 00 _on-frame-draw/navbar ] STR ;on-frame-draw .Screen/vector DEO2 JMP2r @reqdraw-both ( -- ) [ LIT2 00 _on-frame-draw/navbar ] STR ( >> ) @reqdraw-textarea ( -- ) [ LIT2 00 _on-frame-draw/textarea ] STR ;on-frame-draw .Screen/vector DEO2 JMP2r @on-frame-draw ( -> ) #0000 .Screen/vector DEO2 [ LIT &textarea 00 ] ?{ textarea/ [ LIT2 01 _&textarea ] STR } [ LIT &navbar 00 ] ?{ nav/ nav/ [ LIT2 01 _&navbar ] STR } BRK @on-button ( -> ) .Controller/button DEI2 DUP2 find-modkey ORAk ?&run POP2 SWP DUP #f0 AND ?on-button-arrow #02 AND ?on-button-alt BRK &run ( cmd* -> ) JSR2 POP2 BRK @on-button-arrow ( key button -> ) NIP ( | ctrl+alt ) DUP #43 EQU ?&on-cal DUP #83 EQU ?&on-car ( | special alt ) DUP #12 EQU ?&on-au DUP #22 EQU ?&on-ad ( | shift ) DUP #04 AND ?&on-shift ( | block ) has-empty ?{ DUP #50 AND ?&on-ul-block DUP #a0 AND ?&on-dr-block } ( | standard ) .selection/a LDZ2 ROT arrow-to-addr selection/ BRK &on-cal ( button -> ) POP BRK &on-car ( button -> ) POP BRK &on-shift ( button -> ) .selection/b LDZ2 ROT arrow-to-addr selection/ BRK &on-au ( button -> ) POP select-prev-marker BRK &on-ad ( button -> ) POP select-next-marker BRK &on-ul-block ( button -> ) POP get-from selection/ BRK &on-dr-block ( button -> ) POP get-to selection/ BRK @on-button-alt ( key -> ) DUP ?{ POP BRK } DUP #09 EQU ?&inject-file DUP #1b EQU ?&inject-unicode DUP #08 NEQ ?{ POP search/pop reqdraw-both BRK } DUP #20 LTH ?{ search/push reqdraw-both BRK } POP #00 BRK &inject-file ( key -> ) POP search/inject BRK &inject-unicode ( key -> ) POP ;search/buf shex #c2c0 ADD2 SWP BRK @null/on-mouse ( -> ) #43 BRK ( @|editing ) @ ( char -- ) DUP #09 LTH ?{ ( convert lb ) DUP #0d EQU #03 MUL SUB ( ) has-length ?&block ( ) get-eof #fff0 NEQ2 ?&single } POP JMP2r &block ( c -- ) selection/erase ( >> ) &single ( c -- ) get-from STH2k STH2r INC2 selection/ !autocomplete/update @ ( c addr* -- ) DUP2 #0001 STA #0001 ! @erase ( -- ) has-length ?&block get-from DUP2 ;textarea/buf GTH2 ?&single POP2 JMP2r &single ( from* -- ) #0001 SUB2 LDAk #06 SFT #02 EQU ?&single-utf8 DUP2 !selection/ &single-utf8 ( from* -- ) utf8/prev get-to selection/ ( >> ) &block ( -- ) selection/erase !selection/ @delete ( -- ) has-length ?erase/block get-from INC2k get-eof NEQ2 ?&single POP2 JMP2r &single ( from* -- ) DUP2 !selection/ @tab ( -- ) .autocomplete/addr LDZ2 INC2 ORA ?autocomplete/ has-length ?selection/ #09 ! @untab ( -- ) has-length ?selection/ #09 ! @ ( addr* -- ) #0001 #ffff ( >> ) @ ( change* -- ) .textarea/length LDZ2 ADD2 .textarea/length STZ2 reqdraw-both #0a !menu/ @join-spaces ( addr* -- addr* ) [ LIT2r 0000 ] &>w ( -- ) LDA2k #2020 NEQ2 ?{ DUP2 INC2r !&>w } STH2r JMP2r @format-strip ( -- ) get-eof ;textarea/buf &>l ( -- ) LDA2k #0920 NEQ2 ?{ INC2k !&>l } LDA2k #2009 NEQ2 ?{ DUP2 !&>l } LDA2k #2020 NEQ2 ?{ INC2k !&>l } LDA2k #200a NEQ2 ?{ DUP2 !&>l } LDA2k #090a NEQ2 ?{ DUP2 !&>l } LDA2k #0a20 NEQ2 ?{ INC2k !&>l } INC2 GTH2k ?&>l POP2 POP2 selection/ !reqdraw-both @snarf/paste ( -- ) ;snarf-txt !file-inject @snarf/paste-binary ( -- ) ;snarf-txt !file-inject-binary ( @|selection ) @select-current-symbol ( -- ) get-from ( >> ) @ ( addr* -- ) DUP2 find-prev-special/ SWP2 find-next-special/ ( ) OVR2 get-from EQU2 STH DUP2 get-to EQU2 STHr AND ?&reselect !selection/ &reselect POP2 ! @select-current-word ( -- ) get-from ( >> ) @ ( addr* -- ) DUP2 find-prev-spacer SWP2 find-next-spacer/ !selection/ @select-prev-marker ( -- ) get-from nav/addr-to-id &>l ( -- ) #01 SUB DUP nav/id-to-addr INC2 LDA [ LIT "| ] EQU ?&>l ! @select-next-marker ( -- ) get-from nav/addr-to-id &>l ( -- ) INC DUP nav/id-to-addr INC2 LDA [ LIT "| ] EQU ?&>l ( >> ) @ ( id -- ) nav/id-to-addr DUP2 search/get-length ADD2 !selection/ @selection/set-all ( -- ) ;textarea/buf DUP2 .textarea/length LDZ2 ADD2 #0001 SUB2 !/ @selection/ ( addr* -- ) [ LIT2 04 -Controller/button ] DEI EQU ?selection/ !selection/ @selection/ ( -- ) get-from ( >> ) @selection/ ( addr* -- ) DUP2 ( >> ) @selection/ ( from* to* -- ) ( changed ) [ LITr 00 ] ( | to ) clamp-addr DUP2 .&b LDZ2 EQU2 ?{ INCr } .&b STZ2 ( | from ) clamp-addr DUP2 .&a LDZ2 EQU2 ?{ INCr } .&a STZ2 STHr ?/changed JMP2r @selection/ ( addr* -- ) clamp-addr DUP2 .&b LDZ2 NEQ2 ?{ POP2 JMP2r } .&b STZ2 ( >> ) @selection/changed ( -- ) autocomplete/ textarea/follow wrap/update !reqdraw-both @selection/cut ( -- ) has-length ?{ JMP2r } /snarf /erase / !reqdraw-both @selection/snarf ( -- ) has-length ?{ JMP2r } ;snarf-txt .File/name DEO2 get-to-from SUB2 .File/length DEO2 get-from .File/write DEO2 JMP2r @selection/erase ( -- ) get-from get-to-from SUB2 STH2k #0000 STH2r SUB2 ! @selection/trim ( -- ) [ LIT2r 0000 ] get-to-from &>ltr ( -- ) join-spaces STH2 ADD2r INC2 GTH2k ?&>ltr POP2 STH2r SUB2 !/ @selection/clip ( -- ) [ LITr 00 ] get-to-from &>lc ( -- ) LDAk #20 NEQ ?{ INC2k wlen NIP STHkr ADD #50 LTH ?{ STH2k #0a STH2r STA POPr LITr 00 } } INC2 INC2r GTH2k ?&>lc POP2 POP2 POPr !reqdraw-both @selection/join ( -- ) get-to-from &>lj ( -- ) LDAk #20 GTH ?{ STH2k #20 STH2r STA } INC2 GTH2k ?&>lj POP2 POP2 !reqdraw-both @selection/ ( -- ) ( a ) get-from find-line-start ( b ) get-to find-line-end OVR2 #0001 SUB2 &>lt ( -- ) LDAk #0a NEQ ?{ INC2 STH2k #09 STH2r SWP2 INC2 SWP2 } INC2 GTH2k ?&>lt POP2 #0001 SUB2 !selection/ @selection/ ( -- ) ( a ) get-from find-line-start ( b ) get-to find-line-end OVR2 #0001 SUB2 &>lu ( -- ) LDA2k #0a09 NEQ2 ?{ INC2k SWP2 #0001 SUB2 SWP2 } INC2 GTH2k ?&>lu POP2 #0001 SUB2 !selection/ @selection/ ( -- ) caret/is-invisible ?{ get-to get-from SUB2 DUP2 #001f GTH2 ?{ POP2 JMP2r } #05 #04 #05 ! } JMP2r ( @|search ) @search/erase ( -- ) #0000 [ LIT2 -&buf -&buf ] ,&ptr STR STZ2 JMP2r @search/ ( -- ) /erase !reqdraw-both @search/capture-word ( -- ) get-from ( >> ) @search/capture ( -- ) /erase has-length ?{ get-to ! } ( from ) get-to-from &>l ( -- ) LDAk /push INC2 GTH2k ?&>l POP2 POP2 !reqdraw-both @search/push ( c -- ) [ LIT2 00 &ptr -&buf ] ( clamp ) DUP .&bufend NEQ ?{ POP2 POP JMP2r } INCk ,&ptr STR STZ2 JMP2r @search/pop ( -- ) [ LIT2 00 _&ptr ] LDR ( clamp ) DUP .&buf NEQ ?{ POP2 JMP2r } #01 SUB DUP ,&ptr STR STZ JMP2r @search/get-length ( -- length* ) [ LIT2 00 _&ptr ] LDR .&buf SUB JMP2r @search/inject ( -- ) ;&buf !file-inject @search/ ( -- ) caret/is-invisible ?{ #05 ;&buf #04 draw-str-color POP2 #05 ! } JMP2r ( @|autocomplete ) @autocomplete/ ( -- ) #ffff .&addr STZ2 !reqdraw-textarea @autocomplete/ ( -- ) .&addr LDZ2 get-to OVR2 wlen DUP2 STH2k ( | add offset ) get-to LTH2k ?{ SWP2 STH2kr ADD2 SWP2 } POP2r STH2 &>w ( -- ) LDAk STH2kr STA INC2r INC2 LDAk #20 GTH ?&>w POP2 STH2r DUP2 !selection/ @autocomplete/ ( -- ) caret/is-invisible ?{ #08 ;/color STA #0a .&addr LDZ2 DUP2 find-next-spacer SWP2 &>lw ( -- ) LDAk INC2 GTH2k ?&>lw POP2 POP2 #0a ! } JMP2r @autocomplete/update ( -- ) / get-to DUP2 find-prev-spacer SUB2k DUP2 ,&len STR2 #0003 GTH2 ?{ POP2 POP2 JMP2r } STH2 LDAk #20 GTH ?{ STH2kr OVR2 SWP2 SUB2 #0003 LTH2 ?{ get-eof ;textarea/buf &>l ( -- ) LDAk #21 LTH ?{ DUP2 STH2kr EQU2 ?{ DUP2 STH2kr [ LIT2 &len $2 ] mcmp #00 EQU ?{ DUP2 ,&len LDR2 ADD2 LDA #21 LTH ?{ ,&len LDR2 ADD2 .&addr STZ2 !&end } } } } wcap walk-ws GTH2k ?&>l POP2 &end POP2 } } POP2 POP2r JMP2r ( @|find ) @find-line-next ( addr* -- addr* ) find-line-end INC2 JMP2r @find-line-prev ( addr* -- addr* ) #0001 SUB2 ( >> ) @find-line-start ( addr* -- addr* ) ;textarea/buf #0001 SUB2 SWP2 &>l ( -- ) utf8/prev LDAk #0a EQU ?{ LTH2k ?&>l } NIP2 INC2 JMP2r @find-line-end ( addr* -- addr* ) get-eof SWP2 &>w ( -- ) EQU2k ?{ utf8/next LDAk #0a NEQ ?&>w } NIP2 JMP2r @find-prev-spacer ( addr* -- addr* ) utf8/prev LDAk #20 GTH ?find-prev-spacer INC2 JMP2r @find-next-spacer ( addr* -- addr* ) utf8/next & LDAk #20 GTH ?find-next-spacer JMP2r @find-prev-special-top ( addr* -- addr* ) #0001 SUB2 ( >> ) @find-prev-special ( addr* -- addr* ) utf8/prev & LDAk clab ?find-prev-special INC2 JMP2r @find-next-special ( addr* -- addr* ) utf8/next & LDAk clab ?find-next-special JMP2r @find-first-marker ( addr* -- addr* ) #0002 SUB2 &>w ( -- ) DUP2 ;textarea/buf LTH2 ?{ utf8/prev LDA2k [ LIT2 0a "@ ] NEQ2 ?&>w } JMP2r ( @|scroll ) @scrollbar/on-mouse ( -> ) #42 .Mouse/state DEI ?&on-down BRK &on-down ( -> ) .Mouse/y DEI2 ,&drag STR2 ;&on-mouse-drag .Mouse/vector DEO2 BRK @scrollbar/on-mouse-drag ( -> ) #43 /no-refocus .Mouse/state DEI ?{ ;&on-mouse .Mouse/vector DEO2 BRK } .Mouse/y DEI2 DUP2 [ LIT2 &drag $2 ] SUB2 .&ratio LDZ2 MUL2 / ,&drag STR2 BRK @scrollbar/ ( -- ) #0004 .Screen/x DEO2 ( | bg ) #0028 .Screen/y DEO2 [ LIT2 04 -&height ] LDZ2 #03 SFT2 SUB ( ) ;halftone-icn #02 ( | fg ) #0028 .scroll/y LDZ2 .&ratio LDZ2 STH2k DIV2 ADD2 .Screen/y DEO2 [ LIT2 05 -Screen/height ] DEI2 [ LIT2 &lines $2 ] STH2r DIV2 SUB2 #0028 SUB2 #03 SFT2 SUB ( ) ;fill-icn #02 ! @scrollbar/ ( -- ) #0001 ( | count lines ) [ LITr -scroll/y ] LDZ2r get-scroll-addr &>w ( -- ) LDAk #0a NEQ [ JMP INC2r ] INC2 LDAk ?&>w POP2 STH2r ( ) DUP2 ,&lines STR2 ( set ratio ) .&height LDZ2 DIV2 NIP #40 SFT SFT2 .&ratio STZ2 JMP2r @scrollbar/ ( y* -- ) .scroll/y LDZ2 ADD2 ( >> ) @scrollbar/ ( line* -- ) / ( unchanged ) DUP2 .scroll/y LDZ2 NEQ2 ?{ POP2 JMP2r } DUP2 STH2 [ LIT2r 0000 ] ;textarea/buf &>wsy ( -- ) EQU2kr STHr ?{ LDAk #0a NEQ [ JMP INC2r ] INC2 LDAk ?&>wsy } POP2r POP2r DUP2 get-eof #0002 SUB2 GTH2 ?{ ;textarea/buf SUB2 .scroll/addr STZ2 .scroll/y STZ2 #00 nav/ filepath/ !reqdraw-both } POP2 POP2 JMP2r ( @|textarea ) @textarea/on-mouse ( -> ) #41 ( | scroll ) .Mouse/scrolly DEI2 DUP ?&on-scroll POP2 ( | touch ) .Mouse/state DEI ?&on-touch BRK &on-scroll ( y* -> ) scrollbar/ BRK &on-touch ( -> ) .Mouse/state DEI ( | handlers ) DUP #01 NEQ ?{ touch-to-addr selection/ ;&on-mouse-drag .Mouse/vector DEO2 } DUP #02 NEQ ?{ touch-to-addr [ LIT2 00 -Mouse/state ] DEO } #04 NEQ ?{ search/capture [ LIT2 00 -Mouse/state ] DEO } BRK @textarea/on-mouse-drag ( -> ) #43 /no-refocus .Mouse/state DEI ?{ ;&on-mouse .Mouse/vector DEO2 BRK } touch-to-addr selection/ BRK @textarea/ ( -- ) ;&buf .&length LDZ2 ! @textarea/get-anchor ( -- x* ) .nav/visible LDZ ?{ #0014 JMP2r } ;nav/width JMP2r @textarea/ ( -- ) ( | clear ) /get-anchor .Screen/x DEO2 #0028 .Screen/y DEO2 [ LIT2 80 -Screen/pixel ] DEO ( | paint ) #0028 .Screen/y DEO2 [ LIT2 25 -Screen/auto ] DEO highlight/ caret/ get-scroll-addr &>l ( -- ) caret/scan highlight/ ( | linebreak ) LDAk #0a NEQ ?{ .Screen/y DEI2 .Screen/height DEI2 #0010 SUB2 GTH2 ?&end /get-anchor .Screen/x DEO2 } ( | offscreen ) LDAk LIT "/ GTH ?{ .Screen/x DEI2 .Screen/width DEI2 LTH2 ?{ find-line-end #0001 SUB2 } } utf8/next LDAk ?&>l ( | draw size left ) /get-anchor .Screen/x DEO2 #0000 OVR2 SUB2 #0f ;dict/bytes-free #0f draw-str-color POP2 &end POP2 ( | draw caret ) has-length ?{ caret/is-invisible ?{ ;caret/sprite-icn .Screen/addr DEO2 #0f0a .search/buf LDZ ?{ SWP } POP .Screen/sprite DEO } } ( | draw widget ) .search/buf LDZ ?search/ .autocomplete/addr LDZ2 INC2 ORA ?autocomplete/ !selection/ @textarea/follow ( -- ) get-to ( | vertical ) addr-to-line .scroll/y LDZ2 LTH2k ?&move [ LIT2 &max-lines $2 ] ADD2 GTH2k ?&move POP2 POP2 JMP2r &move ( target* scroll/y* -- ) POP2 !scrollbar/ @caret/ ( -- ) get-to ,&addr STR2 [ LIT2 01 _&found ] STR JMP2r @caret/scan ( addr* -- addr* ) DUP2 [ LIT2 &addr $2 ] NEQ2 ?{ .Screen/x DEI2 ,&x STR2 .Screen/y DEI2 ,&y STR2 [ LIT2 00 _&found ] STR } JMP2r @caret/is-invisible ( -- f ) [ LIT &found $1 ] DUP ?{ [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 } JMP2r ( @|nav ) @nav/on-mouse ( -> ) [ LIT2 00 -Mouse/state ] DEI NEQ #41 ADD ( | scroll ) .Mouse/scrolly DEI2 DUP ?&on-scroll POP2 .Mouse/y DEI2 #0028 SUB2 #0018 DIV2 NIP .Mouse/state DEI DUP ?{ POP2 BRK } [ LIT2 00 -Mouse/state ] DEO #01 GTH ?{ .&scroll LDZ ADD BRK } nav/id-to-addr addr-to-line scrollbar/ BRK &on-scroll ( y* -> ) / POP BRK @nav/ ( y -- ) .&scroll LDZ ADD ( >> ) @nav/ ( y -- ) DUP ;&ptr LDA INC .&buf SUB #01 SFT LTH ?{ #80 LTH ?{ #ffff !scrollbar/ } JMP2r } .&scroll STZ !reqdraw-nav @nav/id-to-addr ( id -- addr* ) ;&ptr LDA #01 SUB .&buf SUB #01 SFT ( max ) [ LTHk JMP SWP POP ] ( addr* ) DUP ADD .&buf ADD LDZ2 JMP2r @nav/addr-to-id ( addr* -- id ) [ LITr 00 ] ,&t STR2 ;&ptr LDA .&buf EQUk ?{ &>la ( -- ) LDZ2k [ LIT2 &t $2 ] GTH2 ?{ INCr INC INC GTHk ?&>la } } POP2 STHr #01 SUB JMP2r @nav/id-to-color ( id sel -- color ) OVR EQU ?{ /id-to-addr INC2 LDA [ LIT "| ] EQU #03 MUL INC JMP2r } POP #09 JMP2r @nav/ ( addr* -- ) ( | toggle categories ) INC2k LDA [ LIT "| ] NEQ .&cat LDZ ORA ?{ POP2 JMP2r } ( | push ) [ LIT &ptr -&buf ] STZ2k INC INC ( | catch overflow ) DUP .&bufend LTH ?{ POP POP2 JMP2r } ,&ptr STR POP2 JMP2r @nav/ ( -- ) [ LIT2 -&buf _&ptr ] STR .search/buf LDZ ?& get-eof get-scroll-addr find-first-marker &>lu ( -- ) LDA2k [ LIT2 0a "@ ] NEQ2 ?{ INC2k / } LDA2k [ LIT2 0a "% ] NEQ2 ?{ INC2k / } ;&ptr LDA .&bufend GTH ?{ INC2 wcap GTH2k ?&>lu } POP2 POP2 JMP2r @nav/ ( -- ) get-eof ;textarea/buf &>ls ( -- ) LDAk #0a NEQ ?{ INC2k LDA2 [ LIT2 "@| ] NEQ2 ?{ INC2k / } } ;search/buf OVR2 sseg #00 EQU ?{ DUP2 / } ;&ptr LDA .&bufend GTH ?{ INC2 GTH2k ?&>ls } POP2 POP2 JMP2r @nav/ ( -- ) .&visible LDZ ?{ !scrollbar/ } ( | clear ) ;nav/width .Screen/x DEO2 #0028 .Screen/y DEO2 [ LIT2 90 -Screen/pixel ] DEO scrollbar/ ( | draw ) #0028 .Screen/y DEO2 highlight/ [ LIT2 25 -Screen/auto ] DEO get-from INC2 /addr-to-id ,&sel STR ;&ptr LDA .&buf EQUk ?& .&scroll LDZ DUP ADD ADD &>ld ( -- ) [ LIT &sel $1 ] / INC INC GTHk ?&>ld POP2 JMP2r @nav/ ( range* -- ) POP2 #0010 .Screen/x DEO2 #0028 .Screen/y DEO2 ;dict/empty #03 draw-str-color POP2 JMP2r @nav/ ( ztr selected -- ztr ) OVR .&buf SUB #01 SFT SWP /id-to-color ( | left spacer ) #000c .Screen/x DEO2 ;marker-icns .Screen/addr DEO2 DUP #02 SFT .Screen/sprite DEO ( | text ) STHk ;utf8/color STA LDZ2k find-prev-spacer ( spacer ) LDA2k [ LIT2 "@| ] NEQ2 ?{ INC2 INC2 } ( label ) &>w ( -- ) .Screen/x DEI2 ;&width-inner GTH2 ?{ utf8/draw utf8/next LDAk #20 GTH ?&>w } ( |right spacer ) ;marker-icns/end .Screen/addr DEO2 STHr #02 SFT .Screen/sprite DEO walk-ws ( | handlers ) LDAk [ LIT "( ] EQU ?/ LDAk [ LIT ") ] NEQ ?{ POP2 JMP2r } LDAk [ LIT "$ ] EQU ?{ POP2 JMP2r } ( | value ) #02 ;utf8/color STA &>wv ( -- ) .Screen/x DEI2 ;&width-inner GTH2 ?{ utf8/draw utf8/next LDAk #20 GTH ?&>wv } POP2 !/ @nav/ ( str* -- ) #03 ;utf8/color STA &>ws ( -- ) .Screen/x DEI2 ;&width-inner GTH2 ?{ utf8/draw LDAk [ LIT ") ] EQU ?{ utf8/next LDAk ?&>ws } } POP2 ( >> ) @nav/ ( -- ) .Screen/x DEI2 ;&width-inner LTH2 ?{ .Screen/x DEI2k #000c SUB2 ROT DEO2 ;halftone-icn .Screen/addr DEO2k [ LIT2r 00 -Screen/sprite ] DEOkr DEO2 DEOr } JMP2r @nav/toggle-categories ( -- ) .&cat LDZk #01 EOR SWP STZ !reqdraw-nav @nav/toggle-sidebar ( -- ) .&visible LDZk #01 EOR SWP STZ ( | clear label markers ) #0014 .Screen/x DEO2 #0028 .Screen/y DEO2 [ LIT2 90 -Screen/pixel ] DEO !reqdraw-both ( @|document ) @filepath/on-frame ( -> ) [ LIT &timer $1 ] DUP #07 AND ?{ DUP #08 AND INC / } INC ,&timer STR BRK @filepath/on-button ( -> ) .Controller/key DEI ( | handlers ) DUP ?{ POP BRK } DUP #08 NEQ ?{ POP /pop BRK } DUP #0d NEQ ?{ POP file-open /untrap BRK } DUP #1b NEQ ?{ POP /untrap BRK } DUP #7f NEQ ?{ POP /erase BRK } /push BRK @filepath/on-console ( -> ) .Console/read DEI ( | handlers ) DUP #0a NEQ ?{ POP file-open /untrap BRK } DUP #1f GTH ?{ POP BRK } DUP #7f NEQ ?{ POP /erase BRK } /push BRK @filepath/trap ( -- ) ;&on-frame .Screen/vector DEO2 ;&on-button .Controller/vector DEO2 #40 ! @filepath/untrap ( -- ) ;on-frame-draw .Screen/vector DEO2 ;on-button .Controller/vector DEO2 ;on-console .Console/vector DEO2 ( | if is empty, reset to untitled ) .&buf LDZ ?{ / } #01 !/ @filepath/erase ( -- ) / #0000 [ LIT2 -&buf -&buf ] ,&ptr STR STZ2 JMP2r @filepath/ ( -- ) /erase ;untitled-txt !/push-text @filepath/push-selection ( -- ) / get-to-from EQU2k ?{ ( | append if in folder ) ,&ptr LDR #01 SUB LDZ [ LIT "/ ] EQU ?{ /pop-file } &>l ( -- ) LDAk /push INC2 GTH2k ?&>l POP2 POP2 !file-open } JMP2r @filepath/push-text ( text* -- ) LDAk ?{ POP2 JMP2r } LDAk /push INC2 !/push-text @filepath/push ( c -- ) [ LIT2 00 &ptr -&buf ] ( clamp ) DUP .&bufend NEQ ?{ POP2 POP JMP2r } INCk ,&ptr STR STZ2 #01 !/ @filepath/pop ( -- ) [ LIT2 -&buf _&ptr ] LDR NEQk ?{ POP2 JMP2r } #01 SUB DUP ,&ptr STR #00 SWP STZ POP #01 !/ @filepath/pop-file ( -- ) ( | remove trailing slash ) ,&ptr LDR #01 SUB LDZ [ LIT "/ ] NEQ ?{ /pop } [ LIT2 -&buf _&ptr ] LDR &>wp ( -- ) #01 SUB EQUk ?{ LDZk [ LIT "/ ] EQU ?{ /pop LTHk ?&>wp } POP2 JMP2r } POP2 !/pop @filepath/pop-folder ( -- ) / /pop-file [ LIT2 -&buf _&ptr ] LDR NEQ ?{ [ LIT ". ] /push } !file-open @filepath/ ( -- ) ,&anchor LDR2 .Screen/x DEO2 #0018 .Screen/y DEO2 [ LIT2 a0 -Screen/pixel ] DEO JMP2r @filepath/ ( color -- ) [ LIT2 &anchor $2 ] .Screen/x DEO2 #0004 .Screen/y DEO2 [ LIT2 25 -Screen/auto ] DEO ;&buf ROT draw-str-color POP2 .Screen/x DEI2 ,&anchor-position STR2 ( >> ) @filepath/ ( -- ) [ LIT2 &anchor-position $2 ] .Screen/x DEO2 #0004 .Screen/y DEO2 [ LIT2 25 -Screen/auto ] DEO #03 ;/color STA [ LIT ": ] .scroll/y LDZ2 INC2 #03 ( pad ) [ LIT2 21 -Screen/auto ] DEO ;fill-icn .Screen/addr DEO2 [ LIT2 00 -Screen/sprite ] DEOk DEOk DEO JMP2r @filepath/is-tal ( -- bool ) ;&ptr LDA ( ) DUP #02 SUB LDZ2 LIT2 "al EQU2 ( ) SWP #04 SUB LDZ2 LIT2 ".t EQU2 AND JMP2r @file-new ( -- ) ( | clear ) textarea/ #0001 .textarea/length STZ2 filepath/ ( | reset position ) #05 menu/ ;textarea/buf selection/ #0000 scrollbar/ ( | draw ) #01 filepath/ !reqdraw-both @file-open ( -- ) #0000 scrollbar/ ;textarea/buf selection/ search/ ( >> ) @file-reopen ( -- ) textarea/ ;filepath/buf .File/name DEO2 #fff0 ;textarea/buf SUB2 .File/length DEO2 ;textarea/buf .File/read DEO2 .File/success DEI2 INC2 .textarea/length STZ2 filepath/is-tal #00 EQU ;highlight/mute STA ( | draw ) scrollbar/ selection/ #01 filepath/ #05 menu/ !reqdraw-both @file-save ( -- ) ;filepath/buf .File/name DEO2 .textarea/length LDZ2 #0001 SUB2 .File/length DEO2 ;textarea/buf .File/write DEO2 #05 !menu/ @file-send ( -- ) get-to-from SUB2k #0002 GTH2 ?{ POP2 POP2 get-eof ;textarea/buf } &>l ( -- ) ( | merge whitespaces ) LDAk #20 [ GTHk JMP SWP POP ] DUP #20 EQU OVR [ LIT &last 20 ] EQU AND ?{ DUP #18 DEO } ,&last STR INC2 GTH2k ?&>l POP2 POP2 ( cap ) #0a18 DEO JMP2r @file-build ( -- ) ;filepath/buf #0a18 DEO JMP2r @file-inject ( name* -- ) ( skip if empty ) DUP2 flen ORAk ?{ POP2 POP2 JMP2r } ( erase sel ) has-empty ?{ selection/erase } ( | name* addr* ) SWP2 .File/name DEO2 ( stash length ) STH2k .File/length DEO2 ( push right ) get-from STH2kr STH2kr get-from .File/read DEO2 get-from STH2r ADD2 !selection/ @file-inject-binary ( name* -- ) ( skip if empty ) DUP2 flen ORAk ?{ POP2 POP2 JMP2r } ( erase sel ) has-empty ?{ selection/erase } ( | name* addr* ) SWP2 .File/name DEO2 ( stash length ) DUP2 ADD2 DUP2 #02 SFT2 ADD2 STH2 ( push right ) get-from STH2kr STH2kr get-from POP2 get-from STH2r ADD2 !selection/ @ ( addr* -- addr* ) #0001 .File/length DEO2 STH2 #0000 &s ( -- ) ;&b feof ?{ [ LIT &b $1 ] STH2kr INC2r INC2r ROT DUP #04 SFT hexc SWP hexc SWP2 STA2 INC2 ( | format ) DUP #01 AND ?&s DUP #0f AND #00 NEQ #16 MUL #0a ADD STH2kr INC2r STA !&s } POP2 STH2r JMP2r ( @|utf8 ) %utf8/get-width ( addr* -- addr* width* ) { LDAk #09 NEQ #0018 ROT SFT2 } @utf8/prev ( addr* -- addr* ) #0001 SUB2 LDAk ( utf8 continuation ) #06 SFT #02 EQU ?&prev JMP2r @utf8/next ( addr* -- addr* ) INC2 LDAk ( utf8 continuation ) #06 SFT #02 EQU ?&next JMP2r @utf8/draw ( addr* -- addr* ) [ LITr -Screen/x ] DEI2r utf8/get-width STH2 ( glyph* ) /get-addr .Screen/addr DEO2 ( draw2 ) [ LIT2r &color 01 -Screen/sprite ] DEOkr ( tab width ) LDAk #09 NEQ [ JMP DEOkr ] DEOr ADD2r [ LITr -Screen/x ] DEO2r JMP2r @utf8/draw-ul ( addr* color -- addr* ) ,&color-ul STR [ LITr -Screen/x ] DEI2r utf8/get-width STH2 ( glyph* ) /get-addr .Screen/addr DEO2 ( draw2 ) [ LIT2r &color-ul 01 -Screen/sprite ] DEOkr ( tab width ) LDAk #09 NEQ [ JMP DEOkr ] DEOr ( | underline ) [ LIT &no-underline $1 ] ?{ OVR2r [ LITr -Screen/x ] DEO2r ;font/underline .Screen/addr DEO2 [ LIT2 05 -Screen/sprite ] DEOk DEO } ADD2r [ LITr -Screen/x ] DEO2r JMP2r @utf8/get-addr ( addr* -- addr* glyph* ) LDAk #80 LTH ?&ascii LDAk #c3 EQU ?&latin-high ;font/blank JMP2r &ascii ( addr* -- addr* glyph* ) [ LIT &rune $1 ] ?{ LDAk #00 SWP #0030 MUL2 ;font ADD2 JMP2r } [ LIT2 00 _&rune ] LDR #0030 MUL2 ;font/runes ADD2 [ LIT2 00 _&rune ] STR JMP2r &latin-high ( addr* -- addr* glyph* ) LDA2k #c380 SUB2 #0030 MUL2 ;latin-high ADD2 JMP2r @wrap/balance ( c -- offset ) DUP LIT "( EQU ?&a DUP LIT "[ EQU ?&a DUP LIT "{ EQU ?&a DUP LIT ") EQU ?&b DUP LIT "] EQU ?&b DUP LIT "} EQU ?&b POP #00 JMP2r &a POP #ff JMP2r &b POP #01 JMP2r @wrap/update ( -- ) #0000 .&left STZ2k INC INC STZ2 .selection/b LDZ2 ( | left ) [ LITr 01 ] .scroll/addr LDZ2 ;textarea/buf ADD2 #0001 SUB2 OVR2 #0001 SUB2 EQU2k ?{ &l ( -- ) LDAk /balance STH ADDr STHkr ?{ .&left STZ2 !&end-l } utf8/prev LTH2k ?&l } POP2 &end-l POP2 POPr ( | right ) [ LITr 01 ] get-eof SWP2 EQU2k ?{ &r ( -- ) LDAk /balance STH SUBr STHkr ?{ .&right STZ2 !&end-r } utf8/next GTH2k ?&r } POP2 &end-r POP2 POPr JMP2r ( @|highlight ) @highlight/toggle ( -- ) [ LIT2 01 _&mute ] LDR EOR ,&mute STR !reqdraw-textarea @highlight/ ( -- ) [ LIT2 00 -&comment ] STZ ( >> ) @highlight/ ( -- ) #01 ;utf8/no-underline STA #00 ;&label STA #00 ;&raw STA JMP2r @highlight/ ( addr* -- addr* ) [ LIT &mute $1 ] ?{ LDAk #20 GTH ?{ / } DUP2 #0002 SUB2 LDAk #20 GTH ?{ INC2k LDA [ LIT ") ] EQU ?/comment-end } INC2 LDAk #20 GTH ?{ POP2 LDAk [ LIT "( ] EQU ?/comment-start .&comment LDZ ?/ LDAk ( | handle labels ) DUP [ LIT "@ ] EQU ?/route-label DUP [ LIT "& ] EQU ?/route-label DUP [ LIT "% ] EQU ?/route-label ( | handle raw ) DUP [ LIT "" ] EQU ?/route-raw DUP [ LIT "$ ] EQU ?/route-raw ( | handle runes ) DUP [ LIT ", ] NEQ ?{ #01 !/route-litrune } DUP [ LIT "_ ] NEQ ?{ #02 !/route-rawrune } DUP [ LIT ". ] NEQ ?{ #03 !/route-litrune } DUP [ LIT "- ] NEQ ?{ #04 !/route-rawrune } DUP [ LIT "; ] NEQ ?{ #05 !/route-litrune } DUP [ LIT "= ] NEQ ?{ #06 !/route-rawrune } ( | handle immopc ) DUP [ LIT "! ] NEQ ?{ #07 !/route-litruneul } DUP [ LIT "? ] NEQ ?{ #08 !/route-litruneul } POP !/ } POP2 } ( >> ) @highlight/ ( addr* -- addr* ) is-selected ?/ DUP2 .wrap/left LDZ2 EQU2 ?/ DUP2 .wrap/right LDZ2 EQU2 ?/ .&comment LDZ ?/ [ LIT &raw $1 ] ?/ [ LIT &label $1 ] ?/ #01 !utf8/draw-ul & ( addr* -- addr* ) #02 !utf8/draw-ul & ( addr* -- addr* ) #03 !utf8/draw-ul & ( addr* -- addr* ) .search/buf LDZ ?{ #09 !utf8/draw-ul } #0d !utf8/draw-ul &comment-start ( -- ) .&comment LDZk INC SWP STZ !/ &comment-end ( cc* -- ) POP2 .&comment LDZk DUP #00 NEQ SUB SWP STZ !/ &route-label ( c -- ) POP [ LIT2 01 _&label ] STR !/ &route-litruneul ( c rune -- ) #00 ;utf8/no-underline STA ( >> ) &route-litrune ( c rune -- ) ;utf8/rune STA POP !/ &route-rawrune ( c rune -- ) ;utf8/rune STA ( >> ) &route-raw ( c -- ) POP [ LIT2 01 _&raw ] STR !/ ( @|drawing ) @redraw-all ( -- ) ( | clear menu ) #0010 .Screen/x DEO2 #0030 .Screen/y DEO2 [ LIT2 a0 -Screen/pixel ] DEO #01 filepath/ nav/ !textarea/ @ ( color -- ) ( | clamp left ) .Screen/x DEI2 textarea/get-anchor #0008 ADD2 [ GTH2k JMP SWP2 POP2 ] .Screen/x DEO2 ( | bubble ) [ LIT2 02 -Screen/auto ] DEO .Screen/x DEI2k #0004 SUB2 ROT DEO2 .Screen/y DEI2k #0014 ADD2 ROT DEO2 ;bubble-icn .Screen/addr DEO2 .Screen/sprite DEOk .Screen/x DEI2k #0008 SUB2 ROT DEO2 [ LIT2 25 -Screen/auto ] DEO ;marker-icns .Screen/addr DEO2 DEO JMP2r @ ( color -- ) .Screen/x DEI2k #0002 ADD2 ROT DEO2 ;marker-icns .Screen/addr DEO2 #10 ORA .Screen/sprite DEO JMP2r @draw-str-right ( text* -- ) DUP2 get-strw STH2 .Screen/x DEI2k STH2r SUB2 ROT DEO2 !draw-str @ ( char -- ) [ LITr -Screen/x ] DEI2r [ LIT2r 000c ] ADD2r ( glyph* ) #00 SWP #0030 MUL2 ;font ADD2 .Screen/addr DEO2 ( draw2 ) [ LIT2 &color 01 -Screen/sprite ] DEOk DEO [ LITr -Screen/x ] DEO2r JMP2r @draw-str-color ( str* color -- str* ) ,/color STR ( >> ) @draw-str ( str* -- str* ) [ LIT2 25 -Screen/auto ] DEO &>w ( -- ) LDAk DUP ?{ POP JMP2r } INC2 !&>w @ ( short* color -- ) ;/color STA #000a SWP2 [ LITr ff ] &>get ( -- ) SWP2k DIV2k MUL2 SUB2 STH POP OVR2 DIV2 ORAk ?&>get POP2 POP2 &>put ( -- ) STHr INCk ?{ POP JMP2r } [ LIT "0 ] ADD !&>put ( @|helpers ) @reset-each ( -- ) .autocomplete/addr LDZ2 #ffff NEQ2 ?autocomplete/ has-length ?&reset-selection .search/buf LDZ ?search/ JMP2r &reset-selection ( -- ) get-from DUP2 !selection/ @arrow-to-addr ( addr* button -- addr* ) DUP #01 AND ?&ctrl DUP #02 AND ?&alt #04 SFT ( | default ) DUP #01 NEQ ?{ POP !find-line-prev } DUP #02 NEQ ?{ POP !find-line-next } DUP #04 NEQ ?{ POP !utf8/prev } DUP #08 NEQ ?{ POP !utf8/next } &ctrl ( addr* button -- addr* ) #04 SFT ( | ctrl ) DUP #04 NEQ ?{ POP !find-line-start } DUP #08 NEQ ?{ POP !find-line-end } &alt ( addr* button -- addr* ) #04 SFT ( | alt ) DUP #04 NEQ ?{ POP !find-prev-special-top } DUP #08 NEQ ?{ POP !find-next-special } POP JMP2r @walk-ws ( str* -- word* ) LDAk #20 GTH ?{ utf8/next LDAk ?walk-ws } JMP2r @addr-to-line ( addr* -- line* ) [ LIT2r 0000 ] ;textarea/buf EQU2k ?{ &>l ( -- ) LDAk #0a NEQ [ JMP INC2r ] ( ) INC2 GTH2k ?&>l } POP2 POP2 STH2r JMP2r @touch-to-addr ( -- addr* ) ( goto y ) ( b ) .Mouse/y DEI2 #0028 SUB2 #0018 DIV2 STH POP ( a ) [ LITr 00 ] get-scroll-addr &>ver ( -- ) EQUkr STHr ?{ LDAk #0a NEQ [ JMP INCr ] utf8/next LDAk ?&>ver } POP2r ( goto x ) ( b ) .Mouse/x DEI2 textarea/get-anchor SUB2 STH2 ( a ) LIT2r 0000 &>hor ( -- ) LDAk #0a EQU ?{ utf8/get-width STH2 ADD2r LTH2kr STHr ?{ utf8/next LDAk ?&>hor } } POP2r POP2r JMP2r @clamp-addr ( addr* -- addr* ) ( min ) ;textarea/buf [ GTH2k JMP SWP2 POP2 ] ( max ) get-eof #0001 SUB2 [ LTH2k JMP SWP2 POP2 ] JMP2r @is-selected ( addr* -- f ) DUP2 get-from LTH2 ?{ INC2k get-to GTH2 ?{ #01 JMP2r } } #00 JMP2r @get-strw ( str* -- width* ) [ LIT2r 0000 ] LDAk #00 EQU ?{ &>w ( -- ) utf8/get-width STH2 ADD2r INC2 LDAk ?&>w } POP2 STH2r JMP2r ( manifest ) @menu/on-mouse ( -> ) [ LIT2 00 -Mouse/state ] DEI NEQ #42 ADD /no-refocus ( | when touch cat ) [ LIT2 00 -Mouse/state ] DEI EQU ?{ .Mouse/y DEI2 #001a GTH2 ?{ .Mouse/x DEI2 get-x-cat [ LIT2 00 -Mouse/state ] DEO BRK } } ;/sel LDA #ff EQU ?&no-sub ( | when sel changed ) .Mouse/y DEI2 #0004 SUB2 #0018 DIV2 NIP #01 SUB ( | changed ) DUP ;/sel LDA EQU ?&no-change DUP ;/sel STA ;/sel LDA &no-change POP ( | when touch sub ) [ LIT2 00 -Mouse/state ] DEI EQU ?&no-touch-sub ;/sel LDA menu-select-sub [ LIT2 00 -Mouse/state ] DEO &no-touch-sub BRK &no-sub ( don't leave if menu is active ) ;/sel LDA INC ?&no-leave .Mouse/y DEI2 #0018 LTH2 ?&no-leave menu-close Mouse/ &no-leave BRK ( @|actions ) @menu-deselect ( cat cat -- ) POP2 @menu-close ( -- ) ;/sel LDA DUP #ff EQU ?{ DUP #ff ;/sel STA redraw-all menu/ } POP JMP2r @menu/ ( state -- ) #0002 .Screen/x DEO2 #0004 .Screen/y DEO2 [ LIT2 25 -Screen/auto ] DEO ;font/diamond .Screen/addr DEO2 .Screen/sprite DEOk DEO JMP2r @ ( cat -- ) DUP get-cat ORA ?{ POP JMP2r } ( clear ) ;/sel LDA ( unchanged ) EQUk ?menu-deselect ( unselected ) DUP #ff EQU ?{ DUP } POP ( | draw ) redraw-all #ff ;/sel STA DUP ;/sel STA ! @menu-select-sub ( sub -- ) ,&t STR ;/sel LDA get-cat get-cat-length #00 &>l ( -- ) DUP [ LIT &t $1 ] NEQ ?{ menu-close POP2 INC2 INC2 LDA2 JMP2 } next-sub ?&>l POP2 POP2 !menu-close @get-cat ( cat -- cat* ) [ LIT2 00 _&t ] STR2 ;/manifest LDA2 &>w ( -- ) [ LIT2 &t $1 &id $1 ] INCk ,&id STR EQU ?&end skip-cat LDAk ?&>w POP2 #0000 &end JMP2r @get-cat-length ( cat* -- sub* length ) LDAk STH INC2 scap/ INC2 STHr JMP2r @get-cat-x ( cat -- x* ) [ LIT2 00 _&t ] STR2 [ LIT2r 0000 ] ;/manifest LDA2 &>w ( -- ) [ LIT2 &t $1 &id 00 ] INCk ,&id STR EQU ?&end INC2k get-strw #0008 ADD2 STH2 ADD2r skip-cat LDAk ?&>w &end POP2 STH2r ( left padding + 4 ) #0010 ADD2 JMP2r @get-x-cat ( x* -- ) ( left padding + 4 ) #0004 ADD2 #0010 SUB2 ,&t STR2 [ LITr 00 ] [ LIT2r 0000 ] ;/manifest LDA2 &>w ( -- ) INC2k get-strw #0008 ADD2 STH2r ADD2 DUP2 [ LIT2 &t $2 ] LTH2 ?{ POP2 POP2 STHr JMP2r } INCr STH2 skip-cat LDAk ?&>w POP2 POP2r POPr #ff JMP2r @find-modkey ( mod key -- fn* ) ORAk ?{ JMP2r } ( not null ) ,&mk STR2 ;/manifest LDA2 &>cat ( -- ) get-cat-length #00 &>subcat ( -- ) OVR2 LDA2 [ LIT2 &mk $2 ] NEQ2 ?{ POP2 INC2 INC2 LDA2 JMP2r } next-sub ?&>subcat POP2 LDAk ?&>cat POP2 #0000 JMP2r @skip-cat ( cat* -- next-cat* ) get-cat-length #00 &>subcat ( -- ) next-sub ?&>subcat POP2 JMP2r @next-sub ( sub* to from -- sub* to from continue ) SWP2 #0004 ADD2 scap/ INC2 SWP2 INC GTHk JMP2r ( @|drawing ) @menu/ ( -- ) @ ( mask -- ) #01 menu/ #0004 .Screen/y DEO2 #000c .Screen/x DEO2 [ LITr 00 ] [ LIT2 &manifest =manifest ] &>w ( -- ) INC2k [ LIT &sel ff ] STHkr EQU .Screen/x DEI2k #0008 ADD2 ROT DEO2 INCr skip-cat LDAk ?&>w POP2 POPr JMP2r @ ( cat -- ) DUP get-cat-x ,&anchor STR2 get-cat ORAk ?{ POP2 JMP2r } #001c .Screen/y DEO2 LDAk #00 SWP2 INC2 scap/ INC2 STH2 &>l ( -- ) [ LIT2 &anchor $2 ] .Screen/x DEO2 DUP [ LIT &sel ff ] EQU STH2r ROT STH2 INC GTHk ?&>l POP2 POP2r JMP2r @ ( cat -- ) DUP get-cat-x .Screen/x DEO2 #0014 .Screen/y DEO2 get-cat LDA DUP ADD #00 SWP ;fill-icn #f2 ( >> ) @ ( color times addr* auto -- ) .Screen/auto DEO .Screen/addr DEO2 SWP STH [ LITr -Screen/sprite ] &>l ( -- ) DEOkr INC DUP ?&>l POP POP2r JMP2r @ ( str* sel -- ) [ LIT2 25 -Screen/auto ] DEO ;menu-icn .Screen/addr DEO2 STHk .Screen/sprite DEO #0401 STHkr [ JMP SWP POP ] ;/color STA draw-str POP2 ;menu-icn/right .Screen/addr DEO2 [ LITr -Screen/sprite ] DEOr .Screen/x DEI2 #0010 SUB2 .Screen/x DEO2 JMP2r @ ( label* sel -- next-label* ) ( | bg ) [ LITr -Screen/x ] DEI2r [ LITr -Screen/y ] DEI2r ( fill ) #20 SFT #04 ADD #e0 ;blank-icn #21 [ LITr -Screen/y ] DEO2r [ LITr -Screen/x ] DEO2r ( | fg ) #00 ;/color STA ( | right ) [ LITr -Screen/x ] DEI2r ( ) DUP2r [ LIT2r 00f8 ] ADD2r [ LITr -Screen/x ] DEO2r LDA2k get-modkey-str draw-str-right POP2 ( | left ) [ LIT2r 0004 ] ADD2r [ LITr -Screen/x ] DEO2r #0004 ADD2 !draw-str @get-modkey-str ( mod key -- str* ) ;&buf #0008 ( ) ORAk ?{ POP2 ;&buf JMP2r } ( | mod ) SWP STH #0800 &>l ( -- ) STHkr OVR SFT #01 AND #00 EQU ?{ #00 OVR ;&buttons ADD2 LDA ;&buf sput } INC GTHk ?&>l POP2 ( | mix ) DUP #00 NEQ STHr #00 NEQ #0101 NEQ2 ?{ LIT "+ ;&buf sput } ( | key ) DUP #08 NEQ ?{ ;&bsp !&cat } DUP #09 NEQ ?{ ;&tab !&cat } DUP #0d NEQ ?{ ;&ent !&cat } DUP #20 NEQ ?{ ;&spc !&cat } DUP #1b NEQ ?{ ;&esc !&cat } DUP #7f NEQ ?{ ;&del !&cat } DUP ;&buf sput &end POP ;&buf JMP2r &buf $8 &buttons "ABsSUDLR $1 &cat ;&buf scat !&end &bsp "bsp $1 &tab "tab $1 &ent "ent $1 &spc "spc $1 &esc "esc $1 &del "del $1 @ ( color -- ) Mouse/ &no-refocus ( color -- ) [ LIT2 15 -Screen/auto ] DEO ;fill-icn .Screen/addr DEO2 #40 ;cursor-icn .Screen/addr DEO2 .Mouse/x DEI2 ,/x STR2 .Mouse/y DEI2 ,/y STR2 ( >> ) @ ( color -- ) [ LIT2 &x $2 ] .Screen/x DEO2 [ LIT2 &y $2 ] .Screen/y DEO2 .Screen/sprite DEO JMP2r @ ( -- ) #0000 .Screen/x DEO2 #0018 .Screen/y DEO2 [ LIT2 01 -Screen/width ] DEI2 #03 SFT2 SUB ;dotted-icn #01 ! @exit ( -- ) #800f DEO JMP2r ( @|elements ) @theme/ ( -- ) ;&path .File/name DEO2 #0002 .File/length DEO2 ;&r .File/read DEO2 ;&g .File/read DEO2 ;&b .File/read DEO2 .File/success-lb DEI ?{ #e048 #e0a7 #e097 !theme/ } [ LIT2 &r $2 ] [ LIT2 &g $2 ] [ LIT2 &b $2 ] ( >> ) @theme/ ( r* g* b* -- ) .System/b DEO2 .System/g DEO2 .System/r DEO2 JMP2r &path ".theme $1 @window/ ( -- ) #0550 #02de ( >> ) @window/ ( w* h* -- ) .Screen/height DEO2 .Screen/width DEO2 menu/ ( | responsive ) .Screen/width DEI2 #0300 GTH2 .nav/visible STZ .Screen/height DEI2 #0028 SUB2 .scrollbar/height STZ2 !reqdraw-both @window/toggle-expand ( -- ) .Screen/width DEI2 #0550 EQU2 ?{ !/ } #0400 #022e !/ ( @|stdlib ) @zcap ( zstr -- zstr ) LDZk ?{ JMP2r } INC !zcap @hexc ( hex -- char ) #0f AND #0a LTHk ?{ SUB [ LIT "a ] ADD JMP2r } POP [ LIT "0 ] ADD JMP2r @clab ( c -- bool ) DUP LIT "0 SUB #0a LTH ?&ok DUP LIT "a SUB #1a LTH ?&ok DUP LIT "A SUB #1a LTH ?&ok DUP LIT "- EQU ?&ok DUP LIT "_ EQU ?&ok DUP LIT "< EQU ?&ok DUP LIT "> EQU ?&ok DUP LIT "? EQU ?&ok DUP #7f GTH ?&ok POP #00 &ok JMP2r @chex ( c -: ) [ LIT "0 ] SUB DUP #0a LTH ?{ #27 SUB DUP #10 LTH ?{ POP #ff } } JMP2r @flen ( path* -- size* ) .File/name DEO2 #0004 .File/length DEO2 ;&buf DUP2 .File/stat DEO2 LDAk [ LIT "- ] EQU ?&fail LDAk [ LIT "? ] EQU ?&fail LDAk [ LIT "! ] EQU ?&fail !shex &fail ( buf* -- size* ) POP2 #0000 JMP2r @feof ( buf* -- eof ) .File/read DEO2 .File/success DEI2 #0000 EQU2 JMP2r @wlen ( str* -- len* ) DUP2 &>w ( -- ) INC2 LDAk #20 GTH ?&>w SWP2 SUB2 JMP2r @wcap ( str* -- str* ) LDAk #20 GTH ?{ JMP2r } INC2 !wcap @shex ( str* -: value* ) [ LIT2r 0000 ] &>w ( `i* -- ) ( acc ) [ LITr 40 ] SFT2r ( res ) LDAk chex [ LITr 00 ] STH ADD2r INC2 LDAk ?&>w POP2 STH2r JMP2r @sseg ( a* b* -- bool ) STH2 &>l ( -- ) LDAk LDAkr STHr NEQ ?&end INC2k LDA #00 EQU ?&end INC2 INC2r !&>l &end LDA LDAr STHr EQU JMP2r @scap ( str* -- end* ) INC2 & LDAk ?scap JMP2r @scat ( src* dst* -- ) scap/ STH2 !& &>w ( -- ) LDAk #00 STH2kr STA2 INC2r INC2 & LDAk ?&>w POP2 POP2r JMP2r @mcmp ( a* b* length* -- f ) SWP2 STH2 ADD2k NIP2 SWP2 &>l ( bto* bfrom* -- bto* bfrom* ) LDAk LDAkr STHr NEQ ?{ INC2r INC2 GTH2k ?&>l } EQU2 POP2r JMP2r @ ( src* len* -- ) ,&length STR2 ,&addr STR2 ;&mmu .System/expansion DEO2 JMP2r &mmu 00 &length $2 0000 &addr $2 00 @ ( a* distance* -- ) OVR2 ,&dst STR2 ADD2k ,&src STR2 POP2 get-eof SWP2 SUB2 ,&length STR2 ;&mmu .System/expansion DEO2 JMP2r &mmu 01 &length 0000 0000 &src 0000 0000 &dst 0000 @ ( a* distance* -- ) ADD2k ,&dst STR2 OVR2 ,&src STR2 POP2 get-eof SWP2 SUB2 ,&length STR2 ;&mmu .System/expansion DEO2 JMP2r &mmu 02 &length 0000 0000 &src 0000 0000 &dst 0000 @ ( short* -- ) SWP /b &b ( -- ) DUP #04 SFT /c &c ( -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO JMP2r @ ( str* -- ) LDAk #18 DEO INC2 LDAk ? POP2 JMP2r ( @|assets ) @snarf-txt ".snarf $1 @untitled-txt "untitled.txt $1 @blank-icn [ 0000 0000 0000 0000 ] @fill-icn [ ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ] @dict &bytes-free 20 "bytes 20 "free. $1 &empty "Empty $1 @dotted-icn [ 0000 0000 0000 00aa ] @cursor-icn [ 80c0 e0f0 f8fc feff f8d8 8c0c 0606 0000 ] @menu-icn [ 070f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f 0f0f ] &right [ e0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f8fc ] @bubble-icn [ 0000 0000 0008 1c3e ] @halftone-icn [ aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 ] @caret/sprite-icn [ c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 ] @marker-icns [ 0307 0707 0707 0707 0707 0707 0707 0707 0707 0707 0707 0703 ] &end [ c0e0 e0f0 f0f8 f8fc fcfe feff fffe fefc fcf8 f8f0 f0e0 e0c0 ] @font ( ?? ) 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 &underline 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00ff 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00ff 0000 ( ?? ) 0000 0000 0f1f 3f3f 3333 3f3f 3f37 3038 3f1f 0f00 0000 0000 0000 0000 c0e0 f0f0 3030 f0f0 f0b0 3070 f0e0 c000 0000 0000 ( ?? ) 0000 0000 0038 7d7f 7f7f 3f3f 1f0f 0702 0200 0000 0000 0000 0000 0000 00e0 f0f0 f0f0 e0e0 c080 0000 0000 0000 0000 0000 &diamond 0000 0000 0202 0707 0f0f 1f1f 0f0f 0707 0202 0000 0000 0000 0000 0000 0000 0000 8080 c0c0 8080 0000 0000 0000 0000 0000 ( ?? ) 0000 0000 070f 0f0f 073a 7f7f 7f3a 0202 071f 0000 0000 0000 0000 0000 0080 8080 00e0 f0f0 f0e0 0000 00c0 0000 0000 0000 ( ?? ) 0000 0000 0207 0f1f 3f3f 7f7f 7f3a 0202 071f 0000 0000 0000 0000 0000 0000 80c0 e0e0 f0f0 f0e0 0000 00c0 0000 0000 0000 ( ?? ) 0000 0000 0000 0000 061f 1f3f 3f1f 1f06 0000 0000 0000 0000 0000 0000 0000 0000 0080 80c0 c080 8000 0000 0000 0000 0000 ( ?? ) ffff ffff ffff ffff f9e0 e0c0 c0e0 e0f9 ffff ffff ffff ffff f0f0 f0f0 f0f0 f0f0 f070 7030 3070 70f0 f0f0 f0f0 f0f0 f0f0 ( tab ) 0000 0000 0000 0000 0000 2000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( linebreak ) 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( ?? ) 0003 0000 0001 010f 1930 3060 6060 6060 3030 190f 0000 0000 00f0 70f0 d090 9000 80c0 c060 6060 6060 c0c0 8000 0000 0000 ( ?? ) 0007 0c18 1830 3030 3030 1818 0c07 0303 3f03 0303 0000 0000 0080 c060 6030 3030 3030 6060 c080 0000 f000 0000 0000 0000 ( ?? ) 0004 0406 0607 0705 0404 0404 0404 0404 041c 3c7c 7830 0000 0000 0000 0000 80c0 c060 6020 2020 6040 8000 0000 0000 0000 ( ?? ) 000c 0f09 0c0f 0b08 0808 0808 0808 0838 78f8 f163 0301 0000 0000 80e0 6020 e0e0 2020 2020 2020 2020 20e0 e0e0 c080 0000 ( x10 ) 0000 0026 6636 361f 1f19 19f9 f919 1919 1f36 3666 2600 0000 0000 0040 60c0 c080 8080 80f0 f080 8080 80c0 c060 4000 0000 ( ?? ) 0000 0040 6070 787c 7e7f 7f7f 7f7f 7e7c 7870 6040 0000 0000 0000 0000 0000 0000 0000 c0f0 c000 0000 0000 0000 0000 0000 ( ?? ) 0000 0000 0000 0001 0307 1f7f 1f07 0301 0000 0000 0000 0000 0000 0010 3070 f0f0 f0f0 f0f0 f0f0 f0f0 f070 3010 0000 0000 ( ?? ) 0000 060f 1f36 2606 0606 0606 0606 0606 0626 361f 0f06 0000 0000 0000 80c0 4000 0000 0000 0000 0000 0040 c080 0000 0000 ( ?? ) 0010 3838 3838 3838 3810 1010 1010 1000 0000 183d 3d18 0000 0040 e0e0 e0e0 e0e0 e040 4040 4040 4000 0000 c0e0 e0c0 0000 ( ?? ) 000f 3e7e 7e7e 7e7e 3e1e 0202 0202 0202 0202 0202 0000 0000 00f0 4040 4040 4040 4040 4040 4040 4040 4040 4040 0000 0000 ( ?? ) 000f 1830 3030 180c 1f31 3030 180c 0701 1038 3830 180f 0000 0080 c060 e0e0 4000 0080 c060 6060 c080 c060 6060 c080 0000 ( ?? ) 0000 0000 0000 0000 0000 0000 003f 3f3f 3f3f 3f00 0000 0000 0000 0000 0000 0000 0000 0000 00f0 f0f0 f0f0 f000 0000 0000 &runes 0000 060f 1f36 2606 0606 0606 0606 0606 2636 1f0f 063f 0000 0000 0000 80c0 4000 0000 0000 0000 0000 40c0 8000 00c0 0000 0000 071f 1f3f 3f3f 3f3c 3838 3c3f 3f3f 3f1f 1f07 0000 0000 0000 80e0 e0f0 f0f0 f0f0 7070 f0f0 f0f0 f0e0 e080 0000 0000 0000 071f 1830 3030 3033 3737 3330 3030 3018 1f07 0000 0000 0000 80e0 6030 3030 3030 b0b0 3030 3030 3060 e080 0000 0000 0000 0303 0707 0f0f 1f1c 3838 1c1f 0f0f 0707 0303 0000 0000 0000 0000 8080 c0c0 e0e0 7070 e0e0 c0c0 8080 0000 0000 0000 0000 0303 0707 0c0c 181b 3737 1b18 0c0c 0707 0303 0000 0000 0000 0000 8080 c0c0 6060 b0b0 6060 c0c0 8080 0000 0000 0000 0000 0307 0f1f 3c38 383c 3f3f 3c38 383c 1f0f 0703 0000 0000 0000 0080 c0e0 f070 70f0 f0f0 f070 70f0 e0c0 8000 0000 0000 0000 0307 0c18 3337 3733 3030 3337 3733 180c 0703 0000 0000 0000 0080 c060 30b0 b030 3030 30b0 b030 60c0 8000 0000 0000 0000 0000 0101 0101 3f3f 1f1f 3f3f 0101 0101 0000 0000 0000 0000 0000 8080 c0c0 e0e0 f0f0 e0e0 c0c0 8080 0000 0000 0000 0000 0000 0000 303c 3f3f 1f1f 3f3f 3c30 0000 0000 0000 0000 0000 0000 0000 0000 00c0 f0f0 c000 0000 0000 0000 0000 0000 ( space ) 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0002 0707 0707 0707 0702 0202 0202 0200 0000 0307 0703 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 8000 0000 ( " ) 0019 1919 1919 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 8080 8080 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( # ) 0004 0404 043f 3f08 0808 0808 0808 7f7f 1111 1111 1100 0000 0040 4040 40f0 f080 8080 8080 8080 e0e0 0000 0000 0000 0000 ( $ ) 0202 0f1a 3232 3232 1a1e 0f03 0202 3232 3232 1a0f 0202 0000 0000 80c0 6060 6000 0000 80e0 6030 3030 3030 60c0 0000 0000 ( % ) 003c 6666 6666 6665 3903 0206 0405 0f0b 1b13 3321 2000 0000 2020 6040 c080 8080 0000 0000 e030 3030 3030 30e0 0000 0000 ( & ) 000f 1919 1919 1919 0b0e 1c34 3466 6263 6361 331e 0000 0000 0000 8080 8080 8000 0000 e040 4040 c080 8090 f060 0000 0000 ( ' ) 0006 0606 0606 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( paren left ) 0000 0001 0103 0303 0606 0606 0606 0303 0301 0100 0000 0000 0060 c080 8000 0000 0000 0000 0000 0000 0080 80c0 6000 0000 ( paren right ) 0030 180c 0c06 0606 0303 0303 0303 0606 0e0c 0c18 3000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( star ) 0000 0000 0207 2772 3a0f 020f 3a72 2707 0200 0000 0000 0000 0000 0000 0000 2070 e080 0080 e070 2000 0000 0000 0000 0000 ( add ) 0000 0000 0000 0202 0202 3f02 0202 0200 0000 0000 0000 0000 0000 0000 0000 0000 0000 e000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0307 0703 0103 0600 0000 0000 0000 0000 0000 0000 0000 0000 0080 8080 8000 0000 0000 0000 0000 0000 0000 3f00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 e000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0307 0703 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 8000 0000 0000 ( slash foward ) 0000 0000 0000 0101 0303 0606 0c0c 1818 3030 6060 c000 0000 0030 6060 c0c0 8080 0000 0000 0000 0000 0000 0000 0000 0000 0007 0c18 1830 3030 3030 3030 3030 3030 1818 0c07 0000 0000 0080 c060 6030 3030 3030 3030 3030 3030 6060 c080 0000 0000 0001 071f 0303 0303 0303 0303 0303 0303 0303 031f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 000f 1830 3838 1000 0001 0103 0604 0c08 1810 3f3f 0000 0000 0080 c060 6060 60c0 c080 0000 0000 0000 2060 c0c0 0000 0000 000f 1830 3838 1000 0001 0700 0000 1038 3830 180f 0000 0000 0080 c060 6060 6060 c080 80c0 6060 6060 6060 c080 0000 0000 0000 0101 0302 0604 0c08 1810 3020 7f00 0000 0007 0000 0000 00c0 c0c0 c0c0 c0c0 c0c0 c0c0 c0c0 f0c0 c0c0 c0f0 0000 0000 001f 1f10 1010 1010 171c 1000 0000 1038 3830 180f 0000 0000 00f0 e000 0000 0000 80e0 6030 3030 3030 3060 e080 0000 0000 0007 0c18 1830 3030 373c 3830 3030 3030 3018 1c07 0000 0000 00c0 6070 3000 0000 c060 6030 3030 3030 3060 e080 0000 0000 001f 1f30 2020 0000 0001 0101 0303 0303 0707 0702 0000 0000 00f0 f020 6040 c080 8080 8080 0000 0000 0000 0000 0000 0000 0007 0c18 1818 180c 0e07 0d18 1830 3030 3018 1c07 0000 0000 0080 c060 6060 6040 c080 c0e0 6030 3030 3060 e080 0000 0000 0007 1c18 3030 3030 3030 180f 0000 1038 3830 180f 0000 0000 0080 e060 3030 3030 3070 f0b0 3030 3030 6060 c080 0000 0000 0000 0000 0307 0703 0000 0000 0003 0707 0300 0000 0000 0000 0000 0000 0080 8000 0000 0000 0000 8080 0000 0000 0000 0000 0000 0000 0307 0703 0000 0000 0003 0707 0301 0306 0000 0000 0000 0000 0080 8000 0000 0000 0000 8080 8080 0000 0000 0000 ( angular left ) 0000 0000 0000 0101 0303 0606 0303 0101 0000 0000 0000 0000 0030 6060 c0c0 8080 0000 0000 0000 8080 c0c0 6060 3000 0000 ( equal ) 0000 0000 0000 0000 3f00 0000 003f 0000 0000 0000 0000 0000 0000 0000 0000 0000 f000 0000 00f0 0000 0000 0000 0000 0000 ( angular right ) 0060 3030 1818 0c0c 0606 0303 0606 0c0c 1818 3030 6000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( ? ) 000f 1830 3038 3810 0001 0103 0202 0200 0000 0307 0703 0000 00c0 6030 3030 7060 c080 0000 0000 0000 0000 0080 8000 0000 ( @ ) 0000 071c 3030 6067 6c6c 6c6c 6c6c 6d67 6060 3038 0f00 0000 0000 80e0 2030 1090 d0d0 d0d0 d0d0 f060 0010 3060 c000 0000 ( A ) 0003 0307 0505 050d 0908 0818 1f10 1030 2020 2078 0000 0000 0000 0000 8080 8080 80c0 c0c0 c0c0 c060 6060 60f0 0000 0000 ( B ) 007f 3030 3030 3030 3030 3f30 3030 3030 3030 307f 0000 0000 0080 c060 6060 6060 60c0 80e0 7030 3030 3030 60c0 0000 0000 ( C ) 0007 1c30 3060 6060 6060 6060 6060 6060 3030 1c07 0000 0000 00a0 e060 2020 0000 0000 0000 0000 0010 3020 e080 0000 0000 ( D ) 007f 3130 3030 3030 3030 3030 3030 3030 3030 317f 0000 0000 0000 c060 6030 3030 3030 3030 3030 3030 6060 c000 0000 0000 ( E ) 007f 1818 1818 1818 1818 1f18 1818 1818 1818 187f 0000 0000 00f0 3010 1000 0040 40c0 c0c0 4040 0000 1010 30f0 0000 0000 ( F ) 007f 1818 1818 1818 1818 1f18 1818 1818 1818 187e 0000 0000 00f0 3010 1000 0040 40c0 c0c0 4040 0000 0000 0000 0000 0000 ( G ) 0007 1c30 3060 6060 6060 6060 6160 6060 3030 1c07 0000 0000 00a0 e060 2020 0000 0000 0000 f060 6060 6060 e080 0000 0000 ( H ) 0078 3030 3030 3030 3030 3f30 3030 3030 3030 3078 0000 0000 00f0 6060 6060 6060 6060 e060 6060 6060 6060 60f0 0000 0000 ( I ) 001f 0303 0303 0303 0303 0303 0303 0303 0303 031f 0000 0000 00e0 0000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( J ) 001f 0303 0303 0303 0303 0303 0303 0303 0303 43e3 e366 3c00 00e0 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( K ) 0079 3030 3031 3133 3636 3e3b 3331 3130 3030 3078 0000 0000 00f0 6040 c080 0000 0000 0000 0080 80c0 c060 60f0 0000 0000 ( L ) 007e 1818 1818 1818 1818 1818 1818 1818 1818 187f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 30f0 0000 0000 ( M ) 0070 3030 3838 3838 2d2d 2d2d 2727 2626 2222 2272 0000 0000 0070 6060 e0e0 e0e0 6060 6060 6060 6060 6060 60f0 0000 0000 ( N ) 0070 3038 382c 2c26 2626 2323 2121 2020 2020 2070 0000 0000 0070 2020 2020 2020 2020 2020 a0a0 e0e0 6060 6020 0000 0000 ( O ) 000f 1830 3060 6060 6060 6060 6060 6060 3030 180f 0000 0000 0080 c060 6030 3030 3030 3030 3030 3030 6060 c080 0000 0000 ( P ) 007f 3030 3030 3030 3030 3f30 3030 3030 3030 3078 0000 0000 0080 e060 3030 3030 60e0 8000 0000 0000 0000 0000 0000 0000 ( Q ) 000f 1830 3060 6060 6060 6060 6060 6f79 3030 180f 0000 0000 0080 c060 6030 3030 3030 3030 3030 30b0 e0e0 40d0 f060 0000 ( R ) 007f 3030 3030 3030 3030 3f33 3131 3030 3030 3078 0000 0000 0080 e060 3030 3030 60e0 8000 8080 c0c0 c060 6070 0000 0000 ( S ) 000f 1830 3030 3018 1e0f 0300 0000 2020 3038 2c27 0000 0000 00a0 e060 2020 0000 0080 c0e0 6030 3030 3030 60c0 0000 0000 ( T ) 003f 3323 2303 0303 0303 0303 0303 0303 0303 030f 0000 0000 00f0 3010 1000 0000 0000 0000 0000 0000 0000 00c0 0000 0000 ( U ) 0078 3030 3030 3030 3030 3030 3030 3030 3018 1c07 0000 0000 0070 2020 2020 2020 2020 2020 2020 2020 6040 c080 0000 0000 ( V ) 0078 3030 3018 1818 1818 0c0c 0c0d 0507 0707 0202 0000 0000 0070 2020 6040 4040 40c0 8080 8080 0000 0000 0000 0000 0000 ( W ) 0077 3333 3333 3333 3333 3715 1d1d 1d1d 0808 0808 0000 0000 0070 2020 2020 2020 2020 6040 c0c0 c0c0 8080 8080 0000 0000 ( X ) 0078 3030 1818 0c0d 0707 0207 050d 0908 1810 3078 0000 0000 00f0 6040 c080 8080 0000 0000 0080 80c0 c060 60f0 0000 0000 ( Y ) 0078 3030 1818 0c0c 0c06 0703 0303 0303 0303 030f 0000 0000 0070 2020 6040 40c0 8080 8000 0000 0000 0000 00c0 0000 0000 ( Z ) 003f 3020 2000 0001 0103 0306 060c 0c18 1830 307f 0000 0000 00f0 3060 60c0 c080 8000 0000 0000 0000 1010 10f0 0000 0000 ( square bracket left ) 0303 0303 0303 0303 0303 0303 0303 0303 0303 0303 0303 0000 e000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 ( slash backward ) 00c0 6060 3030 1818 0c0c 0606 0303 0101 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 8080 c0c0 6060 3000 0000 ( square bracket right ) 3e06 0606 0606 0606 0606 0606 0606 0606 0606 0606 061e 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( ^ ) 070f 1800 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 c000 0000 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 0000 0000 0000 0000 0000 0000 0000 00f0 ( ` ) 1c0e 0300 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0080 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( a ) 0000 0000 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 0000 0000 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( b ) 0070 3030 3030 3030 373c 3030 3030 3030 3030 3c27 0000 0000 0000 0000 0000 0000 80c0 6060 3030 3030 3060 e080 0000 0000 ( c ) 0000 0000 0000 0000 071c 1830 3030 3030 3018 1c07 0000 0000 0000 0000 0000 0000 c060 3030 0000 0000 1030 60c0 0000 0000 ( d ) 0001 0000 0000 0000 0f19 3030 6060 6060 6030 390f 0000 0000 00e0 6060 6060 6060 60e0 6060 6060 6060 6060 e070 0000 0000 ( e ) 0000 0000 0000 0000 071c 1030 303f 3030 3018 1c07 0000 0000 0000 0000 0000 0000 80e0 2030 30f0 0000 1030 60c0 0000 0000 ( f ) 0001 0302 0606 0606 7f06 0606 0606 0606 0606 063f 0000 0000 00e0 3030 0000 0000 e000 0000 0000 0000 0000 00c0 0000 0000 ( g ) 0000 0000 0000 000f 1930 3030 3019 3f30 1f3f 7060 6030 1f00 0000 0000 0000 0030 f0c0 c0c0 c080 0000 00e0 f030 3060 c000 ( h ) 0070 3030 3030 3030 373c 3830 3030 3030 3030 3078 0000 0000 0000 0000 0000 0000 80c0 6060 6060 6060 6060 60f0 0000 0000 ( i ) 0003 0707 0300 0000 0f03 0303 0303 0303 0303 031f 0000 0000 0000 8080 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( j ) 0003 0707 0300 0000 0f03 0303 0303 0303 0303 43e3 e366 3c00 0000 8080 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( k ) 0070 3030 3030 3030 3130 3133 373f 3931 3030 3078 0000 0000 0000 0000 0000 0000 e0c0 8000 0000 8080 c0c0 60f0 0000 0000 ( l ) 001f 0303 0303 0303 0303 0303 0303 0303 0303 031f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( m ) 0000 0000 0000 0000 773b 3333 3333 3333 3333 3377 0000 0000 0000 0000 0000 0000 60b0 3030 3030 3030 3030 3070 0000 0000 ( n ) 0000 0000 0000 0000 773c 3030 3030 3030 3030 3078 0000 0000 0000 0000 0000 0000 80c0 6060 6060 6060 6060 60f0 0000 0000 ( o ) 0000 0000 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 0000 0000 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( p ) 0000 0000 0000 0000 773c 3030 3030 3030 3030 3c37 3030 7800 0000 0000 0000 0000 80e0 6030 3030 3030 3060 e080 0000 0000 ( q ) 0000 0000 0000 0000 0f39 3060 6060 6060 6030 390f 0000 0000 0000 0000 0000 0000 20e0 6060 6060 6060 6060 e060 6060 f000 ( r ) 0000 0000 0000 0000 3c0d 0e0c 0c0c 0c0c 0c0c 0c3f 0000 0000 0000 0000 0000 0000 e0b0 3000 0000 0000 0000 0000 0000 0000 ( s ) 0000 0000 0000 0000 0f18 3030 381f 0700 2030 382f 0000 0000 0000 0000 0000 0000 a0e0 6020 0000 e0f0 3030 60c0 0000 0000 ( t ) 0000 0000 0202 060e 3f06 0606 0606 0606 0606 0301 0000 0000 0000 0000 0000 0000 e000 0000 0000 0000 0010 30e0 0000 0000 ( u ) 0000 0000 0000 0000 7030 3030 3030 3030 3030 190f 0000 0000 0000 0000 0000 0000 e060 6060 6060 6060 6060 e070 0000 0000 ( v ) 0000 0000 0000 0000 7c30 3018 180c 0c0c 0607 0303 0000 0000 0000 0000 0000 0000 7020 2060 4040 c080 8080 0000 0000 0000 ( w ) 0000 0000 0000 0000 7733 3333 3333 3715 1d1d 0808 0000 0000 0000 0000 0000 0000 7020 2020 2020 6040 c0c0 8080 0000 0000 ( x ) 0000 0000 0000 0000 7c30 181c 0d07 070d 0918 3078 0000 0000 0000 0000 0000 0000 f060 c080 8000 0080 c0c0 60f0 0000 0000 ( y ) 0000 0000 0000 0000 7830 3018 1818 0c0c 0607 0703 6266 3c00 0000 0000 0000 0000 7020 2060 4040 c080 8080 0000 0000 0000 ( z ) 0000 0000 0000 0000 3f30 2021 0303 060e 1c18 303f 0000 0000 0000 0000 0000 0000 e060 c0c0 8000 0000 2020 60e0 0000 0000 ( curlies left ) 0000 0000 0000 0000 0101 0303 0101 0000 0000 0000 0000 0000 70c0 c0c0 c0c0 c0c0 8080 0000 8080 c0c0 c0c0 c0c0 c070 0000 ( pipe ) 0606 0606 0606 0606 0606 0606 0606 0606 0606 0606 0606 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( curlies right ) e030 3030 3030 3030 1818 0c0c 1818 3030 3030 3030 30e0 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ( tilde ) 0000 0000 0000 0000 384c 8603 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1020 c000 0000 0000 0000 0000 0000 &blank aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55 ] @latin-high ( A grave ) 1c0e 0300 0303 0705 050d 0908 181f 1010 3020 2078 0000 0000 0000 0000 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( A acute ) 0001 0300 0303 0705 050d 0908 181f 1010 3020 2078 0000 0000 e0c0 0000 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( A circ ) 0103 0600 0303 0705 050d 0908 181f 1010 3020 2078 0000 0000 0080 c000 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( A tilde ) 0306 0000 0303 0705 050d 0908 181f 1010 3020 2078 0000 0000 60c0 0000 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( A trema ) 183c 1800 0303 0705 050d 0908 181f 1010 3020 2078 0000 0000 60f0 6000 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( A circle ) 070d 080d 0703 0705 050d 0908 181f 1010 3020 2078 0000 0000 0080 8080 0000 0080 8080 80c0 c0c0 c0c0 6060 60f0 0000 0000 ( AE ) 0003 0307 0707 070f 0b0b 0b1b 1f13 1333 2323 2373 0000 0000 00f0 3010 1000 0020 2060 e060 2020 0000 1010 30f0 0000 0000 ( C cedil ) 0007 1c30 3060 6060 6060 6060 6060 6060 3030 1c07 0110 0f00 00a0 e060 2020 0000 0000 0000 0000 0010 3020 e080 c0c0 8000 ( E grave ) 1c0e 0300 7f18 1818 1818 181f 1818 1818 1818 187f 0000 0000 0000 0000 f010 1000 4040 c0c0 c040 4000 1010 30f0 0000 0000 ( E aigue ) 0001 0300 7f18 1818 1818 181f 1818 1818 1818 187f 0000 0000 e0c0 0000 f010 1000 4040 c0c0 c040 4000 1010 30f0 0000 0000 ( E circ ) 0103 0600 7f18 1818 1818 181f 1818 1818 1818 187f 0000 0000 0080 c000 f010 1000 4040 c0c0 c040 4000 1010 30f0 0000 0000 ( E trema ) 183c 1800 7f18 1818 1818 181f 1818 1818 1818 187f 0000 0000 60f0 6000 f010 1000 4040 c0c0 c040 4000 1010 30f0 0000 0000 ( I grave ) 1c0e 0300 1f03 0303 0303 0303 0303 0303 0303 031f 0000 0000 0000 0000 e000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( I aigue ) 0001 0300 1f03 0303 0303 0303 0303 0303 0303 031f 0000 0000 e0c0 0000 e000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( I circ ) 0103 0600 1f03 0303 0303 0303 0303 0303 0303 031f 0000 0000 0080 c000 e000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( I trema ) 183c 1800 1f03 0303 0303 0303 0303 0303 0303 031f 0000 0000 60f0 6000 e000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( D stroke ) 007f 3130 3030 3030 3030 fc30 3030 3030 3030 317f 0000 0000 0000 c060 6030 3030 3030 3030 3030 3030 6060 c000 0000 0000 ( N tilde ) 0006 0d00 0070 3838 2c2c 2626 2323 2121 2020 2070 0000 0000 00c0 8000 0070 2020 2020 2020 2020 a0a0 e0e0 6020 0000 0000 ( O grave ) 1c0e 0300 0f18 3030 6060 6060 6060 6060 3030 180f 0000 0000 0000 0000 80c0 6060 3030 3030 3030 3030 6060 c080 0000 0000 ( O aigue ) 0001 0300 0f18 3030 6060 6060 6060 6060 3030 180f 0000 0000 e0c0 0000 80c0 6060 3030 3030 3030 3030 6060 c080 0000 0000 ( O circ ) 0103 0600 0f18 3030 6060 6060 6060 6060 3030 180f 0000 0000 0080 c000 80c0 6060 3030 3030 3030 3030 6060 c080 0000 0000 ( O tilde ) 0306 0000 0f18 3030 6060 6060 6060 6060 3030 180f 0000 0000 60c0 0000 80c0 6060 3030 3030 3030 3030 6060 c080 0000 0000 ( O trema ) 3078 3000 0f18 3030 6060 6060 6060 6060 3030 180f 0000 0000 60f0 6000 80c0 6060 3030 3030 3030 3030 6060 c080 0000 0000 ( mul ) 0000 0000 0000 2010 0805 0205 0810 2000 0000 0000 0000 0000 0000 0000 0000 2040 8000 0000 8040 2000 0000 0000 0000 0000 ( O dash ) 000f 1830 3060 6061 6162 6262 6464 6868 3030 384f 0000 0000 0090 e060 60b0 b030 3030 3030 3030 3030 6060 c080 0000 0000 ( U grave ) 1c0e 0300 7830 3030 3030 3030 3030 3030 3018 1c07 0000 0000 0000 0000 7020 2020 2020 2020 2020 2020 6040 c080 0000 0000 ( U aigue ) 0001 0300 7830 3030 3030 3030 3030 3030 3018 1c07 0000 0000 e0c0 0000 7020 2020 2020 2020 2020 2020 6040 c080 0000 0000 ( U circ ) 0103 0600 7830 3030 3030 3030 3030 3030 3018 1c07 0000 0000 0080 c000 7020 2020 2020 2020 2020 2020 6040 c080 0000 0000 ( U trema ) 183c 1800 7830 3030 3030 3030 3030 3030 3018 1c07 0000 0000 60f0 6000 7020 2020 2020 2020 2020 2020 6040 c080 0000 0000 ( Y aigue ) 0001 0300 7830 3018 180c 0c0c 0607 0303 0303 030f 0000 0000 e0c0 0000 7020 2060 4040 c080 8080 0000 0000 00c0 0000 0000 ( thorn uc ) 0078 3030 303f 3030 3030 3030 3030 3030 3f30 3078 0000 0000 0000 0000 0080 e060 3030 3030 3030 60e0 8000 0000 0000 0000 ( S ger ) 001f 3030 3030 3030 3031 3130 3030 3030 3030 3271 0000 0000 0080 e060 3030 3070 e000 00e0 7030 3030 3030 6080 0000 0000 ( a grave ) 001c 0e03 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 0000 0000 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( a aigue ) 0001 0306 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 00c0 8000 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( a circ ) 0003 070c 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 0000 80c0 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( a tilde ) 0006 0d00 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 00c0 8000 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( a trema ) 0018 3c18 0000 0000 1f31 3000 001f 3060 6060 311f 0000 0000 0060 f060 0000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( a circle ) 0007 0d08 0d07 0000 1f31 3000 001f 3060 6060 311f 0000 0000 0000 8080 8000 0000 0080 c0c0 c0c0 c0c0 c0d0 f060 0000 0000 ( ae ) 0000 0000 0000 0000 1d37 3303 031f 3363 6363 371c 0000 0000 0000 0000 0000 0000 c060 3030 30f0 0000 0010 b0e0 0000 0000 ( c cedil ) 0000 0000 0000 0000 071c 1830 3030 3030 3018 1c07 0108 0700 0000 0000 0000 0000 c060 3030 0000 0000 1030 60c0 80c0 8000 ( e grave ) 001c 0e03 0000 0000 071c 1030 303f 3030 3018 1c07 0000 0000 0000 0000 0000 0000 80e0 2030 30f0 0000 1030 60c0 0000 0000 ( e aigu ) 0001 0306 0000 0000 071c 1030 303f 3030 3018 1c07 0000 0000 00c0 8000 0000 0000 80e0 2030 30f0 0000 1030 60c0 0000 0000 ( e circ ) 0003 070c 0000 0000 071c 1030 303f 3030 3018 1c07 0000 0000 0000 80c0 0000 0000 80e0 2030 30f0 0000 1030 60c0 0000 0000 ( e trema ) 0018 3c18 0000 0000 071c 1030 303f 3030 3018 1c07 0000 0000 0060 f060 0000 0000 80e0 2030 30f0 0000 1030 60c0 0000 0000 ( i grave ) 001c 0e03 0000 0000 0f03 0303 0303 0303 0303 031f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( i aigue ) 0001 0306 0000 0000 0f03 0303 0303 0303 0303 031f 0000 0000 00c0 8000 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( i circ ) 0003 070c 0000 0000 0f03 0303 0303 0303 0303 031f 0000 0000 0000 80c0 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( i trema ) 0018 3c18 0000 0000 0f03 0303 0303 0303 0303 031f 0000 0000 0060 f060 0000 0000 0000 0000 0000 0000 0000 00e0 0000 0000 ( d ) 000c 0301 0001 0200 0f19 3030 6060 6060 6030 390f 0000 0000 0000 00a0 c0c0 6060 60e0 6060 6060 6060 6060 c000 0000 0000 ( n tilde ) 0006 0d00 0000 0000 773c 3030 3030 3030 3030 3078 0000 0000 00c0 8000 0000 0000 80c0 6060 6060 6060 6060 60f0 0000 0000 ( o grave ) 001c 0e03 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 0000 0000 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( o aigue ) 0001 0306 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 00c0 8000 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( o circ ) 0003 070c 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 0000 80c0 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( o tilde ) 0006 0d00 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 00c0 8000 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( o trema ) 0018 3c18 0000 0000 071d 3030 6060 6060 3030 1d07 0000 0000 0060 f060 0000 0000 00c0 6060 3030 3030 6060 c000 0000 0000 ( div ) 0000 0000 0207 0702 0000 7f00 0002 0707 0200 0000 0000 0000 0000 0000 0000 0000 0000 f000 0000 0000 0000 0000 0000 0000 ( o dash ) 0000 0000 0000 0000 071d 3030 6162 626c 3030 5d07 0000 0000 0000 0000 0000 0000 00d0 6060 b030 3030 6060 c000 0000 0000 ( u grave ) 001c 0e03 0000 0000 7030 3030 3030 3030 3030 190f 0000 0000 0000 0000 0000 0000 e060 6060 6060 6060 6060 e070 0000 0000 ( u aigue ) 0001 0306 0000 0000 7030 3030 3030 3030 3030 190f 0000 0000 00c0 8000 0000 0000 e060 6060 6060 6060 6060 e070 0000 0000 ( u circ ) 0003 070c 0000 0000 7030 3030 3030 3030 3030 190f 0000 0000 0000 80c0 0000 0000 e060 6060 6060 6060 6060 e070 0000 0000 ( u trema ) 0018 3c18 0000 0000 7030 3030 3030 3030 3030 190f 0000 0000 0060 f060 0000 0000 e060 6060 6060 6060 6060 e070 0000 0000 ( y aigue ) 0000 0103 0000 0000 7830 3018 1818 0c0c 0607 0703 6266 3c00 00e0 c000 0000 0000 7020 2060 4040 c080 8080 0000 0000 0000 ( thorn lc ) 0000 0000 0078 3030 373c 3030 3030 3030 3030 3c37 3030 7800 0000 0000 0000 0000 80e0 6030 3030 3030 3060 e080 0000 0000 ( y trema ) 0018 3c18 0000 0000 7830 3018 1818 0c0c 0607 0703 6266 3c00 0060 f060 0000 0000 7020 2060 4040 c080 8080 0000 0000 0000 @appicon ( 3x3 ) [ 0000 0000 0000 0000 0000 0000 0000 0000 0008 0808 4838 1808 0814 14d4 b444 2414 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0307 070f 0000 0003 0408 0810 0808 08ff ffff ffff 1414 f700 0000 0000 0000 0080 e0f0 f0f8 0000 8060 1008 0804 0f0f 0f07 0703 0000 1010 1008 0c07 0300 ffff ffff ffff ff00 0080 c17f 0000 ffff f8f8 f8f0 f0e0 8000 0484 8408 1870 e080 ] ( @|memory ) $1 @textarea/buf