( 54K . Image ) |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 $5 &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 |a0 @File/vector $2 &success $1 &success-lb $1 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |0050 @Varvara/version |4000 @path/length |0400 @images/length |000 @src/buf $60 @path/buf $60 @imgpath/buf $60 @images/selected $1 &count $1 &inverted $1 |100 @on-reset ( -> ) ;meta #06 DEO2 theme/ theme/ ;src/on-console .Console/vector DEO2 ;images/on-control .Controller/vector DEO2 .Console/type DEI ?{ src/ } images/ BRK @meta 00 ( ) "Image 0a ( ) "An 20 "Image 20 "Viewer 0a ( ) "By 20 "Devine 20 "Lu 20 "Linvega 0a ( ) "19 20 "Jun 20 "2026 00 ( . ) 03 ( - ) 56 =Varvara/version ( - ) a0 =manifest/dat ( - ) 83 =appicon @manifest/dat ( . ) _{ =dict/image ( - ) 40 00 =images/ =dict/prev ( - ) 80 00 =images/ =dict/next ( - ) 01 00 =images/ =dict/invert ( - ) 00 "q = =dict/quit } 00 @ ( -- ) #800f DEO BRK ( @|vectors ) @src/on-console ( -> ) [ LIT2 02 -Console/type ] DEI LTH ?{ .Console/read DEI / BRK } / BRK @src/ ( -- ) ;&home ( >> ) @src/ ( str* -- ) &>w LDAk DUP ?{ POP POP2 !/ } / INC2 !/>w @src/ ( -- ) #0000 .Console/vector DEO2 ;&buf path/ images/is-valid ?{ #00 !images/ POP #00 !/ POP [ LIT2 ff -&count ] LDZ ADD !/ ( id -- ) DUP .&selected STZ .&count LDZ ?{ POP !/ } #00 SWP DUP ADD ;&buf ADD2 LDA2 ( >> ) @images/ ( name* -- ) imgpath/make ( | Display ) .&selected LDZ INC u8/ [ LIT2 "/ 18 ] DEO .&count LDZ u8/ #2018 DEO DUP2 str/ #0a18 DEO !image/ @images/ ( -- ) #1010 / .Screen/width DEI2 #01 SFT2 #000c SUB2 .Screen/x DEO2 .Screen/height DEI2 #01 SFT2 #000c SUB2 .Screen/y DEO2 ;&nil-icn .Screen/addr DEO2 [ LIT2 26 -Screen/auto ] DEO [ LIT2 03 -Screen/sprite ] DEOk DEOk DEO JMP2r @images/ ( name* -- ) /is-valid ?{ POP2 JMP2r } [ LIT2 &ptr =&buf ] INC2k INC2 ,&ptr STR2 STA2 .&count LDZ INC .&count STZ JMP2r @images/ ( -- ) [ LIT2 00 -&count ] STZ JMP2r @images/is-valid ( name* -- name* t ) DUP2 str/cap #0004 SUB2 ( | handlers ) /is-icn ?{ /is-chr ?{ POP2 #00 JMP2r } } POP2 #01 JMP2r @images/is-icn ( name* -- name* t ) LDA2k [ LIT2 ".i ] NEQ2 ?{ INC2k INC2 LDA2 [ LIT2 "cn ] EQU2 JMP2r } #00 JMP2r @images/is-chr ( name* -- name* t ) LDA2k [ LIT2 ".c ] NEQ2 ?{ INC2k INC2 LDA2 [ LIT2 "hr ] EQU2 JMP2r } #00 JMP2r @images/ ( w8 h8 -- ) #00 SWP #30 SFT2 .Screen/height DEO2 #00 SWP #30 SFT2 .Screen/width DEO2 JMP2r ( @|Image ) @image/ ( path* -- ) #0000 DUP2 .Screen/x DEO2 .Screen/y DEO2 DUP2 /exists ?{ POP2 !images/ } DUP2 .File/name DEO2 ( | depth ) DUP2 /read-depth .File/length DEO2 STH2 ( | size ) /read-size DUP2 images/ #00 SWP SUB ,&height STR #00 SWP SUB ,&width STR ;&mem .Screen/addr DEO2 ( | draw ) [ LIT2 01 -Screen/auto ] DEO [ LIT &height $1 ] &>v #0000 .Screen/x DEO2 [ LIT &width $1 ] &>h ;&mem .File/read DEO2 [ LIT2 00 -File/success-lb ] DEI EQU ?{ DEOkr INC DUP ?/>h } POP ( lb ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 INC DUP ?/>v POP POP2r JMP2r @image/read-size ( str* -- w h ) str/cap #0009 SUB2 ( no size ) INC2k INC2 LDA [ LIT "x ] EQU ?{ POP2 #1010 JMP2r } LDA2k /read-byte STH #0003 ADD2 LDA2 /read-byte STHr SWP JMP2r @image/read-byte ( a b -- byte ) chr/hex SWP chr/hex #40 SFT ORA JMP2r @image/read-depth ( str* -- length* mask* ) str/cap #0003 SUB2 LDA2 [ LIT2 "ch ] EQU2 ?{ [ LIT2 03 -Screen/sprite ] #0008 JMP2r } [ LIT2 81 -Screen/sprite ] #0010 JMP2r @image/exists ( path* -- t ) .File/name DEO2 #0001 .File/length DEO2 ;&b .File/read DEO2 .File/success-lb DEI JMP2r &b $1 ( @|Stdlib ) @chr/hex ( char -- ) ( dec ) [ LIT "0 ] SUB DUP #09 GTH [ JMP JMP2r ] ( hex ) #27 SUB DUP #0a SUB #05 GTH [ JMP JMP2r ] ( nil ) POP #ff JMP2r @str/ ( str* -- ) LDAk DUP ?{ POP POP2 JMP2r } #18 DEO INC2 !/ @str/cap ( str* -- end* ) LDAk ?{ JMP2r } INC2 !/cap %u8/mod ( a b -- a%b ) { DIVk MUL SUB } @u8/ ( u8 -- ) DUP #0a LTH ?{ DUP #64 LTH ?{ ( 100 ) DUP #64 DIV / #64 /mod } ( 10 ) DUP #0a DIV / #0a /mod } ( 1 ) & ( d -- ) [ LIT "0 ] ADD #18 DEO JMP2r @theme/ ( -- ) #07bf !/ @theme/ ( -- ) #fb70 ( >> ) @theme/ ( abcd* -- ) DUP2 .System/r DEO2 DUP2 .System/g DEO2 .System/b DEO2 JMP2r @theme/ ( -- ) ;&path .File/name DEO2 #0002 .File/length DEO2 ;&r .File/read DEO2 ;&g .File/read DEO2 ;&b .File/read DEO2 [ LIT2 00 -File/success-lb ] DEI EQU ?{ [ LIT2 &r $2 ] .System/r DEO2 [ LIT2 &g $2 ] .System/g DEO2 [ LIT2 &b $2 ] .System/b DEO2 } JMP2r &path ".theme $1 @manifest/scan ( but key -- fn* ) ORAk ?{ POP2 #ffff JMP2r } ,&bk STR2 ;&dat &>cat DUP2 LDAk #00 SWP INC ADD2 SWP2 #0003 ADD2 &>opt LDA2k [ LIT2 &bk $2 ] NEQ2 ?{ NIP2 INC2 INC2 LDA2 JMP2r } #0006 ADD2 GTH2k ?/>opt POP2 INC2 LDAk ?/>cat POP2 #ffff JMP2r ( @|Assets ) @dict/image "Image 00 &next "Next 00 &prev "Previous 00 &invert "Invert 00 &quit "Quit 00 @appicon [ 0000 0001 030c 1010 0000 0000 0000 0000 0000 c324 3c00 0000 0000 0000 0000 0000 0000 0080 c030 0808 0000 0000 0000 0000 2020 2020 2020 2020 0000 0000 0000 0000 0000 4200 003c 0000 0000 0000 0000 0000 0404 0404 0404 0404 0000 0000 0000 0000 1010 0c03 0000 0000 0000 0000 0000 0000 0000 00ff 0000 0000 0000 0000 0000 0000 0808 30c0 0000 0000 0000 0000 0000 0000 ] @images/nil-icn [ 0000 0001 030c 1010 0000 c324 3c00 0000 0609 0182 c032 0808 2020 2020 2020 2020 0000 4200 0018 2400 0404 0404 0404 0404 1010 0c03 0000 0000 0000 00ff 0000 0000 0808 30c0 0000 0000 ] @image/mem $10 @images/buf $&length @path/folder $&length