anchor.diff:                            (relative-function "rel_tf")
                             (absolute-function "abs_tf")
                             (parents-array "parents")
  -                          (names-array "parents")
  +                          (names-array "names")
  +                          (axes-array "axes")
                             )
     ;; header
     (with-open-file (f header-file :direction :output :if-exists :supersede)
       (format f "~&/* AUTOGENERATED BY REFLEX FRAME GENERATOR */")
  +    (ifdef-c++ f "extern \"C\" {")
  +    (format f "~{~&#include <~A>~}" system-headers)
       (format f "~{~&#include <~A>~}" system-headers)
       (format f "~{~&#include \"~A\"~}~%" headers)
       (format f "~&extern const char *~A[];" names-array)
       (format f "~&extern const ssize_t ~A[];" parents-array)
  +    (format f "~&extern const double ~A[][3];" axes-array)
       (format f "~&~%/* NAME INDICES */")
       (emit-name-indices frames :stream f :max frame-max)
       (format f "~&~%/* CONFIGURATION INDICES */")
  
positive.code:              for p = (frame-parent f)
               collect (if p p -1))))
  
  
  (defun emit-names-array (name frames &key (stream t))
    (format stream "~&const char * ~A[] = {~&~{~&    \"~A\"~^,~}~&};"
  
negative.code:                 parent name))
    (format stream  "~&}"))
  
  
  (defun ifdef-c++ (stream string)
    (format stream "~&~%#ifdef __cplusplus~&~A~&#endif /*__cplusplus*/~%~%" string))
  
  (defun write-frame-files (header-file source-file frames &key
                            headers
                            system-headers
  