;;; -*- Mode:LISP; Package:USER; Readtable:CL -*-


(defmacro iterate-xy (x0 y0 next-x next-y)
  `(catch 'done
     (do ((x ,x0 (funcall ,next-x x y))
	  (y ,y0 (funcall ,next-y x y)))
	 (())
       (plot x y))))

(defvar a (/ 7.0 5.0))
(defvar b (/ 3.0 10.0))

(defun henon ()
  (iterate-xy 0 0
	      #'(lambda (x y) (+ (- y (* a x x)) 1))
	      #'(lambda (x y) (* b x))))

(defparameter x-offset 400)
(defparameter y-offset 400)
(defparameter x-scale 300)
(defparameter y-scale -300)

(defun plot (x y)
;  (print (list x y))
  (when (listen) (throw 'done t))
  (send tv:selected-window :draw-point
	(+ x-offset (truncate (* x x-scale)))
	(+ y-offset (truncate (* y y-scale)))))


  (tv:prepare-sheet (tv:main-screen)
    (as-2-reverse 1 (tv:sheet-screen-array tv:main-screen) (truncate x)
		  (truncate y))))
