--- ray/src/util/rmatrix.c 2018/06/13 18:36:38 2.28 +++ ray/src/util/rmatrix.c 2019/08/12 04:12:57 2.31 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rmatrix.c,v 2.28 2018/06/13 18:36:38 greg Exp $"; +static const char RCSid[] = "$Id: rmatrix.c,v 2.31 2019/08/12 04:12:57 greg Exp $"; #endif /* * General matrix operations. @@ -81,7 +81,7 @@ static int get_dminfo(char *s, void *p) { RMATRIX *ip = (RMATRIX *)p; - char fmt[64]; + char fmt[MAXFMTLEN]; int i; if (headidval(fmt, s)) @@ -290,12 +290,15 @@ loaderr: /* should report error? */ static int rmx_write_ascii(const RMATRIX *rm, FILE *fp) { + const char *fmt = (rm->dtype == DTfloat) ? " %.7e" : + (rm->dtype == DTrgbe) | (rm->dtype == DTxyze) ? " %.3e" : + " %.15e" ; int i, j, k; for (i = 0; i < rm->nrows; i++) { for (j = 0; j < rm->ncols; j++) { for (k = 0; k < rm->ncomp; k++) - fprintf(fp, " %.15e", rmx_lval(rm,i,j,k)); + fprintf(fp, fmt, rmx_lval(rm,i,j,k)); fputc('\t', fp); } fputc('\n', fp); @@ -463,6 +466,12 @@ rmx_transpose(const RMATRIX *rm) if (rm == NULL) return(0); + if ((rm->nrows == 1) | (rm->ncols == 1)) { + dnew = rmx_copy(rm); + dnew->nrows = rm->ncols; + dnew->ncols = rm->nrows; + return(dnew); + } dnew = rmx_alloc(rm->ncols, rm->nrows, rm->ncomp); if (dnew == NULL) return(NULL);