--- ray/src/rt/rtmain.c 2022/10/18 18:07:50 2.37 +++ ray/src/rt/rtmain.c 2023/08/15 01:19:37 2.46 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rtmain.c,v 2.37 2022/10/18 18:07:50 greg Exp $"; +static const char RCSid[] = "$Id: rtmain.c,v 2.46 2023/08/15 01:19:37 greg Exp $"; #endif /* * rtmain.c - main for rtrace per-ray calculation program @@ -35,7 +35,6 @@ char *errfile = NULL; /* error output file */ int nproc = 1; /* number of processes */ -extern char *formstr(int f); /* string from format */ extern int setrtoutput(void); /* set output values */ int inform = 'a'; /* input format */ @@ -66,7 +65,24 @@ static void onsig(int signo); static void sigdie(int signo, char *msg); static void printdefaults(void); +#ifdef PERSIST +#define RTRACE_FEATURES "Persist\nParallelPersist\nMultiprocessing\n" \ + "IrradianceCalc\nImmediateIrradiance\nDistanceLimiting\n" \ + "ParticipatingMedia=Mist\n" \ + "HessianAmbientCache\nAmbientAveraging\n" \ + "AmbientValueSharing\nAdaptiveShadowTesting\n" \ + "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \ + "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" +#else +#define RTRACE_FEATURES "IrradianceCalc\nIrradianceCalc\nDistanceLimiting\n" \ + "ParticipatingMedia=Mist\n" \ + "HessianAmbientCache\nAmbientAveraging\n" \ + "AmbientValueSharing\nAdaptiveShadowTesting\n" \ + "InputFormats=a,f,d\nOutputFormats=a,f,d,c\n" \ + "Outputs=o,d,v,V,w,W,l,L,c,p,n,N,s,m,M,r,x,R,X,~\n" +#endif + int main(int argc, char *argv[]) { @@ -89,6 +105,10 @@ main(int argc, char *argv[]) int i; /* global program name */ progname = argv[0] = fixargv0(argv[0]); + /* feature check only? */ + strcat(RFeatureList, RTRACE_FEATURES); + if (argc > 1 && !strcmp(argv[1], "-features")) + return feature_status(argc-2, argv+2); /* add trace notify function */ for (i = 0; addobjnotify[i] != NULL; i++) ; @@ -311,7 +331,8 @@ main(int argc, char *argv[]) if (outform != 'a') SET_FILE_BINARY(stdout); rval = setrtoutput(); - readoct(octname = octnm, loadflags, &thescene, NULL); + octname = savqstr(octnm); + readoct(octname, loadflags, &thescene, NULL); nsceneobjs = nobjects; if (loadflags & IO_INFO) { /* print header */ @@ -399,7 +420,7 @@ badopt: void wputs( /* warning output function */ - char *s + const char *s ) { int lasterrno = errno; @@ -410,7 +431,7 @@ wputs( /* warning output function */ void eputs( /* put string to stderr */ - register char *s + const char *s ) { static int midline = 0; @@ -465,7 +486,7 @@ sigdie( /* set fatal signal */ static void printdefaults(void) /* print default values to stdout */ { - register char *cp; + char *cp; if (imm_irrad) printf("-I+\t\t\t\t# immediate irradiance on\n");