anchor.diff:               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\"~^,~}~&};"
  +          name
  +          (loop for f in frames
  +             for p = (frame-name f)
  +             collect (if p p -1))))
  +
   (defun emit-rel-fun (name frames &key (stream t))
     (format stream "~&void ~A~&( double *restrict q, double *restrict e ) ~&{~&" name)
     (loop
  
positive.code:     (format f "~{~&#include \"~A\"~}" headers)
      (emit-rel-fun relative-function frames :stream f)
      (emit-parents-array parents-array frames :stream f)
      (emit-abs-fun absolute-function frames :stream f :normalize normalize)
      )
    ;; dot
  
negative.code:                           normalize
                            (relative-function "rel_tf")
                            (absolute-function "abs_tf")
                            (parents-array "parents")
                            (names-array "parents")
                            )
    ;; header
    (with-open-file (f header-file :direction :output :if-exists :supersede)
      (format f "~&/* AUTOGENERATED BY REFLEX FRAME GENERATOR */")
      (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 "~&~%/* NAME INDICES */")
      (emit-name-indices frames :stream f :max frame-max)
      (format f "~&~%/* CONFIGURATION INDICES */")
  