--- ray/src/px/panim.c 1990/04/05 13:58:45 1.6 +++ ray/src/px/panim.c 2003/11/10 12:28:56 2.5 @@ -1,9 +1,6 @@ -/* Copyright (c) 1988 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: panim.c,v 2.5 2003/11/10 12:28:56 schorsch Exp $"; #endif - /* * Send pictures to PC animation system. * @@ -11,7 +8,9 @@ static char SCCSid[] = "$SunId$ LBL"; */ #include +#include +#include "rtprocess.h" #include "random.h" #include "color.h" #include "clntrpc.h" @@ -19,7 +18,6 @@ static char SCCSid[] = "$SunId$ LBL"; #define GAMMA 2.0 /* gamma correction factor */ -FILE *popen(); char *pcom = NULL; /* pipe command */ @@ -76,7 +74,7 @@ char *argv[]; sendframe(file) /* convert and send a frame */ char *file; { - char command[128]; + char command[PATH_MAX]; COLR scanin[SCANLINE]; int xres, yres; int xbeg, ybeg; @@ -92,7 +90,7 @@ char *file; file = ""; } else { if (pcom != NULL) { - sprintf(command, "( %s ) < %s", pcom, file); + sprintf(command, "( %s ) < \"%s\"", pcom, file); fp = popen(command, "r"); } else fp = fopen(file, "r"); @@ -103,6 +101,11 @@ char *file; } /* get dimensions */ getheader(fp, NULL); + if (checkheader(fp, COLRFMT, NULL) < 0) { + fputs(file, stderr); + fputs(": not a Radiance picture\n", stderr); + exit(1); + } if (fgetresolu(&xres, &yres, fp) != (YMAJOR|YDECR) || xres > SCANLINE || yres > NUMSCANS) { fputs(file, stderr); @@ -113,7 +116,7 @@ char *file; xbeg = (SCANLINE-xres)/2; ybeg = (NUMSCANS-yres)/2; /* clear output */ - bzero(sc_frame_arr, sizeof(sc_frame_arr)); + memset(sc_frame_arr, '\0', sizeof(sc_frame_arr)); /* get frame */ for (y = yres-1; y >= 0; y--) { if (freadcolrs(scanin, xres, fp) < 0) { @@ -144,7 +147,7 @@ compgamma() /* compute gamma correction map */ register int i, val; for (i = 0; i < 256; i++) { - val = pow(i/256.0, 1.0/GAMMA) * 256.0; + val = pow((i+0.5)/256.0, 1.0/GAMMA) * 256.0; if (val > 248) val = 248; gammamap[i] = val; }