home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_07 / 9n07084a < prev    next >
Text File  |  1991-02-12  |  1KB  |  40 lines

  1.  
  2. /*LINTLIBRARY*/
  3. /* a simplified more FORTRAN-like g conversion which is 4.3BSD compatible */
  4.         /* reverse AT&T sense for BSD compatibility */
  5. extern char *cvt();
  6. #define ecvt(arg,ndigs,decexp,neg) cvt(arg,ndigs,decexp,neg,0);
  7.  
  8. char *gcvt(arg, ndigs, buf)
  9.     double arg;
  10.     int ndigs;
  11.     char *buf;
  12. {
  13.     int neg, decexp;
  14.     register char *p1, *p2;
  15.     register int i;
  16.     p2 = buf;
  17.  
  18.     p1 = ecvt(arg, ndigs, &decexp, &neg);
  19.  
  20.     if (decexp > ndigs || decexp <= -4) {       /* E-style */
  21.         (void) sprintf(buf, "%c%c.%se%+.2d", neg ? '-' : ' ', p1[0], &p1[1], decexp - 1);
  22.     } else {
  23.         *(p2++) = neg ? '-' : ' ';
  24.         if (decexp <= 0) {
  25.             *(p2++) = '.';
  26.             while (decexp++ < 0)
  27.                 *(p2++) = '0';
  28.             decexp--;           /* don't put it out again */
  29.         }
  30.         for (i = 0; ++i <= ndigs;) {
  31.             *(p2++) = *(p1++);
  32.             if (i == decexp)
  33.                 *(p2++) = '.';
  34.         }
  35.     /* strip one trailing zero (see cvt() ) */
  36.         *(p2 - (*(p2 - 1) == '0')) = '\0';
  37.     }
  38.     return (buf);
  39. }
  40.