/* 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);
}