--- ray/src/cv/mgflib/parser.c 1995/03/07 14:53:23 1.13 +++ ray/src/cv/mgflib/parser.c 1995/05/11 20:17:33 1.18 @@ -1,4 +1,4 @@ -/* Copyright (c) 1994 Regents of the University of California */ +/* Copyright (c) 1995 Regents of the University of California */ #ifndef lint static char SCCSid[] = "$SunId$ LBL"; @@ -27,6 +27,12 @@ char mg_ename[MG_NENTITIES][MG_MAXELEN] = MG_NAMELIST; int (*mg_ehand[MG_NENTITIES])(); + /* Handler routine for unknown entities */ + +int (*mg_uhand)() = mg_defuhand; + +unsigned mg_nunknown; /* count of unknown entities */ + /* error messages */ char *mg_err[MG_NERRS] = MG_ERRLIST; @@ -89,82 +95,83 @@ mg_init() /* initialize alternate entity handlers */ mg_ehand[MG_E_INCLUDE] = e_include; if (mg_ehand[MG_E_SPH] == NULL) { mg_ehand[MG_E_SPH] = e_sph; - ineed |= 1<fid = ++nfids; @@ -231,14 +240,11 @@ char *fn; return(MG_OK); } /* get name relative to this context */ - if (mg_file != NULL && - (cp = strrchr(mg_file->fname, '/')) != NULL) - olen = cp - mg_file->fname + 1; - else - olen = 0; - if (olen) + if (mg_file != NULL && (cp = strrchr(mg_file->fname, '/')) != NULL) { strcpy(ctx->fname, mg_file->fname); - strcpy(ctx->fname+olen, fn); + strcpy(ctx->fname+(cp-mg_file->fname+1), fn); + } else + strcpy(ctx->fname, fn); ctx->fp = fopen(ctx->fname, "r"); if (ctx->fp == NULL) return(MG_ENOFILE); @@ -360,6 +366,18 @@ char *fn; } +int +mg_defuhand(ac, av) /* default handler for unknown entities */ +int ac; +char **av; +{ + if (mg_nunknown++ == 0) /* report first incident */ + fprintf(stderr, "%s: %d: %s: %s\n", mg_file->fname, + mg_file->lineno, mg_err[MG_EUNK], av[0]); + return(MG_OK); +} + + void mg_clear() /* clear parser history */ { @@ -389,6 +407,7 @@ char **av; { char *xfarg[MG_MAXARGC]; MG_FCTXT ictx; + XF_SPEC *xf_orig = xf_context; int rv; if (ac < 2) @@ -405,7 +424,7 @@ char **av; if ((rv = mg_handle(MG_E_XF, ac-1, xfarg)) != MG_OK) return(rv); } - while (!feof(mg_file->fp)) { + do { while (mg_read()) if ((rv = mg_parse()) != MG_OK) { fprintf(stderr, "%s: %d: %s:\n%s", ictx.fname, @@ -417,7 +436,7 @@ char **av; if (ac > 2) if ((rv = mg_handle(MG_E_XF, 1, xfarg)) != MG_OK) return(rv); - } + } while (xf_context != xf_orig); mg_close(); return(MG_OK); } @@ -1004,7 +1023,7 @@ put_cspec() /* put out current color spectrum */ newav[2] = wl[1]; sf = (double)C_CNSS / c_ccolor->ssum; for (i = 0; i < C_CNSS; i++) { - sprintf(vbuf[i], "%.6f", sf*c_ccolor->ssamp[i]); + sprintf(vbuf[i], "%.4f", sf*c_ccolor->ssamp[i]); newav[i+3] = vbuf[i]; } newav[C_CNSS+3] = NULL;