/*Copyright (C) 1992, 1994 by Thomas Glen Smith. All Rights Reserved.*/ /** formben APL2 V1.0.0 ************************************************ * Called from formath to format an element. * ***********************************************************************/ #define INCLUDES LIMITS+STDIO+STRING #include "includes.h" void formben(d,cp,width,precisn,digits,fch,output) double d; /* Value t/b formatted. */ char *cp; /* Output location. */ int width; /* Width of output. */ int precisn; /* Places output right of d.p. */ int digits; /* Places output left of d.p. */ char *fch; /* Lfc string. */ char *output; /* Work buffer. */ { extern int aplerr; char format[80],*ip,*jp,*kp; int i,j,k,m; sprintf(format,"%%%d.%de",width,-precisn-1); sprintf(output,format,d); j = strcspn(output,"eE"); /* index to e */ ip = strchr(output,'.'); /* index to 1st dot */ if (ip != NULL) { i = ip - output; if (i < j) { ip = (jp = output + j) - 1; /* digit left of e */ while (*ip == '0') ip--; if (*ip != '.') ip++; /* 1st char to eliminate */ k = jp - ip; /* count of chars to eliminate */ if (k) { while('\0' != (*ip++ = *jp++)); j -= k; } } } jp = kp = output + j + 1; /* beyond e */ if (*jp == '+') while('\0' != (*jp = *(jp + 1))) jp++; else if (*jp == '-') kp = jp + 1; else kp = jp; ip = (jp = kp) + strlen(kp) - 1; /* ip points to last char */ while('0' == *kp && kp != ip) kp++; if (jp != kp) while('\0' != (*jp++ = *kp++)); if (width <= (i = strlen(output))) if (i > (j = strcspn(output,"eE"))) if ('0' == *(ip = output + j + 2)) { while (--ip >= output) *(ip + 1) = *ip; output[0] = ' '; /* left pad = blank */ } }