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