--- ray/src/gen/xform.c 2003/06/27 22:27:45 2.27 +++ ray/src/gen/xform.c 2004/07/02 16:45:32 2.37 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: xform.c,v 2.27 2003/06/27 22:27:45 greg Exp $"; +static const char RCSid[] = "$Id: xform.c,v 2.37 2004/07/02 16:45:32 greg Exp $"; #endif /* * xform.c - program to transform object files. @@ -11,9 +11,11 @@ static const char RCSid[] = "$Id: xform.c,v 2.27 2003/ #include -#include "standard.h" #include "platform.h" #include "paths.h" +#include "rtprocess.h" /* win_popen() */ +#include "rtio.h" +#include "rtmath.h" #include "object.h" #include "otypes.h" @@ -40,18 +42,29 @@ int nrept = 1; /* number of array repetitions */ int stdinused = 0; /* stdin has been used by -f option? */ -char mainfn[MAXPATH]; /* main file name */ +char mainfn[PATH_MAX]; /* main file name */ FILE *mainfp = NULL; /* main file pointer */ #define progname (xav[0]) +static int doargf(int ac, char **av, int fi); +static int doarray(int ac, char **av, int ai); +static void xform(char *name, FILE *fin); +static void xfcomm(char *fname, FILE *fin); +static void xfobject(char *fname, FILE *fin); +static int addxform(FILE *fin); +static int alias(FILE *fin); +void initotypes(void); /* XXX conflict with otypes.h */ +static void openmain(char *iname); -main(argc, argv) /* get transform options and transform file */ -int argc; -char *argv[]; + +int +main( /* get transform options and transform file */ + int argc, + char *argv[] +) { int mal_prefix = 0; - char *fname; int a; /* check for argument list file */ for (a = 1; a < argc; a++) @@ -72,14 +85,14 @@ char *argv[]; if (argv[a][0] == '-') switch (argv[a][1]) { case 'm': - if (argv[a][2] | a+1 >= argc) + if (argv[a][2] | (a+1 >= argc)) break; a++; if (newmod == NULL) newmod = argv[a]; continue; case 'n': - if (argv[a][2] | a+1 >= argc) + if (argv[a][2] | (a+1 >= argc)) break; a++; if (idprefix == NULL) @@ -121,7 +134,7 @@ char *argv[]; a += xf(&tot, argc-a, argv+a); - if (reverse = tot.sca < 0.0) + if ( (reverse = tot.sca < 0.0) ) tot.sca = -tot.sca; if (invert) reverse = !reverse; @@ -159,13 +172,16 @@ char *argv[]; } -doargf(ac, av, fi) /* take argument list from file */ -char **av; -int ac, fi; +int +doargf( /* take argument list from file */ + int ac, + char **av, + int fi +) { int inquote; char *newav[256], **avp; - char argbuf[1024]; + char argbuf[2048]; char newid[128]; char *oldid; register char *cp; @@ -220,7 +236,7 @@ int ac, fi; skipspaces: while (isspace(*cp)) /* nullify spaces */ *cp++ = '\0'; - if ((*cp == '"' | *cp == '\'')) + if ((*cp == '"') | (*cp == '\'')) inquote = *cp++; if (!*cp) /* all done? */ break; @@ -268,9 +284,12 @@ int ac, fi; } -doarray(ac, av, ai) /* make array */ -char **av; -int ac, ai; +int +doarray( /* make array */ + int ac, + char **av, + int ai +) { char *newav[256], **avp; char newid[128], repts[32]; @@ -313,9 +332,11 @@ int ac, ai; } -xform(name, fin) /* transform stream by tot.xfm */ -char *name; -register FILE *fin; +void +xform( /* transform stream by tot.xfm */ + char *name, + register FILE *fin +) { int nobjs = 0; register int c; @@ -346,9 +367,11 @@ register FILE *fin; } -xfcomm(fname, fin) /* transform a command */ -char *fname; -FILE *fin; +void +xfcomm( /* transform a command */ + char *fname, + FILE *fin +) { FILE *pin; char buf[512]; @@ -376,9 +399,11 @@ FILE *fin; } -xfobject(fname, fin) /* transform an object */ -char *fname; -FILE *fin; +void +xfobject( /* transform an object */ + char *fname, + FILE *fin +) { char typ[16], nam[MAXSTR]; int fn; @@ -411,8 +436,10 @@ FILE *fin; } -o_default(fin) /* pass on arguments unchanged */ -FILE *fin; +int +o_default( /* pass on arguments unchanged */ + FILE *fin +) { register int i; FUNARGS fa; @@ -445,8 +472,10 @@ FILE *fin; } -addxform(fin) /* add xf arguments to strings */ -FILE *fin; +int +addxform( /* add xf arguments to strings */ + FILE *fin +) { register int i; int resetarr = 0; @@ -486,8 +515,10 @@ FILE *fin; } -alias(fin) /* transfer alias */ -FILE *fin; +int +alias( /* transfer alias */ + FILE *fin +) { char aliasnm[MAXSTR]; @@ -498,8 +529,10 @@ FILE *fin; } -m_glow(fin) /* transform arguments for proximity light */ -FILE *fin; +int +m_glow( /* transform arguments for proximity light */ + FILE *fin +) { FUNARGS fa; @@ -516,8 +549,10 @@ FILE *fin; } -m_spot(fin) /* transform arguments for spotlight */ -FILE *fin; +int +m_spot( /* transform arguments for spotlight */ + FILE *fin +) { FVECT v; FUNARGS fa; @@ -536,8 +571,10 @@ FILE *fin; } -m_mist(fin) /* transform arguments for mist */ -FILE *fin; +int +m_mist( /* transform arguments for mist */ + FILE *fin +) { FUNARGS fa; int i; @@ -578,8 +615,10 @@ FILE *fin; } -m_dielectric(fin) /* transform arguments for dielectric */ -FILE *fin; +int +m_dielectric( /* transform arguments for dielectric */ + FILE *fin +) { FUNARGS fa; @@ -598,8 +637,10 @@ FILE *fin; } -m_interface(fin) /* transform arguments for interface */ -FILE *fin; +int +m_interface( /* transform arguments for interface */ + FILE *fin +) { FUNARGS fa; @@ -623,8 +664,10 @@ FILE *fin; } -text(fin) /* transform text arguments */ -FILE *fin; +int +text( /* transform text arguments */ + FILE *fin +) { int i; FVECT v; @@ -662,8 +705,10 @@ FILE *fin; } -o_source(fin) /* transform source arguments */ -FILE *fin; +int +o_source( /* transform source arguments */ + FILE *fin +) { FVECT dv; FUNARGS fa; @@ -683,8 +728,10 @@ FILE *fin; } -o_sphere(fin) /* transform sphere arguments */ -FILE *fin; +int +o_sphere( /* transform sphere arguments */ + FILE *fin +) { FVECT cent; double rad; @@ -707,8 +754,10 @@ FILE *fin; } -o_face(fin) /* transform face arguments */ -FILE *fin; +int +o_face( /* transform face arguments */ + FILE *fin +) { FVECT p; register int i; @@ -733,8 +782,10 @@ FILE *fin; } -o_cone(fin) /* transform cone and cup arguments */ -FILE *fin; +int +o_cone( /* transform cone and cup arguments */ + FILE *fin +) { FVECT p0, p1; double r0, r1; @@ -760,8 +811,10 @@ FILE *fin; } -o_cylinder(fin) /* transform cylinder and tube arguments */ -FILE *fin; +int +o_cylinder( /* transform cylinder and tube arguments */ + FILE *fin +) { FVECT p0, p1; double rad; @@ -785,8 +838,10 @@ FILE *fin; } -o_ring(fin) /* transform ring arguments */ -FILE *fin; +int +o_ring( /* transform ring arguments */ + FILE *fin +) { FVECT p0, pd; double r0, r1; @@ -816,7 +871,8 @@ FILE *fin; } -initotypes() /* initialize ofun[] array */ +void +initotypes(void) /* initialize ofun[] array */ { register int i; @@ -836,7 +892,8 @@ initotypes() /* initialize ofun[] array */ ofun[OBJ_CYLINDER].funp = ofun[OBJ_TUBE].funp = o_cylinder; ofun[OBJ_RING].funp = o_ring; - ofun[OBJ_INSTANCE].funp = addxform; + ofun[OBJ_INSTANCE].funp = + ofun[OBJ_MESH].funp = addxform; ofun[MAT_GLOW].funp = m_glow; ofun[MAT_SPOT].funp = m_spot; ofun[MAT_DIELECTRIC].funp = m_dielectric; @@ -861,8 +918,10 @@ initotypes() /* initialize ofun[] array */ #ifdef OLDXFORM -openmain(fname) -char *fname; +void +openmain( + char *fname +) { if (fname == NULL) { strcpy(mainfn, "standard input"); @@ -884,11 +943,13 @@ char *fname; strcpy(mainfn, fname); } #else -openmain(iname) /* open input, changing directory for file */ -char *iname; +void +openmain( /* open input, changing directory for file */ + char *iname +) { - static char origdir[MAXPATH]; - static char curfn[MAXPATH]; + static char origdir[PATH_MAX]; + static char curfn[PATH_MAX]; static int diffdir; register char *fpath; @@ -914,7 +975,7 @@ char *iname; return; } if (mainfp == NULL) { /* first call, initialize */ - getwd(origdir); + getcwd(origdir, sizeof(origdir)); } else if (!strcmp(iname, curfn)) { /* just need to rewind? */ rewind(mainfp); return;