/*Copyright (C) 1992, 1994 by Thomas Glen Smith. All Rights Reserved.*/
/** formath APL2 V1.0.0 ************************************************
* Called from formatg and formatz to format an element. *
***********************************************************************/
#define INCLUDES LIMITS+STDIO+STRING
#include "includes.h"
void formath(d,cp,width,precisn,digits,fch)
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. */
{
Chrcopy; Formben; Formbfn;
extern int apldigs, aplerr;
Imin;
char ch,dh,format[80],*ip,*jp,*kp,*op,output[80];
int i,j,k,m,ovflo;
output[0] = '\0';
if (precisn >= 0) { /* f-notation */
ovflo = formbfn(d,cp,width,precisn,digits,fch,output);
if (ovflo)
return; /* Return after overflow condition. */
}
else /* e-notation */
ovflo = formben(d,cp,width,precisn,digits,fch,output);
ip=output;
i = j = imin(strlen(output),width);
for (k = width - j; k > 0; k--) *cp++ = ' '; /* fill with blanks */
if ('.' == (ch = *fch)) /* Lfc[1] == '.'? */
while (i--) *cp++ = *ip++; /* Copy as is. */
else while (i--) /* Replace decimal point with Lfc[1]. */
*cp++ = ('.' == (dh = *ip++)) ? ch : dh;
}