xref: /plan9/sys/src/cmd/postscript/p9bitpost/p9bitpost.c (revision a6a9e07217f318acf170f99684a55fba5200524f)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <draw.h>
47dd7cddfSDavid du Colombier #include <memdraw.h>
57dd7cddfSDavid du Colombier #include "pslib.h"
6219b2ee8SDavid du Colombier 
7219b2ee8SDavid du Colombier #define HDLEN	60
87dd7cddfSDavid du Colombier 
97dd7cddfSDavid du Colombier int dpi = -1;
107dd7cddfSDavid du Colombier int debug = 0;
11219b2ee8SDavid du Colombier int landscape = 0;
127dd7cddfSDavid du Colombier char *file = "<stdin>";
13219b2ee8SDavid du Colombier 
1480ee5cbfSDavid du Colombier int paperlength = 11*72;
1580ee5cbfSDavid du Colombier int paperwidth = 612;	/* 8.5*72 */
1680ee5cbfSDavid du Colombier 
17219b2ee8SDavid du Colombier void
error(char * s)189a747e4fSDavid du Colombier error(char *s)
19219b2ee8SDavid du Colombier {
209a747e4fSDavid du Colombier 	fprint(2, "p9bitpost: can't %s file %s: %r\n", s, file);
217dd7cddfSDavid du Colombier 	exits("error");
227dd7cddfSDavid du Colombier }
23219b2ee8SDavid du Colombier 
247dd7cddfSDavid du Colombier void
main(int argc,char * argv[])257dd7cddfSDavid du Colombier main(int argc, char *argv[]) {
267dd7cddfSDavid du Colombier 	int i, fd = 0;
277dd7cddfSDavid du Colombier 	double xmag = 1.0, ymag = 1.0;
287dd7cddfSDavid du Colombier 	char *optstr, *Patch;
297dd7cddfSDavid du Colombier 	Memimage *memimage;
307dd7cddfSDavid du Colombier 
317dd7cddfSDavid du Colombier 	Patch = nil;
32219b2ee8SDavid du Colombier 	for (i=1; i<argc; i++) {
337dd7cddfSDavid du Colombier 		if (*argv[i] != '-') break;
34219b2ee8SDavid du Colombier 		switch(argv[i][1]) {
357dd7cddfSDavid du Colombier 		case 'b':
36219b2ee8SDavid du Colombier 			if (argv[i][2] == '\0')
377dd7cddfSDavid du Colombier 				dpi = atoi(argv[++i]);
38219b2ee8SDavid du Colombier 			else
397dd7cddfSDavid du Colombier 				dpi = atoi(&(argv[i][2]));
40219b2ee8SDavid du Colombier 			break;
41219b2ee8SDavid du Colombier 		case 'd':
42219b2ee8SDavid du Colombier 			debug = 1;
43219b2ee8SDavid du Colombier 			break;
44219b2ee8SDavid du Colombier 		case 'm':
45219b2ee8SDavid du Colombier 			if (argv[i][2] == '\0')
46219b2ee8SDavid du Colombier 				optstr = argv[++i];
47219b2ee8SDavid du Colombier 			else
48219b2ee8SDavid du Colombier 				optstr = &(argv[i][2]);
49219b2ee8SDavid du Colombier 			if ((optstr=strtok(optstr, " ,")) != 0)
507dd7cddfSDavid du Colombier 				xmag = ymag = atof(optstr);
51219b2ee8SDavid du Colombier 			if ((optstr=strtok(0, " ,")) != 0)
527dd7cddfSDavid du Colombier 				ymag = atof(optstr);
537dd7cddfSDavid du Colombier 			break;
547dd7cddfSDavid du Colombier 		case 'L':
557dd7cddfSDavid du Colombier 			landscape = 1;
567dd7cddfSDavid du Colombier 			break;
577dd7cddfSDavid du Colombier 		case 'P':
587dd7cddfSDavid du Colombier 			if (argv[i][2] == '\0')
597dd7cddfSDavid du Colombier 				Patch = argv[++i];
607dd7cddfSDavid du Colombier 			else
617dd7cddfSDavid du Colombier 				Patch = &(argv[i][2]);
62219b2ee8SDavid du Colombier 			break;
6380ee5cbfSDavid du Colombier 		case 'p':
6480ee5cbfSDavid du Colombier 			optstr = argv[++i];
6580ee5cbfSDavid du Colombier 			if(optstr == nil)
6680ee5cbfSDavid du Colombier 				goto Usage;
679a747e4fSDavid du Colombier 			paperlength = 72*atof(optstr);
6880ee5cbfSDavid du Colombier 			optstr = argv[++i];
6980ee5cbfSDavid du Colombier 			if(optstr == nil)
7080ee5cbfSDavid du Colombier 				goto Usage;
719a747e4fSDavid du Colombier 			paperwidth = 72*atof(optstr);
7280ee5cbfSDavid du Colombier 			if(paperlength < 72 || paperwidth < 72)
7380ee5cbfSDavid du Colombier 				goto Usage;
7480ee5cbfSDavid du Colombier 			break;
75219b2ee8SDavid du Colombier 		default:
7680ee5cbfSDavid du Colombier 		Usage:
77*a6a9e072SDavid du Colombier 			fprint(2, "usage: %s [-b dpi] [-m magnification] [-L] [-P postscript_patch_string] [-p paperlength paperwidth (in inches)] inputfile\n", argv[0]);
787dd7cddfSDavid du Colombier 			exits("usage");
79219b2ee8SDavid du Colombier 		}
80219b2ee8SDavid du Colombier 	}
817dd7cddfSDavid du Colombier 
827dd7cddfSDavid du Colombier 	if (i < argc) {
837dd7cddfSDavid du Colombier 		file = argv[i];
847dd7cddfSDavid du Colombier 		fd = open(file, OREAD);
857dd7cddfSDavid du Colombier 		if (fd < 0)
869a747e4fSDavid du Colombier 			error("open");
87219b2ee8SDavid du Colombier 	}
887dd7cddfSDavid du Colombier 
897dd7cddfSDavid du Colombier 	memimageinit();
907dd7cddfSDavid du Colombier 	memimage = readmemimage(fd);
917dd7cddfSDavid du Colombier 	if(memimage == nil)
929a747e4fSDavid du Colombier 		error("alloc memory for");
937dd7cddfSDavid du Colombier 
947dd7cddfSDavid du Colombier 	psinit(0, 0);
957dd7cddfSDavid du Colombier 	if(xmag != 1.0)
967dd7cddfSDavid du Colombier 		psopt("xmagnification", &xmag);
977dd7cddfSDavid du Colombier 	if(ymag != 1.0)
987dd7cddfSDavid du Colombier 		psopt("ymagnification", &ymag);
997dd7cddfSDavid du Colombier 	if(landscape)
1007dd7cddfSDavid du Colombier 		psopt("landscape", &landscape);
1017dd7cddfSDavid du Colombier 	if(Patch)
1027dd7cddfSDavid du Colombier 		psopt("Patch", &Patch);
1037dd7cddfSDavid du Colombier 	image2psfile(1, memimage, dpi);
104219b2ee8SDavid du Colombier 	exits("");
105219b2ee8SDavid du Colombier }
106