19 wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
21 wrt_E(ufloat *p, int w, int d, int e, ftnlen len)
24 char buf[FMAX+EXPMAXDIGS+4], *s, *se;
25 int d1, delta, e1, i, sign, signspace;
37 if(f__scale >= d + 2 || f__scale <= -d)
42 if (len == sizeof(real))
52 signspace = (int)f__cplus;
55 dd = 0.; /* avoid -0 */
58 delta = w - (2 /* for the . and the d adjustment above */
59 + 2 /* for the E+ */ + signspace + d + e);
61 if (f__scale <= 0 && delta > 0) {
81 sprintf(buf,"%#.*E", d, dd);
83 /* check for NaN, Infinity */
84 if (!isdigit(buf[0])) {
88 signspace = 0; /* no sign for NaNs */
90 delta = w - strlen(buf) - signspace;
96 PUT(sign ? '-' : '+');
103 #ifdef GOOD_SPRINTF_EXPONENT /* When possible, exponent has 2 digits. */
104 if (f__scale != 1 && dd)
105 sprintf(se, "%+.2d", atoi(se) + 1 - f__scale);
108 sprintf(se, "%+.2d", atoi(se) + 1 - f__scale);
118 /* accommodate 3 significant digits in exponent */
122 for(s -= 2, e1 = 2; s[0] = s[1]; s++);
124 /* Pedantic gives the behavior that Fortran 77 specifies, */
125 /* i.e., requires that E be specified for exponent fields */
126 /* of more than 3 digits. With Pedantic undefined, we get */
127 /* the behavior that Cray displays -- you get a bigger */
128 /* exponent field if it fits. */
131 for(s -= 2, e1 = 2; s[0] = s[1]; s++)
134 if ((delta += 4) < 0)
148 for(s += 2, e1 = 2; *s; ++e1, ++s)
154 PUT(sign ? '-' : '+');
168 else if (f__scale > 1) {
177 while(s < se) PUT(*s++);
179 do PUT('0'); while(--d1 > 0);
195 wrt_F(p,w,d,len) ufloat *p; ftnlen len;
197 wrt_F(ufloat *p, int w, int d, ftnlen len)
202 char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s;
204 x= (len==sizeof(real)?p->pf:p->pd);
208 d1 = d - MAXFRACDIGS;
212 { x = -x; sign = 1; }
223 do x *= 10.; while(--n > 0);
225 do x *= 0.1; while(++n < 0);
228 sprintf(b = buf, "%#.*f", d, x);
231 n = sprintf(b = buf, "%#.*f", d, x) + d1;
235 if (buf[0] == '0' && d)
239 /* check for all zeros */
241 while(*s == '0') s++;
251 if (sign || f__cplus)
255 if (buf[0] == '0' && --n == w)
265 for(w -= n; --w >= 0; )