ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/xform.c
Revision: 1.11
Committed: Thu Dec 13 11:51:17 1990 UTC (33 years, 4 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.10: +57 -59 lines
Log Message:
uses otypes.h for initialization and compatibility

File Contents

# User Rev Content
1 greg 1.1 /* Copyright (c) 1986 Regents of the University of California */
2    
3     #ifndef lint
4     static char SCCSid[] = "$SunId$ LBL";
5     #endif
6    
7     /*
8     * xform.c - program to transform object files.
9     * Transformations must preserve aspect ratio.
10     *
11     * 10/19/85
12     * 11/6/86 Finally added error checking!
13     */
14    
15     #include <stdio.h>
16    
17     #include <ctype.h>
18    
19 greg 1.11 #include "otypes.h"
20 greg 1.1
21     int xac; /* global xform argument count */
22     char **xav; /* global xform argument pointer */
23     int xfa; /* start of xf arguments */
24    
25     double totxform[4][4]; /* total transformation matrix */
26     double totscale; /* total scale factor */
27     int reverse; /* boolean true if scene inverted */
28    
29     int expand = 0; /* boolean true to expand commands */
30    
31     char *idprefix = NULL; /* prefix for object identifiers */
32    
33 greg 1.11 #define ALIAS NUMOTYPE /* put alias at end of array */
34 greg 1.1
35 greg 1.11 #define NUMTYPES (NUMOTYPE+1) /* total number of object types */
36 greg 1.1
37 greg 1.11 FUN ofun[NUMTYPES] = INIT_OTYPE; /* default types and actions */
38 greg 1.1
39     typedef struct {
40     short nsargs; /* # of string arguments */
41     char **sarg; /* string arguments */
42     short niargs; /* # of integer arguments */
43     int *iarg; /* integer arguments */
44     short nfargs; /* # of float arguments */
45     double *farg; /* float arguments */
46     } FUNARGS;
47    
48     #define MAXSTR 512 /* maximum string length */
49    
50     FUNARGS *getfargs();
51     char *malloc();
52    
53     #define progname (xav[0])
54    
55    
56     main(argc, argv) /* get transform options and transform file */
57     int argc;
58     char *argv[];
59     {
60     FILE *fopen();
61     FILE *fp;
62     int a;
63 greg 1.8 /* check for array */
64     for (a = 1; a < argc; a++)
65     if (!strcmp(argv[a], "-a"))
66     return(doarray(argc, argv, a));
67 greg 1.1
68 greg 1.11 initotypes();
69    
70 greg 1.1 for (a = 1; a < argc; a++) {
71     if (argv[a][0] == '-')
72     switch (argv[a][1]) {
73     case 'n':
74 greg 1.9 if (argv[a][2] || a+1 >= argc)
75     break;
76 greg 1.1 idprefix = argv[++a];
77     continue;
78     case 'e':
79 greg 1.9 if (argv[a][2])
80     break;
81 greg 1.1 expand = 1;
82     continue;
83     }
84     break;
85     }
86    
87 greg 1.8 xav = argv;
88 greg 1.1 xfa = a;
89    
90     totscale = 1.0;
91     setident4(totxform);
92    
93     a += xf(totxform, &totscale, argc-a, argv+a);
94    
95     if (reverse = totscale < 0.0)
96     totscale = -totscale;
97    
98 greg 1.9 if (a < argc && argv[a][0] == '-') {
99     fprintf(stderr, "%s: command line error at '%s'\n",
100     argv[0], argv[a]);
101     exit(1);
102     }
103 greg 1.10
104 greg 1.1 xac = a;
105 greg 1.10 /* simple header */
106     putchar('#');
107 greg 1.1 for (a = 0; a < xac; a++)
108     printf(" %s", xav[a]);
109     putchar('\n');
110 greg 1.10 /* transform input */
111     if (xac == argc)
112 greg 1.1 xform("standard input", stdin);
113     else
114 greg 1.10 for (a = xac; a < argc; a++) {
115 greg 1.1 if ((fp = fopen(argv[a], "r")) == NULL) {
116     fprintf(stderr, "%s: cannot open \"%s\"\n",
117     progname, argv[a]);
118     exit(1);
119     }
120     xform(argv[a], fp);
121     fclose(fp);
122     }
123    
124 greg 1.8 return(0);
125     }
126    
127    
128     doarray(ac, av, ai) /* make array */
129     char **av;
130     int ac, ai;
131     {
132     char *newav[256], **avp;
133     char newid[128], repts[32];
134     char *oldid = NULL;
135     int i, err;
136    
137     avp = newav+2;
138     avp[0] = av[0];
139     for (i = 1; i < ac; i++)
140     if (!strcmp(av[i-1], "-n")) {
141     oldid = av[i];
142     avp[i] = newid;
143     } else
144     avp[i] = av[i];
145     avp[ai] = "-i";
146     avp[ai+1] = repts;
147     avp[i] = NULL;
148     if (oldid == NULL) {
149     newav[0] = av[0];
150     newav[1] = "-n";
151     newav[2] = newid;
152     avp = newav;
153     ac += 2;
154     }
155     err = 0;
156     for (i = 0; i < atoi(av[ai+1]); i++) {
157     if (oldid == NULL)
158     sprintf(newid, "a%d", i);
159     else
160     sprintf(newid, "%s.%d", oldid, i);
161     sprintf(repts, "%d", i);
162     err |= main(ac, avp);
163     }
164     return(err);
165 greg 1.1 }
166    
167    
168     xform(name, fin) /* transform stream by totxform */
169     char *name;
170     register FILE *fin;
171     {
172     register int c;
173    
174     while ((c = getc(fin)) != EOF) {
175     if (isspace(c)) /* blank */
176     continue;
177     if (c == '#') { /* comment */
178     putchar(c);
179     do {
180     if ((c = getc(fin)) == EOF)
181     return;
182     putchar(c);
183     } while (c != '\n');
184     } else if (c == '!') { /* command */
185     ungetc(c, fin);
186 greg 1.7 xfcomm(name, fin);
187 greg 1.1 } else { /* object */
188     ungetc(c, fin);
189     xfobject(name, fin);
190     }
191     }
192     }
193    
194    
195 greg 1.7 xfcomm(fname, fin) /* transform a command */
196 greg 1.1 FILE *fin;
197     {
198     FILE *popen();
199 greg 1.7 char *fgetline();
200 greg 1.1 FILE *pin;
201     char buf[512];
202 greg 1.7 int i;
203 greg 1.1
204 greg 1.7 fgetline(buf, sizeof(buf), fin);
205     if (expand) {
206 greg 1.10 if (xac > 2) {
207     if ((pin = popen(buf+1, "r")) == NULL) {
208     fprintf(stderr,
209     "%s: (%s): cannot execute \"%s\"\n",
210     progname, fname, buf);
211     exit(1);
212     }
213     xform(buf, pin);
214     pclose(pin);
215     } else {
216     fflush(stdout);
217     system(buf+1);
218 greg 1.7 }
219     } else {
220 greg 1.10 printf("\n%s", buf);
221     if (xac > 1) {
222     printf(" | %s -e", xav[0]);
223     for (i = 1; i < xac; i++)
224     printf(" %s", xav[i]);
225     }
226 greg 1.7 putchar('\n');
227 greg 1.1 }
228     }
229    
230    
231     xfobject(fname, fin) /* transform an object */
232     char *fname;
233     FILE *fin;
234     {
235     char stmp[MAXSTR];
236     int fn;
237    
238     fscanf(fin, "%s", stmp); /* modifier */
239     printf("\n%s ", stmp);
240     fscanf(fin, "%s", stmp); /* object type */
241     if ((fn = otype(stmp)) < 0) {
242     fprintf(stderr, "%s: (%s): unknown object type \"%s\"\n",
243     progname, fname, stmp);
244     exit(1);
245     }
246     printf("%s ", stmp);
247     fscanf(fin, "%s", stmp); /* object name */
248     if (idprefix != NULL && issurface(fn))
249     printf("%s.%s\n", idprefix, stmp);
250     else
251     printf("%s\n", stmp);
252     /* transform arguments */
253     if ((*ofun[fn].funp)(fin) < 0) {
254     fprintf(stderr, "%s: (%s): bad %s \"%s\"\n",
255     progname, fname, ofun[fn].funame, stmp);
256     exit(1);
257     }
258     }
259    
260    
261 greg 1.11 o_default(fin) /* pass on arguments unchanged */
262 greg 1.1 FILE *fin;
263     {
264     register int i;
265     register FUNARGS *fa;
266    
267     if ((fa = getfargs(fin)) == NULL)
268     return(-1);
269     /* string arguments */
270     printf("%d", fa->nsargs);
271     for (i = 0; i < fa->nsargs; i++)
272     printf(" %s", fa->sarg[i]);
273     printf("\n");
274     /* integer arguments */
275     printf("%d", fa->niargs);
276     for (i = 0; i < fa->niargs; i++)
277     printf(" %d", fa->iarg[i]);
278     printf("\n");
279     /* float arguments */
280     printf("%d", fa->nfargs);
281     for (i = 0; i < fa->nfargs; i++)
282     printf(" %18.12g", fa->farg[i]);
283     printf("\n");
284     freefargs(fa);
285     return(0);
286     }
287    
288    
289     addxform(fin) /* add xf arguments to strings */
290     FILE *fin;
291     {
292     register int i;
293     register FUNARGS *fa;
294    
295     if ((fa = getfargs(fin)) == NULL)
296     return(-1);
297     /* string arguments */
298     printf("%d", fa->nsargs + xac-xfa);
299     for (i = 0; i < fa->nsargs; i++)
300     printf(" %s", fa->sarg[i]);
301     for (i = xfa; i < xac; i++) /* add xf arguments */
302     printf(" %s", xav[i]);
303     printf("\n");
304     /* integer arguments */
305     printf("%d", fa->niargs);
306     for (i = 0; i < fa->niargs; i++)
307     printf(" %d", fa->iarg[i]);
308     printf("\n");
309     /* float arguments */
310     printf("%d", fa->nfargs);
311     for (i = 0; i < fa->nfargs; i++)
312     printf(" %18.12g", fa->farg[i]);
313     printf("\n");
314     freefargs(fa);
315     return(0);
316     }
317    
318    
319     int
320     otype(ofname) /* get object function number from its name */
321     register char *ofname;
322     {
323     register int i;
324    
325 greg 1.11 for (i = 0; i < NUMTYPES; i++)
326 greg 1.1 if (!strcmp(ofun[i].funame, ofname))
327     return(i);
328    
329     return(-1); /* not found */
330     }
331    
332    
333     alias(fin) /* transfer alias */
334     FILE *fin;
335     {
336     char alias[MAXSTR];
337    
338     if (fscanf(fin, "%s", alias) != 1)
339     return(-1);
340     printf("\t%s\n", alias);
341 greg 1.5 return(0);
342     }
343    
344    
345     m_glow(fin) /* transform arguments for proximity light */
346     FILE *fin;
347     {
348     register FUNARGS *fa;
349    
350     if ((fa = getfargs(fin)) == NULL)
351     return(-1);
352     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 4)
353     return(-1);
354     printf("0\n0\n4");
355     printf(" %18.12g %18.12g %18.12g",
356     fa->farg[0], fa->farg[1], fa->farg[2]);
357     printf(" %18.12g\n", fa->farg[3] * totscale);
358     freefargs(fa);
359     return(0);
360     }
361    
362    
363     m_spot(fin) /* transform arguments for spotlight */
364     FILE *fin;
365     {
366     double v[3];
367     register FUNARGS *fa;
368    
369     if ((fa = getfargs(fin)) == NULL)
370     return(-1);
371     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 7)
372     return(-1);
373     printf("0\n0\n7");
374     printf(" %18.12g %18.12g %18.12g %18.12g\n",
375     fa->farg[0], fa->farg[1], fa->farg[2], fa->farg[3]);
376     multv3(v, fa->farg+4, totxform);
377     printf("\t%18.12g %18.12g %18.12g\n", v[0], v[1], v[2]);
378     freefargs(fa);
379 greg 1.1 return(0);
380     }
381    
382    
383     m_dielectric(fin) /* transform arguments for dielectric */
384     FILE *fin;
385     {
386     double pow();
387     register FUNARGS *fa;
388    
389     if ((fa = getfargs(fin)) == NULL)
390     return(-1);
391     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 5)
392     return(-1);
393     printf("0\n0\n5");
394     printf(" %18.12g %18.12g %18.12g",
395     pow(fa->farg[0], 1.0/totscale),
396     pow(fa->farg[1], 1.0/totscale),
397     pow(fa->farg[2], 1.0/totscale));
398     printf(" %18.12g %18.12g\n", fa->farg[3], fa->farg[4]);
399     freefargs(fa);
400     return(0);
401     }
402    
403    
404     m_interface(fin) /* transform arguments for interface */
405     FILE *fin;
406     {
407     double pow();
408     register FUNARGS *fa;
409    
410     if ((fa = getfargs(fin)) == NULL)
411     return(-1);
412     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 8)
413     return(-1);
414     printf("0\n0\n8\n");
415     printf("%18.12g %18.12g %18.12g",
416     pow(fa->farg[0], 1.0/totscale),
417     pow(fa->farg[1], 1.0/totscale),
418     pow(fa->farg[2], 1.0/totscale));
419     printf(" %18.12g\n", fa->farg[3]);
420     printf("%18.12g %18.12g %18.12g",
421     pow(fa->farg[4], 1.0/totscale),
422     pow(fa->farg[5], 1.0/totscale),
423     pow(fa->farg[6], 1.0/totscale));
424     printf(" %18.12g\n", fa->farg[7]);
425     freefargs(fa);
426     return(0);
427     }
428    
429    
430     text(fin) /* transform text arguments */
431     FILE *fin;
432     {
433     int i;
434     double v[3];
435     register FUNARGS *fa;
436    
437     if ((fa = getfargs(fin)) == NULL)
438     return(-1);
439     if (fa->niargs != 0 || (fa->nfargs != 9 &&
440     fa->nfargs != 11 && fa->nfargs != 15))
441     return(-1);
442     /* string arguments */
443     printf("%d", fa->nsargs);
444     for (i = 0; i < fa->nsargs; i++)
445     printf(" %s", fa->sarg[i]);
446     printf("\n0\n%d\n", fa->nfargs);
447     /* anchor point */
448     multp3(v, fa->farg, totxform);
449     printf(" %18.12g %18.12g %18.12g\n", v[0], v[1], v[2]);
450     /* right vector */
451     multv3(v, fa->farg+3, totxform);
452     printf(" %18.12g %18.12g %18.12g\n", v[0], v[1], v[2]);
453     /* down vector */
454     multv3(v, fa->farg+6, totxform);
455     printf(" %18.12g %18.12g %18.12g\n", v[0], v[1], v[2]);
456     /* forground and background */
457     if (fa->nfargs == 11)
458     printf(" %18.12g %18.12g\n", fa->farg[9], fa->farg[10]);
459     else if (fa->nfargs == 15) {
460     printf(" %18.12g %18.12g %18.12g\n",
461     fa->farg[9], fa->farg[10], fa->farg[11]);
462     printf(" %18.12g %18.12g %18.12g\n",
463     fa->farg[12], fa->farg[13], fa->farg[14]);
464     }
465     freefargs(fa);
466     return(0);
467     }
468    
469    
470     o_source(fin) /* transform source arguments */
471     FILE *fin;
472     {
473     double dv[3];
474     register FUNARGS *fa;
475    
476     if ((fa = getfargs(fin)) == NULL)
477     return(-1);
478     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 4)
479     return(-1);
480     /* transform direction vector */
481     multv3(dv, fa->farg, totxform);
482     /* output */
483     printf("0\n0\n4");
484     printf(" %18.12g %18.12g %18.12g %18.12g\n",
485     dv[0], dv[1], dv[2], fa->farg[3]);
486     freefargs(fa);
487     return(0);
488     }
489    
490    
491     o_sphere(fin) /* transform sphere arguments */
492     FILE *fin;
493     {
494     double cent[3], rad;
495     register FUNARGS *fa;
496    
497     if ((fa = getfargs(fin)) == NULL)
498     return(-1);
499     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 4)
500     return(-1);
501    
502     multp3(cent, fa->farg, totxform); /* transform center */
503    
504     rad = fa->farg[3] * totscale; /* scale radius */
505    
506     printf("0\n0\n4");
507     printf(" %18.12g %18.12g %18.12g %18.12g\n",
508     cent[0], cent[1], cent[2], rad);
509     freefargs(fa);
510     return(0);
511     }
512    
513    
514     o_face(fin) /* transform face arguments */
515     FILE *fin;
516     {
517     double p[3];
518     register int i;
519     register FUNARGS *fa;
520    
521     if ((fa = getfargs(fin)) == NULL)
522     return(-1);
523     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs % 3)
524     return(-1);
525    
526     printf("0\n0\n%d\n", fa->nfargs);
527    
528     for (i = 0; i < fa->nfargs; i += 3) {
529     if (reverse)
530     multp3(p, fa->farg+(fa->nfargs-i-3), totxform);
531     else
532     multp3(p, fa->farg+i, totxform);
533     printf(" %18.12g %18.12g %18.12g\n", p[0], p[1], p[2]);
534     }
535     freefargs(fa);
536     return(0);
537     }
538    
539    
540     o_cone(fin) /* transform cone and cup arguments */
541     FILE *fin;
542     {
543     double p0[3], p1[3], r0, r1;
544     register FUNARGS *fa;
545    
546     if ((fa = getfargs(fin)) == NULL)
547     return(-1);
548     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 8)
549     return(-1);
550    
551     printf("0\n0\n8\n");
552    
553     multp3(p0, fa->farg, totxform);
554     multp3(p1, fa->farg+3, totxform);
555     r0 = fa->farg[6] * totscale;
556     r1 = fa->farg[7] * totscale;
557     printf(" %18.12g %18.12g %18.12g\n", p0[0], p0[1], p0[2]);
558     printf(" %18.12g %18.12g %18.12g\n", p1[0], p1[1], p1[2]);
559     printf(" %18.12g %18.12g\n", r0, r1);
560    
561     freefargs(fa);
562     return(0);
563     }
564    
565    
566     o_cylinder(fin) /* transform cylinder and tube arguments */
567     FILE *fin;
568     {
569     double p0[3], p1[3], rad;
570     register FUNARGS *fa;
571    
572     if ((fa = getfargs(fin)) == NULL)
573     return(-1);
574     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 7)
575     return(-1);
576    
577     printf("0\n0\n7\n");
578    
579     multp3(p0, fa->farg, totxform);
580     multp3(p1, fa->farg+3, totxform);
581     rad = fa->farg[6] * totscale;
582     printf(" %18.12g %18.12g %18.12g\n", p0[0], p0[1], p0[2]);
583     printf(" %18.12g %18.12g %18.12g\n", p1[0], p1[1], p1[2]);
584     printf(" %18.12g\n", rad);
585     freefargs(fa);
586     return(0);
587     }
588    
589    
590     o_ring(fin) /* transform ring arguments */
591     FILE *fin;
592     {
593     double p0[3], pd[3], r0, r1;
594     register FUNARGS *fa;
595    
596     if ((fa = getfargs(fin)) == NULL)
597     return(-1);
598     if (fa->nsargs != 0 || fa->niargs != 0 || fa->nfargs != 8)
599     return(-1);
600    
601     printf("0\n0\n8\n");
602    
603     multp3(p0, fa->farg, totxform);
604     multv3(pd, fa->farg+3, totxform);
605     r0 = fa->farg[6] * totscale;
606     r1 = fa->farg[7] * totscale;
607     printf(" %18.12g %18.12g %18.12g\n", p0[0], p0[1], p0[2]);
608     printf(" %18.12g %18.12g %18.12g\n", pd[0], pd[1], pd[2]);
609     printf(" %18.12g %18.12g\n", r0, r1);
610     freefargs(fa);
611     return(0);
612     }
613    
614    
615     FUNARGS *
616     getfargs(fp) /* get function arguments from stream */
617     FILE *fp;
618     {
619     char *strcpy();
620     char sbuf[MAXSTR];
621     int n;
622     register FUNARGS *fa;
623     register int i;
624    
625     if ((fa = (FUNARGS *)malloc((unsigned)sizeof(FUNARGS))) == NULL)
626     goto memerr;
627     if (fscanf(fp, "%d", &n) != 1 || n < 0)
628     return(NULL);
629     if (fa->nsargs = n) {
630     fa->sarg = (char **)malloc((unsigned)fa->nsargs*sizeof(char *));
631     if (fa->sarg == NULL)
632     goto memerr;
633     for (i = 0; i < fa->nsargs; i++) {
634     if (fscanf(fp, "%s", sbuf) != 1)
635     return(NULL);
636     if ((fa->sarg[i] = malloc((unsigned)strlen(sbuf)+1)) == NULL)
637     goto memerr;
638     strcpy(fa->sarg[i], sbuf);
639     }
640     } else
641     fa->sarg = NULL;
642     if (fscanf(fp, "%d", &n) != 1 || n < 0)
643     return(NULL);
644     if (fa->niargs = n) {
645     fa->iarg = (int *)malloc((unsigned)fa->niargs*sizeof(int));
646     if (fa->iarg == NULL)
647     goto memerr;
648     for (i = 0; i < fa->niargs; i++)
649     if (fscanf(fp, "%d", &fa->iarg[i]) != 1)
650     return(NULL);
651     } else
652     fa->iarg = NULL;
653     if (fscanf(fp, "%d", &n) != 1 || n < 0)
654     return(NULL);
655     if (fa->nfargs = n) {
656     fa->farg = (double *)malloc((unsigned)fa->nfargs*sizeof(double));
657     if (fa->farg == NULL)
658     goto memerr;
659     for (i = 0; i < fa->nfargs; i++)
660     if (fscanf(fp, "%lf", &fa->farg[i]) != 1)
661     return(NULL);
662     } else
663     fa->farg = NULL;
664     return(fa);
665     memerr:
666     fprintf(stderr, "%s: out of memory in getfargs\n", progname);
667     exit(1);
668     }
669    
670    
671     freefargs(fa) /* free memory associated with fa */
672     register FUNARGS *fa;
673     {
674     register int i;
675    
676     for (i = 0; i < fa->nsargs; i++)
677     free(fa->sarg[i]);
678     if (fa->nsargs)
679     free(fa->sarg);
680     if (fa->niargs)
681     free(fa->iarg);
682     if (fa->nfargs)
683     free(fa->farg);
684     free(fa);
685 greg 1.11 }
686    
687    
688     initotypes() /* initialize ofun[] array */
689     {
690     extern int o_source();
691     extern int o_sphere();
692     extern int o_face();
693     extern int o_cone();
694     extern int o_cylinder();
695     extern int o_ring();
696     extern int m_glow();
697     extern int m_spot();
698     extern int m_dielectric();
699     extern int m_interface();
700     extern int text();
701     extern int alias();
702     extern int passargs();
703     extern int addxform();
704     register int i;
705    
706     if (ofun[OBJ_SOURCE].funp == o_source)
707     return; /* done already */
708     /* alias is additional */
709     ofun[ALIAS].funame = ALIASID;
710     ofun[ALIAS].flags = 0;
711     /* functions get new transform */
712     for (i = 0; i < NUMTYPES; i++)
713     if (hasfunc(i))
714     ofun[i].funp = addxform;
715     /* special cases */
716     ofun[OBJ_SOURCE].funp = o_source;
717     ofun[OBJ_SPHERE].funp =
718     ofun[OBJ_BUBBLE].funp = o_sphere;
719     ofun[OBJ_FACE].funp = o_face;
720     ofun[OBJ_CONE].funp =
721     ofun[OBJ_CUP].funp = o_cone;
722     ofun[OBJ_CYLINDER].funp =
723     ofun[OBJ_TUBE].funp = o_cylinder;
724     ofun[OBJ_RING].funp = o_ring;
725     ofun[OBJ_INSTANCE].funp = addxform;
726     ofun[MAT_GLOW].funp = m_glow;
727     ofun[MAT_SPOT].funp = m_spot;
728     ofun[MAT_DIELECTRIC].funp = m_dielectric;
729     ofun[MAT_INTERFACE].funp = m_interface;
730     ofun[PAT_CTEXT].funp =
731     ofun[PAT_BTEXT].funp =
732     ofun[MIX_TEXT].funp = text;
733     ofun[ALIAS].funp = alias;
734 greg 1.1 }