macros.scm added by graspee on Mon May 14 19:56:31 2012

; for macro from loops egg by Juergen Lorenz
; changed to include the upper bound in the iteration,
; step (and therefore a set of brackets) removed	and renamed "for" 
; from "do-for"

(define-syntax for ;was do-for
   (syntax-rules ()
		    ((_ var start stop xpr xpr1 ...) ; brackets around start stop step
	        (let ((%stop stop))
			          (let loop ((var start))
			            (unless (> var %stop) ; was >=
				              xpr xpr1 ...
		             (loop (+ 1 var))))))
				    ((_ var (start stop) xpr . xprs)
						      (do-for var (start stop 1) xpr . xprs))))

 


;2 dimensional array size of 1st dimension, size of 2nd, data 

(define-record 2darray x y data); define-record is not standard scheme

; returns a new 2darray object of the size x by y
(define (new-2darray x y)
 (make-2darray x y (make-vector (* x y))))

;access the array. array xpos ypos data to put / get
;it's 0 based so an array 200 by 200 will be accessed
;0..199 by 0..199
(define (2darray-put a x y data)
 (vector-set! (2darray-data a)  ( + x (* y (2darray-x a)))	data)
 )

(define (2darray-get a x y)
(vector-ref (2darray-data a) ( + x ( * y (2darray-x a)))))