ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/mgfilt.c
Revision: 1.7
Committed: Sun Jul 27 22:12:02 2003 UTC (20 years, 9 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 1.6: +2 -2 lines
Log Message:
Added grouping parens to reduce ambiguity warnings.

File Contents

# Content
1 #ifndef lint
2 static const char RCSid[] = "$Id: mgfilt.c,v 1.6 2003/02/28 20:11:29 greg Exp $";
3 #endif
4 /*
5 * Filter MGF stream, removing entities that won't be understood
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include "parser.h"
11
12 /* Number of entities for major versions */
13 short nentlist[MG_VMAJOR] = MG_NELIST;
14
15
16 int
17 put_entity(ac, av) /* general output routine */
18 register int ac;
19 register char **av;
20 {
21 while (ac-- > 0) {
22 fputs(*av++, stdout);
23 putchar(ac ? ' ' : '\n');
24 }
25 return(MG_OK);
26 }
27
28
29 main(argc, argv) /* first argument is understood entities, comma-sep. */
30 int argc;
31 char *argv[];
32 {
33 char *cp1, *cp2;
34 int i, en;
35
36 if (argc < 2) {
37 fprintf(stderr,
38 "Usage: %s { version | entity,list } [file ..]\n",
39 argv[0]);
40 exit(1);
41 }
42 if (isint(argv[1])) {
43 i = atoi(argv[1]);
44 if ((i < 1) | (i > MG_VMAJOR)) {
45 fprintf(stderr, "%s: bad version number: %d\n",
46 argv[0], i);
47 exit(1);
48 }
49 for (en = nentlist[i-1]; en--; )
50 mg_ehand[en] = put_entity;
51 mg_ehand[MG_E_INCLUDE] = NULL; /* expand include's */
52 } else
53 for (cp1 = cp2 = argv[1]; *cp1; cp1 = cp2) {
54 while (*cp2) {
55 if (*cp2 == ',') {
56 *cp2++ = '\0';
57 break;
58 }
59 cp2++;
60 }
61 en = mg_entity(cp1);
62 if (en < 0) {
63 fprintf(stderr, "%s: %s: no such entity\n",
64 argv[0], cp1);
65 exit(1);
66 }
67 mg_ehand[en] = put_entity;
68 }
69 mg_init();
70 if (argc < 3) {
71 if (mg_load((char *)NULL) != MG_OK)
72 exit(1);
73 if (mg_nunknown)
74 printf("%s %s: %u unknown entities on input\n",
75 mg_ename[MG_E_COMMENT],
76 argv[0], mg_nunknown);
77 exit(0);
78 }
79 for (i = 2; i < argc; i++) {
80 if (mg_load(argv[i]) != MG_OK)
81 exit(1);
82 if (mg_nunknown) {
83 printf("%s %s: %u unknown entities\n",
84 mg_ename[MG_E_COMMENT],
85 argv[i], mg_nunknown);
86 mg_nunknown = 0;
87 }
88 }
89 exit(0);
90 }