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.18 by greg, Thu May 11 20:17:33 1995 UTC vs.
Revision 1.22 by greg, Fri Dec 1 11:03:57 1995 UTC

# Line 304 | Line 304 | mg_read()                      /* read next line from file */
304                  if (fgets(mg_file->inpline+len,
305                                  MG_MAXLINE-len, mg_file->fp) == NULL)
306                          return(len);
307                mg_file->lineno++;
307                  len += strlen(mg_file->inpline+len);
308 <                if (len > 1 && mg_file->inpline[len-2] == '\\')
309 <                        mg_file->inpline[--len-1] = ' ';
310 <        } while (mg_file->inpline[len]);
308 >                if (len >= MG_MAXLINE-1)
309 >                        return(len);
310 >                mg_file->lineno++;
311 >        } while (len > 1 && mg_file->inpline[len-2] == '\\');
312  
313          return(len);
314   }
# Line 320 | Line 320 | mg_parse()                     /* parse current input line */
320          char    abuf[MG_MAXLINE];
321          char    *argv[MG_MAXARGC];
322          int     en;
323 <        register char   *cp, **ap;
324 <
325 <        strcpy(cp=abuf, mg_file->inpline);
326 <        ap = argv;                      /* break into words */
323 >        register char   *cp, *cp2, **ap;
324 >                                        /* copy line, removing escape chars */
325 >        cp = abuf; cp2 = mg_file->inpline;
326 >        while ((*cp++ = *cp2++))
327 >                if (cp2[0] == '\n' && cp2[-1] == '\\')
328 >                        cp--;
329 >        cp = abuf; ap = argv;           /* break into words */
330          for ( ; ; ) {
331                  while (isspace(*cp))
332                          *cp++ = '\0';
# Line 349 | Line 352 | char   *fn;
352   {
353          MG_FCTXT        cntxt;
354          int     rval;
355 +        register int    nbr;
356  
357          if ((rval = mg_open(&cntxt, fn)) != MG_OK) {
358                  fprintf(stderr, "%s: %s\n", fn, mg_err[rval]);
359                  return(rval);
360          }
361 <        while (mg_read())               /* parse each line */
361 >        while ((nbr = mg_read()) > 0) { /* parse each line */
362 >                if (nbr >= MG_MAXLINE-1) {
363 >                        fprintf(stderr, "%s: %d: %s\n", cntxt.fname,
364 >                                        cntxt.lineno, mg_err[rval=MG_ELINE]);
365 >                        break;
366 >                }
367                  if ((rval = mg_parse()) != MG_OK) {
368                          fprintf(stderr, "%s: %d: %s:\n%s", cntxt.fname,
369                                          cntxt.lineno, mg_err[rval],
370                                          cntxt.inpline);
371                          break;
372                  }
373 +        }
374          mg_close();
375          return(rval);
376   }
# Line 408 | Line 418 | char   **av;
418          char    *xfarg[MG_MAXARGC];
419          MG_FCTXT        ictx;
420          XF_SPEC *xf_orig = xf_context;
421 <        int     rv;
421 >        register int    rv;
422  
423          if (ac < 2)
424                  return(MG_EARGC);
# Line 421 | Line 431 | char   **av;
431                  for (i = 1; i < ac-1; i++)
432                          xfarg[i] = av[i+1];
433                  xfarg[ac-1] = NULL;
434 <                if ((rv = mg_handle(MG_E_XF, ac-1, xfarg)) != MG_OK)
434 >                if ((rv = mg_handle(MG_E_XF, ac-1, xfarg)) != MG_OK) {
435 >                        mg_close();
436                          return(rv);
437 +                }
438          }
439          do {
440 <                while (mg_read())
440 >                while ((rv = mg_read()) > 0) {
441 >                        if (rv >= MG_MAXLINE-1) {
442 >                                fprintf(stderr, "%s: %d: %s\n", ictx.fname,
443 >                                                ictx.lineno, mg_err[MG_ELINE]);
444 >                                mg_close();
445 >                                return(MG_EINCL);
446 >                        }
447                          if ((rv = mg_parse()) != MG_OK) {
448                                  fprintf(stderr, "%s: %d: %s:\n%s", ictx.fname,
449                                                  ictx.lineno, mg_err[rv],
# Line 433 | Line 451 | char   **av;
451                                  mg_close();
452                                  return(MG_EINCL);
453                          }
454 +                }
455                  if (ac > 2)
456 <                        if ((rv = mg_handle(MG_E_XF, 1, xfarg)) != MG_OK)
456 >                        if ((rv = mg_handle(MG_E_XF, 1, xfarg)) != MG_OK) {
457 >                                mg_close();
458                                  return(rv);
459 +                        }
460          } while (xf_context != xf_orig);
461          mg_close();
462          return(MG_OK);
# Line 733 | Line 754 | char   **av;
754          static char     *p4ent[5] = {mg_ename[MG_E_POINT],p4[0],p4[1],p4[2]};
755          static char     *n4ent[5] = {mg_ename[MG_E_NORMAL],n4[0],n4[1],n4[2]};
756          static char     *fent[6] = {mg_ename[MG_E_FACE],"_cv1","_cv2","_cv3","_cv4"};
757 +        char    *v1n;
758          register C_VERTEX       *cv1, *cv2;
759          register int    i, j;
760          FVECT   u, v, w;
# Line 748 | Line 770 | char   **av;
770          if ((cv1 = c_getvert(av[1])) == NULL ||
771                          (cv2 = c_getvert(av[3])) == NULL)
772                  return(MG_EUNDEF);
773 +        v1n = av[1];
774          if (!isflt(av[2]) || !isflt(av[4]))
775                  return(MG_ETYPE);
776          rad1 = atof(av[2]);
# Line 766 | Line 789 | char   **av;
789                  cv = cv1;
790                  cv1 = cv2;
791                  cv2 = cv;
792 +                v1n = av[3];
793                  d = rad1;
794                  rad1 = rad2;
795                  rad2 = d;
# Line 799 | Line 823 | char   **av;
823          if ((rv = mg_handle(MG_E_NORMAL, 4, n3ent)) != MG_OK)
824                  return(rv);
825          if (rad1 == 0.) {               /* triangles */
826 <                v1ent[3] = av[1];
826 >                v1ent[3] = v1n;
827                  if ((rv = mg_handle(MG_E_VERTEX, 4, v1ent)) != MG_OK)
828                          return(rv);
829                  for (j = 0; j < 3; j++)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines