| 12 | 
  | 
 | 
| 13 | 
  | 
#include <stdio.h> | 
| 14 | 
  | 
#include <math.h> | 
| 15 | 
< | 
#ifdef MSDOS | 
| 16 | 
< | 
#include <fcntl.h> | 
| 17 | 
< | 
#endif | 
| 18 | 
< | 
#include  <time.h> | 
| 15 | 
> | 
#include <time.h> | 
| 16 | 
> | 
 | 
| 17 | 
> | 
#include "platform.h" | 
| 18 | 
> | 
#include "paths.h" | 
| 19 | 
> | 
#include "rtio.h" | 
| 20 | 
  | 
#include "color.h" | 
| 21 | 
  | 
#include "resolu.h" | 
| 22 | 
  | 
#include "pmap.h" | 
| 23 | 
  | 
#include "warp3d.h" | 
| 24 | 
+ | 
#include "mx3.h" | 
| 25 | 
  | 
 | 
| 26 | 
  | 
                                /* MacBeth colors */ | 
| 27 | 
  | 
#define DarkSkin        0 | 
| 48 | 
  | 
#define Neutral5        21 | 
| 49 | 
  | 
#define Neutral35       22 | 
| 50 | 
  | 
#define Black           23 | 
| 51 | 
< | 
                                /* computed from 5nm spectral measurements */ | 
| 51 | 
> | 
                                /* computed from 10nm spectral measurements */ | 
| 52 | 
  | 
                                /* CIE 1931 2 degree obs, equal-energy white */ | 
| 53 | 
  | 
float   mbxyY[24][3] = { | 
| 54 | 
< | 
                {0.462, 0.3769, 0.0932961},     /* DarkSkin */ | 
| 55 | 
< | 
                {0.4108, 0.3542, 0.410348},     /* LightSkin */ | 
| 56 | 
< | 
                {0.2626, 0.267, 0.181554},      /* BlueSky */ | 
| 57 | 
< | 
                {0.36, 0.4689, 0.108447},       /* Foliage */ | 
| 58 | 
< | 
                {0.2977, 0.2602, 0.248407},     /* BlueFlower */ | 
| 59 | 
< | 
                {0.2719, 0.3485, 0.401156},     /* BluishGreen */ | 
| 60 | 
< | 
                {0.52, 0.4197, 0.357899},       /* Orange */ | 
| 61 | 
< | 
                {0.229, 0.1866, 0.103911},      /* PurplishBlue */ | 
| 62 | 
< | 
                {0.4909, 0.3262, 0.242615},     /* ModerateRed */ | 
| 63 | 
< | 
                {0.3361, 0.2249, 0.0600102},    /* Purple */ | 
| 64 | 
< | 
                {0.3855, 0.4874, 0.42963},      /* YellowGreen */ | 
| 65 | 
< | 
                {0.4853, 0.4457, 0.476343},     /* OrangeYellow */ | 
| 66 | 
< | 
                {0.2026, 0.1369, 0.0529249},    /* Blue */ | 
| 67 | 
< | 
                {0.3007, 0.4822, 0.221226},     /* Green */ | 
| 68 | 
< | 
                {0.5805, 0.3238, 0.162167},     /* Red */ | 
| 69 | 
< | 
                {0.4617, 0.472, 0.64909},       /* Yellow */ | 
| 70 | 
< | 
                {0.4178, 0.2625, 0.233662},     /* Magenta */ | 
| 71 | 
< | 
                {0.2038, 0.2508, 0.167275},     /* Cyan */ | 
| 72 | 
< | 
                {0.3358, 0.337, 0.916877},      /* White */ | 
| 73 | 
< | 
                {0.3338, 0.3348, 0.604678},     /* Neutral.8 */ | 
| 74 | 
< | 
                {0.3333, 0.3349, 0.364566},     /* Neutral.65 */ | 
| 75 | 
< | 
                {0.3353, 0.3359, 0.200238},     /* Neutral.5 */ | 
| 76 | 
< | 
                {0.3363, 0.336, 0.0878721},     /* Neutral.35 */ | 
| 77 | 
< | 
                {0.3346, 0.3349, 0.0308383}     /* Black */ | 
| 54 | 
> | 
                {0.421236, 0.361196, 0.103392},         /* DarkSkin */ | 
| 55 | 
> | 
                {0.40868, 0.358157, 0.352867},          /* LightSkin */ | 
| 56 | 
> | 
                {0.265063, 0.271424, 0.185124},         /* BlueSky */ | 
| 57 | 
> | 
                {0.362851, 0.43055, 0.132625},          /* Foliage */ | 
| 58 | 
> | 
                {0.28888, 0.260851, 0.233138},          /* BlueFlower */ | 
| 59 | 
> | 
                {0.277642, 0.365326, 0.416443},         /* BluishGreen */ | 
| 60 | 
> | 
                {0.524965, 0.40068, 0.312039},          /* Orange */ | 
| 61 | 
> | 
                {0.225018, 0.190392, 0.114999},         /* PurplishBlue */ | 
| 62 | 
> | 
                {0.487199, 0.315372, 0.198616},         /* ModerateRed */ | 
| 63 | 
> | 
                {0.314245, 0.227231, 0.0646047},        /* Purple */ | 
| 64 | 
> | 
                {0.396202, 0.489732, 0.440724},         /* YellowGreen */ | 
| 65 | 
> | 
                {0.493297, 0.435299, 0.43444},          /* OrangeYellow */ | 
| 66 | 
> | 
                {0.198191, 0.149265, 0.0588122},        /* Blue */ | 
| 67 | 
> | 
                {0.322838, 0.487601, 0.229258},         /* Green */ | 
| 68 | 
> | 
                {0.561833, 0.321165, 0.126978},         /* Red */ | 
| 69 | 
> | 
                {0.468113, 0.467021, 0.605289},         /* Yellow */ | 
| 70 | 
> | 
                {0.397128, 0.248535, 0.201761},         /* Magenta */ | 
| 71 | 
> | 
                {0.209552, 0.276256, 0.190917},         /* Cyan */ | 
| 72 | 
> | 
                {0.337219, 0.339042, 0.912482},         /* White */ | 
| 73 | 
> | 
                {0.333283, 0.335077, 0.588297},         /* Neutral.8 */ | 
| 74 | 
> | 
                {0.332747, 0.334371, 0.3594},           /* Neutral.65 */ | 
| 75 | 
> | 
                {0.331925, 0.334202, 0.19114},          /* Neutral.5 */ | 
| 76 | 
> | 
                {0.330408, 0.332615, 0.0892964},        /* Neutral.35 */ | 
| 77 | 
> | 
                {0.331841, 0.331405, 0.0319541},        /* Black */ | 
| 78 | 
  | 
        }; | 
| 79 | 
  | 
 | 
| 80 | 
  | 
COLOR   mbRGB[24];              /* MacBeth RGB values */ | 
| 101 | 
  | 
#define  RG_CORR        04      /* corrected color region */ | 
| 102 | 
  | 
 | 
| 103 | 
  | 
#ifndef  DISPCOM | 
| 104 | 
< | 
#define  DISPCOM        "ximage -op %s" | 
| 104 | 
> | 
#define  DISPCOM        "ximage -op \"%s\"" | 
| 105 | 
  | 
#endif | 
| 106 | 
  | 
 | 
| 107 | 
  | 
int     scanning = 1;           /* scanned input (or recorded output)? */ | 
| 125 | 
  | 
FILE    *debugfp = NULL;        /* debug output picture */ | 
| 126 | 
  | 
char    *progname; | 
| 127 | 
  | 
 | 
| 128 | 
+ | 
static void init(void); | 
| 129 | 
+ | 
static int chartndx(int x, int y, int   *np); | 
| 130 | 
+ | 
static void getpicture(void); | 
| 131 | 
+ | 
static void getcolors(void); | 
| 132 | 
+ | 
static void bresp(COLOR y, COLOR        x); | 
| 133 | 
+ | 
static void compute(void); | 
| 134 | 
+ | 
static void putmapping(void); | 
| 135 | 
+ | 
static void compsoln(COLOR      cin[], COLOR    cout[], int     n); | 
| 136 | 
+ | 
static void cwarp(void); | 
| 137 | 
+ | 
static int cvtcolor(COLOR       cout, COLOR     cin); | 
| 138 | 
+ | 
static int cresp(COLOR  cout, COLOR     cin); | 
| 139 | 
+ | 
static void xyY2RGB(COLOR       rgbout, float   xyYin[3]); | 
| 140 | 
+ | 
static void picdebug(void); | 
| 141 | 
+ | 
static void clrdebug(void); | 
| 142 | 
+ | 
static void getpos(char *name, int      bnds[2], FILE   *fp); | 
| 143 | 
+ | 
static void pickchartpos(char   *pfn); | 
| 144 | 
  | 
 | 
| 145 | 
< | 
main(argc, argv) | 
| 146 | 
< | 
int     argc; | 
| 147 | 
< | 
char    **argv; | 
| 145 | 
> | 
 | 
| 146 | 
> | 
int | 
| 147 | 
> | 
main( | 
| 148 | 
> | 
        int     argc, | 
| 149 | 
> | 
        char    **argv | 
| 150 | 
> | 
) | 
| 151 | 
  | 
{ | 
| 152 | 
  | 
        int     i; | 
| 153 | 
  | 
 | 
| 162 | 
  | 
                                perror(argv[i]); | 
| 163 | 
  | 
                                exit(1); | 
| 164 | 
  | 
                        } | 
| 165 | 
< | 
#ifdef MSDOS | 
| 145 | 
< | 
                        setmode(fileno(debugfp), O_BINARY); | 
| 146 | 
< | 
#endif | 
| 165 | 
> | 
                        SET_FILE_BINARY(debugfp); | 
| 166 | 
  | 
                        newheader("RADIANCE", debugfp);         /* start */ | 
| 167 | 
  | 
                        printargs(argc, argv, debugfp);         /* header */ | 
| 168 | 
  | 
                        break; | 
| 207 | 
  | 
                exit(1); | 
| 208 | 
  | 
        } | 
| 209 | 
  | 
        if (scanning) {                 /* load input picture header */ | 
| 210 | 
< | 
#ifdef MSDOS | 
| 192 | 
< | 
                setmode(fileno(stdin), O_BINARY); | 
| 193 | 
< | 
#endif | 
| 210 | 
> | 
                SET_FILE_BINARY(stdin); | 
| 211 | 
  | 
                if (checkheader(stdin, COLRFMT, NULL) < 0 || | 
| 212 | 
  | 
                                fgetresolu(&xmax, &ymax, stdin) < 0) { | 
| 213 | 
  | 
                        fprintf(stderr, "%s: bad input picture\n", progname); | 
| 240 | 
  | 
 | 
| 241 | 
  | 
                printf("# Color correspondence produced by:\n#\t\t"); | 
| 242 | 
  | 
                printargs(argc, argv, stdout); | 
| 243 | 
< | 
                printf("#\tUsage: pcwarp %s uncorrected.pic > corrected.pic\n", | 
| 243 | 
> | 
                printf("#\tUsage: pcwarp %s uncorrected.hdr > corrected.hdr\n", | 
| 244 | 
  | 
                                i+1 < argc ? argv[i+1] : "{this_file}"); | 
| 245 | 
< | 
                printf("#\t   Or: pcond [options] -m %s orig.pic > output.pic\n", | 
| 245 | 
> | 
                printf("#\t   Or: pcond [options] -m %s orig.hdr > output.hdr\n", | 
| 246 | 
  | 
                                i+1 < argc ? argv[i+1] : "{this_file}"); | 
| 247 | 
  | 
                for (j = 0; j < 24; j++) | 
| 248 | 
  | 
                        printf("%f %f %f    %f %f %f\n", | 
| 255 | 
  | 
                                                /* print header */ | 
| 256 | 
  | 
                printf("{\n\tColor correction file computed by:\n\t\t"); | 
| 257 | 
  | 
                printargs(argc, argv, stdout); | 
| 258 | 
< | 
                printf("\n\tUsage: pcomb -f %s uncorrected.pic > corrected.pic\n", | 
| 258 | 
> | 
                printf("\n\tUsage: pcomb -f %s uncorrected.hdr > corrected.hdr\n", | 
| 259 | 
  | 
                                i+1 < argc ? argv[i+1] : "{this_file}"); | 
| 260 | 
  | 
                if (!scanning) | 
| 261 | 
< | 
                        printf("\t   Or: pcond [options] -f %s orig.pic > output.pic\n", | 
| 261 | 
> | 
                        printf("\t   Or: pcond [options] -f %s orig.hdr > output.hdr\n", | 
| 262 | 
  | 
                                        i+1 < argc ? argv[i+1] : "{this_file}"); | 
| 263 | 
  | 
                printf("}\n"); | 
| 264 | 
  | 
                putmapping();                   /* put out color mapping */ | 
| 265 | 
  | 
        } | 
| 266 | 
< | 
        if (debugfp != NULL)            /* put out debug picture */ | 
| 266 | 
> | 
        if (debugfp != NULL) {          /* put out debug picture */ | 
| 267 | 
  | 
                if (scanning) | 
| 268 | 
  | 
                        picdebug(); | 
| 269 | 
  | 
                else | 
| 270 | 
  | 
                        clrdebug(); | 
| 271 | 
+ | 
        } | 
| 272 | 
  | 
        exit(0); | 
| 273 | 
  | 
userr: | 
| 274 | 
  | 
        fprintf(stderr, | 
| 275 | 
< | 
"Usage: %s [-d dbg.pic][-P | -p xul yul xur yur xll yll xlr ylr][-i irrad][-m] input.pic [output.{cal|cwp}]\n", | 
| 275 | 
> | 
"Usage: %s [-d dbg.hdr][-P | -p xul yul xur yur xll yll xlr ylr][-i irrad][-m] input.hdr [output.{cal|cwp}]\n", | 
| 276 | 
  | 
                        progname); | 
| 277 | 
< | 
        fprintf(stderr, "   or: %s [-d dbg.pic][-i irrad][-m] -c [xyY.dat [output.{cal|cwp}]]\n", | 
| 277 | 
> | 
        fprintf(stderr, "   or: %s [-d dbg.hdr][-i irrad][-m] -c [xyY.dat [output.{cal|cwp}]]\n", | 
| 278 | 
  | 
                        progname); | 
| 279 | 
  | 
        exit(1); | 
| 280 | 
+ | 
        return 1; /* pro forma return */ | 
| 281 | 
  | 
} | 
| 282 | 
  | 
 | 
| 283 | 
  | 
 | 
| 284 | 
< | 
init()                          /* initialize */ | 
| 284 | 
> | 
static void | 
| 285 | 
> | 
init(void)                              /* initialize */ | 
| 286 | 
  | 
{ | 
| 287 | 
  | 
        double  quad[4][2]; | 
| 288 | 
  | 
        register int    i; | 
| 308 | 
  | 
} | 
| 309 | 
  | 
 | 
| 310 | 
  | 
 | 
| 311 | 
< | 
int | 
| 312 | 
< | 
chartndx(x, y, np)                      /* find color number for position */ | 
| 313 | 
< | 
int     x, y; | 
| 314 | 
< | 
int     *np; | 
| 311 | 
> | 
static int | 
| 312 | 
> | 
chartndx(                       /* find color number for position */ | 
| 313 | 
> | 
        int     x, | 
| 314 | 
> | 
        int y, | 
| 315 | 
> | 
        int     *np | 
| 316 | 
> | 
) | 
| 317 | 
  | 
{ | 
| 318 | 
  | 
        double  ipos[3], cpos[3]; | 
| 319 | 
  | 
        int     ix, iy; | 
| 342 | 
  | 
} | 
| 343 | 
  | 
 | 
| 344 | 
  | 
 | 
| 345 | 
< | 
getpicture()                            /* load in picture colors */ | 
| 345 | 
> | 
static void | 
| 346 | 
> | 
getpicture(void)                                /* load in picture colors */ | 
| 347 | 
  | 
{ | 
| 348 | 
  | 
        COLR    *scanln; | 
| 349 | 
  | 
        COLOR   pval; | 
| 385 | 
  | 
} | 
| 386 | 
  | 
 | 
| 387 | 
  | 
 | 
| 388 | 
< | 
getcolors()                     /* get xyY colors from standard input */ | 
| 388 | 
> | 
static void | 
| 389 | 
> | 
getcolors(void)                 /* get xyY colors from standard input */ | 
| 390 | 
  | 
{ | 
| 391 | 
  | 
        int     gotwhite = 0; | 
| 392 | 
  | 
        COLOR   whiteclr; | 
| 394 | 
  | 
        float   xyYin[3]; | 
| 395 | 
  | 
 | 
| 396 | 
  | 
        while (fgetval(stdin, 'i', &n) == 1) {          /* read colors */ | 
| 397 | 
< | 
                if (n < 0 | n > 24 || | 
| 397 | 
> | 
                if ((n < 0) | (n > 24) || | 
| 398 | 
  | 
                                fgetval(stdin, 'f', &xyYin[0]) != 1 || | 
| 399 | 
  | 
                                fgetval(stdin, 'f', &xyYin[1]) != 1 || | 
| 400 | 
  | 
                                fgetval(stdin, 'f', &xyYin[2]) != 1 || | 
| 401 | 
< | 
                                xyYin[0] < 0. | xyYin[1] < 0. || | 
| 401 | 
> | 
                                (xyYin[0] < 0.) | (xyYin[1] < 0.) || | 
| 402 | 
  | 
                                xyYin[0] + xyYin[1] > 1.) { | 
| 403 | 
  | 
                        fprintf(stderr, "%s: bad color input data\n", | 
| 404 | 
  | 
                                        progname); | 
| 434 | 
  | 
} | 
| 435 | 
  | 
 | 
| 436 | 
  | 
 | 
| 437 | 
< | 
bresp(y, x)             /* piecewise linear interpolation of primaries */ | 
| 438 | 
< | 
COLOR   y, x; | 
| 437 | 
> | 
static void | 
| 438 | 
> | 
bresp(          /* piecewise linear interpolation of primaries */ | 
| 439 | 
> | 
        COLOR   y, | 
| 440 | 
> | 
        COLOR   x | 
| 441 | 
> | 
) | 
| 442 | 
  | 
{ | 
| 443 | 
  | 
        register int    i, n; | 
| 444 | 
  | 
 | 
| 455 | 
  | 
} | 
| 456 | 
  | 
 | 
| 457 | 
  | 
 | 
| 458 | 
< | 
compute()                       /* compute color mapping */ | 
| 458 | 
> | 
static void | 
| 459 | 
> | 
compute(void)                   /* compute color mapping */ | 
| 460 | 
  | 
{ | 
| 461 | 
  | 
        COLOR   clrin[24], clrout[24]; | 
| 462 | 
  | 
        long    cflags; | 
| 471 | 
  | 
                                        /* compute piecewise luminance curve */ | 
| 472 | 
  | 
        for (i = 0; i < NMBNEU; i++) { | 
| 473 | 
  | 
                copycolor(bramp[i][0], inpRGB[mbneu[i]]); | 
| 474 | 
+ | 
                for (n = i ? 3 : 0; n--; ) | 
| 475 | 
+ | 
                        if (colval(bramp[i][0],n) <= | 
| 476 | 
+ | 
                                        colval(bramp[i-1][0],n)+1e-7) { | 
| 477 | 
+ | 
                                fprintf(stderr, | 
| 478 | 
+ | 
                "%s: non-increasing neutral patch\n", progname); | 
| 479 | 
+ | 
                                exit(1); | 
| 480 | 
+ | 
                        } | 
| 481 | 
  | 
                copycolor(bramp[i][1], mbRGB[mbneu[i]]); | 
| 482 | 
  | 
        } | 
| 483 | 
  | 
                                        /* compute color space gamut */ | 
| 521 | 
  | 
} | 
| 522 | 
  | 
 | 
| 523 | 
  | 
 | 
| 524 | 
< | 
putmapping()                    /* put out color mapping */ | 
| 524 | 
> | 
static void | 
| 525 | 
> | 
putmapping(void)                        /* put out color mapping */ | 
| 526 | 
  | 
{ | 
| 527 | 
  | 
        static char     cchar[3] = {'r', 'g', 'b'}; | 
| 528 | 
  | 
        register int    i, j; | 
| 570 | 
  | 
} | 
| 571 | 
  | 
 | 
| 572 | 
  | 
 | 
| 573 | 
< | 
compsoln(cin, cout, n)          /* solve 3xN system using least-squares */ | 
| 574 | 
< | 
COLOR   cin[], cout[]; | 
| 575 | 
< | 
int     n; | 
| 573 | 
> | 
static void | 
| 574 | 
> | 
compsoln(               /* solve 3xN system using least-squares */ | 
| 575 | 
> | 
        COLOR   cin[], | 
| 576 | 
> | 
        COLOR   cout[], | 
| 577 | 
> | 
        int     n | 
| 578 | 
> | 
) | 
| 579 | 
  | 
{ | 
| 580 | 
  | 
        extern double   mx3d_adjoint(), fabs(); | 
| 581 | 
  | 
        double  mat[3][3], invmat[3][3]; | 
| 633 | 
  | 
} | 
| 634 | 
  | 
 | 
| 635 | 
  | 
 | 
| 636 | 
< | 
cwarp()                         /* compute color warp map */ | 
| 636 | 
> | 
static void | 
| 637 | 
> | 
cwarp(void)                             /* compute color warp map */ | 
| 638 | 
  | 
{ | 
| 639 | 
  | 
        register int    i; | 
| 640 | 
  | 
 | 
| 650 | 
  | 
} | 
| 651 | 
  | 
 | 
| 652 | 
  | 
 | 
| 653 | 
< | 
int | 
| 654 | 
< | 
cvtcolor(cout, cin)             /* convert color according to our mapping */ | 
| 655 | 
< | 
COLOR   cout, cin; | 
| 653 | 
> | 
static int | 
| 654 | 
> | 
cvtcolor(               /* convert color according to our mapping */ | 
| 655 | 
> | 
        COLOR   cout, | 
| 656 | 
> | 
        COLOR   cin | 
| 657 | 
> | 
) | 
| 658 | 
  | 
{ | 
| 659 | 
  | 
        COLOR   ctmp; | 
| 660 | 
  | 
        int     clipped; | 
| 673 | 
  | 
} | 
| 674 | 
  | 
 | 
| 675 | 
  | 
 | 
| 676 | 
< | 
int | 
| 677 | 
< | 
cresp(cout, cin)                /* transform color according to matrix */ | 
| 678 | 
< | 
COLOR   cout, cin; | 
| 676 | 
> | 
static int | 
| 677 | 
> | 
cresp(          /* transform color according to matrix */ | 
| 678 | 
> | 
        COLOR   cout, | 
| 679 | 
> | 
        COLOR   cin | 
| 680 | 
> | 
) | 
| 681 | 
  | 
{ | 
| 682 | 
  | 
        colortrans(cout, solmat, cin); | 
| 683 | 
  | 
        return(clipgamut(cout, bright(cout), CGAMUT, colmin, colmax)); | 
| 684 | 
  | 
} | 
| 685 | 
  | 
 | 
| 686 | 
  | 
 | 
| 687 | 
< | 
xyY2RGB(rgbout, xyYin)          /* convert xyY to RGB */ | 
| 688 | 
< | 
COLOR   rgbout; | 
| 689 | 
< | 
register float  xyYin[3]; | 
| 687 | 
> | 
static void | 
| 688 | 
> | 
xyY2RGB(                /* convert xyY to RGB */ | 
| 689 | 
> | 
        COLOR   rgbout, | 
| 690 | 
> | 
        register float  xyYin[3] | 
| 691 | 
> | 
) | 
| 692 | 
  | 
{ | 
| 693 | 
  | 
        COLOR   ctmp; | 
| 694 | 
  | 
        double  d; | 
| 702 | 
  | 
} | 
| 703 | 
  | 
 | 
| 704 | 
  | 
 | 
| 705 | 
< | 
picdebug()                      /* put out debugging picture */ | 
| 705 | 
> | 
static void | 
| 706 | 
> | 
picdebug(void)                  /* put out debugging picture */ | 
| 707 | 
  | 
{ | 
| 708 | 
  | 
        static COLOR    blkcol = BLKCOLOR; | 
| 709 | 
  | 
        COLOR   *scan; | 
| 759 | 
  | 
} | 
| 760 | 
  | 
 | 
| 761 | 
  | 
 | 
| 762 | 
< | 
clrdebug()                      /* put out debug picture from color input */ | 
| 762 | 
> | 
static void | 
| 763 | 
> | 
clrdebug(void)                  /* put out debug picture from color input */ | 
| 764 | 
  | 
{ | 
| 765 | 
  | 
        static COLR     blkclr = BLKCOLR; | 
| 766 | 
  | 
        COLR    mbclr[24], cvclr[24], orclr[24]; | 
| 830 | 
  | 
} | 
| 831 | 
  | 
 | 
| 832 | 
  | 
 | 
| 833 | 
< | 
getpos(name, bnds, fp)          /* get boundary position */ | 
| 834 | 
< | 
char    *name; | 
| 835 | 
< | 
int     bnds[2]; | 
| 836 | 
< | 
FILE    *fp; | 
| 833 | 
> | 
static void | 
| 834 | 
> | 
getpos(         /* get boundary position */ | 
| 835 | 
> | 
        char    *name, | 
| 836 | 
> | 
        int     bnds[2], | 
| 837 | 
> | 
        FILE    *fp | 
| 838 | 
> | 
) | 
| 839 | 
  | 
{ | 
| 840 | 
  | 
        char    buf[64]; | 
| 841 | 
  | 
 | 
| 849 | 
  | 
} | 
| 850 | 
  | 
 | 
| 851 | 
  | 
 | 
| 852 | 
< | 
pickchartpos(pfn)               /* display picture and pick chart location */ | 
| 853 | 
< | 
char    *pfn; | 
| 852 | 
> | 
static void | 
| 853 | 
> | 
pickchartpos(           /* display picture and pick chart location */ | 
| 854 | 
> | 
        char    *pfn | 
| 855 | 
> | 
) | 
| 856 | 
  | 
{ | 
| 857 | 
< | 
        char    combuf[512]; | 
| 857 | 
> | 
        char    combuf[PATH_MAX]; | 
| 858 | 
  | 
        FILE    *pfp; | 
| 859 | 
  | 
 | 
| 860 | 
  | 
        sprintf(combuf, DISPCOM, pfn); |