( 1 ) m: +src SI A A add, ; m: srcstride SS A A add, ; m: dststride DS P P add, ; m: si! ?lit if 0 SI addi, ; then T SI mr, M drop ; m: ss! T SS mr, M drop ; : ds! B/P @ * { T DS mr, } drop ; m: cpixel M lookup M +src M pixel ; m: spixel M ?lookup M if M pixel M then M +src ; : pixels for pixel next ; m: cpixels M for M cpixel M next M srcstride M dststride ; m: spixels M for M spixel M next M srcstride M dststride ; : vline DW @ 1 - swap for pixel dup stride next drop ; : si! si! ; : ss! ss! ; : +src +src ; : cpixels cpixels ; : spixels pixels ; ( 2 ) : >ds DW @ - negate ds! ; : straight drop dup >ds SW @ - negate ss! 1 si! ; : mirror drop dup >ds dup 1 - +a SW @ + ss! -1 si! ; : flip 1 - SW @ * +a dup >ds SW @ + negate ss! 1 si! ; : topsy 1 - SW @ * over + 1 - +a dup >ds SW @ - ss! -1 si! ; : cdraw for dup cpixels next drop ; : sdraw for dup spixels next drop ;