anchor.diff:        (setq %gl:*gl-get-proc-address* 'get-proc-address)))
     (values))
   
  -(defun ensure-init ()
  -  (when (not (null-pointer-p *argcp*))
  -          (foreign-free *argcp*)
  -          (setf *argcp* (null-pointer)))
  -  (when (not (null-pointer-p *argv*))
  -          (foreign-free (mem-aref *argv* :pointer 0))
  -          (foreign-free *argv*)
  -          (setf *argv* (null-pointer))))
  -
  -(eval-when (:load-toplevel :execute)
  -  #+clisp (pushnew 'ensure-init custom:*fini-hooks*) ;untested
  -  #+sbcl  (pushnew 'ensure-init sb-ext:*save-hooks*)
  -  #+cmu (pushnew 'ensure-init ext:*before-save-initializations*) ;untested
  -  #-(or clisp sbcl cmu)
  -  (warn "Don't know how to setup a hook before saving cores on this Lisp."))
  -
  -
  -;; We call init at load-time in order to ensure a usable glut as
  -;; often as possible. Also, we call init when the main event loop
  -;; returns in main.lisp. We do this to avoid having freeglut call
  -;; exit() when performing some operation that needs previous
  -;; initialization.
  -; (init)
  +;; We call init at load-time in order to ensure a usable glut as often
  +;; as possible. Also, we call init when the main event loop returns in
  +;; main.lisp and some other places. We do this to avoid having
  +;; freeglut call exit() when performing some operation that needs
  +;; previous initialization.
  +(init)
   
   ;;; The display-mode bitfield is defined in state.lisp
   (defcfun ("glutInitDisplayMode" %glutInitDisplayMode) :void
  
positive.code: 
  (defun init (&optional (program-name (lisp-implementation-type)))
    (without-fp-traps
      (unless (getp :init-state)
        ;; freeglut will exit() if we try to call initGlut() when
        ;; things are already initialized.
        (when (not (null-pointer-p *argcp*))
          (foreign-free *argcp*))
        (when (not (null-pointer-p *argv*))
          (foreign-free (mem-aref *argv* :pointer 0))
          (foreign-free *argv*))
        (setq *argcp* (foreign-alloc :int :initial-element 1))
        (setq *argv* (foreign-alloc
                      :pointer
                      :initial-element (foreign-string-alloc program-name)))
        (%glutInit *argcp* *argv*)
        ;; By default, we choose the saner option to return from the event
        ;; loop on window close instead of exit()ing.
        (set-action-on-window-close :action-continue-execution)
  
negative.code:   (argcp :pointer)  ; int*
    (argv  :pointer)) ; char**
  
  (defmacro without-fp-traps (&body body)
    #+(and sbcl (or x86 x86-64))
    `(sb-int:with-float-traps-masked (:invalid :divide-by-zero)
  