16 int truetoboundingbox;
17 int textbits=4, gfxbits=4;
26 watcher(void *v, char *x)
30 if(strcmp(x, "die") != 0)
31 postnote(PNGROUP, notegp, x);
37 bell(void *u, char *x)
39 if(x && strcmp(x, "hangup") == 0)
42 if(x && strstr(x, "die") == nil)
43 fprint(2, "postnote %d: %s\n", getpid(), x);
45 /* alarms come from the gs monitor */
46 if(x && strstr(x, "alarm")){
47 postnote(PNGROUP, getpid(), "die (gs error)");
48 postnote(PNPROC, notewatcher, "die (gs error)");
51 /* function mentions u so that it's in the stack trace */
52 if((u == nil || u != x) && doabort)
55 /* fprint(2, "exiting %d\n", getpid()); */
65 s = va_arg(fmt->args, char*);
66 if(s == nil || s[0] == '\0')
67 return fmtstrcpy(fmt, "");
69 return fmtprint(fmt, "%#q", s);
75 fprint(2, "usage: page [-biRrw] [-p ppi] file...\n");
80 main(int argc, char **argv)
89 /* "temporary" debugging options */
103 textbits = atoi(EARGF(usage()));
104 gfxbits = atoi(EARGF(usage()));
115 ppi = atoi(EARGF(usage()));
118 truetoboundingbox = 1;
133 switch(notewatcher = fork()){
140 atnotify(watcher, 1);
150 if(imagemode == 0 && argc == 0){
152 stdinfd = dup(0, -1);
154 open("/dev/cons", OREAD);
158 fmtinstall('a', afmt);
160 fmtinstall('R', Rfmt);
161 fmtinstall('P', Pfmt);
165 if(readn(stdinfd, buf, Ninput) != Ninput){
166 fprint(2, "page: short read reading %s\n", argv[0]);
170 if(!(b = Bopen(argv[0], OREAD))) {
171 fprint(2, "page: cannot open \"%s\"\n", argv[0]);
175 if(Bread(b, buf, Ninput) != Ninput) {
176 fprint(2, "page: short read reading %s\n", argv[0]);
184 doc = initgfx(nil, 0, nil, nil, 0);
185 else if(strncmp((char*)buf, "%PDF-", 5) == 0)
186 doc = initpdf(b, argc, argv, buf, Ninput);
187 else if(strncmp((char*)buf, "\x04%!", 2) == 0)
188 doc = initps(b, argc, argv, buf, Ninput);
189 else if(buf[0] == '\x1B' && strstr((char*)buf, "@PJL"))
190 doc = initps(b, argc, argv, buf, Ninput);
191 else if(strncmp((char*)buf, "%!", 2) == 0)
192 doc = initps(b, argc, argv, buf, Ninput);
193 else if(strcmp((char*)buf, "\xF7\x02\x01\x83\x92\xC0\x1C;") == 0)
194 doc = initdvi(b, argc, argv, buf, Ninput);
195 else if(strncmp((char*)buf, "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1", 8) == 0)
196 doc = initmsdoc(b, argc, argv, buf, Ninput);
197 else if(strncmp((char*)buf, "x T ", 4) == 0)
198 doc = inittroff(b, argc, argv, buf, Ninput);
201 fprint(2, "page: you can't specify -p with graphic files\n");
202 wexits("-p and graphics");
204 doc = initgfx(b, argc, argv, buf, Ninput);
208 fprint(2, "page: error reading file: %r\n");
209 wexits("document init");
212 if(doc->npage < 1 && !imagemode) {
213 fprint(2, "page: no pages found?\n");
217 if(reverse == -1) /* neither cmdline nor ps reader set it */
220 if(initdraw(0, 0, "page") < 0){
221 fprint(2, "page: initdraw failed: %r\n");
224 truecolor = screen->depth > 8;
232 if(s && *s && strcmp(s, "note") != 0 && mknewwindow)
234 postnote(PNPROC, notewatcher, "die");