10 |
|
*/ |
11 |
|
|
12 |
|
#include <ctype.h> |
13 |
– |
#ifndef _WIN32 |
14 |
– |
#include <unistd.h> |
15 |
– |
#endif |
13 |
|
|
17 |
– |
#include "standard.h" |
14 |
|
#include "platform.h" |
15 |
|
#include "paths.h" |
16 |
+ |
#include "rtprocess.h" /* win_popen() */ |
17 |
+ |
#include "rtio.h" |
18 |
+ |
#include "rtmath.h" |
19 |
|
#include "object.h" |
20 |
|
#include "otypes.h" |
21 |
|
|
47 |
|
|
48 |
|
#define progname (xav[0]) |
49 |
|
|
50 |
+ |
static int doargf(int ac, char **av, int fi); |
51 |
+ |
static int doarray(int ac, char **av, int ai); |
52 |
+ |
static void xform(char *name, FILE *fin); |
53 |
+ |
static void xfcomm(char *fname, FILE *fin); |
54 |
+ |
static void xfobject(char *fname, FILE *fin); |
55 |
+ |
static int addxform(FILE *fin); |
56 |
+ |
static int alias(FILE *fin); |
57 |
+ |
void initotypes(void); /* XXX conflict with otypes.h */ |
58 |
+ |
static void openmain(char *iname); |
59 |
|
|
60 |
< |
main(argc, argv) /* get transform options and transform file */ |
61 |
< |
int argc; |
62 |
< |
char *argv[]; |
60 |
> |
|
61 |
> |
int |
62 |
> |
main( /* get transform options and transform file */ |
63 |
> |
int argc, |
64 |
> |
char *argv[] |
65 |
> |
) |
66 |
|
{ |
67 |
|
int mal_prefix = 0; |
57 |
– |
char *fname; |
68 |
|
int a; |
69 |
|
/* check for argument list file */ |
70 |
|
for (a = 1; a < argc; a++) |
85 |
|
if (argv[a][0] == '-') |
86 |
|
switch (argv[a][1]) { |
87 |
|
case 'm': |
88 |
< |
if (argv[a][2] | a+1 >= argc) |
88 |
> |
if (argv[a][2] | (a+1 >= argc)) |
89 |
|
break; |
90 |
|
a++; |
91 |
|
if (newmod == NULL) |
92 |
|
newmod = argv[a]; |
93 |
|
continue; |
94 |
|
case 'n': |
95 |
< |
if (argv[a][2] | a+1 >= argc) |
95 |
> |
if (argv[a][2] | (a+1 >= argc)) |
96 |
|
break; |
97 |
|
a++; |
98 |
|
if (idprefix == NULL) |
134 |
|
|
135 |
|
a += xf(&tot, argc-a, argv+a); |
136 |
|
|
137 |
< |
if (reverse = tot.sca < 0.0) |
137 |
> |
if ( (reverse = tot.sca < 0.0) ) |
138 |
|
tot.sca = -tot.sca; |
139 |
|
if (invert) |
140 |
|
reverse = !reverse; |
172 |
|
} |
173 |
|
|
174 |
|
|
175 |
< |
doargf(ac, av, fi) /* take argument list from file */ |
176 |
< |
char **av; |
177 |
< |
int ac, fi; |
175 |
> |
int |
176 |
> |
doargf( /* take argument list from file */ |
177 |
> |
int ac, |
178 |
> |
char **av, |
179 |
> |
int fi |
180 |
> |
) |
181 |
|
{ |
182 |
|
int inquote; |
183 |
|
char *newav[256], **avp; |
184 |
< |
char argbuf[1024]; |
184 |
> |
char argbuf[2048]; |
185 |
|
char newid[128]; |
186 |
|
char *oldid; |
187 |
|
register char *cp; |
236 |
|
skipspaces: |
237 |
|
while (isspace(*cp)) /* nullify spaces */ |
238 |
|
*cp++ = '\0'; |
239 |
< |
if ((*cp == '"' | *cp == '\'')) |
239 |
> |
if ((*cp == '"') | (*cp == '\'')) |
240 |
|
inquote = *cp++; |
241 |
|
if (!*cp) /* all done? */ |
242 |
|
break; |
284 |
|
} |
285 |
|
|
286 |
|
|
287 |
< |
doarray(ac, av, ai) /* make array */ |
288 |
< |
char **av; |
289 |
< |
int ac, ai; |
287 |
> |
int |
288 |
> |
doarray( /* make array */ |
289 |
> |
int ac, |
290 |
> |
char **av, |
291 |
> |
int ai |
292 |
> |
) |
293 |
|
{ |
294 |
|
char *newav[256], **avp; |
295 |
|
char newid[128], repts[32]; |
332 |
|
} |
333 |
|
|
334 |
|
|
335 |
< |
xform(name, fin) /* transform stream by tot.xfm */ |
336 |
< |
char *name; |
337 |
< |
register FILE *fin; |
335 |
> |
void |
336 |
> |
xform( /* transform stream by tot.xfm */ |
337 |
> |
char *name, |
338 |
> |
register FILE *fin |
339 |
> |
) |
340 |
|
{ |
341 |
|
int nobjs = 0; |
342 |
|
register int c; |
367 |
|
} |
368 |
|
|
369 |
|
|
370 |
< |
xfcomm(fname, fin) /* transform a command */ |
371 |
< |
char *fname; |
372 |
< |
FILE *fin; |
370 |
> |
void |
371 |
> |
xfcomm( /* transform a command */ |
372 |
> |
char *fname, |
373 |
> |
FILE *fin |
374 |
> |
) |
375 |
|
{ |
376 |
|
FILE *pin; |
377 |
< |
char buf[512]; |
377 |
> |
char buf[2048]; |
378 |
|
int i; |
379 |
|
|
380 |
|
fgetline(buf, sizeof(buf), fin); |
399 |
|
} |
400 |
|
|
401 |
|
|
402 |
< |
xfobject(fname, fin) /* transform an object */ |
403 |
< |
char *fname; |
404 |
< |
FILE *fin; |
402 |
> |
void |
403 |
> |
xfobject( /* transform an object */ |
404 |
> |
char *fname, |
405 |
> |
FILE *fin |
406 |
> |
) |
407 |
|
{ |
408 |
|
char typ[16], nam[MAXSTR]; |
409 |
|
int fn; |
416 |
|
progname, fname, typ); |
417 |
|
exit(1); |
418 |
|
} |
419 |
< |
if (ismodifier(fn)) |
420 |
< |
printf("\n%s %s ", nam, typ); |
421 |
< |
else |
422 |
< |
printf("\n%s %s ", newmod != NULL ? newmod : nam, |
423 |
< |
invert ? ofun[tinvers[fn]].funame : typ); |
419 |
> |
putchar('\n'); |
420 |
> |
if (ismodifier(fn)) { |
421 |
> |
fputword(nam, stdout); |
422 |
> |
printf(" %s ", typ); |
423 |
> |
} else { |
424 |
> |
fputword(newmod != NULL ? newmod : nam, stdout); |
425 |
> |
printf(" %s ", invert ? ofun[tinvers[fn]].funame : typ); |
426 |
> |
} |
427 |
|
/* object name */ |
428 |
|
fgetword(nam, sizeof(nam), fin); |
429 |
|
if (idprefix == NULL || ismodifier(fn)) |
430 |
< |
printf("%s\n", nam); |
431 |
< |
else |
432 |
< |
printf("%s.%s\n", idprefix, nam); |
430 |
> |
fputword(nam, stdout); |
431 |
> |
else { |
432 |
> |
char nnam[MAXSTR]; |
433 |
> |
sprintf(nnam, "%s.%s", idprefix, nam); |
434 |
> |
fputword(nnam, stdout); |
435 |
> |
} |
436 |
> |
putchar('\n'); |
437 |
|
/* transform arguments */ |
438 |
|
if ((*ofun[fn].funp)(fin) < 0) { |
439 |
|
fprintf(stderr, "%s: (%s): bad %s \"%s\"\n", |
443 |
|
} |
444 |
|
|
445 |
|
|
446 |
< |
o_default(fin) /* pass on arguments unchanged */ |
447 |
< |
FILE *fin; |
446 |
> |
int |
447 |
> |
o_default( /* pass on arguments unchanged */ |
448 |
> |
FILE *fin |
449 |
> |
) |
450 |
|
{ |
451 |
|
register int i; |
452 |
|
FUNARGS fa; |
479 |
|
} |
480 |
|
|
481 |
|
|
482 |
< |
addxform(fin) /* add xf arguments to strings */ |
483 |
< |
FILE *fin; |
482 |
> |
int |
483 |
> |
addxform( /* add xf arguments to strings */ |
484 |
> |
FILE *fin |
485 |
> |
) |
486 |
|
{ |
487 |
|
register int i; |
488 |
|
int resetarr = 0; |
522 |
|
} |
523 |
|
|
524 |
|
|
525 |
< |
alias(fin) /* transfer alias */ |
526 |
< |
FILE *fin; |
525 |
> |
int |
526 |
> |
alias( /* transfer alias */ |
527 |
> |
FILE *fin |
528 |
> |
) |
529 |
|
{ |
530 |
|
char aliasnm[MAXSTR]; |
531 |
|
|
536 |
|
} |
537 |
|
|
538 |
|
|
539 |
< |
m_glow(fin) /* transform arguments for proximity light */ |
540 |
< |
FILE *fin; |
539 |
> |
int |
540 |
> |
m_glow( /* transform arguments for proximity light */ |
541 |
> |
FILE *fin |
542 |
> |
) |
543 |
|
{ |
544 |
|
FUNARGS fa; |
545 |
|
|
556 |
|
} |
557 |
|
|
558 |
|
|
559 |
< |
m_spot(fin) /* transform arguments for spotlight */ |
560 |
< |
FILE *fin; |
559 |
> |
int |
560 |
> |
m_spot( /* transform arguments for spotlight */ |
561 |
> |
FILE *fin |
562 |
> |
) |
563 |
|
{ |
564 |
|
FVECT v; |
565 |
|
FUNARGS fa; |
578 |
|
} |
579 |
|
|
580 |
|
|
581 |
< |
m_mist(fin) /* transform arguments for mist */ |
582 |
< |
FILE *fin; |
581 |
> |
int |
582 |
> |
m_mist( /* transform arguments for mist */ |
583 |
> |
FILE *fin |
584 |
> |
) |
585 |
|
{ |
586 |
|
FUNARGS fa; |
587 |
|
int i; |
622 |
|
} |
623 |
|
|
624 |
|
|
625 |
< |
m_dielectric(fin) /* transform arguments for dielectric */ |
626 |
< |
FILE *fin; |
625 |
> |
int |
626 |
> |
m_dielectric( /* transform arguments for dielectric */ |
627 |
> |
FILE *fin |
628 |
> |
) |
629 |
|
{ |
630 |
|
FUNARGS fa; |
631 |
|
|
644 |
|
} |
645 |
|
|
646 |
|
|
647 |
< |
m_interface(fin) /* transform arguments for interface */ |
648 |
< |
FILE *fin; |
647 |
> |
int |
648 |
> |
m_interface( /* transform arguments for interface */ |
649 |
> |
FILE *fin |
650 |
> |
) |
651 |
|
{ |
652 |
|
FUNARGS fa; |
653 |
|
|
671 |
|
} |
672 |
|
|
673 |
|
|
674 |
< |
text(fin) /* transform text arguments */ |
675 |
< |
FILE *fin; |
674 |
> |
int |
675 |
> |
text( /* transform text arguments */ |
676 |
> |
FILE *fin |
677 |
> |
) |
678 |
|
{ |
679 |
|
int i; |
680 |
|
FVECT v; |
712 |
|
} |
713 |
|
|
714 |
|
|
715 |
< |
o_source(fin) /* transform source arguments */ |
716 |
< |
FILE *fin; |
715 |
> |
int |
716 |
> |
o_source( /* transform source arguments */ |
717 |
> |
FILE *fin |
718 |
> |
) |
719 |
|
{ |
720 |
|
FVECT dv; |
721 |
|
FUNARGS fa; |
735 |
|
} |
736 |
|
|
737 |
|
|
738 |
< |
o_sphere(fin) /* transform sphere arguments */ |
739 |
< |
FILE *fin; |
738 |
> |
int |
739 |
> |
o_sphere( /* transform sphere arguments */ |
740 |
> |
FILE *fin |
741 |
> |
) |
742 |
|
{ |
743 |
|
FVECT cent; |
744 |
|
double rad; |
761 |
|
} |
762 |
|
|
763 |
|
|
764 |
< |
o_face(fin) /* transform face arguments */ |
765 |
< |
FILE *fin; |
764 |
> |
int |
765 |
> |
o_face( /* transform face arguments */ |
766 |
> |
FILE *fin |
767 |
> |
) |
768 |
|
{ |
769 |
|
FVECT p; |
770 |
|
register int i; |
789 |
|
} |
790 |
|
|
791 |
|
|
792 |
< |
o_cone(fin) /* transform cone and cup arguments */ |
793 |
< |
FILE *fin; |
792 |
> |
int |
793 |
> |
o_cone( /* transform cone and cup arguments */ |
794 |
> |
FILE *fin |
795 |
> |
) |
796 |
|
{ |
797 |
|
FVECT p0, p1; |
798 |
|
double r0, r1; |
818 |
|
} |
819 |
|
|
820 |
|
|
821 |
< |
o_cylinder(fin) /* transform cylinder and tube arguments */ |
822 |
< |
FILE *fin; |
821 |
> |
int |
822 |
> |
o_cylinder( /* transform cylinder and tube arguments */ |
823 |
> |
FILE *fin |
824 |
> |
) |
825 |
|
{ |
826 |
|
FVECT p0, p1; |
827 |
|
double rad; |
845 |
|
} |
846 |
|
|
847 |
|
|
848 |
< |
o_ring(fin) /* transform ring arguments */ |
849 |
< |
FILE *fin; |
848 |
> |
int |
849 |
> |
o_ring( /* transform ring arguments */ |
850 |
> |
FILE *fin |
851 |
> |
) |
852 |
|
{ |
853 |
|
FVECT p0, pd; |
854 |
|
double r0, r1; |
878 |
|
} |
879 |
|
|
880 |
|
|
881 |
< |
initotypes() /* initialize ofun[] array */ |
881 |
> |
void |
882 |
> |
initotypes(void) /* initialize ofun[] array */ |
883 |
|
{ |
884 |
|
register int i; |
885 |
|
|
899 |
|
ofun[OBJ_CYLINDER].funp = |
900 |
|
ofun[OBJ_TUBE].funp = o_cylinder; |
901 |
|
ofun[OBJ_RING].funp = o_ring; |
902 |
< |
ofun[OBJ_INSTANCE].funp = addxform; |
902 |
> |
ofun[OBJ_INSTANCE].funp = |
903 |
> |
ofun[OBJ_MESH].funp = addxform; |
904 |
|
ofun[MAT_GLOW].funp = m_glow; |
905 |
|
ofun[MAT_SPOT].funp = m_spot; |
906 |
|
ofun[MAT_DIELECTRIC].funp = m_dielectric; |
925 |
|
|
926 |
|
|
927 |
|
#ifdef OLDXFORM |
928 |
< |
openmain(fname) |
929 |
< |
char *fname; |
928 |
> |
void |
929 |
> |
openmain( |
930 |
> |
char *fname |
931 |
> |
) |
932 |
|
{ |
933 |
|
if (fname == NULL) { |
934 |
|
strcpy(mainfn, "standard input"); |
950 |
|
strcpy(mainfn, fname); |
951 |
|
} |
952 |
|
#else |
953 |
< |
openmain(iname) /* open input, changing directory for file */ |
954 |
< |
char *iname; |
953 |
> |
void |
954 |
> |
openmain( /* open input, changing directory for file */ |
955 |
> |
char *iname |
956 |
> |
) |
957 |
|
{ |
958 |
|
static char origdir[PATH_MAX]; |
959 |
|
static char curfn[PATH_MAX]; |