ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/rad2mgf.c
(Generate patch)

Comparing ray/src/cv/rad2mgf.c (file contents):
Revision 2.22 by schorsch, Sat Nov 15 16:29:11 2003 UTC vs.
Revision 2.25 by greg, Wed Dec 28 18:39:07 2005 UTC

# Line 5 | Line 5 | static const char      RCSid[] = "$Id$";
5   * Convert Radiance scene description to MGF
6   */
7  
8 #include "platform.h"
9 #include "standard.h"
8   #include <ctype.h>
9   #include <string.h>
10   #include <stdio.h>
11  
12 + #include "platform.h"
13 + #include "rtmath.h"
14 + #include "rtio.h"
15   #include "rtprocess.h"
16   #include "object.h"
17   #include "color.h"
# Line 50 | Line 51 | struct vert {
51  
52   LUTAB   vertab = LU_SINIT(free,NULL);   /* our vertex lookup table */
53  
54 < static void rad2mgf(char *inp);
55 < static void cvtprim(char *inp, char *mod, char *typ, char *id, FUNARGS *fa);
56 < static void newmat(char *id, char *alias);
57 < static void setmat(char *id);
58 < static void setobj(char *id);
59 < static void init(void);
60 < static void uninit(void);
61 < static void clrverts(void);
62 < static void add2dispatch(char *name, int (*func)());
63 < static char *getvertid(char *vname, FVECT vp);
64 < static int o_unsupported(char *mod, char *typ, char *id, FUNARGS *fa);
65 < static int o_face(char *mod, char *typ, char *id, FUNARGS *fa);
66 < static int o_cone(char *mod, char *typ, char *id, FUNARGS *fa);
67 < static int o_sphere(char *mod, char *typ, char *id, FUNARGS *fa);
68 < static int o_cylinder(char *mod, char *typ, char *id, FUNARGS *fa);
69 < static int o_ring(char *mod, char *typ, char *id, FUNARGS *fa);
70 < static int o_instance(char *mod, char *typ, char *id, FUNARGS *fa);
71 < static int o_illum(char *mod, char *typ, char *id, FUNARGS *fa);
72 < static int o_plastic(char *mod, char *typ, char *id, FUNARGS *fa);
73 < static int o_metal(char *mod, char *typ, char *id, FUNARGS *fa);
74 < static int o_glass(char *mod, char *typ, char *id, FUNARGS *fa);
75 < static int o_dielectric(char *mod, char *typ, char *id, FUNARGS *fa);
76 < static int o_mirror(char *mod, char *typ, char *id, FUNARGS *fa);
77 < static int o_trans(char *mod, char *typ, char *id, FUNARGS *fa);
78 < static int o_light(char *mod, char *typ, char *id, FUNARGS *fa);
54 > void rad2mgf(char *inp);
55 > void cvtprim(char *inp, char *mod, char *typ, char *id, FUNARGS *fa);
56 > void newmat(char *id, char *alias);
57 > void setmat(char *id);
58 > void setobj(char *id);
59 > void init(void);
60 > void uninit(void);
61 > void clrverts(void);
62 > void unspace(char *s);
63 > void add2dispatch(char *name, int (*func)());
64 > char *getvertid(char *vname, FVECT vp);
65 > int o_unsupported(char *mod, char *typ, char *id, FUNARGS *fa);
66 > int o_face(char *mod, char *typ, char *id, FUNARGS *fa);
67 > int o_cone(char *mod, char *typ, char *id, FUNARGS *fa);
68 > int o_sphere(char *mod, char *typ, char *id, FUNARGS *fa);
69 > int o_cylinder(char *mod, char *typ, char *id, FUNARGS *fa);
70 > int o_ring(char *mod, char *typ, char *id, FUNARGS *fa);
71 > int o_instance(char *mod, char *typ, char *id, FUNARGS *fa);
72 > int o_illum(char *mod, char *typ, char *id, FUNARGS *fa);
73 > int o_plastic(char *mod, char *typ, char *id, FUNARGS *fa);
74 > int o_metal(char *mod, char *typ, char *id, FUNARGS *fa);
75 > int o_glass(char *mod, char *typ, char *id, FUNARGS *fa);
76 > int o_dielectric(char *mod, char *typ, char *id, FUNARGS *fa);
77 > int o_mirror(char *mod, char *typ, char *id, FUNARGS *fa);
78 > int o_trans(char *mod, char *typ, char *id, FUNARGS *fa);
79 > int o_light(char *mod, char *typ, char *id, FUNARGS *fa);
80  
81  
82   int
# Line 127 | Line 129 | rad2mgf(               /* convert a Radiance file to MGF */
129          char    *inp
130   )
131   {
132 < #define mod     buf
133 < #define typ     (buf+128)
132 < #define id      (buf+256)
133 < #define alias   (buf+384)
134 <        char    buf[512];
132 >        char  buf[512];
133 >        char  mod[128], typ[32], id[128], alias[128];
134          FUNARGS fa;
135          register FILE   *fp;
136          register int    c;
# Line 170 | Line 169 | rad2mgf(               /* convert a Radiance file to MGF */
169                          break;
170                  default:                /* Radiance primitive */
171                          ungetc(c, fp);
172 <                        if (fscanf(fp, "%s %s %s", mod, typ, id) != 3) {
172 >                        if (fgetword(mod, sizeof(mod), fp) == NULL ||
173 >                                        fgetword(typ, sizeof(typ), fp) == NULL ||
174 >                                        fgetword(id, sizeof(id), fp) == NULL) {
175                                  fputs(inp, stderr);
176                                  fputs(": unexpected EOF\n", stderr);
177                                  exit(1);
178                          }
179 +                        unspace(mod);
180 +                        unspace(id);
181                          if (!strcmp(typ, "alias")) {
182                                  strcpy(alias, "EOF");
183 <                                fscanf(fp, "%s", alias);
183 >                                fgetword(alias, sizeof(alias), fp);
184 >                                unspace(alias);
185                                  newmat(id, alias);
186                          } else {
187                                  if (!readfargs(&fa, fp)) {
# Line 196 | Line 200 | rad2mgf(               /* convert a Radiance file to MGF */
200                  pclose(fp);
201          else
202                  fclose(fp);
199 #undef mod
200 #undef typ
201 #undef id
202 #undef alias
203   }
204  
205  
206   void
207 + unspace(        /* replace spaces with underscores in s */
208 +        char *s
209 + )
210 + {
211 +        while (*s) {
212 +                if (isspace(*s))
213 +                        *s = '_';
214 +                ++s;
215 +        }
216 + }
217 +
218 +
219 + void
220   cvtprim(        /* process Radiance primitive */
221          char    *inp,
222          char    *mod,
# Line 217 | Line 230 | cvtprim(       /* process Radiance primitive */
230          df = (int (*)())lu_find(&rdispatch, typ)->data;
231          if (df != NULL) {                               /* convert */
232                  if ((*df)(mod, typ, id, fa) < 0) {
233 <                        fprintf(stderr, "%s: bad %s \"%s\"\n", "rat2mgf", typ, id);
233 >                        fprintf(stderr, "%s: bad %s \"%s\"\n", "rad2mgf", typ, id);
234                          exit(1);
235                  }
236          } else {                                        /* unsupported */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines