anchor.diff:                     (keep-soundless nil)
   
                      (width 800) (height 800)
  +                   (bit-rate (* 4 1024))
                      (num-steps 240) (a-base 51.0) (b-base 7.0) (h-base 29.0)
                      (dt-base 70.0)
                      (fps 30)
  
positive.code:         ;; real-dt is the actual increase in tv each iteration
          (real-dt (if (eql (spirograph-dt-type sp) :normal)
                       (spirograph-dt sp)
                       (/ pi (spirograph-dt sp)))))
      
      ;; Define some local functions for convenience
      (flet (
             ;; xmapper maps logical x coordinates in the range x-min to x-max to
             ;; screen coordinates in the range 0 to width
             (xmapper (x) (map-val x (- max-radius) max-radius 0 width))
  
             ;; ymapper does the same thing, but for y coordinates
             (ymapper (y) (map-val y (- max-radius) max-radius 0 height))
             
             ;; spirograph-x and spirograph-y hide funcall and make the code
             ;; easier to read below
             (spirograph-x (tv) (funcall x-function sp tv))
             (spirograph-y (tv) (funcall y-function sp tv)))
        
        ;; Draw the curve
        (loop
           for i below (spirograph-steps sp)
  
negative.code:     
      (cl-cairo2:scale 1 1)
      (cl-cairo2:set-line-width 0.5)
      (cl-cairo2:set-source-rgba 0.0 0.0 0.8 0.95)
      (flet ((cairo-line (x1 y1 x2 y2)
               (cl-cairo2:move-to x1 y1)
               (cl-cairo2:line-to x2 y2)
  