( 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 ;