anchor.diff:     try-again
      (handler-case
          (with-output-to-string (stream buf)
  -	 (case style
  -	   (:positional
  +	 (cond
  +	   ((eq style :positional)
   	    (print-positional stream object style digits-after-dot scale radix-point-str))
  -	   (otherwise
  +	   ((integerp object)
   	    (when (minusp object)
  -	      (write-string (get-minus-sign style) stream)
  -	      (setf object (- object)))
  -	    (typecase object
  -	      (integer
  -	       (print-jp-integer stream (* object (expt 10 scale)) style)
  -	       (when (zerop object)
  -		 (assert (zerop (length buf)))
  -		 (write-string (get-digit 0 style) stream))
  -	       (when radix-point-char
  -		 (write-string radix-point-str stream)))
  -	      (ratio
  -	       (assert (not (zerop object)))
  -	       (let ((object (* object (expt 10 scale))))
  -		 (print-jp-integer stream (denominator object) style)
  -		 (write-string (get-parts-of style) stream)
  -		 (print-jp-integer stream (abs (numerator object)) style)))
  -	      (float
  -	       (handler-case
  -		   (multiple-value-bind (int-buf frac-buf)
  -		       (make-fractional-string object style digits-after-dot scale)
  -		     (write-string int-buf stream)
  -		     ;; prints '0' if needed
  -		     (when (and (zerop (length int-buf))
  -				(or radix-point-char
  -				    (zerop (length frac-buf))))
  -		       (write-string (get-digit 0 style) stream))
  -		     ;; prints '.' if needed
  -		     (when (or radix-point-char
  -			       (and (plusp (length int-buf))
  -				    (plusp (length frac-buf))))
  -		       (write-string radix-point-str stream))
  -		     (write-string frac-buf stream))
  -		 (error (c)		; Infinity or NaN.
  -		   (error 'not-formattable-error :original-condition c))))
  -	      (t			; complex etc.
  -	       (error 'not-formattable-error))))))
  +	      (write-string (get-minus-sign style) stream))
  +	    (if (zerop object)
  +		(write-string (get-digit 0 style) stream)
  +		(print-jp-integer stream (* (abs object) (expt 10 scale)) style))
  +	    (when radix-point-char
  +	      (write-string radix-point-str stream)))
  +	   ((rationalp object)
  +	    (assert (not (zerop object)))
  +	    (when (minusp object)
  +	      (write-string (get-minus-sign style) stream))
  +	    (let ((object (* (abs object) (expt 10 scale))))
  +	      (print-jp-integer stream (denominator object) style)
  +	      (write-string (get-parts-of style) stream)
  +	      (print-jp-integer stream (abs (numerator object)) style)))
  +	   ((floatp object)
  +	    (when (minusp object)
  +	      (write-string (get-minus-sign style) stream))
  +	    (print-jp-fraction stream (abs object) style digits-after-dot scale
  +			       radix-point-str radix-point-char))
  +	   (t				; complex etc.
  +	    (error 'not-formattable-error))))
        (no-power-char-error ()
          ;; Decimal power chars are exhausted. Use positional.
          (assert (not (eq style :positional)))
  
positive.code:        (setf (fill-pointer buf) 0)
         (go try-again))
       (not-formattable-error ()
         (setf style nil)
         (setf (fill-pointer buf) 0)
         (format buf "~A" object)))
  
negative.code:      while (plusp rest)
       finally (mapc #'(lambda (s) (write-string s stream)) strs)))
  
  
  (defun print-jp-fraction (stream object style digits-after-dot scale
  			  radix-point-str radix-point-required-p)
    (let* ((trim-zero? (not digits-after-dot))
  	 (digits-after-dot (or digits-after-dot
  			       (- +power-min+)))
  