#define PSH(X) (*(st++)=(X))

#define PLUS 1
#define SPACE 2

#define fabs(x) ((x)<0 ? (-x) : (x))

/* FIXME: This file contains roundoff error */

char * ftoa(char *st, float f, int flags)
{
#if 0
 int i;
 float frac;

 i = (int) (f*1000.0);
 frac = fabs(f - i);
 sprintf(st, "%d+e4", i);
 /*if (frac > 1e-4)
   strcat(st, ".");
 while (frac > 1e-4) {
   frac *= 10;
   sprintf(st+strlen(st), "%d", (int)frac);
 }*/
#endif
 
#if 1
  int i;
  int z;
  int exp = 0;

  if (f < 0) {
    PSH('-');
    f = -f;
  } else {
    if (flags & PLUS) PSH('+');
    if (flags & SPACE) PSH(' ');
  }

  if (f) {
    while (f < 1) {
      f *=10;
      exp--;
    }

    while (f >= 10) {
      f /=10;
      exp++;
    }
  }

  while ((exp > 0) && (exp < 7)) {
	  PSH('0'+f);
	  z = f;
	  f -= z;
	  f *= 10;
  	exp--;
  }

  PSH('0'+f);
  z = f;
  f -= z;
  f *= 10;

  PSH('.');

  for (i=0;i<2;i++) {
    PSH('0'+f);
    z = f;
    f -= z;
    f *= 10;
  }
  
  if (exp != 0) {

	  PSH('e');
	  if (exp < 0) {
	    PSH('-');
	    exp = -exp;
	  } else {
	    PSH('+');
	  }

	  PSH('0'+exp/10);
	  exp -= (exp/10) * 10;
	  PSH('0'+exp);
  

 }

  PSH(0);


  return st;
#endif
}