Metropoli BBS
VIEWER: formatm.c MODE: TEXT (ASCII)
/*Copyright (C) 1992, 1994 by Thomas Glen Smith.  All Rights Reserved.*/
/* formatm APL2 V1.0.0 *************************************************
* Called from formatd when left has been shaped to a vector having two *
* elements for each column of rite, rite having been reshaped, if      *
* necessary, to be a two-dimensional matrix.  Each pair of elements in *
* left describe the width and precision of a column of rite.  Formatm  *
* fills in any missing width/precision specifications.                 *
***********************************************************************/
#define INCLUDES APLCB+FORM
#include "includes.h"
void formatm(left,rite,cba)
Aplcb left,rite,cba;
{
	Endoper; Formate; Formatf; Getcb; Temp;
     extern int apldigs, aplerr, indxorg;
	int *bp,i,j,k,*lp,*pp,w,*wp,*zp;

	i = *(cba->apldim + 1); /* Number of columns of input. */
     for (;;) {
     	if (aplerr) break;
	     lp = left->aplptr.aplint;
          bp = Bixcb;
	     pp = Precb;
	     wp = Widcb;
          zp = Zixcb;
		j = indxorg;
          k = 0;
	     while(i--) {
          	*bp++ = j++; /* index vector = 1, 2, 3, ... */
	     	w = *wp++ = *lp++;
	     	if (apldigs < w) aplerr = 28;
	     	if ( 0 > w) aplerr = 29;
	          *pp++ = *lp++;
               *zp++ = (w == 0); /* which columns have widths of zero */
               k |= (w == 0); /* k == 1 if some widths are zero */
	     }
          endoper(temp(left));
		if (aplerr) break;
		if (k) { /* some widths are zero? */
			formate(rite,cba); /* Widths for e-notation. */
			formatf(rite,cba); /* Widths for f-notation. */
		}
          break; /* final break of for(;;) */
     }
}
[ RETURN TO DIRECTORY ]