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.8 by greg, Wed Jul 22 04:47:51 2015 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines