Metropoli BBS
VIEWER: formatk.c MODE: TEXT (ASCII)
/* Copyright (C) 1996 by Thomas Glen Smith.	All Rights Reserved. */
/* formatk APL2 V1.0.0 *************************************************
* Called by form when rite is of data type APLCPLX.  Rite was reshaped *
* by form to a 2-dimensional matrix.  Dimcb contains the original	 *
* dimensions.												 *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
Aplcb formatk(left,rite,dimcb)
Aplcb left,rite,dimcb;
{
	Endoper; Formbtk; Formldm; Formspp; Getcb; Intcopy; Temp;
	extern int aplerr;
	Aplcb colcb=NULL,out=NULL,rowcb=NULL;
	int cols,datacnt,*dimptr,lastdim,rank,rows;

	rows = *(rite->apldim);
	cols = *(rite->apldim + 1);
	colcb = getcb(NULL, cols * 2, APLAPL + APLTEMP, 1, NULL);
	rowcb = getcb(NULL, rows, APLNUMB, 2, NULL);
	if (rowcb != NULL) {
		*(rowcb->apldim) = rows;
		*(rowcb->apldim + 1) = 1;
	}
	for (;;) { /* lets me use break */
		if (aplerr) break;
		formspp(rite); /* Make adjustments for print precison (Lpp). */
		lastdim = formldm(rowcb,colcb,rite); /* Total width of output. */
		if (aplerr) break;
		datacnt = rows * lastdim; /* Total chars in output. */
		rank = dimcb->aplcount ? dimcb->aplcount : 1;
		out = getcb(NULL, datacnt, APLCHAR + APLTEMP, rank, NULL);
		if (out == NULL) break;
		if (rank > 1) {
			dimptr = intcopy(out->apldim, dimcb->aplptr.aplint,
				out->aplrank - 1, 1);
			*dimptr = lastdim;
		}
		formbtk(rite,out,colcb); /* Finish processing. */
		break; /* final break */
	}
	endoper(colcb);
	endoper(temp(rowcb));
	endoper(temp(dimcb));
	endoper(temp(rite));
	return(out);
}
[ RETURN TO DIRECTORY ]