--- ray/src/util/wrapBSDF.c 2015/03/25 22:50:48 2.13
+++ ray/src/util/wrapBSDF.c 2015/05/29 07:45:48 2.16
@@ -1,5 +1,5 @@
#ifndef lint
-static const char RCSid[] = "$Id: wrapBSDF.c,v 2.13 2015/03/25 22:50:48 greg Exp $";
+static const char RCSid[] = "$Id: wrapBSDF.c,v 2.16 2015/05/29 07:45:48 greg Exp $";
#endif
/*
* Wrap BSDF data in valid WINDOW XML file
@@ -25,7 +25,10 @@ const char *attr_unit = "meter";
const char legal_units[] = "meter|foot|inch|centimeter|millimeter";
/* system materials & geometry */
const char *mgf_geometry = NULL;
-
+ /* comment list */
+#define MAXCOMM 30
+const char *commlist[MAXCOMM];
+int ncomm = 0;
/* angle bases */
enum { ABdefault=-1, ABklemsFull=0, ABklemsHalf, ABklemsQuarter,
ABtensorTree3, ABtensorTree4, ABend };
@@ -445,32 +448,30 @@ writeBSDFblock(const char *caller, struct s_dfile *df)
break;
case DSxbar31:
puts("\t\tCIE-X");
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
puts("\t\tASTM E308 1931 X.dsp");
break;
case DSzbar31:
puts("\t\tCIE-Z");
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
puts("\t\tASTM E308 1931 Z.dsp");
break;
case DSuprime:
puts("\t\tCIE-u");
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
- puts("\t\tASTM E308 1931 u.dsp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
break;
case DSvprime:
puts("\t\tCIE-v");
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
- puts("\t\tASTM E308 1931 v.dsp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
break;
case DSsolar:
puts("\t\tSolar");
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
puts("\t\tNone");
break;
case DSnir:
puts("\t\tNIR");
- puts("\t\tSourceSpectrum>PLACE_HOLDER");
+ puts("\t\tPLACE_HOLDER");
puts("\t\tPLACE_HOLDER");
break;
default:
@@ -481,7 +482,7 @@ writeBSDFblock(const char *caller, struct s_dfile *df)
spectr_file[df->spectrum]);
if (cp != NULL)
*cp = '.';
- puts("\t\tSourceSpectrum>CIE Illuminant D65 1nm.ssp");
+ puts("\t\tCIE Illuminant D65 1nm.ssp");
printf("\t\t%s\n",
spectr_file[df->spectrum]);
break;
@@ -587,6 +588,9 @@ writeBSDF(const char *caller, ezxml_t fl)
free(xml);
return 0;
}
+ puts("");
+ for (i = 0; i < ncomm; i++)
+ printf("\n", commlist[i]);
fflush(stdout); /* write previous XML info. */
if (write(fileno(stdout), xml, ei) != ei) {
free(xml);
@@ -719,7 +723,7 @@ UsageExit(const char *pname)
fputs("Usage: ", stderr);
fputs(pname, stderr);
fputs(" [-W][-c][-a {kf|kh|kq|t3|t4}][-u unit][-g geom][-f 'x=string;y=string']", stderr);
- fputs(" [-s spectr][-tb inp][-tf inp][-rb inp][-rf inp]", stderr);
+ fputs(" [-s spectr][-tb inp][-tf inp][-rb inp][-rf inp][-C comm]", stderr);
fputs(" [input.xml]\n", stderr);
exit(1);
}
@@ -787,6 +791,19 @@ main(int argc, char *argv[])
continue;
case 'c': /* correct solid angle */
correct_solid_angle = 1;
+ continue;
+ case 'C': /* comment */
+ if (ncomm >= MAXCOMM) {
+ fprintf(stderr, "%s: too many comments\n",
+ argv[0]);
+ return 1;
+ }
+ if (strchr(argv[++i], '>') != NULL) {
+ fprintf(stderr, "%s: illegal character in comment\n",
+ argv[0]);
+ return 1;
+ }
+ commlist[ncomm++] = argv[i];
continue;
case 't': /* transmission */
if (i >= argc-1)