; MagnifyPixels - Show Pixels on the Graphics Canvas Blown Up
; -------------

; Description of box of pixels to be magnified
;
; number of pixels per side, their length
to boxSideLen
  output 70
  end
; half length of side - with any fractional part removed
to halfBoxSideLen
  output int quotient boxSideLen 2
  end
; leftX, topY, width, height sentence describing the box
to boxRectList
  output (sentence (minus halfBoxSideLen) halfBoxSideLen boxSideLen boxSideLen)
  end
; number of members (pixels) in the box
to boxNumPix
  output product boxSideLen boxSideLen
  end

; the number of replicated pixels in each dimension for an original pixel
to magnification
  output 4
  end

; Magnified box stuff
;
; length of a side
to bigBoxSideLen
  output product boxSideLen magnification
  end
; half length of side - with any fractional part removed
to halfBigBoxSideLen
  output int quotient bigBoxSideLen 2
  end
; output sentence of leftX, topY, width, height
to bigBoxRectList
  output (sentence (minus halfBigBoxSideLen) halfBigBoxSideLen bigBoxSideLen bigBoxSideLen)
  end


; output the input number decremented by one
to decr :num
  output difference :num 1
  end
; output the input number incremented by one
to incr :num
  output sum :num 1
  end

; output new array composed of magnified pixels
to getMagnifiedPixels :pixAry
  localmake "bigPixAry array (product bigBoxSideLen bigBoxSideLen)
  localmake "putIdx 1
  repeat (sentence 1 boxNumPix boxSideLen) ~
         [localmake "linePixIdx repcount ~
          repeat magnification ~
                 [repeat (sentence :linePixIdx (sum :linePixIdx (decr boxSideLen))) ~
                         [localmake "pixel item repcount :pixAry ~
                          repeat magnification ~
                                 [setitem :putIdx :bigPixAry :pixel make "putIdx incr :putIdx]]]]
  output :bigPixAry
  end


; MAIN
; ----
to main
  clean
  ;hideturtle loadpict "yoshiamon.bmp
  setpencolor 10 stamp
  wait 1000
  localmake "pixels getpixels boxRectList
  setpixels bigBoxRectList (getMagnifiedPixels :pixels)
  end

main