49 |
|
#define unguard() 0 |
50 |
|
#endif |
51 |
|
/* rpict command */ |
52 |
< |
char *rpargv[128] = {"rpict", "-S", "1", "-x", "512", "-y", "512", "-pa", "1"}; |
53 |
< |
int rpargc = 9; |
52 |
> |
char *rpargv[128] = {"rpict", "-S", "1"}; |
53 |
> |
int rpargc = 3; |
54 |
|
int rpd[3]; |
55 |
|
FILE *torp, *fromrp; |
56 |
|
COLR *pbuf; |
57 |
|
/* our view parameters */ |
58 |
|
VIEW ourview = STDVIEW; |
59 |
|
double pixaspect = 1.0; |
60 |
< |
int hres = 512, vres = 512, hmult = 2, vmult = 2; |
60 |
> |
int hres = 1024, vres = 1024, hmult = 4, vmult = 4; |
61 |
|
/* output file */ |
62 |
|
char *outfile = NULL; |
63 |
|
int outfd; |
82 |
|
|
83 |
|
progname = argv[0]; |
84 |
|
for (i = 1; i < argc; i++) { |
85 |
+ |
/* expand arguments */ |
86 |
+ |
while (rval = expandarg(&argc, &argv, i)) |
87 |
+ |
if (rval < 0) { |
88 |
+ |
fprintf(stderr, "%s: cannot expand '%s'", |
89 |
+ |
argv[0], argv[i]); |
90 |
+ |
exit(1); |
91 |
+ |
} |
92 |
|
if (argv[i][0] == '-') |
93 |
|
switch (argv[i][1]) { |
94 |
|
case 'v': |
113 |
|
} |
114 |
|
break; |
115 |
|
case 'p': /* pixel aspect ratio? */ |
116 |
< |
if (argv[i][2] == 'a' && !argv[i][3]) |
117 |
< |
pixaspect = atof(argv[i+1]); |
118 |
< |
break; |
119 |
< |
case 'x': /* piece x resolution */ |
120 |
< |
if (!argv[i][2]) |
121 |
< |
hres = atoi(argv[i+1]); |
122 |
< |
break; |
123 |
< |
case 'y': /* piece y resolution */ |
124 |
< |
if (!argv[i][2]) |
125 |
< |
vres = atoi(argv[i+1]); |
126 |
< |
break; |
116 |
> |
if (argv[i][2] != 'a' || argv[i][3]) |
117 |
> |
break; |
118 |
> |
pixaspect = atof(argv[i+1]); |
119 |
> |
continue; |
120 |
> |
case 'x': /* overall x resolution */ |
121 |
> |
if (argv[i][2]) |
122 |
> |
break; |
123 |
> |
hres = atoi(argv[++i]); |
124 |
> |
continue; |
125 |
> |
case 'y': /* overall y resolution */ |
126 |
> |
if (argv[i][2]) |
127 |
> |
break; |
128 |
> |
vres = atoi(argv[++i]); |
129 |
> |
continue; |
130 |
|
case 'X': /* horizontal multiplier */ |
131 |
|
if (argv[i][2]) |
132 |
|
break; |
156 |
|
break; |
157 |
|
outfile = argv[++i]; |
158 |
|
continue; |
159 |
< |
} |
159 |
> |
} else if (i >= argc-1) |
160 |
> |
break; |
161 |
|
rpargv[rpargc++] = argv[i]; |
162 |
|
} |
163 |
< |
rpargv[rpargc] = NULL; |
163 |
> |
if (i >= argc) { |
164 |
> |
fprintf(stderr, "%s: missing octree argument\n", argv[0]); |
165 |
> |
exit(1); |
166 |
> |
} |
167 |
|
if (outfile == NULL) { |
168 |
|
fprintf(stderr, "%s: missing output file\n", argv[0]); |
169 |
|
exit(1); |
178 |
|
int ac; |
179 |
|
char **av; |
180 |
|
{ |
181 |
+ |
static char hrbuf[16], vrbuf[16]; |
182 |
|
extern char VersionID[]; |
183 |
|
char *err; |
184 |
|
FILE *fp; |
193 |
|
buf[read(syncfd, buf, sizeof(buf)-1)] = '\0'; |
194 |
|
sscanf(buf, "%d %d", &hmult, &vmult); |
195 |
|
} |
196 |
+ |
/* compute piece size */ |
197 |
+ |
hres /= hmult; |
198 |
+ |
vres /= vmult; |
199 |
|
normaspect(viewaspect(&ourview)*hmult/vmult, &pixaspect, &hres, &vres); |
200 |
+ |
sprintf(hrbuf, "%d", hres); |
201 |
+ |
rpargv[rpargc++] = "-x"; rpargv[rpargc++] = hrbuf; |
202 |
+ |
sprintf(vrbuf, "%d", vres); |
203 |
+ |
rpargv[rpargc++] = "-y"; rpargv[rpargc++] = vrbuf; |
204 |
+ |
rpargv[rpargc++] = "-pa"; rpargv[rpargc++] = "0"; |
205 |
+ |
rpargv[rpargc++] = av[ac-1]; |
206 |
+ |
rpargv[rpargc] = NULL; |
207 |
|
/* open output file */ |
208 |
|
if ((outfd = open(outfile, O_WRONLY|O_CREAT|O_EXCL, 0666)) >= 0) { |
209 |
|
if ((fp = fdopen(dup(outfd), "w")) == NULL) |
250 |
|
progname, rpargv[0]); |
251 |
|
exit(1); |
252 |
|
} |
253 |
< |
if ((pbuf = (COLR *)malloc(hres*vres*sizeof(COLR))) == NULL) { |
253 |
> |
if ((pbuf = (COLR *)bmalloc(hres*vres*sizeof(COLR))) == NULL) { |
254 |
|
fprintf(stderr, "%s: out of memory\n", progname); |
255 |
|
exit(1); |
256 |
|
} |
312 |
|
{ |
313 |
|
int status; |
314 |
|
|
315 |
< |
free((char *)pbuf); |
315 |
> |
bfree((char *)pbuf, hres*vres*sizeof(COLR)); |
316 |
|
fclose(torp); |
317 |
|
fclose(fromrp); |
318 |
|
while (wait(&status) != -1) |