| 167 | 
  | 
        if (!rmx_prepare(rm)) | 
| 168 | 
  | 
                return(0); | 
| 169 | 
  | 
        for (i = 0; i < rm->nrows; i++) | 
| 170 | 
< | 
            for (j = 0; j < rm->ncols; j++) | 
| 170 | 
> | 
            for (j = 0; j < rm->ncols; j++) { | 
| 171 | 
> | 
                double  *dp = rmx_lval(rm,i,j); | 
| 172 | 
  | 
                for (k = 0; k < rm->ncomp; k++) | 
| 173 | 
< | 
                    if (fscanf(fp, "%lf", &rmx_lval(rm,i,j,k)) != 1) | 
| 173 | 
> | 
                    if (fscanf(fp, "%lf", &dp[k]) != 1) | 
| 174 | 
  | 
                        return(0); | 
| 175 | 
+ | 
            } | 
| 176 | 
  | 
        return(1); | 
| 177 | 
  | 
} | 
| 178 | 
  | 
 | 
| 190 | 
  | 
                return(0); | 
| 191 | 
  | 
        for (i = 0; i < rm->nrows; i++) | 
| 192 | 
  | 
            for (j = 0; j < rm->ncols; j++) { | 
| 193 | 
+ | 
                double  *dp = rmx_lval(rm,i,j); | 
| 194 | 
  | 
                if (getbinary(val, sizeof(val[0]), rm->ncomp, fp) != rm->ncomp) | 
| 195 | 
  | 
                    return(0); | 
| 196 | 
  | 
                if (rm->swapin) | 
| 197 | 
  | 
                    swap32((char *)val, rm->ncomp); | 
| 198 | 
  | 
                for (k = rm->ncomp; k--; ) | 
| 199 | 
< | 
                     rmx_lval(rm,i,j,k) = val[k]; | 
| 199 | 
> | 
                     dp[k] = val[k]; | 
| 200 | 
  | 
            } | 
| 201 | 
  | 
        return(1); | 
| 202 | 
  | 
} | 
| 221 | 
  | 
        if (!rmx_prepare(rm)) | 
| 222 | 
  | 
                return(0); | 
| 223 | 
  | 
        for (i = 0; i < rm->nrows; i++) { | 
| 224 | 
< | 
                if (getbinary(&rmx_lval(rm,i,0,0), sizeof(double)*rm->ncomp, | 
| 224 | 
> | 
                if (getbinary(rmx_lval(rm,i,0), sizeof(double)*rm->ncomp, | 
| 225 | 
  | 
                                        rm->ncols, fp) != rm->ncols) | 
| 226 | 
  | 
                        return(0); | 
| 227 | 
  | 
                if (rm->swapin) | 
| 228 | 
< | 
                        swap64((char *)&rmx_lval(rm,i,0,0), rm->ncols*rm->ncomp); | 
| 228 | 
> | 
                        swap64((char *)rmx_lval(rm,i,0), rm->ncols*rm->ncomp); | 
| 229 | 
  | 
        } | 
| 230 | 
  | 
        return(1); | 
| 231 | 
  | 
} | 
| 241 | 
  | 
        if (!rmx_prepare(rm)) | 
| 242 | 
  | 
                return(0); | 
| 243 | 
  | 
        for (i = 0; i < rm->nrows; i++) { | 
| 244 | 
+ | 
            double      *dp = rmx_lval(rm,i,j); | 
| 245 | 
  | 
            if (freadscan(scan, rm->ncols, fp) < 0) { | 
| 246 | 
  | 
                free(scan); | 
| 247 | 
  | 
                return(0); | 
| 248 | 
  | 
            } | 
| 249 | 
< | 
            for (j = rm->ncols; j--; ) { | 
| 250 | 
< | 
                rmx_lval(rm,i,j,0) = colval(scan[j],RED); | 
| 251 | 
< | 
                rmx_lval(rm,i,j,1) = colval(scan[j],GRN); | 
| 252 | 
< | 
                rmx_lval(rm,i,j,2) = colval(scan[j],BLU); | 
| 249 | 
> | 
            for (j = 0; j < rm->ncols; j++, dp += 3) { | 
| 250 | 
> | 
                dp[0] = colval(scan[j],RED); | 
| 251 | 
> | 
                dp[1] = colval(scan[j],GRN); | 
| 252 | 
> | 
                dp[2] = colval(scan[j],BLU); | 
| 253 | 
  | 
            } | 
| 254 | 
  | 
        } | 
| 255 | 
  | 
        free(scan); | 
| 382 | 
  | 
 | 
| 383 | 
  | 
        for (i = 0; i < rm->nrows; i++) { | 
| 384 | 
  | 
            for (j = 0; j < rm->ncols; j++) { | 
| 385 | 
+ | 
                const double    *dp = rmx_lval(rm,i,j); | 
| 386 | 
  | 
                for (k = 0; k < rm->ncomp; k++) | 
| 387 | 
< | 
                    fprintf(fp, fmt, rmx_lval(rm,i,j,k)); | 
| 387 | 
> | 
                    fprintf(fp, fmt, dp[k]); | 
| 388 | 
  | 
                fputc('\t', fp); | 
| 389 | 
  | 
            } | 
| 390 | 
  | 
            fputc('\n', fp); | 
| 404 | 
  | 
        } | 
| 405 | 
  | 
        for (i = 0; i < rm->nrows; i++) | 
| 406 | 
  | 
            for (j = 0; j < rm->ncols; j++) { | 
| 407 | 
+ | 
                const double    *dp = rmx_lval(rm,i,j); | 
| 408 | 
  | 
                for (k = rm->ncomp; k--; ) | 
| 409 | 
< | 
                    val[k] = (float)rmx_lval(rm,i,j,k); | 
| 410 | 
< | 
                if (putbinary(val, sizeof(val[0]), rm->ncomp, fp) != rm->ncomp) | 
| 409 | 
> | 
                    val[k] = (float)dp[k]; | 
| 410 | 
> | 
                if (putbinary(val, sizeof(float), rm->ncomp, fp) != rm->ncomp) | 
| 411 | 
  | 
                        return(0); | 
| 412 | 
  | 
            } | 
| 413 | 
  | 
        return(1); | 
| 419 | 
  | 
        int     i; | 
| 420 | 
  | 
 | 
| 421 | 
  | 
        for (i = 0; i < rm->nrows; i++) | 
| 422 | 
< | 
                if (putbinary(&rmx_lval(rm,i,0,0), sizeof(double)*rm->ncomp, | 
| 422 | 
> | 
                if (putbinary(rmx_lval(rm,i,0), sizeof(double)*rm->ncomp, | 
| 423 | 
  | 
                                        rm->ncols, fp) != rm->ncols) | 
| 424 | 
  | 
                        return(0); | 
| 425 | 
  | 
        return(1); | 
| 434 | 
  | 
        if (!scan) | 
| 435 | 
  | 
                return(0); | 
| 436 | 
  | 
        for (i = 0; i < rm->nrows; i++) { | 
| 437 | 
< | 
            for (j = rm->ncols; j--; ) | 
| 438 | 
< | 
                setcolr(scan[j],        rmx_lval(rm,i,j,0), | 
| 439 | 
< | 
                                        rmx_lval(rm,i,j,1), | 
| 440 | 
< | 
                                        rmx_lval(rm,i,j,2)      ); | 
| 437 | 
> | 
            for (j = rm->ncols; j--; ) { | 
| 438 | 
> | 
                const double    *dp = rmx_lval(rm,i,j); | 
| 439 | 
> | 
                setcolr(scan[j], dp[0], dp[1], dp[2]); | 
| 440 | 
> | 
            } | 
| 441 | 
  | 
            if (fwritecolrs(scan, rm->ncols, fp) < 0) { | 
| 442 | 
  | 
                free(scan); | 
| 443 | 
  | 
                return(0); | 
| 540 | 
  | 
        if (!rid) | 
| 541 | 
  | 
                return(NULL); | 
| 542 | 
  | 
        memset(rid->mtx, 0, array_size(rid)); | 
| 543 | 
< | 
        for (i = dim; i--; ) | 
| 543 | 
> | 
        for (i = dim; i--; ) { | 
| 544 | 
> | 
            double      *dp = rmx_lval(rid,i,i); | 
| 545 | 
  | 
            for (k = n; k--; ) | 
| 546 | 
< | 
                rmx_lval(rid,i,i,k) = 1; | 
| 546 | 
> | 
                dp[k] = 1.; | 
| 547 | 
> | 
        } | 
| 548 | 
  | 
        return(rid); | 
| 549 | 
  | 
} | 
| 550 | 
  | 
 | 
| 592 | 
  | 
        dnew->dtype = rm->dtype; | 
| 593 | 
  | 
        for (i = dnew->nrows; i--; ) | 
| 594 | 
  | 
            for (j = dnew->ncols; j--; ) | 
| 595 | 
< | 
                for (k = dnew->ncomp; k--; ) | 
| 596 | 
< | 
                        rmx_lval(dnew,i,j,k) = rmx_lval(rm,j,i,k); | 
| 595 | 
> | 
                memcpy(rmx_lval(dnew,i,j), rmx_lval(rm,i,j), | 
| 596 | 
> | 
                                sizeof(double)*dnew->ncomp); | 
| 597 | 
  | 
        return(dnew); | 
| 598 | 
  | 
} | 
| 599 | 
  | 
 | 
| 617 | 
  | 
        for (i = mres->nrows; i--; ) | 
| 618 | 
  | 
            for (j = mres->ncols; j--; ) | 
| 619 | 
  | 
                for (k = mres->ncomp; k--; ) { | 
| 620 | 
< | 
                    long double d = 0; | 
| 620 | 
> | 
                    double      d = 0; | 
| 621 | 
  | 
                    for (h = m1->ncols; h--; ) | 
| 622 | 
< | 
                        d += rmx_lval(m1,i,h,k) * rmx_lval(m2,h,j,k); | 
| 623 | 
< | 
                    rmx_lval(mres,i,j,k) = (double)d; | 
| 622 | 
> | 
                        d += rmx_lval(m1,i,h)[k] * rmx_lval(m2,h,j)[k]; | 
| 623 | 
> | 
                    rmx_lval(mres,i,j)[k] = d; | 
| 624 | 
  | 
                } | 
| 625 | 
  | 
        return(mres); | 
| 626 | 
  | 
} | 
| 646 | 
  | 
                if (divide) { | 
| 647 | 
  | 
                    double      d; | 
| 648 | 
  | 
                    if (m2->ncomp == 1) { | 
| 649 | 
< | 
                        d = rmx_lval(m2,i,j,0); | 
| 649 | 
> | 
                        d = rmx_lval(m2,i,j)[0]; | 
| 650 | 
  | 
                        if (d == 0) { | 
| 651 | 
  | 
                            ++zeroDivides; | 
| 652 | 
  | 
                            for (k = m1->ncomp; k--; ) | 
| 653 | 
< | 
                                rmx_lval(m1,i,j,k) = 0; | 
| 653 | 
> | 
                                rmx_lval(m1,i,j)[k] = 0; | 
| 654 | 
  | 
                        } else { | 
| 655 | 
  | 
                            d = 1./d; | 
| 656 | 
  | 
                            for (k = m1->ncomp; k--; ) | 
| 657 | 
< | 
                                rmx_lval(m1,i,j,k) *= d; | 
| 657 | 
> | 
                                rmx_lval(m1,i,j)[k] *= d; | 
| 658 | 
  | 
                        } | 
| 659 | 
  | 
                    } else | 
| 660 | 
  | 
                        for (k = m1->ncomp; k--; ) { | 
| 661 | 
< | 
                            d = rmx_lval(m2,i,j,k); | 
| 661 | 
> | 
                            d = rmx_lval(m2,i,j)[k]; | 
| 662 | 
  | 
                            if (d == 0) { | 
| 663 | 
  | 
                                ++zeroDivides; | 
| 664 | 
< | 
                                rmx_lval(m1,i,j,k) = 0; | 
| 664 | 
> | 
                                rmx_lval(m1,i,j)[k] = 0; | 
| 665 | 
  | 
                            } else | 
| 666 | 
< | 
                                rmx_lval(m1,i,j,k) /= d; | 
| 666 | 
> | 
                                rmx_lval(m1,i,j)[k] /= d; | 
| 667 | 
  | 
                        } | 
| 668 | 
  | 
                } else { | 
| 669 | 
  | 
                    if (m2->ncomp == 1) { | 
| 670 | 
< | 
                        const double    d = rmx_lval(m2,i,j,0); | 
| 670 | 
> | 
                        const double    d = rmx_lval(m2,i,j)[0]; | 
| 671 | 
  | 
                        for (k = m1->ncomp; k--; ) | 
| 672 | 
< | 
                            rmx_lval(m1,i,j,k) *= d; | 
| 672 | 
> | 
                            rmx_lval(m1,i,j)[k] *= d; | 
| 673 | 
  | 
                    } else | 
| 674 | 
  | 
                        for (k = m1->ncomp; k--; ) | 
| 675 | 
< | 
                            rmx_lval(m1,i,j,k) *= rmx_lval(m2,i,j,k); | 
| 675 | 
> | 
                            rmx_lval(m1,i,j)[k] *= rmx_lval(m2,i,j)[k]; | 
| 676 | 
  | 
                } | 
| 677 | 
  | 
        if (zeroDivides) { | 
| 678 | 
  | 
                rmx_addinfo(m1, "WARNING: zero divide(s) corrupted results\n"); | 
| 707 | 
  | 
        else | 
| 708 | 
  | 
                rmx_addinfo(msum, rmx_mismatch_warn); | 
| 709 | 
  | 
        for (i = msum->nrows; i--; ) | 
| 710 | 
< | 
            for (j = msum->ncols; j--; ) | 
| 710 | 
> | 
            for (j = msum->ncols; j--; ) { | 
| 711 | 
> | 
                const double    *da = rmx_lval(madd,i,j); | 
| 712 | 
> | 
                double          *ds = rmx_lval(msum,i,j); | 
| 713 | 
  | 
                for (k = msum->ncomp; k--; ) | 
| 714 | 
< | 
                     rmx_lval(msum,i,j,k) += sf[k] * rmx_lval(madd,i,j,k); | 
| 714 | 
> | 
                     ds[k] += sf[k] * da[k]; | 
| 715 | 
> | 
            } | 
| 716 | 
  | 
        if (mysf) | 
| 717 | 
  | 
                free(mysf); | 
| 718 | 
  | 
        return(1); | 
| 727 | 
  | 
        if (!rm | !sf) | 
| 728 | 
  | 
                return(0); | 
| 729 | 
  | 
        for (i = rm->nrows; i--; ) | 
| 730 | 
< | 
            for (j = rm->ncols; j--; ) | 
| 730 | 
> | 
            for (j = rm->ncols; j--; ) { | 
| 731 | 
> | 
                double  *dp = rmx_lval(rm,i,j); | 
| 732 | 
  | 
                for (k = rm->ncomp; k--; ) | 
| 733 | 
< | 
                    rmx_lval(rm,i,j,k) *= sf[k]; | 
| 734 | 
< | 
 | 
| 733 | 
> | 
                    dp[k] *= sf[k]; | 
| 734 | 
> | 
            } | 
| 735 | 
  | 
        if (rm->info) | 
| 736 | 
  | 
                rmx_addinfo(rm, "Applied scalar\n"); | 
| 737 | 
  | 
        return(1); | 
| 758 | 
  | 
        } | 
| 759 | 
  | 
        dnew->dtype = msrc->dtype; | 
| 760 | 
  | 
        for (i = dnew->nrows; i--; ) | 
| 761 | 
< | 
            for (j = dnew->ncols; j--; ) | 
| 761 | 
> | 
            for (j = dnew->ncols; j--; ) { | 
| 762 | 
> | 
                const double    *ds = rmx_lval(msrc,i,j); | 
| 763 | 
  | 
                for (kd = dnew->ncomp; kd--; ) { | 
| 764 | 
  | 
                    double      d = 0; | 
| 765 | 
  | 
                    for (ks = msrc->ncomp; ks--; ) | 
| 766 | 
< | 
                        d += cmat[kd*msrc->ncomp + ks] * rmx_lval(msrc,i,j,ks); | 
| 767 | 
< | 
                    rmx_lval(dnew,i,j,kd) = d; | 
| 766 | 
> | 
                        d += cmat[kd*msrc->ncomp + ks] * ds[ks]; | 
| 767 | 
> | 
                    rmx_lval(dnew,i,j)[kd] = d; | 
| 768 | 
  | 
                } | 
| 769 | 
+ | 
            } | 
| 770 | 
  | 
        return(dnew); | 
| 771 | 
  | 
} | 
| 772 | 
  | 
 | 
| 786 | 
  | 
        for (i = dnew->nrows; i--; ) | 
| 787 | 
  | 
            for (j = dnew->ncols; j--; ) { | 
| 788 | 
  | 
                const COLORV    *cv = cm_lval(cm,i,j); | 
| 789 | 
< | 
                rmx_lval(dnew,i,j,0) = cv[0]; | 
| 790 | 
< | 
                rmx_lval(dnew,i,j,1) = cv[1]; | 
| 791 | 
< | 
                rmx_lval(dnew,i,j,2) = cv[2]; | 
| 789 | 
> | 
                double          *dp = rmx_lval(dnew,i,j); | 
| 790 | 
> | 
                dp[0] = cv[0]; | 
| 791 | 
> | 
                dp[1] = cv[1]; | 
| 792 | 
> | 
                dp[2] = cv[2]; | 
| 793 | 
  | 
            } | 
| 794 | 
  | 
        return(dnew); | 
| 795 | 
  | 
} | 
| 808 | 
  | 
                return(NULL); | 
| 809 | 
  | 
        for (i = cnew->nrows; i--; ) | 
| 810 | 
  | 
            for (j = cnew->ncols; j--; ) { | 
| 811 | 
< | 
                COLORV  *cv = cm_lval(cnew,i,j); | 
| 811 | 
> | 
                const double    *dp = rmx_lval(rm,i,j); | 
| 812 | 
> | 
                COLORV          *cv = cm_lval(cnew,i,j); | 
| 813 | 
  | 
                if (rm->ncomp == 1) | 
| 814 | 
< | 
                    cv[0] = cv[1] = cv[2] = (COLORV)rmx_lval(rm,i,j,0); | 
| 815 | 
< | 
                else { | 
| 816 | 
< | 
                    cv[0] = (COLORV)rmx_lval(rm,i,j,0); | 
| 801 | 
< | 
                    cv[1] = (COLORV)rmx_lval(rm,i,j,1); | 
| 802 | 
< | 
                    cv[2] = (COLORV)rmx_lval(rm,i,j,2); | 
| 803 | 
< | 
                } | 
| 814 | 
> | 
                    setcolor(cv, dp[0], dp[0], dp[0]); | 
| 815 | 
> | 
                else | 
| 816 | 
> | 
                    setcolor(cv, dp[0], dp[1], dp[2]); | 
| 817 | 
  | 
            } | 
| 818 | 
  | 
        return(cnew); | 
| 819 | 
  | 
} |