| 9 | 
  | 
 | 
| 10 | 
  | 
#include "copyright.h" | 
| 11 | 
  | 
 | 
| 12 | 
– | 
#include        <stdio.h> | 
| 12 | 
  | 
#include        <stdlib.h> | 
| 14 | 
– | 
#include        <string.h> | 
| 13 | 
  | 
#include        <math.h> | 
| 16 | 
– | 
#include        <time.h> | 
| 14 | 
  | 
 | 
| 15 | 
  | 
#ifdef PCOND | 
| 16 | 
  | 
#include        "paths.h" | 
| 17 | 
  | 
#endif | 
| 18 | 
  | 
#include        "tmprivat.h" | 
| 19 | 
+ | 
#include        "rtio.h" | 
| 20 | 
  | 
#include        "resolu.h" | 
| 21 | 
  | 
 | 
| 22 | 
  | 
#define GAMTSZ  4096 | 
| 28 | 
  | 
        TMbright        inpsfb;         /* encoded tm->inpsf */ | 
| 29 | 
  | 
} COLRDATA; | 
| 30 | 
  | 
 | 
| 31 | 
< | 
static MEM_PTR  colrInit(TMstruct *); | 
| 31 | 
> | 
static void *   colrInit(TMstruct *); | 
| 32 | 
  | 
static void     colrNewSpace(TMstruct *); | 
| 33 | 
  | 
static gethfunc headline; | 
| 34 | 
  | 
 | 
| 71 | 
  | 
                returnErr(TM_E_NOMEM); | 
| 72 | 
  | 
        for (i = len; i--; ) { | 
| 73 | 
  | 
                if (tmNeedMatrix(tms)) {                /* apply color xform */ | 
| 74 | 
+ | 
                        bi = 0; | 
| 75 | 
  | 
                        for (j = 3; j--; ) { | 
| 76 | 
  | 
                                vl =    cd->cmatb[j][RED]*(int32)scan[i][RED] + | 
| 77 | 
  | 
                                        cd->cmatb[j][GRN]*(int32)scan[i][GRN] + | 
| 78 | 
  | 
                                        cd->cmatb[j][BLU]*(int32)scan[i][BLU] ; | 
| 79 | 
< | 
                                if (vl < 0) cmon[j] = vl/0x10000; | 
| 80 | 
< | 
                                else cmon[j] = vl>>16; | 
| 79 | 
> | 
                                if (vl < 0) | 
| 80 | 
> | 
                                        cmon[j] = vl/(int32)0x10000; | 
| 81 | 
> | 
                                else if ((cmon[j] = vl>>16) > bi) | 
| 82 | 
> | 
                                        bi = cmon[j]; | 
| 83 | 
  | 
                        } | 
| 84 | 
  | 
                        cmon[EXP] = scan[i][EXP]; | 
| 85 | 
+ | 
                        while (bi >= 256) {             /* handle overflow */ | 
| 86 | 
+ | 
                                cmon[EXP]++; | 
| 87 | 
+ | 
                                for (j = 3; j--; ) cmon[j] >>= 1; | 
| 88 | 
+ | 
                                bi >>= 1; | 
| 89 | 
+ | 
                        } | 
| 90 | 
  | 
                } else | 
| 91 | 
  | 
                        copycolr(cmon, scan[i]); | 
| 92 | 
  | 
                                                        /* world luminance */ | 
| 122 | 
  | 
                                } | 
| 123 | 
  | 
                        } | 
| 124 | 
  | 
                } else if (tms->flags & TM_F_BW) { | 
| 125 | 
< | 
                        cmon[RED] = cmon[GRN] = cmon[BLU] = li; | 
| 125 | 
> | 
                        for (j = 3; j--; ) | 
| 126 | 
> | 
                                cs[3*i+j] = tms->cdiv[j]/(TM_BRES>>8); | 
| 127 | 
> | 
                        continue; | 
| 128 | 
  | 
                } else { | 
| 129 | 
  | 
                        for (j = 3; j--; ) | 
| 130 | 
< | 
                                if (cmon[j] < 0) cmon[j] = 0; | 
| 130 | 
> | 
                                cmon[j] *= (cmon[j] > 0); | 
| 131 | 
  | 
                } | 
| 132 | 
  | 
                bi = ( (uint32)GAMTSZ*cd->clfb[RED]*cmon[RED]/li ) >> 12; | 
| 133 | 
  | 
                cs[3*i  ] = bi>=GAMTSZ ? 255 : cd->gamb[bi]; | 
| 254 | 
  | 
        if (fp == NULL) | 
| 255 | 
  | 
                fclose(inpf); | 
| 256 | 
  | 
        if (scanin != NULL) | 
| 257 | 
< | 
                free((MEM_PTR)scanin); | 
| 257 | 
> | 
                free(scanin); | 
| 258 | 
  | 
        if (err != TM_E_OK) { | 
| 259 | 
  | 
                if (*lpp != NULL) | 
| 260 | 
< | 
                        free((MEM_PTR)*lpp); | 
| 260 | 
> | 
                        free(*lpp); | 
| 261 | 
  | 
                if (cpp != TM_NOCHROMP && *cpp != NULL) | 
| 262 | 
< | 
                        free((MEM_PTR)*cpp); | 
| 262 | 
> | 
                        free(*cpp); | 
| 263 | 
  | 
                returnErr(err); | 
| 264 | 
  | 
        } | 
| 265 | 
  | 
        returnOK; | 
| 331 | 
  | 
        for (y = 0; y < *yp; y++) { | 
| 332 | 
  | 
                if (freadcolrs(scan, *xp, infp) < 0) { | 
| 333 | 
  | 
                        pclose(infp); | 
| 334 | 
< | 
                        free((MEM_PTR)scan); | 
| 335 | 
< | 
                        free((MEM_PTR)*psp); | 
| 334 | 
> | 
                        free(scan); | 
| 335 | 
> | 
                        free(*psp); | 
| 336 | 
  | 
                        *psp = NULL; | 
| 337 | 
  | 
                        returnErr(TM_E_BADFILE); | 
| 338 | 
  | 
                } | 
| 347 | 
  | 
                                *rp++ = scan[x][BLU]; | 
| 348 | 
  | 
                        } | 
| 349 | 
  | 
        } | 
| 350 | 
< | 
        free((MEM_PTR)scan); | 
| 350 | 
> | 
        free(scan); | 
| 351 | 
  | 
        pclose(infp); | 
| 352 | 
  | 
        returnOK; | 
| 353 | 
  | 
} | 
| 398 | 
  | 
        if (flags & TM_F_BW) { | 
| 399 | 
  | 
                *psp = (uby8 *)malloc(sizeof(uby8) * *xp * *yp); | 
| 400 | 
  | 
                if (*psp == NULL) { | 
| 401 | 
< | 
                        free((MEM_PTR)lp); | 
| 401 | 
> | 
                        free(lp); | 
| 402 | 
  | 
                        tmDone(tms); | 
| 403 | 
  | 
                        returnErr(TM_E_NOMEM); | 
| 404 | 
  | 
                } | 
| 416 | 
  | 
        err = tmMapPixels(tms, *psp, lp, cp, *xp * *yp); | 
| 417 | 
  | 
 | 
| 418 | 
  | 
done:                                           /* clean up */ | 
| 419 | 
< | 
        free((MEM_PTR)lp); | 
| 419 | 
> | 
        free(lp); | 
| 420 | 
  | 
        tmDone(tms); | 
| 421 | 
  | 
        if (err != TM_E_OK) {                   /* free memory on error */ | 
| 422 | 
< | 
                free((MEM_PTR)*psp); | 
| 422 | 
> | 
                free(*psp); | 
| 423 | 
  | 
                *psp = NULL; | 
| 424 | 
  | 
                returnErr(err); | 
| 425 | 
  | 
        } | 
| 447 | 
  | 
} | 
| 448 | 
  | 
 | 
| 449 | 
  | 
 | 
| 450 | 
< | 
static MEM_PTR | 
| 450 | 
> | 
static void * | 
| 451 | 
  | 
colrInit(tms)                   /* initialize private data for tone mapping */ | 
| 452 | 
  | 
TMstruct        *tms; | 
| 453 | 
  | 
{ | 
| 457 | 
  | 
        cd = (COLRDATA *)malloc(sizeof(COLRDATA)); | 
| 458 | 
  | 
        if (cd == NULL) | 
| 459 | 
  | 
                return(NULL); | 
| 460 | 
< | 
        tms->pd[colrReg] = (MEM_PTR)cd; | 
| 460 | 
> | 
        tms->pd[colrReg] = (void *)cd; | 
| 461 | 
  | 
                                        /* compute gamma table */ | 
| 462 | 
  | 
        for (i = GAMTSZ; i--; ) | 
| 463 | 
  | 
                cd->gamb[i] = 256.*pow((i+.5)/GAMTSZ, 1./tms->mongam); | 
| 464 | 
  | 
                                        /* compute color and scale factors */ | 
| 465 | 
  | 
        colrNewSpace(tms); | 
| 466 | 
< | 
        return((MEM_PTR)cd); | 
| 466 | 
> | 
        return((void *)cd); | 
| 467 | 
  | 
} |