/* Copyright (C) 1996 by Thomas Glen Smith. All Rights Reserved. */
/* formldm APL2 V1.0.0 *************************************************
* Called by formatk to determine the last dimension, formatting the *
* real and imaginary parts of rite as separate vectors along each *
* column, storing the result as an Aplcb in colcb. *
***********************************************************************/
#define INCLUDES APLCB
#include "includes.h"
int formldm(rowcb,colcb,rite)
Aplcb rowcb; /* RowsX1 matrix of APLNUMB, one row per row of rite. */
Aplcb colcb; /* Vector of APLAPL, two per column of rite. */
Aplcb rite; /* RowsXcols Matrix of complex numbers to be formatted. */
{
Form;
extern int aplerr;
Aplcb *cb,cc;
int col,cols,lastdim,row,rows;
double *ip, *op;
rows = *(rite->apldim);
cols = *(rite->apldim + 1);
lastdim = cols * 2 - 1; /* 1 for blank between columns, 1 for j. */
cb = colcb->aplptr.aplapl;
op = rowcb->aplptr.apldata;
for (col = 0; aplerr == 0 && col < cols; col++) {
ip = rite->aplptr.apldata + col * 2;
for (row = 0; row < rows; row++) /* Set rowcb to the real part */
*(op + row) = *(ip + row * cols * 2); /* from input column. */
*cb++ = cc = form(NULL, rowcb); /* Format real part of column. */
if (cc == NULL) break;
cc->aplflags -= APLTEMP;
lastdim += *(cc->apldim + 1); /* Bump lastdim by column width. */
for (row = 0; row < rows; row++) /* Set rowcb to the imag. part */
*(op + row) = *(ip + row * cols * 2 + 1); /* from input col. */
*cb++ = cc = form(NULL, rowcb); /* Format imaginary part of col. */
if (cc == NULL) break;
cc->aplflags -= APLTEMP;
lastdim += *(cc->apldim + 1); /* Bump lastdim by column width. */
}
return(lastdim);
}