/* Copyright (C) 1994 by Thomas Glen Smith. All Rights Reserved. */
/* formatr APL2 V1.0.0 *************************************************
* Called by formatq to format a value using a model. *
* Returns a ptr to the next available output position. *
***********************************************************************/
#define INCLUDES STDIO+STRING+FORM
#include "includes.h"
char *formatr(op,field,value,gch)
char *op; /* Place to store next formatted output. */
char *field; /* Field containing format control. */
double value; /* Value to be formatted. */
char *gch; /* Ptr to Lfc data. */
{
Chrcopy; Eq; Formats; Formatt; Formatv; Formsci;
extern int aplerr;
int bufint[BIALEN],fldint[BIALEN];
char *bufptr[BCALEN],*fldptr[BCALEN];
int i,neg;
char buffer[80],*bufp,ch;
if (value < 0.0) {
neg = 1; /* Save indication of negative value. */
value = -value; /* Get absolute value. */
}
else neg = 0;
formats(field,fldptr,fldint); /* Extract formatting info. */
if (E_FORMAT_SYMBOL(fldptr) != NULL) /* Scientific notation? */
return(formsci(op,gch,bufptr,bufint,fldptr,fldint,
neg,value,buffer));
if (eq(value,0.0)) /* Absolute value < fuzz? */
if (!(FCCFLAGS(fldint) & FC0)) { /* Not zero-fill? */
ch = (FCCFLAGS(fldint) & FC8) ? *(gch+2) : ' ';
op = chrcopy(op,&ch,FIELD_LENGTH(fldint),0); /* Fill. */
return(op); /* All done. */
}
bufp = formatt(buffer,value,PLACES(fldint)); /* Round and sprintf. */
formats(bufp,bufptr,bufint);
return(formatv(op,gch,bufptr,bufint,fldptr,fldint,neg));
}