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


(defconst *n-inst* 8.)
(defconst *level-width* 64.)
(defconst *tick-width* (round (/ *level-width* 8)))

(defun draw-one-level (x-pos tick-mark)
  (multiple-value-bind (width height)
      (send standard-output :inside-size)
    width
    (let ((start (round (* height .02)))
	  (end (round (* height .98))))
      (let ((len (round (/ (- end start) (float *n-inst*)))))
	(send standard-output :draw-line x-pos start x-pos (+ start (* len *n-inst*)))
	(send standard-output :draw-line
	      (+ x-pos *level-width*)
	      start
	      (+ x-pos *level-width*)
	      (+ start (* len *n-inst*)))
	(dotimes (i (1+ *n-inst*))
	  (send standard-output :draw-line
		x-pos
		(+ start (* i len))
		(+ x-pos *level-width*)
		(+ start (* i len)))
	  (when (and tick-mark
		     (< i *n-inst*))
	    (send standard-output :draw-line
		  x-pos
		  (+ start (* i len) (round len 2))
		  (+ x-pos *tick-width*)
		  (+ start (* i len) (round len 2)))
	    (send standard-output :draw-line
		  (- (+ x-pos *level-width*) *tick-width*)
		  (+ start (* i len) (round len 2))
		  (+ x-pos *level-width*)
		  (+ start (* i len) (round len 2)))))))))

(defun draw-it ()
  (send standard-output :clear-screen) 
  (let ((offset 200.))
    (dotimes (i 5)
      (draw-one-level (+ offset (* i (round (* 1.5 *level-width*))))
		      (= i 1)
		      ))))
		