--- ray/src/util/ranimove.c 2003/10/21 19:19:29 3.9 +++ ray/src/util/ranimove.c 2016/04/18 22:39:13 3.18 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id"; +static const char RCSid[] = "$Id: ranimove.c,v 3.18 2016/04/18 22:39:13 greg Exp $"; #endif /* * Radiance object animation program @@ -12,7 +12,7 @@ static const char RCSid[] = "$Id"; #include "copyright.h" #include -#ifdef _WIN32 +#if defined(_WIN32) || defined(_WIN64) #include /* struct timeval. XXX find a replacement? */ #else #include @@ -20,6 +20,7 @@ static const char RCSid[] = "$Id"; #include #include +#include "platform.h" #include "paths.h" #include "ranimove.h" @@ -62,11 +63,21 @@ int haveprio = 0; /* high-level saliency specified */ int gargc; /* global argc for printargs */ char **gargv; /* global argv for printargs */ +static void setdefaults(void); +static void setmove(struct ObjMove *om, char *ms); +static void setrendparams(char *optf, char *qval); +static void getradfile(char *rfargs); +static void animate(void); +static int countviews(void); /* XXX duplicated function */ +static char * getobjname(struct ObjMove *om); +static char * getxf(struct ObjMove *om, int n); + int -main(argc, argv) -int argc; -char *argv[]; +main( + int argc, + char *argv[] +) { int explicate = 0; char *cfname; @@ -153,12 +164,14 @@ userr: "Usage: %s [-n nprocs][-f beg,end][-t sec][-d jnd][-s][-w][-e] anim_file\n", progname); quit(1); + return 1; /* pro forma return */ } void -eputs(s) /* put string to stderr */ -register char *s; +eputs( /* put string to stderr */ + char *s +) { static int midline = 0; @@ -177,8 +190,17 @@ register char *s; void -setdefaults() /* set default values */ +quit(int ec) /* make sure exit is called */ { + if (ray_pnprocs > 0) /* close children if any */ + ray_pclose(0); + exit(ec); +} + + +static void +setdefaults(void) /* set default values */ +{ int nviews; int decades; char buf[256]; @@ -253,10 +275,11 @@ setdefaults() /* set default values */ } -void -setmove(om, ms) /* assign a move object from spec. */ -struct ObjMove *om; -char *ms; +static void +setmove( /* assign a move object from spec. */ + struct ObjMove *om, + char *ms +) { char parname[128]; char *cp; @@ -313,10 +336,11 @@ badspec: } -void -setrendparams(optf, qval) /* set global rendering parameters */ -char *optf; -char *qval; +static void +setrendparams( /* set global rendering parameters */ + char *optf, + char *qval +) { char *argv[1024]; char **av = argv; @@ -325,7 +349,7 @@ char *qval; av[ac=0] = NULL; /* load options from file, first */ if (optf != NULL && *optf) { - ac = wordfile(av, optf); + ac = wordfile(av, 1024, optf); if (ac < 0) { sprintf(errmsg, "cannot load options file \"%s\"", optf); @@ -334,7 +358,7 @@ char *qval; } /* then from options string */ if (qval != NULL && qval[0] == '-') - ac += wordstring(av+ac, qval); + ac += wordstring(av+ac, 1024-ac, qval); /* restore default parameters */ ray_restore(NULL); @@ -360,15 +384,16 @@ char *qval; } -void -getradfile(rfargs) /* run rad and get needed variables */ -char *rfargs; +static void +getradfile( /* run rad and get needed variables */ + char *rfargs +) { static short mvar[] = {OCONV,OCTREEF,RESOLUTION,EXPOSURE,-1}; char combuf[256]; - register int i; - register char *cp; - char *pippt; + int i; + char *cp; + char *pippt = NULL; /* create rad command */ strcpy(lorendoptf, "ranim0.opt"); sprintf(combuf, @@ -411,8 +436,8 @@ char *rfargs; } -void -animate() /* run through animation */ +static void +animate(void) /* run through animation */ { int rpass; @@ -444,8 +469,9 @@ animate() /* run through animation */ VIEW * -getview(n) /* get view number n */ -int n; +getview( /* get view number n */ + int n +) { static FILE *viewfp = NULL; /* view file pointer */ static int viewnum = 0; /* current view number */ @@ -477,7 +503,7 @@ int n; viewnum = 0; } if (n < 0) { /* get next view */ - register int c = getc(viewfp); + int c = getc(viewfp); if (c == EOF) return(NULL); /* that's it */ ungetc(c, viewfp); @@ -493,8 +519,8 @@ int n; } -int -countviews() /* count views in view file */ +static int +countviews(void) /* count views in view file */ { int n; @@ -507,14 +533,15 @@ countviews() /* count views in view file */ char * -getexp(n) /* get exposure for nth frame */ -int n; +getexp( /* get exposure for nth frame */ + int n +) { extern char *fskip(); static char expval[32]; static FILE *expfp = NULL; static int curfrm = 0; - register char *cp; + char *cp; if (n == 0) { /* signal to close file */ if (expfp != NULL) { @@ -560,12 +587,14 @@ formerr: sprintf(errmsg, "%s: exposure format error on line %d", vval(EXPOSURE), curfrm); error(USER, errmsg); + return NULL; /* pro forma return */ } double -expspec_val(s) /* get exposure value from spec. */ -char *s; +expspec_val( /* get exposure value from spec. */ + char *s +) { double expval; @@ -580,23 +609,23 @@ char *s; char * -getoctspec(n) /* get octree for the given frame */ -int n; +getoctspec( /* get octree for the given frame */ + int n +) { static char combuf[1024]; - int cfm = 0; + static int cfm = 0; int uses_inline; FILE *fp; int i; /* is octree static? */ if (!vdef(MOVE)) return(vval(OCTREEF)); - /* done already */ + /* done already? */ if (n == cfm) return(combuf); /* else create object file */ - strcpy(objtmpf, "movinobj.rad"); - fp = fopen(objtmpf, "w"); + fp = fopen(mktemp(strcpy(objtmpf, TEMPLATE)), "w"); if (fp == NULL) { sprintf(errmsg, "cannot write to moving objects file '%s'", objtmpf); @@ -627,18 +656,20 @@ int n; vdef(OCONV) ? vval(OCONV) : "", vval(OCTREEF), objtmpf); else - sprintf(combuf, "!xform -f %s | oconv -f -i '%s' -", - objtmpf, vval(OCTREEF)); + sprintf(combuf, "!xform -f %s | oconv %s -f -i '%s' -", + objtmpf, vdef(OCONV) ? vval(OCONV) : "", + vval(OCTREEF)); return(combuf); } -char * -getobjname(om) /* get fully qualified object name */ -register struct ObjMove *om; +static char * +getobjname( /* get fully qualified object name */ + struct ObjMove *om +) { static char objName[512]; - register char *cp = objName; + char *cp = objName; strcpy(cp, om->name); while (om->parent >= 0) { @@ -651,10 +682,11 @@ register struct ObjMove *om; } -char * -getxf(om, n) /* get total transform for object */ -register struct ObjMove *om; -int n; +static char * +getxf( /* get total transform for object */ + struct ObjMove *om, + int n +) { static char xfsbuf[4096]; char *xfp; @@ -665,7 +697,7 @@ int n; char *av[64]; int ac; int i; - register char *cp; + char *cp; /* get parent transform, first */ if (om->parent >= 0) xfp = getxf(&obj_move[om->parent], n); @@ -774,14 +806,15 @@ int n; int -getmove(obj) /* find matching move object */ -OBJECT obj; +getmove( /* find matching move object */ + OBJECT obj +) { static int lasti; static OBJECT lasto = OVOID; char *onm, *objnm; int len, len2; - register int i; + int i; if (obj == OVOID) return(-1); @@ -807,8 +840,9 @@ OBJECT obj; double -obj_prio(obj) /* return priority for object */ -OBJECT obj; +obj_prio( /* return priority for object */ + OBJECT obj +) { int moi; @@ -818,8 +852,46 @@ OBJECT obj; } +#if defined(_WIN32) || defined(_WIN64) + /* replacement function for Windoze */ +static int +gettimeofday(struct timeval *tp, void *dummy) +{ + FILETIME ft; + LARGE_INTEGER li; + __int64 t; + + SYSTEMTIME st; + FILETIME ft2; + LARGE_INTEGER li2; + __int64 t2; + + st.wYear = 1970; + st.wHour = 0; + st.wMinute = 0; + st.wSecond = 0; + st.wMilliseconds = 1; + + SystemTimeToFileTime(&st, &ft2); + li2.LowPart = ft2.dwLowDateTime; + li2.HighPart = ft2.dwHighDateTime; + t2 = li2.QuadPart; + + GetSystemTimeAsFileTime(&ft); + li.LowPart = ft.dwLowDateTime; + li.HighPart = ft.dwHighDateTime; + t = li.QuadPart; + t -= t2; // From 1970 + t /= 10; // In microseconds + tp->tv_sec = (long)(t / 1000000); + tp->tv_usec = (long)(t % 1000000); + return 0; +} + +#endif + double -getTime() /* get current time (CPU or real) */ +getTime(void) /* get current time (CPU or real) */ { struct timeval time_now; /* return CPU time if one process */