|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 |a0 @File1/vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 |00 @input/path $2f &end $1 %dbg! ( -- ) { #00 ?{ LIT2 01 -System/debug DEO } } |100 @on-reset ( -> ) ;meta .System/metadata DEO2 .Console/type DEI ?{ ;errs/usage die } ;on-input .Console/vector DEO2 BRK @on-input ( -> ) #0403 .Console/type DEI NEQk ?{ ;errs/usage die } NIP NEQk ?{ !readloop } POP2 [ LIT2 -input/end &ptr -input/path ] NEQk ?{ ;errs/pathlimit die } .Console/read DEI SWP STZk INC ,&ptr STR POP2 BRK @readloop ( -- ) ;input/path .File1/name DEO2 .File1/success DEI BRK @die ( str* -- ) perr [ LIT2 81 -System/state ] DEO BRK @pout ( str* -- ) .Console/write ;puts/target STA !puts @perr ( str* -- ) .Console/error ;puts/target STA ( >> ) @puts ( str* -- ) LDAk DUP ?{ POP POP2 JMP2r } [ LIT &target -Console/write ] DEO INC2 !puts @Gif/chunk &magic $ff &screen &wid $2 &hei $2 &pack $1 &bg $1 &aspect $1 &colortab $300 @Gif/init ( -- ) #06 /read /magic-ok? ?{ ;errs/corrupt die } @Gif/read ( len* -- ) #00 SWP .File1/length DEO2 ;/chunk .File1/read JMP2r @errs/usage "usage: 20 "gif.rom 20 "image.gif 0a $1 &pathlimit "GIF 20 "path 20 "limit 20 "exceeded. 0a $1 &filename ": 20 "file 20 "unreadable 0a $1 @meta $1 ( name ) "GIF 0a ( desc ) ".gif 20 "file 20 "renderer 0a ( auth ) "By 20 "Aleteoryx 0a ( date ) "20250319 $2