--- ray/src/gen/genclock.c 2003/02/22 02:07:23 2.4 +++ ray/src/gen/genclock.c 2003/06/08 12:03:09 2.5 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: genclock.c,v 2.4 2003/02/22 02:07:23 greg Exp $"; +static const char RCSid[] = "$Id: genclock.c,v 2.5 2003/06/08 12:03:09 schorsch Exp $"; #endif /* * Generate an analog clock. @@ -22,57 +22,7 @@ char *facemat = myfacemat; char *casemat = mycasemat; char *name = "clock"; -main(argc, argv) -int argc; -char *argv[]; -{ - int i, j; - double hour; - - for (i = 1; i < argc && argv[i][0] == '-'; i++) - switch (argv[i][1]) { - case 'f': - facemat = argv[++i]; - break; - case 'c': - casemat = argv[++i]; - break; - case 'n': - name = argv[++i]; - break; - default: - goto userr; - } - if (i >= argc) - goto userr; - if (!isdigit(argv[i][0])) - goto userr; - for (j = 1; isdigit(argv[i][j]); j++) - ; - if (argv[i][j] == ':') - hour = atoi(argv[i]) + atoi(argv[i]+j+1)/60.0; - else if (!argv[i][j] || argv[i][j] == '.') - hour = atof(argv[i]); - else - goto userr; - putchar('#'); /* print header */ - for (i = 0; i < argc; i++) { - putchar(' '); - fputs(argv[i], stdout); - } - putchar('\n'); - genmats(); /* print materials */ - genclock(); /* generate clock */ - genhands(hour); /* generate hands */ - exit(0); -userr: - fputs("Usage: ", stderr); - fputs(argv[0], stderr); - fputs(" [-f face_mat][-c case_mat][-n name] {HH:MM | HH.hh}\n", stderr); - exit(1); -} - - +static void genmats() /* put out our materials */ { if (facemat == myfacemat) @@ -92,6 +42,7 @@ genmats() /* put out our materials */ } +static void genclock() /* put out clock body */ { printf("\n%s ring %s.case_back\n", casemat, name); @@ -109,6 +60,22 @@ genclock() /* put out clock body */ } +static void +rvert(x, y, z, ang) /* print rotated vertex */ +double x, y, z, ang; +{ + static double lastang=0, sa=0, ca=1; + + if (ang != lastang) { + sa = sin(-ang); + ca = cos(-ang); + lastang = ang; + } + printf("%15.12g %15.12g %15.12g\n", x, y*ca-z*sa, z*ca+y*sa); +} + + +static void genhands(hour) /* generate correct hand positions */ double hour; { @@ -133,15 +100,54 @@ double hour; } -rvert(x, y, z, ang) /* print rotated vertex */ -double x, y, z, ang; +int +main(argc, argv) +int argc; +char *argv[]; { - static double lastang=0, sa=0, ca=1; + int i, j; + double hour; - if (ang != lastang) { - sa = sin(-ang); - ca = cos(-ang); - lastang = ang; + for (i = 1; i < argc && argv[i][0] == '-'; i++) + switch (argv[i][1]) { + case 'f': + facemat = argv[++i]; + break; + case 'c': + casemat = argv[++i]; + break; + case 'n': + name = argv[++i]; + break; + default: + goto userr; + } + if (i >= argc) + goto userr; + if (!isdigit(argv[i][0])) + goto userr; + for (j = 1; isdigit(argv[i][j]); j++) + ; + if (argv[i][j] == ':') + hour = atoi(argv[i]) + atoi(argv[i]+j+1)/60.0; + else if (!argv[i][j] || argv[i][j] == '.') + hour = atof(argv[i]); + else + goto userr; + putchar('#'); /* print header */ + for (i = 0; i < argc; i++) { + putchar(' '); + fputs(argv[i], stdout); } - printf("%15.12g %15.12g %15.12g\n", x, y*ca-z*sa, z*ca+y*sa); + putchar('\n'); + genmats(); /* print materials */ + genclock(); /* generate clock */ + genhands(hour); /* generate hands */ + exit(0); +userr: + fputs("Usage: ", stderr); + fputs(argv[0], stderr); + fputs(" [-f face_mat][-c case_mat][-n name] {HH:MM | HH.hh}\n", stderr); + exit(1); } +