115 |
|
|
116 |
|
struct rtproc *rt_unproc = NULL; /* unprocessed ray trees */ |
117 |
|
|
118 |
< |
char persistfn[] = "pfXXXXXX"; /* persist file name */ |
118 |
> |
#define PERSIST_NONE 0 /* no persist file */ |
119 |
> |
#define PERSIST_SINGLE 1 /* user set -P persist */ |
120 |
> |
#define PERSIST_PARALL 2 /* user set -PP persist */ |
121 |
> |
#define PERSIST_OURS 3 /* -PP persist belongs to us */ |
122 |
> |
int persist_state = PERSIST_NONE; /* persist file state */ |
123 |
> |
char persistfn[] = "pfXXXXXX"; /* our persist file name, if set */ |
124 |
|
|
125 |
|
int gargc; /* global argc */ |
126 |
|
char **gargv; /* global argv */ |
353 |
|
addmodfile(argv[i], curout, binval, bincnt); |
354 |
|
continue; |
355 |
|
case 'P': /* persist file */ |
356 |
< |
error(USER, "persist file is automatic"); |
357 |
< |
break; |
356 |
> |
if (i >= argc-2) break; |
357 |
> |
persist_state = (argv[i][2] == 'P') ? |
358 |
> |
PERSIST_PARALL : PERSIST_SINGLE; |
359 |
> |
rtargv[rtargc++] = argv[i]; |
360 |
> |
rtargv[rtargc++] = argv[++i]; |
361 |
> |
continue; |
362 |
|
} |
363 |
|
rtargv[rtargc++] = argv[i]; /* assume rtrace option */ |
364 |
|
} |
398 |
|
exit(1); |
399 |
|
} |
400 |
|
if (nprocs > 1) { /* add persist file if parallel */ |
401 |
< |
rtargv[rtargc++] = "-PP"; |
402 |
< |
rtargv[rtargc++] = mktemp(persistfn); |
401 |
> |
if (persist_state == PERSIST_SINGLE) |
402 |
> |
error(USER, "use -PP option for multiple processes"); |
403 |
> |
if (persist_state == PERSIST_NONE) { |
404 |
> |
rtargv[rtargc++] = "-PP"; |
405 |
> |
rtargv[rtargc++] = mktemp(persistfn); |
406 |
> |
persist_state = PERSIST_OURS; |
407 |
> |
} |
408 |
|
} |
409 |
|
/* add format string */ |
410 |
|
sprintf(fmt, "-f%cf", inpfmt); |
464 |
|
{ |
465 |
|
int rtstat; |
466 |
|
|
467 |
< |
if (rt0.next != NULL) /* terminate persistent rtrace */ |
467 |
> |
if (persist_state == PERSIST_OURS) /* terminate persistent rtrace */ |
468 |
|
killpersist(); |
469 |
|
/* clean up rtrace process(es) */ |
470 |
|
rtstat = done_rprocs(&rt0); |