9 |
|
|
10 |
|
#include "glare.h" |
11 |
|
|
12 |
– |
#define FEQ(a,b) ((a)-(b)<=FTINY&&(b)-(a)<=FTINY) |
13 |
– |
#define VEQ(v1,v2) (FEQ((v1)[0],(v2)[0])&&FEQ((v1)[1],(v2)[1]) \ |
14 |
– |
&&FEQ((v1)[2],(v2)[2])) |
15 |
– |
|
12 |
|
char *rtargv[64] = {"rtrace", "-h-", "-ov", "-fff", "-ld-", "-i-", "-I-"}; |
13 |
|
int rtargc = 7; |
14 |
|
|
35 |
|
long npixinvw; /* number of pixels in view */ |
36 |
|
long npixmiss; /* number of pixels missed */ |
37 |
|
|
38 |
< |
static int angcmp(const void *ap1, const void *ap2); |
38 |
> |
static int angcmp(const void *ap1, const void *ap2); |
39 |
|
static void init(void); |
40 |
|
static void cleanup(void); |
41 |
|
static void printsources(void); |
61 |
|
while ((rval = expandarg(&argc, &argv, i)) > 0) |
62 |
|
; |
63 |
|
if (rval < 0) { |
64 |
< |
fprintf(stderr, "%s: cannot expand '%s'", |
64 |
> |
fprintf(stderr, "%s: cannot expand '%s'\n", |
65 |
|
argv[0], argv[i]); |
66 |
|
exit(1); |
67 |
|
} |
125 |
|
/* FALL THROUGH */ |
126 |
|
case 's': |
127 |
|
case 'P': |
128 |
+ |
case 'n': |
129 |
|
rtargv[rtargc++] = argv[i]; |
130 |
|
rtargv[rtargc++] = argv[++i]; |
131 |
|
break; |
132 |
|
case 'w': |
133 |
+ |
case 'u': |
134 |
+ |
case 'b': |
135 |
|
rtargv[rtargc++] = argv[i]; |
136 |
|
break; |
137 |
|
case 'a': |
142 |
|
} |
143 |
|
rtargv[rtargc++] = argv[++i]; |
144 |
|
break; |
145 |
+ |
case 'm': |
146 |
+ |
rtargv[rtargc++] = argv[i]; |
147 |
+ |
if ((argv[i][2] == 'e') | (argv[i][2] == 'a')) { |
148 |
+ |
rtargv[rtargc++] = argv[++i]; |
149 |
+ |
rtargv[rtargc++] = argv[++i]; |
150 |
+ |
} |
151 |
+ |
rtargv[rtargc++] = argv[++i]; |
152 |
+ |
break; |
153 |
|
default: |
154 |
|
goto userr; |
155 |
|
} |
191 |
|
exit(1); |
192 |
|
} |
193 |
|
ourview = pictview; |
194 |
< |
} else if (picture != NULL && !VEQ(ourview.vp, pictview.vp)) { |
194 |
> |
} else if (picture != NULL && !VABSEQ(ourview.vp, pictview.vp)) { |
195 |
|
fprintf(stderr, "%s: picture must have same viewpoint\n", |
196 |
|
progname); |
197 |
|
exit(1); |