: lineh ( color len x y imgbuf -- ) point swap cfill ; : linev ( color len x y imgbuf -- ) dup imgsize drop push point swap do 2dup c! i2 + loop 2drop pop drop ; var tmp1 var tmp2 var tmp3 var tmp4 : box ( color x2 x1 y2 y1 imgbuf -- ) push ( buf i3 ) dup push ( y1 i2 ) over tmp1 ! ( y2 1 ) - tmp2 ! ( ylen 2 ) dup push ( x1 i ) over tmp3 ! ( x2 3 ) - tmp4 ! ( xlen 4 ) dup tmp4 @ i i2 i3 lineh dup tmp4 @ 1+ i tmp1 @ i3 lineh dup tmp2 @ i i2 i3 linev tmp2 @ tmp3 @ i2 i3 linev pop pop 2drop pop drop ; rh tmp1 rh tmp2 rh tmp3 rh tmp4 var flipxs var flipys var fliplb var flipib var flipsa var flipda : flipv ( imgbuf -- ) dup push imgsize over dynal push ( sizex sizey R: imgbuf linebuf ) flipys ! flipxs ! pop fliplb ! pop flipib ! flipys @ 2 / do 0 i flipib @ point flipsa ! 0 flipys @ i - 1- flipib @ point flipda ! flipda @ fliplb @ dynp flipxs @ cmove flipsa @ flipda @ flipxs @ cmove fliplb @ dynp flipsa @ flipxs @ cmove loop ; rh flipxs rh flipys rh fliplb rh flipib rh flipsa rh flipda : imgcoltrans ( ImgBuf Color ToColor -- ) push push dup dynp 8 + swap dyns 8 - do dup c@ i2 = if i3 over c! then 1+ loop drop pop pop 2drop ; var imgfillbuf var imgfilld var imgfillc : imgfill ( color x y imgbuf -- ) dup imgfillbuf ! point dup c@ imgfillc ! FE swap c! ( color ) until imgfilld off imgfillbuf @ imgsize swap 1- swap do imgfillbuf @ imgsize drop 1- i imgfillbuf @ point over do dup c@ FE = if dup 1- c@ imgfillc @ = if dup 1- FE swap c! imgfilld on then then 1- loop drop 0 i imgfillbuf @ point over do dup c@ FE = if dup 1+ c@ imgfillc @ = if dup 1+ FE swap c! imgfilld on then then 1+ loop drop loop drop imgfillbuf @ imgsize 1- swap do i imgfillbuf @ dup imgsize swap push 1- swap point over do dup c@ FE = if dup i2 - c@ imgfillc @ = if dup i2 - FE swap c! imgfilld on then then i2 - loop drop i2 0 imgfillbuf @ point over do dup c@ FE = if dup i2 + c@ imgfillc @ = if dup i2 + FE swap c! imgfilld on then then i2 + loop pop 2drop loop drop imgfilld @ if imgfilld off else done then loop imgfillbuf @ FE rot imgcoltrans ; rh imgfillbuf rh imgfilld rh imgfillc