/* Copyright (C) 1996 by Thomas Glen Smith. All Rights Reserved. */
/* formbfv APL2 V1.0.0 *************************************************
* Called by formatv to loop through each field character. *
***********************************************************************/
#define INCLUDES STDIO+STRING+FORM
#include "includes.h"
void formbfv(bs,fs,pold,pofd,oq,gch,fldptr,fldint,bdi,fdi,bpl,fpl,fln)
char *bs,*fs,**pold,**pofd,*oq,*gch,**fldptr;
int *fldint,bdi,fdi,bpl,fpl,fln;
{
Formbfw; Formbfx;
extern int aplerr;
char ch,fch,*fct,*pz;
while(fln--) { /* Once for each field character. */
fch = *(fct = fs++); /* Next char from model field. */
if (fch >= '0' && fch <= '9') { /* Field character digit? */
*pold = oq; /* Save A(last output digit). */
if (fdi) { /* Left of decimal point? */
if (fdi-- == bdi) {
bdi--;
if (*pofd == NULL)
*pofd = oq; /* A(1st output digit). */
*oq++ = *bs++; /* Output value digit. */
}
else *oq++ = formbfx(fldptr,fct,pofd,oq); /*fdi>bdi*/
}
else { /* We're working right of decimal point. */
if (fpl-- == bpl--)
*oq++ = *bs++; /* Output value decimal. */
else
if (bpl < 0) { /* fpl > bpl. */
ch = ' ';
if (NULL != (pz = RIGHT_PAD_ZEROS(fldptr)))
if (pz >= fct)
ch = '0';
*oq++ = ch;
}
else *oq++ = *bs++; /* fpl < bpl. */
}
}
else if (fch == '.') {
if (fpl &&
(bpl || RIGHT_PAD_ZEROS(fldptr) != NULL))
*oq++ = *(gch+0); /* Lfc[1] (decimal point) */
bs++; /* bump past d.p. in buffer */
}
else if (fch == ',')
*oq++ = *(gch+1); /* Lfc[2] (comma) */
else if (fch == *(gch+4))
*oq++ = ' '; /* Lfc[5] (print as blank) */
else *oq++ = formbfw(fch,fct,fdi,fldptr,fldint);
/* It is either decorator or literal. */
}
}