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

Comparing ray/src/cv/mgflib/parser.c (file contents):
Revision 1.15 by greg, Thu Apr 13 12:11:30 1995 UTC vs.
Revision 1.17 by greg, Tue May 9 14:38:22 1995 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1994 Regents of the University of California */
1 > /* Copyright (c) 1995 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 89 | Line 89 | mg_init()                      /* initialize alternate entity handlers */
89                  mg_ehand[MG_E_INCLUDE] = e_include;
90          if (mg_ehand[MG_E_SPH] == NULL) {
91                  mg_ehand[MG_E_SPH] = e_sph;
92 <                ineed |= 1<<MG_E_POINT|1<<MG_E_VERTEX;
92 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX;
93          } else
94 <                uneed |= 1<<MG_E_POINT|1<<MG_E_VERTEX|1<<MG_E_XF;
94 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX|1L<<MG_E_XF;
95          if (mg_ehand[MG_E_CYL] == NULL) {
96                  mg_ehand[MG_E_CYL] = e_cyl;
97 <                ineed |= 1<<MG_E_POINT|1<<MG_E_VERTEX;
97 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX;
98          } else
99 <                uneed |= 1<<MG_E_POINT|1<<MG_E_VERTEX|1<<MG_E_XF;
99 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX|1L<<MG_E_XF;
100          if (mg_ehand[MG_E_CONE] == NULL) {
101                  mg_ehand[MG_E_CONE] = e_cone;
102 <                ineed |= 1<<MG_E_POINT|1<<MG_E_VERTEX;
102 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX;
103          } else
104 <                uneed |= 1<<MG_E_POINT|1<<MG_E_VERTEX|1<<MG_E_XF;
104 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX|1L<<MG_E_XF;
105          if (mg_ehand[MG_E_RING] == NULL) {
106                  mg_ehand[MG_E_RING] = e_ring;
107 <                ineed |= 1<<MG_E_POINT|1<<MG_E_NORMAL|1<<MG_E_VERTEX;
107 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_NORMAL|1L<<MG_E_VERTEX;
108          } else
109 <                uneed |= 1<<MG_E_POINT|1<<MG_E_NORMAL|1<<MG_E_VERTEX|1<<MG_E_XF;
109 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_NORMAL|1L<<MG_E_VERTEX|1L<<MG_E_XF;
110          if (mg_ehand[MG_E_PRISM] == NULL) {
111                  mg_ehand[MG_E_PRISM] = e_prism;
112 <                ineed |= 1<<MG_E_POINT|1<<MG_E_VERTEX;
112 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX;
113          } else
114 <                uneed |= 1<<MG_E_POINT|1<<MG_E_VERTEX|1<<MG_E_XF;
114 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX|1L<<MG_E_XF;
115          if (mg_ehand[MG_E_TORUS] == NULL) {
116                  mg_ehand[MG_E_TORUS] = e_torus;
117 <                ineed |= 1<<MG_E_POINT|1<<MG_E_NORMAL|1<<MG_E_VERTEX;
117 >                ineed |= 1L<<MG_E_POINT|1L<<MG_E_NORMAL|1L<<MG_E_VERTEX;
118          } else
119 <                uneed |= 1<<MG_E_POINT|1<<MG_E_NORMAL|1<<MG_E_VERTEX|1<<MG_E_XF;
119 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_NORMAL|1L<<MG_E_VERTEX|1L<<MG_E_XF;
120          if (mg_ehand[MG_E_COLOR] != NULL) {
121                  if (mg_ehand[MG_E_CMIX] == NULL) {
122                          mg_ehand[MG_E_CMIX] = e_cmix;
123 <                        ineed |= 1<<MG_E_COLOR|1<<MG_E_CXY|1<<MG_E_CSPEC|1<<MG_E_CMIX|1<<MG_E_CCT;
123 >                        ineed |= 1L<<MG_E_COLOR|1L<<MG_E_CXY|1L<<MG_E_CSPEC|1L<<MG_E_CMIX|1L<<MG_E_CCT;
124                  }
125                  if (mg_ehand[MG_E_CSPEC] == NULL) {
126                          mg_ehand[MG_E_CSPEC] = e_cspec;
127 <                        ineed |= 1<<MG_E_COLOR|1<<MG_E_CXY|1<<MG_E_CSPEC|1<<MG_E_CMIX|1<<MG_E_CCT;
127 >                        ineed |= 1L<<MG_E_COLOR|1L<<MG_E_CXY|1L<<MG_E_CSPEC|1L<<MG_E_CMIX|1L<<MG_E_CCT;
128                  }
129                  if (mg_ehand[MG_E_CCT] == NULL) {
130                          mg_ehand[MG_E_CCT] = e_cct;
131 <                        ineed |= 1<<MG_E_COLOR|1<<MG_E_CXY|1<<MG_E_CSPEC|1<<MG_E_CMIX|1<<MG_E_CCT;
131 >                        ineed |= 1L<<MG_E_COLOR|1L<<MG_E_CXY|1L<<MG_E_CSPEC|1L<<MG_E_CMIX|1L<<MG_E_CCT;
132                  }
133          }
134                                          /* check for consistency */
135          if (mg_ehand[MG_E_FACE] != NULL)
136 <                uneed |= 1<<MG_E_POINT|1<<MG_E_VERTEX|1<<MG_E_XF;
136 >                uneed |= 1L<<MG_E_POINT|1L<<MG_E_VERTEX|1L<<MG_E_XF;
137          if (mg_ehand[MG_E_CXY] != NULL || mg_ehand[MG_E_CSPEC] != NULL ||
138                          mg_ehand[MG_E_CMIX] != NULL)
139 <                uneed |= 1<<MG_E_COLOR;
139 >                uneed |= 1L<<MG_E_COLOR;
140          if (mg_ehand[MG_E_RD] != NULL || mg_ehand[MG_E_TD] != NULL ||
141                          mg_ehand[MG_E_IR] != NULL ||
142                          mg_ehand[MG_E_ED] != NULL ||
143                          mg_ehand[MG_E_RS] != NULL ||
144                          mg_ehand[MG_E_TS] != NULL ||
145                          mg_ehand[MG_E_SIDES] != NULL)
146 <                uneed |= 1<<MG_E_MATERIAL;
146 >                uneed |= 1L<<MG_E_MATERIAL;
147          for (i = 0; i < MG_NENTITIES; i++)
148 <                if (uneed & 1<<i && mg_ehand[i] == NULL) {
148 >                if (uneed & 1L<<i && mg_ehand[i] == NULL) {
149                          fprintf(stderr, "Missing support for \"%s\" entity\n",
150                                          mg_ename[i]);
151                          exit(1);
152                  }
153                                          /* add support as needed */
154 <        if (ineed & 1<<MG_E_VERTEX && mg_ehand[MG_E_VERTEX] != c_hvertex)
154 >        if (ineed & 1L<<MG_E_VERTEX && mg_ehand[MG_E_VERTEX] != c_hvertex)
155                  e_supp[MG_E_VERTEX] = c_hvertex;
156 <        if (ineed & 1<<MG_E_POINT && mg_ehand[MG_E_POINT] != c_hvertex)
156 >        if (ineed & 1L<<MG_E_POINT && mg_ehand[MG_E_POINT] != c_hvertex)
157                  e_supp[MG_E_POINT] = c_hvertex;
158 <        if (ineed & 1<<MG_E_NORMAL && mg_ehand[MG_E_NORMAL] != c_hvertex)
158 >        if (ineed & 1L<<MG_E_NORMAL && mg_ehand[MG_E_NORMAL] != c_hvertex)
159                  e_supp[MG_E_NORMAL] = c_hvertex;
160 <        if (ineed & 1<<MG_E_COLOR && mg_ehand[MG_E_COLOR] != c_hcolor)
160 >        if (ineed & 1L<<MG_E_COLOR && mg_ehand[MG_E_COLOR] != c_hcolor)
161                  e_supp[MG_E_COLOR] = c_hcolor;
162 <        if (ineed & 1<<MG_E_CXY && mg_ehand[MG_E_CXY] != c_hcolor)
162 >        if (ineed & 1L<<MG_E_CXY && mg_ehand[MG_E_CXY] != c_hcolor)
163                  e_supp[MG_E_CXY] = c_hcolor;
164 <        if (ineed & 1<<MG_E_CSPEC && mg_ehand[MG_E_CSPEC] != c_hcolor)
164 >        if (ineed & 1L<<MG_E_CSPEC && mg_ehand[MG_E_CSPEC] != c_hcolor)
165                  e_supp[MG_E_CSPEC] = c_hcolor;
166 <        if (ineed & 1<<MG_E_CMIX && mg_ehand[MG_E_CMIX] != c_hcolor)
166 >        if (ineed & 1L<<MG_E_CMIX && mg_ehand[MG_E_CMIX] != c_hcolor)
167                  e_supp[MG_E_CMIX] = c_hcolor;
168 <        if (ineed & 1<<MG_E_CCT && mg_ehand[MG_E_CCT] != c_hcolor)
168 >        if (ineed & 1L<<MG_E_CCT && mg_ehand[MG_E_CCT] != c_hcolor)
169                  e_supp[MG_E_CCT] = c_hcolor;
170                                          /* discard remaining entities */
171          for (i = 0; i < MG_NENTITIES; i++)
# Line 219 | Line 219 | register MG_FCTXT      *ctx;
219   char    *fn;
220   {
221          static int      nfids;
222        int     olen;
222          register char   *cp;
223  
224          ctx->fid = ++nfids;
# Line 232 | Line 231 | char   *fn;
231                  return(MG_OK);
232          }
233                                          /* get name relative to this context */
234 <        if (mg_file != NULL &&
236 <                        (cp = strrchr(mg_file->fname, '/')) != NULL)
237 <                olen = cp - mg_file->fname + 1;
238 <        else
239 <                olen = 0;
240 <        if (olen)
234 >        if (mg_file != NULL && (cp = strrchr(mg_file->fname, '/')) != NULL) {
235                  strcpy(ctx->fname, mg_file->fname);
236 <        strcpy(ctx->fname+olen, fn);
236 >                strcpy(ctx->fname+(cp-mg_file->fname+1), fn);
237 >        } else
238 >                strcpy(ctx->fname, fn);
239          ctx->fp = fopen(ctx->fname, "r");
240          if (ctx->fp == NULL)
241                  return(MG_ENOFILE);
# Line 390 | Line 386 | char   **av;
386   {
387          char    *xfarg[MG_MAXARGC];
388          MG_FCTXT        ictx;
389 +        XF_SPEC *xf_orig = xf_context;
390          int     rv;
391  
392          if (ac < 2)
# Line 406 | Line 403 | char   **av;
403                  if ((rv = mg_handle(MG_E_XF, ac-1, xfarg)) != MG_OK)
404                          return(rv);
405          }
406 <        while (!feof(mg_file->fp)) {
406 >        do {
407                  while (mg_read())
408                          if ((rv = mg_parse()) != MG_OK) {
409                                  fprintf(stderr, "%s: %d: %s:\n%s", ictx.fname,
# Line 418 | Line 415 | char   **av;
415                  if (ac > 2)
416                          if ((rv = mg_handle(MG_E_XF, 1, xfarg)) != MG_OK)
417                                  return(rv);
418 <        }
418 >        } while (xf_context != xf_orig);
419          mg_close();
420          return(MG_OK);
421   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines