ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/lookamb.c
Revision: 2.3
Committed: Thu Jul 16 12:08:44 1992 UTC (31 years, 9 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.2: +26 -3 lines
Log Message:
added header and magic number to ambient value file

File Contents

# Content
1 /* Copyright (c) 1991 Regents of the University of California */
2
3 #ifndef lint
4 static char SCCSid[] = "$SunId$ LBL";
5 #endif
6
7 /*
8 * lookamb.c - program to examine ambient components.
9 *
10 * 10/8/86
11 */
12
13 #include <stdio.h>
14
15 #include "color.h"
16
17 #include "ambient.h"
18
19
20 int dataonly = 0;
21 int header = 1;
22 int reverse = 0;
23
24 AMBVAL av;
25
26
27 main(argc, argv) /* load ambient values from a file */
28 char *argv[];
29 {
30 FILE *fp;
31 int i;
32
33 for (i = 1; i < argc; i++)
34 if (argv[i][0] == '-')
35 switch (argv[i][1]) {
36 case 'd':
37 dataonly = 1;
38 break;
39 case 'r':
40 reverse = 1;
41 break;
42 case 'h':
43 header = 0;
44 break;
45 default:
46 fprintf(stderr, "%s: unknown option '%s'\n",
47 argv[0], argv[i]);
48 return(1);
49 }
50 else
51 break;
52
53 if (i >= argc)
54 fp = stdin;
55 else if ((fp = fopen(argv[i], "r")) == NULL) {
56 fprintf(stderr, "%s: file not found\n", argv[i]);
57 return(1);
58 }
59 if (reverse) {
60 if (header) {
61 if (checkheader(fp, "ascii", stdout) < 0)
62 goto formaterr;
63 } else
64 printargs(argc, argv, stdout);
65 fputformat(AMBFMT, stdout);
66 putchar('\n');
67 putambmagic(stdout);
68 writamb(fp);
69 } else {
70 if (checkheader(fp, AMBFMT, header ? stdout : (FILE *)NULL) < 0)
71 goto formaterr;
72 if (!hasambmagic(fp))
73 goto formaterr;
74 if (header) {
75 fputformat("ascii", stdout);
76 putchar('\n');
77 }
78 lookamb(fp);
79 }
80 fclose(fp);
81 return(0);
82 formaterr:
83 fprintf(stderr, "%s: format error on input\n", argv[0]);
84 exit(1);
85 }
86
87
88 lookamb(fp) /* get ambient values from a file */
89 FILE *fp;
90 {
91 while (readambval(&av, fp)) {
92 if (dataonly) {
93 printf("%f\t%f\t%f\t", av.pos[0], av.pos[1], av.pos[2]);
94 printf("%f\t%f\t%f\t", av.dir[0], av.dir[1], av.dir[2]);
95 printf("%d\t%f\t%f\t", av.lvl, av.weight, av.rad);
96 printf("%e\t%e\t%e\t", colval(av.val,RED),
97 colval(av.val,GRN),
98 colval(av.val,BLU));
99 printf("%f\t%f\t%f\t", av.gpos[0],
100 av.gpos[1], av.gpos[2]);
101 printf("%f\t%f\t%f\n", av.gdir[0],
102 av.gdir[1], av.gdir[2]);
103 } else {
104 printf("\nPosition:\t%f\t%f\t%f\n", av.pos[0],
105 av.pos[1], av.pos[2]);
106 printf("Direction:\t%f\t%f\t%f\n", av.dir[0],
107 av.dir[1], av.dir[2]);
108 printf("Lvl,Wt,Rad:\t%d\t\t%f\t%f\n", av.lvl,
109 av.weight, av.rad);
110 printf("Value:\t\t%e\t%e\t%e\n", colval(av.val,RED),
111 colval(av.val,GRN), colval(av.val,BLU));
112 printf("Pos.Grad:\t%f\t%f\t%f\n", av.gpos[0],
113 av.gpos[1], av.gpos[2]);
114 printf("Dir.Grad:\t%f\t%f\t%f\n", av.gdir[0],
115 av.gdir[1], av.gdir[2]);
116 }
117 if (ferror(stdout))
118 exit(1);
119 }
120 }
121
122
123 writamb(fp) /* write binary ambient values */
124 FILE *fp;
125 {
126 for ( ; ; ) {
127 if (!dataonly)
128 fscanf(fp, "%*s");
129 if (fscanf(fp, "%f %f %f",
130 &av.pos[0], &av.pos[1], &av.pos[2]) != 3)
131 return;
132 if (!dataonly)
133 fscanf(fp, "%*s");
134 if (fscanf(fp, "%f %f %f",
135 &av.dir[0], &av.dir[1], &av.dir[2]) != 3)
136 return;
137 if (!dataonly)
138 fscanf(fp, "%*s");
139 if (fscanf(fp, "%d %f %f",
140 &av.lvl, &av.weight, &av.rad) != 3)
141 return;
142 if (!dataonly)
143 fscanf(fp, "%*s");
144 if (fscanf(fp, "%f %f %f",
145 &av.val[RED], &av.val[GRN], &av.val[BLU]) != 3)
146 return;
147 if (!dataonly)
148 fscanf(fp, "%*s");
149 if (fscanf(fp, "%f %f %f",
150 &av.gpos[0], &av.gpos[1], &av.gpos[2]) != 3)
151 return;
152 if (!dataonly)
153 fscanf(fp, "%*s");
154 if (fscanf(fp, "%f %f %f",
155 &av.gdir[0], &av.gdir[1], &av.gdir[2]) != 3)
156 return;
157 av.next = NULL;
158 writambval(&av, stdout);
159 if (ferror(stdout))
160 exit(1);
161 }
162 }