--- ray/src/gen/genbox.c 2003/06/08 12:03:09 2.6 +++ ray/src/gen/genbox.c 2021/04/08 15:13:08 2.10 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: genbox.c,v 2.6 2003/06/08 12:03:09 schorsch Exp $"; +static const char RCSid[] = "$Id: genbox.c,v 2.10 2021/04/08 15:13:08 greg Exp $"; #endif /* * genbox.c - generate a parallelepiped. @@ -7,10 +7,8 @@ static const char RCSid[] = "$Id: genbox.c,v 2.6 2003/ * 1/8/86 */ -#include - -#include - +#include "rtio.h" +#include #include @@ -24,72 +22,54 @@ double size[3]; /* ppd size */ double bevel = 0.0; /* bevel amount */ -int rounde = 0; /* boolean true for rounde edges */ +int rounde = 0; /* boolean true for round edges */ int reverse = 0; /* boolean true for reversed normals */ - static void -vertex(v) -register int v; +vertex(int v) { - register int i; + int i; for (i = 0; i < 3; i++) { if (v & 010) - printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel); + printf("\t%18.12g", (v&01)^reverse ? size[i]-bevel : bevel); else - printf("\t%18.12g", v & 01 ? size[i] : 0.0); + printf("\t%18.12g", (v&01)^reverse ? size[i] : 0.0); v >>= 1; } - printf("\n"); + fputc('\n', stdout); } static void -side(a, b, c, d) /* generate a rectangular face */ -int a, b, c, d; +side(int a, int b, int c, int d) /* generate a rectangular face */ { printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname, let[a], let[b], let[c], let[d]); printf("0\n0\n12\n"); - if (reverse) { - vertex(d); - vertex(c); - vertex(b); - vertex(a); - } else { - vertex(a); - vertex(b); - vertex(c); - vertex(d); - } + vertex(a); + vertex(b); + vertex(c); + vertex(d); } static void -corner(a, b, c) /* generate a triangular face */ -int a, b, c; +corner(int a, int b, int c) /* generate a triangular face */ { printf("\n%s polygon %s.%c%c%c\n", cmtype, cname, let[a], let[b], let[c]); printf("0\n0\n9\n"); - if (reverse) { - vertex(c); - vertex(b); - vertex(a); - } else { - vertex(a); - vertex(b); - vertex(c); - } + vertex(a); + vertex(b); + vertex(c); } static void -cylinder(v0, v1) /* generate a cylinder */ -int v0, v1; +cylinder(int v0, int v1) /* generate a cylinder */ { printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0'); printf("0\n0\n7\n"); @@ -99,8 +79,8 @@ int v0, v1; } -sphere(v0) /* generate a sphere */ -int v0; +static void +sphere(int v0) /* generate a sphere */ { printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0'); printf("0\n0\n4\n"); @@ -109,23 +89,9 @@ int v0; } -printhead(ac, av) /* print command header */ -register int ac; -register char **av; +int +main(int argc, char *argv[]) { - putchar('#'); - while (ac--) { - putchar(' '); - fputs(*av++, stdout); - } - putchar('\n'); -} - - -main(argc, argv) -int argc; -char **argv; -{ int i; if (argc < 6) @@ -136,26 +102,34 @@ char **argv; size[0] = atof(argv[3]); size[1] = atof(argv[4]); size[2] = atof(argv[5]); + if ((size[0] <= 0.0) | (size[1] <= 0.0) | (size[2] <= 0.0)) + goto userr; for (i = 6; i < argc; i++) { if (argv[i][0] != '-') goto userr; switch (argv[i][1]) { + case 'i': + reverse = 1; + break; case 'r': rounde = 1; /* fall through */ case 'b': bevel = atof(argv[++i]); - break; - case 'i': - reverse = 1; - break; + if (bevel > 0.0) + break; + /* fall through on error */ default: goto userr; } } + if (rounde & reverse) + fprintf(stderr, "%s: warning - option -i ignored with -r\n", + argv[0]); - printhead(argc, argv); + fputs("# ", stdout); + printargs(argc, argv, stdout); if (bevel > 0.0) { /* minor faces */ @@ -191,7 +165,7 @@ char **argv; corner(037, 067, 057); } if (bevel > 0.0 && rounde) { - /* rounde edges */ + /* round edges */ cylinder(070, 071); cylinder(070, 074); cylinder(070, 072); @@ -204,7 +178,7 @@ char **argv; cylinder(076, 072); cylinder(076, 074); cylinder(076, 077); - /* rounde corners */ + /* round corners */ sphere(070); sphere(071); sphere(072); @@ -214,7 +188,7 @@ char **argv; sphere(076); sphere(077); } - if (bevel == 0.0 ) { + if (bevel == 0.0) { /* only need major faces */ side(1, 5, 4, 0); side(4, 6, 2, 0); @@ -223,11 +197,10 @@ char **argv; side(5, 1, 3, 7); side(6, 4, 5, 7); } - exit(0); + return(0); userr: fprintf(stderr, "Usage: %s ", argv[0]); fprintf(stderr, "material name xsize ysize zsize "); - fprintf(stderr, "[-i] [-b bevel | -r rounde]\n"); - exit(1); + fprintf(stderr, "[-i] [-b bevel | -r round]\n"); + return(1); } -