9 wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
11 char buf[FMAX+EXPMAXDIGS+4], *s, *se;
12 int d1, delta, e1, i, sign, signspace;
21 if(scale >= d + 2 || scale <= -d)
26 if (len == sizeof(real))
35 dd = 0.; /* avoid -0 */
42 delta = w - (2 /* for the . and the d adjustment above */
43 + 2 /* for the E+ */ + signspace + d + e);
58 sprintf(buf,"%#.*E", d, dd);
60 /* check for NaN, Infinity */
61 if (!isdigit(buf[0])) {
62 delta = w - strlen(buf) - signspace;
68 PUT(sign ? '-' : '+');
76 sprintf(se, "%+.2d", atoi(se) + 1 - scale);
83 /* accommodate 3 significant digits in exponent */
87 for(s -= 2, e1 = 2; s[0] = s[1]; s++);
89 /* Pedantic gives the behavior that Fortran 77 specifies, */
90 /* i.e., requires that E be specified for exponent fields */
91 /* of more than 3 digits. With Pedantic undefined, we get */
92 /* the behavior that Cray displays -- you get a bigger */
93 /* exponent field if it fits. */
96 for(s -= 2, e1 = 2; s[0] = s[1]; s++)
113 for(s += 2, e1 = 2; *s; ++e1, ++s)
119 PUT(sign ? '-' : '+');
129 else if (scale > 1) {
138 while(s < se) PUT(*s++);
140 do PUT('0'); while(--d1 > 0);
155 wrt_F(p,w,d,len) ufloat *p; ftnlen len;
159 char *b, buf[MAXINTDIGS+MAXFRACDIGS+4], *s;
161 x= (len==sizeof(real)?p->pf:p->pd);
165 d1 = d - MAXFRACDIGS;
169 { x = -x; sign = 1; }
180 do x *= 10.; while(--n > 0);
182 do x *= 0.1; while(++n < 0);
185 sprintf(b = buf, "%#.*f", d, x);
188 n = sprintf(b = buf, "%#.*f", d, x) + d1;
191 if (buf[0] == '0' && d)
194 /* check for all zeros */
196 while(*s == '0') s++;
213 for(w -= n; --w >= 0; )