| 32 |  | return(NULL); | 
| 33 |  | dnew->nrows = nr; dnew->ncols = nc; dnew->ncomp = n; | 
| 34 |  | dnew->dtype = DTdouble; | 
| 35 | + | dnew->swapin = 0; | 
| 36 |  | dnew->info = NULL; | 
| 37 |  | return(dnew); | 
| 38 |  | } | 
| 99 |  | ip->ncols = atoi(s+6); | 
| 100 |  | return(0); | 
| 101 |  | } | 
| 102 | + | if ((i = isbigendian(s)) >= 0) { | 
| 103 | + | ip->swapin = (nativebigendian() != i); | 
| 104 | + | return(0); | 
| 105 | + | } | 
| 106 |  | if (!formatval(fmt, s)) { | 
| 107 |  | rmx_addinfo(ip, s); | 
| 108 |  | return(0); | 
| 142 |  | for (j = 0; j < rm->ncols; j++) { | 
| 143 |  | if (getbinary(val, sizeof(val[0]), rm->ncomp, fp) != rm->ncomp) | 
| 144 |  | return(0); | 
| 145 | + | if (rm->swapin) | 
| 146 | + | swap32((char *)val, rm->ncomp); | 
| 147 |  | for (k = rm->ncomp; k--; ) | 
| 148 |  | rmx_lval(rm,i,j,k) = val[k]; | 
| 149 |  | } | 
| 156 |  | int     i, j; | 
| 157 |  |  | 
| 158 |  | for (i = 0; i < rm->nrows; i++) | 
| 159 | < | for (j = 0; j < rm->ncols; j++) | 
| 159 | > | for (j = 0; j < rm->ncols; j++) { | 
| 160 |  | if (getbinary(&rmx_lval(rm,i,j,0), sizeof(double), rm->ncomp, fp) != rm->ncomp) | 
| 161 |  | return(0); | 
| 162 | + | if (rm->swapin) | 
| 163 | + | swap64((char *)&rmx_lval(rm,i,j,0), rm->ncomp); | 
| 164 | + | } | 
| 165 |  | return(1); | 
| 166 |  | } | 
| 167 |  |  | 
| 202 |  | } else if (inspec[0] == '!') { | 
| 203 |  | if (!(fp = popen(inspec+1, "r"))) | 
| 204 |  | return(NULL); | 
| 205 | < | SET_FILE_BINARY(stdin); | 
| 205 | > | SET_FILE_BINARY(fp); | 
| 206 |  | } else { | 
| 207 |  | const char      *sp = inspec;   /* check suffix */ | 
| 208 |  | while (*sp) | 
| 227 |  | #endif | 
| 228 |  | dinfo.nrows = dinfo.ncols = dinfo.ncomp = 0; | 
| 229 |  | dinfo.dtype = DTascii;                  /* assumed w/o FORMAT */ | 
| 230 | + | dinfo.swapin = 0; | 
| 231 |  | dinfo.info = NULL; | 
| 232 |  | if (getheader(fp, get_dminfo, &dinfo) < 0) { | 
| 233 |  | fclose(fp); | 
| 254 |  | dnew->info = dinfo.info; | 
| 255 |  | switch (dinfo.dtype) { | 
| 256 |  | case DTascii: | 
| 257 | < | SET_FILE_TEXT(stdin); | 
| 257 | > | SET_FILE_TEXT(fp); | 
| 258 |  | if (!rmx_load_ascii(dnew, fp)) | 
| 259 |  | goto loaderr; | 
| 260 |  | dnew->dtype = DTascii;          /* should leave double? */ | 
| 261 |  | break; | 
| 262 |  | case DTfloat: | 
| 263 | + | dnew->swapin = dinfo.swapin; | 
| 264 |  | if (!rmx_load_float(dnew, fp)) | 
| 265 |  | goto loaderr; | 
| 266 |  | dnew->dtype = DTfloat; | 
| 267 |  | break; | 
| 268 |  | case DTdouble: | 
| 269 | + | dnew->swapin = dinfo.swapin; | 
| 270 |  | if (!rmx_load_double(dnew, fp)) | 
| 271 |  | goto loaderr; | 
| 272 |  | dnew->dtype = DTdouble; | 
| 408 |  | return(0); | 
| 409 |  | rm = mydm; | 
| 410 |  | } | 
| 411 | + | if ((dtype == DTfloat) | (dtype == DTdouble)) | 
| 412 | + | fputendian(fp);                 /* important to record */ | 
| 413 |  | fputformat((char *)cm_fmt_id[dtype], fp); | 
| 414 |  | fputc('\n', fp); | 
| 415 |  | switch (dtype) {                        /* write data */ |