--- ray/src/util/rmtxop.c 2024/05/16 18:59:19 2.33 +++ ray/src/util/rmtxop.c 2025/03/28 00:06:36 2.36 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rmtxop.c,v 2.33 2024/05/16 18:59:19 greg Exp $"; +static const char RCSid[] = "$Id: rmtxop.c,v 2.36 2025/03/28 00:06:36 greg Exp $"; #endif /* * General component matrix operations. @@ -10,7 +10,9 @@ static const char RCSid[] = "$Id: rmtxop.c,v 2.33 2024 #include "rmatrix.h" #include "platform.h" +#ifndef MAXCOMP #define MAXCOMP MAXCSAMP /* #components we support */ +#endif /* Unary matrix operation(s) */ typedef struct { @@ -34,7 +36,7 @@ typedef struct { int verbose = 0; /* verbose reporting? */ /* Load matrix */ -static int +int loadmatrix(ROPMAT *rop) { if (rop->mtx != NULL) /* already loaded? */ @@ -45,10 +47,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; @@ -107,7 +109,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; @@ -124,7 +126,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; @@ -141,8 +143,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; @@ -156,7 +158,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; @@ -267,7 +269,7 @@ checksymbolic(ROPMAT *rop) } /* Get matrix and perform unary operations */ -static RMATRIX * +RMATRIX * loadop(ROPMAT *rop) { int outtype = 0; @@ -367,7 +369,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; @@ -444,7 +446,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); @@ -460,7 +462,7 @@ op_left2right(ROPMAT *mop) } /* Perform matrix operations from right to left */ -static RMATRIX * +RMATRIX * op_right2left(ROPMAT *mop) { RMATRIX *mright; @@ -489,7 +491,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; @@ -516,7 +518,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; @@ -526,7 +528,7 @@ get_factors(double da[], int n, char *av[]) return(ac); } -static ROPMAT * +ROPMAT * resize_moparr(ROPMAT *mop, int n2alloc) { int nmats = 0; @@ -534,7 +536,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) {