| 29 |  | int  reverse = 0;       /* boolean true for reversed normals */ | 
| 30 |  |  | 
| 31 |  |  | 
| 32 | + |  | 
| 33 | + | static void | 
| 34 | + | vertex(v) | 
| 35 | + | register int  v; | 
| 36 | + | { | 
| 37 | + | register int  i; | 
| 38 | + |  | 
| 39 | + | for (i = 0; i < 3; i++) { | 
| 40 | + | if (v & 010) | 
| 41 | + | printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel); | 
| 42 | + | else | 
| 43 | + | printf("\t%18.12g", v & 01 ? size[i] : 0.0); | 
| 44 | + | v >>= 1; | 
| 45 | + | } | 
| 46 | + | printf("\n"); | 
| 47 | + | } | 
| 48 | + |  | 
| 49 | + |  | 
| 50 | + | static void | 
| 51 | + | side(a, b, c, d)                /* generate a rectangular face */ | 
| 52 | + | int  a, b, c, d; | 
| 53 | + | { | 
| 54 | + | printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname, | 
| 55 | + | let[a], let[b], let[c], let[d]); | 
| 56 | + | printf("0\n0\n12\n"); | 
| 57 | + | if (reverse) { | 
| 58 | + | vertex(d); | 
| 59 | + | vertex(c); | 
| 60 | + | vertex(b); | 
| 61 | + | vertex(a); | 
| 62 | + | } else { | 
| 63 | + | vertex(a); | 
| 64 | + | vertex(b); | 
| 65 | + | vertex(c); | 
| 66 | + | vertex(d); | 
| 67 | + | } | 
| 68 | + | } | 
| 69 | + |  | 
| 70 | + |  | 
| 71 | + | static void | 
| 72 | + | corner(a, b, c)                 /* generate a triangular face */ | 
| 73 | + | int  a, b, c; | 
| 74 | + | { | 
| 75 | + | printf("\n%s polygon %s.%c%c%c\n", cmtype, cname, | 
| 76 | + | let[a], let[b], let[c]); | 
| 77 | + | printf("0\n0\n9\n"); | 
| 78 | + | if (reverse) { | 
| 79 | + | vertex(c); | 
| 80 | + | vertex(b); | 
| 81 | + | vertex(a); | 
| 82 | + | } else { | 
| 83 | + | vertex(a); | 
| 84 | + | vertex(b); | 
| 85 | + | vertex(c); | 
| 86 | + | } | 
| 87 | + | } | 
| 88 | + |  | 
| 89 | + |  | 
| 90 | + | static void | 
| 91 | + | cylinder(v0, v1)                /* generate a cylinder */ | 
| 92 | + | int  v0, v1; | 
| 93 | + | { | 
| 94 | + | printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0'); | 
| 95 | + | printf("0\n0\n7\n"); | 
| 96 | + | vertex(v0); | 
| 97 | + | vertex(v1); | 
| 98 | + | printf("\t%18.12g\n", bevel); | 
| 99 | + | } | 
| 100 | + |  | 
| 101 | + |  | 
| 102 | + | sphere(v0)                      /* generate a sphere */ | 
| 103 | + | int  v0; | 
| 104 | + | { | 
| 105 | + | printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0'); | 
| 106 | + | printf("0\n0\n4\n"); | 
| 107 | + | vertex(v0); | 
| 108 | + | printf("\t%18.12g\n", bevel); | 
| 109 | + | } | 
| 110 | + |  | 
| 111 | + |  | 
| 112 | + | printhead(ac, av)               /* print command header */ | 
| 113 | + | register int  ac; | 
| 114 | + | register char  **av; | 
| 115 | + | { | 
| 116 | + | putchar('#'); | 
| 117 | + | while (ac--) { | 
| 118 | + | putchar(' '); | 
| 119 | + | fputs(*av++, stdout); | 
| 120 | + | } | 
| 121 | + | putchar('\n'); | 
| 122 | + | } | 
| 123 | + |  | 
| 124 | + |  | 
| 125 |  | main(argc, argv) | 
| 126 |  | int  argc; | 
| 127 |  | char  **argv; | 
| 231 |  | exit(1); | 
| 232 |  | } | 
| 233 |  |  | 
| 141 | – |  | 
| 142 | – | side(a, b, c, d)                /* generate a rectangular face */ | 
| 143 | – | int  a, b, c, d; | 
| 144 | – | { | 
| 145 | – | printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname, | 
| 146 | – | let[a], let[b], let[c], let[d]); | 
| 147 | – | printf("0\n0\n12\n"); | 
| 148 | – | if (reverse) { | 
| 149 | – | vertex(d); | 
| 150 | – | vertex(c); | 
| 151 | – | vertex(b); | 
| 152 | – | vertex(a); | 
| 153 | – | } else { | 
| 154 | – | vertex(a); | 
| 155 | – | vertex(b); | 
| 156 | – | vertex(c); | 
| 157 | – | vertex(d); | 
| 158 | – | } | 
| 159 | – | } | 
| 160 | – |  | 
| 161 | – |  | 
| 162 | – | corner(a, b, c)                 /* generate a triangular face */ | 
| 163 | – | int  a, b, c; | 
| 164 | – | { | 
| 165 | – | printf("\n%s polygon %s.%c%c%c\n", cmtype, cname, | 
| 166 | – | let[a], let[b], let[c]); | 
| 167 | – | printf("0\n0\n9\n"); | 
| 168 | – | if (reverse) { | 
| 169 | – | vertex(c); | 
| 170 | – | vertex(b); | 
| 171 | – | vertex(a); | 
| 172 | – | } else { | 
| 173 | – | vertex(a); | 
| 174 | – | vertex(b); | 
| 175 | – | vertex(c); | 
| 176 | – | } | 
| 177 | – | } | 
| 178 | – |  | 
| 179 | – |  | 
| 180 | – | cylinder(v0, v1)                /* generate a cylinder */ | 
| 181 | – | int  v0, v1; | 
| 182 | – | { | 
| 183 | – | printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0'); | 
| 184 | – | printf("0\n0\n7\n"); | 
| 185 | – | vertex(v0); | 
| 186 | – | vertex(v1); | 
| 187 | – | printf("\t%18.12g\n", bevel); | 
| 188 | – | } | 
| 189 | – |  | 
| 190 | – |  | 
| 191 | – | sphere(v0)                      /* generate a sphere */ | 
| 192 | – | int  v0; | 
| 193 | – | { | 
| 194 | – | printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0'); | 
| 195 | – | printf("0\n0\n4\n"); | 
| 196 | – | vertex(v0); | 
| 197 | – | printf("\t%18.12g\n", bevel); | 
| 198 | – | } | 
| 199 | – |  | 
| 200 | – |  | 
| 201 | – | vertex(v) | 
| 202 | – | register int  v; | 
| 203 | – | { | 
| 204 | – | register int  i; | 
| 205 | – |  | 
| 206 | – | for (i = 0; i < 3; i++) { | 
| 207 | – | if (v & 010) | 
| 208 | – | printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel); | 
| 209 | – | else | 
| 210 | – | printf("\t%18.12g", v & 01 ? size[i] : 0.0); | 
| 211 | – | v >>= 1; | 
| 212 | – | } | 
| 213 | – | printf("\n"); | 
| 214 | – | } | 
| 215 | – |  | 
| 216 | – |  | 
| 217 | – | printhead(ac, av)               /* print command header */ | 
| 218 | – | register int  ac; | 
| 219 | – | register char  **av; | 
| 220 | – | { | 
| 221 | – | putchar('#'); | 
| 222 | – | while (ac--) { | 
| 223 | – | putchar(' '); | 
| 224 | – | fputs(*av++, stdout); | 
| 225 | – | } | 
| 226 | – | putchar('\n'); | 
| 227 | – | } |