anchor.diff:      (c-format out "(cl:defconstant ")
       (c-print-symbol out lisp-name t)
       (c-format out " ")
  -    (format out "~&  if(SIGNED64P(~A))~%" c-name)
  -    (format out "    fprintf(output, \"%lli\", (int64_t) ~A);" c-name)
  -    (format out "~&  else~%")
  -    (format out "    fprintf(output, \"%llu\", (uint64_t) ~A);" c-name)
  +    (ecase type
  +      (integer
  +       (format out "~&  if(SIGNED64P(~A))~%" c-name)
  +       (format out "    fprintf(output, \"%lli\", (int64_t) ~A);" c-name)
  +       (format out "~&  else~%")
  +       (format out "    fprintf(output, \"%llu\", (uint64_t) ~A);" c-name))
  +      (double-float
  +       (format out "~&  fprintf(output, \"%s\", print_double_for_lisp((double)~A));~%" c-name)))
       (when documentation
         (c-format out " ~S" documentation))
       (c-format out ")~%")
  
positive.code: #define SIGNED64P(x) ( x <= 0x7FFFFFFFFFFFFFFFLL )
  
  void type_name(FILE *output, int signed_p, int size);
  
  int main(int argc, char**argv) {
    FILE *output = argc > 1 ? fopen(argv[1], \"w\") : stdout;
  
negative.code: 
  error:
    fprintf(output, \"(cl:error \\\"No type of size ~D.\\\" %i)\\n\", size);
  }
  
  char* print_double_for_lisp(double n)
  {
      static char buf[256];
      memset(buf, 0, 256);
      snprintf(buf, 255, \"(let ((*read-default-float-format* 'double-float)) (coerce (read-from-string \\\"%.20E\\\") 'double-float))\", n);
      return buf;
  }
  ")
  
  