--- ray/src/cv/mgflib/mgfilt.c 1995/02/11 09:54:29 1.2 +++ ray/src/cv/mgflib/mgfilt.c 2003/07/27 22:12:02 1.7 @@ -1,17 +1,18 @@ -/* Copyright (c) 1995 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: mgfilt.c,v 1.7 2003/07/27 22:12:02 schorsch Exp $"; #endif - /* * Filter MGF stream, removing entities that won't be understood */ #include +#include #include "parser.h" + /* Number of entities for major versions */ +short nentlist[MG_VMAJOR] = MG_NELIST; + int put_entity(ac, av) /* general output routine */ register int ac; @@ -33,30 +34,57 @@ char *argv[]; int i, en; if (argc < 2) { - fprintf(stderr, "Usage: %s entity,list [file ..]\n", argv[0]); + fprintf(stderr, + "Usage: %s { version | entity,list } [file ..]\n", + argv[0]); exit(1); } - for (cp1 = cp2 = argv[1]; *cp1; cp1 = cp2) { - while (*cp2) { - if (*cp2 == ',') { - *cp2++ = '\0'; - break; + if (isint(argv[1])) { + i = atoi(argv[1]); + if ((i < 1) | (i > MG_VMAJOR)) { + fprintf(stderr, "%s: bad version number: %d\n", + argv[0], i); + exit(1); + } + for (en = nentlist[i-1]; en--; ) + mg_ehand[en] = put_entity; + mg_ehand[MG_E_INCLUDE] = NULL; /* expand include's */ + } else + for (cp1 = cp2 = argv[1]; *cp1; cp1 = cp2) { + while (*cp2) { + if (*cp2 == ',') { + *cp2++ = '\0'; + break; + } + cp2++; } - cp2++; + en = mg_entity(cp1); + if (en < 0) { + fprintf(stderr, "%s: %s: no such entity\n", + argv[0], cp1); + exit(1); + } + mg_ehand[en] = put_entity; } - en = mg_entity(cp1); - if (en < 0) { - fprintf(stderr, "%s: %s: no such entity\n", - argv[0], cp1); + mg_init(); + if (argc < 3) { + if (mg_load((char *)NULL) != MG_OK) exit(1); - } - mg_ehand[en] = put_entity; + if (mg_nunknown) + printf("%s %s: %u unknown entities on input\n", + mg_ename[MG_E_COMMENT], + argv[0], mg_nunknown); + exit(0); } - mg_init(); - if (argc < 3) - exit(mg_load((char *)NULL) != MG_OK); - for (i = 2; i < argc; i++) + for (i = 2; i < argc; i++) { if (mg_load(argv[i]) != MG_OK) exit(1); + if (mg_nunknown) { + printf("%s %s: %u unknown entities\n", + mg_ename[MG_E_COMMENT], + argv[i], mg_nunknown); + mg_nunknown = 0; + } + } exit(0); }