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

Comparing ray/src/util/rmatrix.c (file contents):
Revision 2.34 by greg, Mon Aug 12 20:38:19 2019 UTC vs.
Revision 2.35 by greg, Wed Aug 14 18:20:02 2019 UTC

# Line 98 | Line 98 | get_dminfo(char *s, void *p)
98                  ip->ncols = atoi(s+6);
99                  return(0);
100          }
101 +        if ((i = isbigendian(s)) >= 0) {
102 +                ip->swapin = (nativebigendian() != i);
103 +                return(0);
104 +        }
105          if (!formatval(fmt, s)) {
106                  rmx_addinfo(ip, s);
107                  return(0);
# Line 137 | Line 141 | rmx_load_float(RMATRIX *rm, FILE *fp)
141              for (j = 0; j < rm->ncols; j++) {
142                  if (getbinary(val, sizeof(val[0]), rm->ncomp, fp) != rm->ncomp)
143                      return(0);
144 +                if (rm->swapin)
145 +                    swap32((char *)val, rm->ncomp);
146                  for (k = rm->ncomp; k--; )
147                       rmx_lval(rm,i,j,k) = val[k];
148              }
# Line 149 | Line 155 | rmx_load_double(RMATRIX *rm, FILE *fp)
155          int     i, j;
156  
157          for (i = 0; i < rm->nrows; i++)
158 <            for (j = 0; j < rm->ncols; j++)
158 >            for (j = 0; j < rm->ncols; j++) {
159                  if (getbinary(&rmx_lval(rm,i,j,0), sizeof(double), rm->ncomp, fp) != rm->ncomp)
160                      return(0);
161 +                if (rm->swapin)
162 +                    swap64((char *)&rmx_lval(rm,i,j,0), rm->ncomp);
163 +            }
164          return(1);
165   }
166  
# Line 217 | Line 226 | rmx_load(const char *inspec)
226   #endif
227          dinfo.nrows = dinfo.ncols = dinfo.ncomp = 0;
228          dinfo.dtype = DTascii;                  /* assumed w/o FORMAT */
229 +        dinfo.swapin = 0;
230          dinfo.info = NULL;
231          if (getheader(fp, get_dminfo, &dinfo) < 0) {
232                  fclose(fp);
# Line 249 | Line 259 | rmx_load(const char *inspec)
259                  dnew->dtype = DTascii;          /* should leave double? */
260                  break;
261          case DTfloat:
262 +                dnew->swapin = dinfo.swapin;
263                  if (!rmx_load_float(dnew, fp))
264                          goto loaderr;
265                  dnew->dtype = DTfloat;
266                  break;
267          case DTdouble:
268 +                dnew->swapin = dinfo.swapin;
269                  if (!rmx_load_double(dnew, fp))
270                          goto loaderr;
271                  dnew->dtype = DTdouble;
# Line 395 | Line 407 | rmx_write(const RMATRIX *rm, int dtype, FILE *fp)
407                          return(0);
408                  rm = mydm;
409          }
410 +        if ((dtype == DTfloat) | (dtype == DTdouble))
411 +                fputendian(fp);                 /* important to record */
412          fputformat((char *)cm_fmt_id[dtype], fp);
413          fputc('\n', fp);
414          switch (dtype) {                        /* write data */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines