--- ray/src/util/ranimate.c 2003/02/22 02:07:30 2.29
+++ ray/src/util/ranimate.c 2003/10/27 10:32:06 2.43
@@ -1,5 +1,5 @@
#ifndef lint
-static const char RCSid[] = "$Id: ranimate.c,v 2.29 2003/02/22 02:07:30 greg Exp $";
+static const char RCSid[] = "$Id: ranimate.c,v 2.43 2003/10/27 10:32:06 schorsch Exp $";
#endif
/*
* Radiance animation control program
@@ -13,66 +13,18 @@ static const char RCSid[] = "$Id: ranimate.c,v 2.29 20
* See the ranimate(1) man page for further details.
*/
-/* ====================================================================
- * The Radiance Software License, Version 1.0
- *
- * Copyright (c) 1990 - 2002 The Regents of the University of California,
- * through Lawrence Berkeley National Laboratory. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes Radiance software
- * (http://radsite.lbl.gov/)
- * developed by the Lawrence Berkeley National Laboratory
- * (http://www.lbl.gov/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
- * and "The Regents of the University of California" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact radiance@radsite.lbl.gov.
- *
- * 5. Products derived from this software may not be called "Radiance",
- * nor may "Radiance" appear in their name, without prior written
- * permission of Lawrence Berkeley National Laboratory.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of Lawrence Berkeley National Laboratory. For more
- * information on Lawrence Berkeley National Laboratory, please see
- * .
- */
+#include "copyright.h"
-#include "standard.h"
+#include
#include
#include
+#include
+
+/*#include "standard.h"*/
+#include "platform.h"
+#include "paths.h"
+#include "rtio.h"
+#include "rterror.h"
#include "view.h"
#include "vars.h"
#include "netproc.h"
@@ -81,11 +33,7 @@ static const char RCSid[] = "$Id: ranimate.c,v 2.29 20
#define DEF_NBLUR 5
#endif
/* default remote shell */
-#ifdef _AUX_SOURCE
-#define REMSH "remsh"
-#else
#define REMSH "rsh"
-#endif
/* input variables (alphabetical by name) */
#define ANIMATE 0 /* animation command */
#define ARCHIVE 1 /* archiving command */
@@ -174,16 +122,39 @@ struct pslot {
int npslots; /* number of process slots */
#define phostname(ps) ((ps)->hostname[0] ? (ps)->hostname : astat.host)
-
-struct pslot *findpslot();
-
PSERVER *lastpserver; /* last process server with error */
-VIEW *getview();
-char *getexp(), *dirfile();
-int getblur();
+static struct pslot * findpslot(int pid);
+static void checkdir(void);
+static VIEW * getview(int n);
-extern time_t time();
+static char * dirfile(char *df, register char *path);
+static char * getexp(int n);
+static int getblur(double *bf);
+static int getastat(void);
+static void getradfile(char *rfargs);
+static void badvalue(int vc);
+static int rmfile(char *fn);
+static int runcom(char *cs);
+static int pruncom(char *com, char *ppins, int maxcopies);
+static void bwait(int ncoms);
+static int bruncom(char *com, int fout, int (*rf)());
+static int serverdown(void);
+static int donecom(PSERVER *ps, int pn, int status);
+static int countviews(void);
+static int dofilt(int frame, int rvr);
+static void archive(void);
+static int frecover(int frame);
+static int recover(int frame);
+static void sethosts(void);
+static void walkwait(int first, int last, char *vfn);
+static void animrend(int frame, VIEW *vp);
+static void transferframes(void);
+static void filterframes(void);
+static void renderframes(int nframes);
+static void animate(void);
+static void setdefaults(void);
+static void putastat(void);
main(argc, argv)
@@ -257,7 +228,8 @@ userr:
}
-getastat() /* check/set animation status */
+static int
+getastat(void) /* check/set animation status */
{
char sfname[256];
FILE *fp;
@@ -321,7 +293,8 @@ fmterr:
}
-putastat() /* put out current status */
+static void
+putastat(void) /* put out current status */
{
char buf[256];
FILE *fp;
@@ -343,7 +316,8 @@ putastat() /* put out current status */
}
-checkdir() /* make sure we have our directory */
+static void
+checkdir(void) /* make sure we have our directory */
{
struct stat stb;
@@ -365,7 +339,8 @@ checkdir() /* make sure we have our directory */
}
-setdefaults() /* set default values */
+static void
+setdefaults(void) /* set default values */
{
extern char *atos();
int decades;
@@ -453,7 +428,8 @@ setdefaults() /* set default values */
}
-sethosts() /* set up process servers */
+static void
+sethosts(void) /* set up process servers */
{
extern char *iskip();
char buf[256], *dir, *uname;
@@ -508,9 +484,8 @@ sethosts() /* set up process servers */
}
}
-
-getradfile(rfargs) /* run rad and get needed variables */
-char *rfargs;
+static void
+getradfile(char *rfargs) /* run rad and get needed variables */
{
static short mvar[] = {OCTREE,PFILT,RESOLUTION,EXPOSURE,-1};
char combuf[256];
@@ -535,7 +510,7 @@ char *rfargs;
pippt = NULL;
}
if (pippt != NULL)
- strcpy(pippt, "> /dev/null"); /* nothing to match */
+ strcpy(pippt, "> " NULL_DEVICE); /* nothing to match */
else {
sprintf(cp, ")[ \t]*=' > %s/radset.var", vval(DIRECTORY));
cp += 11; /* point to file name */
@@ -548,7 +523,8 @@ char *rfargs;
}
-animate() /* run animation */
+static void
+animate(void) /* run animation */
{
int xres, yres;
float pa, mult;
@@ -619,8 +595,8 @@ animate() /* run animation */
}
-renderframes(nframes) /* render next nframes frames */
-int nframes;
+static void
+renderframes(int nframes) /* render next nframes frames */
{
static char vendbuf[16];
VIEW *vp;
@@ -676,7 +652,8 @@ int nframes;
}
-filterframes() /* catch up with filtering */
+static void
+filterframes(void) /* catch up with filtering */
{
VIEW *vp;
register int i;
@@ -684,15 +661,9 @@ filterframes() /* catch up with filtering */
if (astat.tnext < astat.fnext) /* other work to do first */
return;
/* filter each view */
- for (i = astat.fnext; i < astat.rnext; i++) {
- if ((vp = getview(i)) == NULL) { /* get view i */
- fprintf(stderr,
- "%s: unexpected error reading view for frame %d\n",
- progname, i);
- quit(1);
- }
- dofilt(i, vp, getexp(i), 0); /* filter frame */
- }
+ for (i = astat.fnext; i < astat.rnext; i++)
+ dofilt(i, 0);
+
bwait(0); /* wait for filter processes */
archive(); /* archive originals */
astat.fnext = i; /* update status */
@@ -700,7 +671,8 @@ filterframes() /* catch up with filtering */
}
-transferframes() /* catch up with picture transfers */
+static void
+transferframes(void) /* catch up with picture transfers */
{
char combuf[10240], *fbase;
register char *cp;
@@ -740,9 +712,11 @@ transferframes() /* catch up with picture transfers
}
-animrend(frame, vp) /* start animation frame */
-int frame;
-VIEW *vp;
+static void
+animrend( /* start animation frame */
+int frame,
+VIEW *vp
+)
{
extern int recover();
char combuf[2048];
@@ -758,9 +732,12 @@ VIEW *vp;
}
-walkwait(first, last, vfn) /* walk-through frames */
-int first, last;
-char *vfn;
+static void
+walkwait( /* walk-through frames */
+int first,
+int last,
+char *vfn
+)
{
double blurf;
int nblur = getblur(&blurf);
@@ -810,9 +787,8 @@ char *vfn;
}
-int
-recover(frame) /* recover the specified frame */
-int frame;
+static int
+recover(int frame) /* recover the specified frame */
{
static int *rfrm; /* list of recovered frames */
static int nrfrms = 0;
@@ -853,7 +829,7 @@ int frame;
return(1);
/* add frame to recovered list */
if (nrfrms)
- rfrm = (int *)realloc((char *)rfrm, (nrfrms+1)*sizeof(int));
+ rfrm = (int *)realloc((void *)rfrm, (nrfrms+1)*sizeof(int));
else
rfrm = (int *)malloc(sizeof(int));
if (rfrm == NULL) {
@@ -865,22 +841,17 @@ int frame;
}
-int
-frecover(frame) /* recover filtered frame */
-int frame;
+static int
+frecover(int frame) /* recover filtered frame */
{
- VIEW *vp;
- char *ex;
-
- vp = getview(frame);
- ex = getexp(frame);
- if (dofilt(frame, vp, ex, 2) && dofilt(frame, vp, ex, 1))
+ if (dofilt(frame, 2) && dofilt(frame, 1))
return(1);
return(0);
}
-archive() /* archive and remove renderings */
+static void
+archive(void) /* archive and remove renderings */
{
#define RMCOML (sizeof(rmcom)-1)
static char rmcom[] = "rm -f";
@@ -923,24 +894,37 @@ archive() /* archive and remove renderings */
}
-int
-dofilt(frame, vp, ep, rvr) /* filter frame */
-int frame;
-VIEW *vp;
-char *ep;
-int rvr;
+static int
+dofilt( /* filter frame */
+int frame,
+int rvr
+)
{
extern int frecover();
static int iter = 0;
double blurf;
int nblur = getblur(&blurf);
+ VIEW *vp = getview(frame);
+ char *ep = getexp(frame);
char fnbefore[128], fnafter[128], *fbase;
char combuf[1024], fname0[128], fname1[128];
int usepinterp, usepfilt, nora_rgbe;
int frseq[2];
/* check what is needed */
+ if (vp == NULL) {
+ fprintf(stderr,
+ "%s: unexpected error reading view for frame %d\n",
+ progname, frame);
+ quit(1);
+ }
+ if (ep == NULL) {
+ fprintf(stderr,
+ "%s: unexpected error reading exposure for frame %d\n",
+ progname, frame);
+ quit(1);
+ }
usepinterp = (nblur > 1);
- usepfilt = pfiltalways | ep==NULL;
+ usepfilt = pfiltalways | (ep==NULL);
if (ep != NULL && !strcmp(ep, "1"))
ep = "+0";
nora_rgbe = strcmp(vval(OVERSAMP),"1") || ep==NULL ||
@@ -1011,7 +995,7 @@ int rvr;
putc('\n', fp); fclose(fp);
}
sprintf(combuf,
- "(pmblur %.3f %d %s %s; rm -f %s %s) | pinterp -B",
+ "(pmblur %.3f %d %s %s; rm -f %s %s) | pinterp -B -a",
blurf, nblur,
fname0, fname1, fname0, fname1);
iter++;
@@ -1026,7 +1010,7 @@ int rvr;
if (usepfilt)
sprintf(combuf+strlen(combuf), " %s", rresopt);
else
- sprintf(combuf+strlen(combuf), " %s -e %s",
+ sprintf(combuf+strlen(combuf), " -a %s -e %s",
fresopt, ep);
sprintf(combuf+strlen(combuf), " %s.unf %s.zbf",
fnbefore, fnbefore);
@@ -1073,9 +1057,8 @@ int rvr;
}
-VIEW *
-getview(n) /* get view number n */
-int n;
+static VIEW *
+getview(int n) /* get view number n */
{
static FILE *viewfp = NULL; /* view file pointer */
static int viewnum = 0; /* current view number */
@@ -1087,7 +1070,7 @@ int n;
fclose(viewfp);
viewfp = NULL;
viewnum = 0;
- copystruct(&curview, &stdview);
+ curview = stdview;
}
return(NULL);
}
@@ -1103,7 +1086,7 @@ int n;
perror(vval(VIEWFILE));
quit(1);
}
- copystruct(&curview, &stdview);
+ curview = stdview;
viewnum = 0;
}
if (n < 0) { /* get next view */
@@ -1123,8 +1106,8 @@ int n;
}
-int
-countviews() /* count views in view file */
+static int
+countviews(void) /* count views in view file */
{
int n;
@@ -1136,9 +1119,8 @@ countviews() /* count views in view file */
}
-char *
-getexp(n) /* get exposure for nth frame */
-int n;
+static char *
+getexp(int n) /* get exposure for nth frame */
{
extern char *fskip();
static char expval[32];
@@ -1207,9 +1189,8 @@ int n;
}
-struct pslot *
-findpslot(pid) /* find or allocate a process slot */
-int pid;
+static struct pslot *
+findpslot(int pid) /* find or allocate a process slot */
{
register struct pslot *psempty = NULL;
register int i;
@@ -1224,13 +1205,14 @@ int pid;
}
-int
-donecom(ps, pn, status) /* clean up after finished process */
-PSERVER *ps;
-int pn;
-int status;
+static int
+donecom( /* clean up after finished process */
+PSERVER *ps,
+int pn,
+int status
+)
{
- register PROC *pp;
+ register NETPROC *pp;
register struct pslot *psl;
pp = ps->proc + pn;
@@ -1265,8 +1247,8 @@ int status;
}
-int
-serverdown() /* check status of last process server */
+static int
+serverdown(void) /* check status of last process server */
{
if (lastpserver == NULL || !lastpserver->hostname[0])
return(0);
@@ -1282,11 +1264,12 @@ serverdown() /* check status of last process server
}
-int
-bruncom(com, fout, rf) /* run a command in the background */
-char *com;
-int fout;
-int (*rf)();
+static int
+bruncom( /* run a command in the background */
+char *com,
+int fout,
+int (*rf)()
+)
{
int pid;
register struct pslot *psl;
@@ -1315,8 +1298,8 @@ int (*rf)();
}
-bwait(ncoms) /* wait for batch job(s) to finish */
-int ncoms;
+static void
+bwait(int ncoms) /* wait for batch job(s) to finish */
{
int status;
@@ -1330,10 +1313,12 @@ int ncoms;
}
-int
-pruncom(com, ppins, maxcopies) /* run a command in parallel over network */
-char *com, *ppins;
-int maxcopies;
+static int
+pruncom( /* run a command in parallel over network */
+char *com,
+char *ppins,
+int maxcopies
+)
{
int retstatus = 0;
int hostcopies;
@@ -1355,6 +1340,7 @@ int maxcopies;
strcpy(com1=buf, com); /* build -PP command */
sprintf(com1+(ppins-com), " -PP %s/%s.persist",
vval(DIRECTORY), phostname(ps));
+ unlink(com1+(ppins-com)+5);
strcat(com1, ppins);
} else
com1 = com;
@@ -1399,8 +1385,8 @@ int maxcopies;
}
-runcom(cs) /* run a command locally and wait for it */
-char *cs;
+static int
+runcom(char *cs) /* run a command locally and wait for it */
{
if (!silent) /* echo it */
printf("\t%s\n", cs);
@@ -1411,11 +1397,11 @@ char *cs;
}
-rmfile(fn) /* remove a file */
-char *fn;
+static int
+rmfile(char *fn) /* remove a file */
{
if (!silent)
-#ifdef MSDOS
+#ifdef _WIN32
printf("\tdel %s\n", fn);
#else
printf("\trm -f %s\n", fn);
@@ -1426,8 +1412,8 @@ char *fn;
}
-badvalue(vc) /* report bad variable value and exit */
-int vc;
+static void
+badvalue(int vc) /* report bad variable value and exit */
{
fprintf(stderr, "%s: bad value for variable '%s'\n",
progname, vnam(vc));
@@ -1435,10 +1421,11 @@ int vc;
}
-char *
-dirfile(df, path) /* separate path into directory and file */
-char *df;
-register char *path;
+static char *
+dirfile( /* separate path into directory and file */
+char *df,
+register char *path
+)
{
register int i;
int psep;
@@ -1446,7 +1433,7 @@ register char *path;
for (i = 0, psep = -1; path[i]; i++)
if (path[i] == '/')
psep = i;
- if (df != NULL)
+ if (df != NULL) {
if (psep == 0) {
df[0] = '/';
df[1] = '\0';
@@ -1455,11 +1442,12 @@ register char *path;
df[psep] = '\0';
} else
df[0] = '\0';
+ }
return(path+psep+1);
}
-int
+static int
getblur(double *bf) /* get # blur samples (and fraction) */
{
double blurf;