ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/rmtxop.c
(Generate patch)

Comparing ray/src/util/rmtxop.c (file contents):
Revision 2.1 by greg, Sat May 31 05:02:37 2014 UTC vs.
Revision 2.10 by greg, Thu Aug 18 17:57:57 2016 UTC

# Line 10 | Line 10 | static const char RCSid[] = "$Id$";
10   #include "rtio.h"
11   #include "resolu.h"
12   #include "rmatrix.h"
13 + #include "platform.h"
14  
15   #define MAXCOMP         50              /* #components we support */
16  
# Line 18 | Line 19 | typedef struct {
19          int             nsf;                    /* number of scalars */
20          double          cmat[MAXCOMP*MAXCOMP];  /* component transformation */
21          int             clen;                   /* number of coefficients */
22 <        int             transpose;              /* do transpose? (<0 first) */
22 >        int             transpose;              /* do transpose? */
23          int             op;                     /* '*' or '+' */
24   } ROPERAT;                              /* matrix operation */
25  
25 int     outfmt = DTascii;               /* output format */
26   int     verbose = 0;                    /* verbose reporting? */
27  
28   static void
# Line 36 | Line 36 | static RMATRIX *
36   operate(RMATRIX *mleft, ROPERAT *op, const char *fname)
37   {
38          RMATRIX *mright = rmx_load(fname);
39 +        RMATRIX *mtmp;
40          int     i;
41  
42          if (fname == NULL)
# Line 45 | Line 46 | operate(RMATRIX *mleft, ROPERAT *op, const char *fname
46                  fputs(": cannot load matrix\n", stderr);
47                  return(NULL);
48          }
49 <        if (op->transpose < 0) {        /* transpose first? */
50 <                if (!rmx_transpose(mright)) {
49 >        if (op->transpose) {            /* transpose matrix? */
50 >                mtmp = rmx_transpose(mright);
51 >                if (mtmp == NULL) {
52                          fputs(fname, stderr);
53                          fputs(": transpose failed\n", stderr);
54                          rmx_free(mright);
# Line 56 | Line 58 | operate(RMATRIX *mleft, ROPERAT *op, const char *fname
58                          fputs(fname, stderr);
59                          fputs(": transposed rows and columns\n", stderr);
60                  }
61 +                rmx_free(mright);
62 +                mright = mtmp;
63          }
64          if (op->nsf > 0) {              /* apply scalar(s) */
65                  if (op->clen > 0) {
# Line 88 | Line 92 | operate(RMATRIX *mleft, ROPERAT *op, const char *fname
92                  }
93          }
94          if (op->clen > 0) {             /* apply transform */
91                RMATRIX *mtmp;
95                  if (op->clen % mright->ncomp) {
96                          fprintf(stderr, "%s: -c must have N x %d coefficients\n",
97                                          fname, mright->ncomp);
# Line 107 | Line 110 | operate(RMATRIX *mleft, ROPERAT *op, const char *fname
110                  rmx_free(mright);
111                  mright = mtmp;
112          }
110        if (op->transpose > 0) {        /* transpose after? */
111                if (!rmx_transpose(mright)) {
112                        fputs(fname, stderr);
113                        fputs(": transpose failed\n", stderr);
114                        rmx_free(mright);
115                        return(NULL);
116                }
117                if (verbose) {
118                        fputs(fname, stderr);
119                        fputs(": transposed rows and columns\n", stderr);
120                }
121        }
113          if (mleft == NULL)              /* just one matrix */
114                  return(mright);
115          if (op->op == '*') {            /* concatenate */
# Line 174 | Line 165 | get_factors(double da[], int n, char *av[])
165   int
166   main(int argc, char *argv[])
167   {
168 +        int     outfmt = DTfromHeader;
169          RMATRIX *mres = NULL;
170          ROPERAT op;
179        long    nbw;
171          int     i;
172                                          /* initialize */
173          op_default(&op);
# Line 220 | Line 211 | main(int argc, char *argv[])
211                                  }
212                                  break;
213                          case 't':
214 <                                if (!op.nsf & !op.clen)
224 <                                        op.transpose = -1;
225 <                                else
226 <                                        op.transpose = 1;
214 >                                op.transpose = 1;
215                                  break;
216                          case 's':
217                                  if (n > MAXCOMP) n = MAXCOMP;
# Line 244 | Line 232 | main(int argc, char *argv[])
232          if (mres == NULL)               /* check that we got something */
233                  goto userr;
234                                          /* write result to stdout */
235 +        if (outfmt == DTfromHeader)
236 +                outfmt = mres->dtype;
237 +        if (outfmt != DTascii)
238 +                SET_FILE_BINARY(stdout);
239          newheader("RADIANCE", stdout);
240          printargs(argc, argv, stdout);
241 <        nbw = rmx_write(mres, outfmt, stdout);
250 <        /* rmx_free(mres); mres = NULL; */
251 <        if (nbw <= 0) {
241 >        if (!rmx_write(mres, outfmt, stdout)) {
242                  fprintf(stderr, "%s: error writing result matrix\n", argv[0]);
243                  return(1);
244          }
245 <        if (verbose)
256 <                fprintf(stderr, "%s: %ld bytes written\n", argv[0], nbw);
245 >        /* rmx_free(mres); mres = NULL; */
246          return(0);
247   userr:
248          fprintf(stderr,
249 <        "Usage: %s [-v][-f[adfc][-t][-s sf ..][-c ce ..] m1 [+] .. > mres\n",
249 >        "Usage: %s [-v][-f[adfc][-t][-s sf .. | -c ce ..] m1 [+] .. > mres\n",
250                          argv[0]);
251          return(1);
252   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines