interpreted/compiled added by alexshendi on Sun Sep 13 19:44:40 2015

;; Output:
;;      Interpreted (csi -s)            Compiled 
;;      (csi -s)                        (csc -d2 -strict-types -specialize)
;;      0                               0
;;      1                               1
;;      2                               2
;;      3                               3
;;      4                               4
;;      5                               5
;;      6                               6
;;      7                               7
;;      8                               8
;;      8                               0

(define (make-color r g b a) (vector r g b a))
(define (color-red c) (vector-ref c 0))
(define (color-green c) (vector-ref c 1))
(define (color-blue c) (vector-ref c 2))
(define (color-alpha c) (vector-ref c 3))

(define (read-texture filename factor)
  (with-input-from-file filename
    (lambda ()
      (let ((header 
              (reverse 
                (let loop ((i 4) (l '()))
                  (if (zero? i)
                      (begin (read-char) l)
                      (loop (- i 1) (cons (read) l)))))))
        ; (read-char)
        (let ((len (* (cadr header) (caddr header))))
          (let ((texture (make-vector len)))
             (let loop ((i 0))
                (if (= i len)
                    texture
                    (let* ((r (quotient (char->integer (read-char)) factor))
                           (g (quotient (char->integer (read-char)) factor))
                           (b (quotient (char->integer (read-char)) factor)))
                       (vector-set! texture i (make-color r g b 255))
                       (loop (+ i 1)))))))))))

(define (read-all-textures factor)
  (let ((l '())
        (textures (list "resources/bluestone.ppm"
                        "resources/colorstone.ppm"
                        "resources/eagle.ppm"
                        "resources/greystone.ppm"
                        "resources/mossy.ppm"
                        "resources/purplestone.ppm"
                        "resources/redbrick.ppm"
                        "resources/wood.ppm")))
    (for-each (lambda (s)
                (set! l (cons (read-texture s factor) l))
                (display (length l) (current-error-port))
                (newline (current-error-port)))
              textures)
    (display (length l) (current-error-port))
    (newline (current-error-port))
    (list->vector (reverse l))))

(define *textures* (read-all-textures 1))