| 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; |
| 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) |