0 create-buffer pat-buf : pat-insert2D (s w h -- ) \ only applies to current field layer-mask @ save-select/sector/src \ save state 2dup V min swap by subsector \ point to subsector site-src site layer-mask ! host \ host data nip V / 1 max 0 do select i module \ talk to one module scan-io pat-buf i limit part \ send part loop restore-select/sector/src \ restore state step ; : load-patbuf (s ul-x ul-y width height -- ) layer-mask @ >r 2over ( ulx uly w h ulx uly ) undo-display-shift \ undo display centering negate swap negate swap shift-space \ shift to ul corner r> layer-mask ! pat-insert2D shift-space \ put pattern in ul corner shift-for-display \ restore display centering ; : pat-load2D (s ul-x ul-y width height pstr.pattern -- ) 3dup drop * ['] pat-buf change-reglen pat-buf load-buffer load-patbuf ; : pat-center2D (s width height pstr.pattern -- ) >r 2dup Y swap - 2/ swap X swap - 2/ swap 2swap r> pat-load2D ;