--- ray/src/util/rmtxop.c 2023/12/19 00:39:03 2.31 +++ ray/src/util/rmtxop.c 2024/11/08 17:52:26 2.35 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rmtxop.c,v 2.31 2023/12/19 00:39:03 greg Exp $"; +static const char RCSid[] = "$Id: rmtxop.c,v 2.35 2024/11/08 17:52:26 greg Exp $"; #endif /* * General component matrix operations. @@ -7,7 +7,6 @@ static const char RCSid[] = "$Id: rmtxop.c,v 2.31 2023 #include #include "rtio.h" -#include "resolu.h" #include "rmatrix.h" #include "platform.h" @@ -35,7 +34,7 @@ typedef struct { int verbose = 0; /* verbose reporting? */ /* Load matrix */ -static int +int loadmatrix(ROPMAT *rop) { if (rop->mtx != NULL) /* already loaded? */ @@ -46,10 +45,10 @@ loadmatrix(ROPMAT *rop) return(!rop->mtx ? -1 : 1); } -static int checksymbolic(ROPMAT *rop); +extern int checksymbolic(ROPMAT *rop); /* Check/set transform based on a reference input file */ -static int +int checkreffile(ROPMAT *rop) { static const char *curRF = NULL; @@ -108,7 +107,7 @@ checkreffile(ROPMAT *rop) } /* Compute conversion row from spectrum to one channel of RGB */ -static void +void rgbrow(ROPMAT *rop, int r, int p) { const int nc = rop->mtx->ncomp; @@ -125,7 +124,7 @@ rgbrow(ROPMAT *rop, int r, int p) } /* Compute conversion row from spectrum to one channel of XYZ */ -static void +void xyzrow(ROPMAT *rop, int r, int p) { const int nc = rop->mtx->ncomp; @@ -142,8 +141,8 @@ xyzrow(ROPMAT *rop, int r, int p) } /* Use the spectral sensitivity function to compute matrix coefficients */ -static void -sensrow(ROPMAT *rop, int r, double (*sf)(SCOLOR sc, int ncs, const float wlpt[4])) +void +sensrow(ROPMAT *rop, int r, double (*sf)(const SCOLOR sc, int ncs, const float wlpt[4])) { const int nc = rop->mtx->ncomp; int i; @@ -157,7 +156,7 @@ sensrow(ROPMAT *rop, int r, double (*sf)(SCOLOR sc, in } /* Check/set symbolic transform */ -static int +int checksymbolic(ROPMAT *rop) { const int nc = rop->mtx->ncomp; @@ -256,10 +255,10 @@ checksymbolic(ROPMAT *rop) } } /* return recommended output type */ - if (!strcmp(rop->preop.csym, "XYZ")) { + if (!strcasecmp(rop->preop.csym, "XYZ")) { if (dt <= DTspec) return(DTxyze); - } else if (!strcmp(rop->preop.csym, "RGB")) { + } else if (!strcasecmp(rop->preop.csym, "RGB")) { if (dt <= DTspec) return(DTrgbe); } else if (dt == DTspec) @@ -268,7 +267,7 @@ checksymbolic(ROPMAT *rop) } /* Get matrix and perform unary operations */ -static RMATRIX * +RMATRIX * loadop(ROPMAT *rop) { int outtype = 0; @@ -368,7 +367,7 @@ failure: } /* Execute binary operation, free matrix arguments and return new result */ -static RMATRIX * +RMATRIX * binaryop(const char *inspec, RMATRIX *mleft, int op, RMATRIX *mright) { RMATRIX *mres = NULL; @@ -445,7 +444,7 @@ binaryop(const char *inspec, RMATRIX *mleft, int op, R } /* Perform matrix operations from left to right */ -static RMATRIX * +RMATRIX * op_left2right(ROPMAT *mop) { RMATRIX *mleft = loadop(mop); @@ -461,7 +460,7 @@ op_left2right(ROPMAT *mop) } /* Perform matrix operations from right to left */ -static RMATRIX * +RMATRIX * op_right2left(ROPMAT *mop) { RMATRIX *mright; @@ -490,7 +489,7 @@ op_right2left(ROPMAT *mop) : (mop)->mtx->ncols) /* Should we prefer concatenating from rightmost matrix towards left? */ -static int +int prefer_right2left(ROPMAT *mop) { int mri = 0; @@ -517,7 +516,7 @@ prefer_right2left(ROPMAT *mop) return(t_ncols(mop+mri) < t_nrows(mop)); } -static int +int get_factors(double da[], int n, char *av[]) { int ac; @@ -527,7 +526,7 @@ get_factors(double da[], int n, char *av[]) return(ac); } -static ROPMAT * +ROPMAT * resize_moparr(ROPMAT *mop, int n2alloc) { int nmats = 0; @@ -535,7 +534,7 @@ resize_moparr(ROPMAT *mop, int n2alloc) while (mop[nmats++].binop) ; - for (i = nmats; i > n2alloc; i--) + for (i = nmats; i >= n2alloc; i--) rmx_free(mop[i].mtx); mop = (ROPMAT *)realloc(mop, n2alloc*sizeof(ROPMAT)); if (mop == NULL) {