Blame


1 24c02865 2005-01-04 devnull #include <u.h>
2 24c02865 2005-01-04 devnull #include <libc.h>
3 24c02865 2005-01-04 devnull #include <draw.h>
4 17157e4a 2006-03-20 devnull #include <cursor.h>
5 24c02865 2005-01-04 devnull #include <event.h>
6 24c02865 2005-01-04 devnull #include <bio.h>
7 24c02865 2005-01-04 devnull #include "page.h"
8 24c02865 2005-01-04 devnull
9 24c02865 2005-01-04 devnull int resizing;
10 24c02865 2005-01-04 devnull int mknewwindow;
11 24c02865 2005-01-04 devnull int doabort;
12 24c02865 2005-01-04 devnull int chatty;
13 24c02865 2005-01-04 devnull int reverse = -1;
14 24c02865 2005-01-04 devnull int goodps = 1;
15 24c02865 2005-01-04 devnull int ppi = 100;
16 24c02865 2005-01-04 devnull int teegs = 0;
17 24c02865 2005-01-04 devnull int truetoboundingbox;
18 24c02865 2005-01-04 devnull int textbits=4, gfxbits=4;
19 24c02865 2005-01-04 devnull int wctlfd = -1;
20 24c02865 2005-01-04 devnull int stdinfd;
21 24c02865 2005-01-04 devnull int truecolor;
22 24c02865 2005-01-04 devnull int imagemode;
23 24c02865 2005-01-04 devnull
24 24c02865 2005-01-04 devnull static int
25 24c02865 2005-01-04 devnull afmt(Fmt *fmt)
26 24c02865 2005-01-04 devnull {
27 24c02865 2005-01-04 devnull char *s;
28 24c02865 2005-01-04 devnull
29 24c02865 2005-01-04 devnull s = va_arg(fmt->args, char*);
30 24c02865 2005-01-04 devnull if(s == nil || s[0] == '\0')
31 24c02865 2005-01-04 devnull return fmtstrcpy(fmt, "");
32 24c02865 2005-01-04 devnull else
33 24c02865 2005-01-04 devnull return fmtprint(fmt, "%#q", s);
34 24c02865 2005-01-04 devnull }
35 24c02865 2005-01-04 devnull
36 24c02865 2005-01-04 devnull void
37 24c02865 2005-01-04 devnull usage(void)
38 24c02865 2005-01-04 devnull {
39 24c02865 2005-01-04 devnull fprint(2, "usage: page [-biRrw] [-p ppi] file...\n");
40 24c02865 2005-01-04 devnull exits("usage");
41 24c02865 2005-01-04 devnull }
42 24c02865 2005-01-04 devnull
43 24c02865 2005-01-04 devnull void
44 24c02865 2005-01-04 devnull main(int argc, char **argv)
45 24c02865 2005-01-04 devnull {
46 24c02865 2005-01-04 devnull Document *doc;
47 24c02865 2005-01-04 devnull Biobuf *b;
48 24c02865 2005-01-04 devnull enum { Ninput = 16 };
49 24c02865 2005-01-04 devnull uchar buf[Ninput+1];
50 24c02865 2005-01-04 devnull int readstdin;
51 24c02865 2005-01-04 devnull
52 24c02865 2005-01-04 devnull ARGBEGIN{
53 24c02865 2005-01-04 devnull /* "temporary" debugging options */
54 24c02865 2005-01-04 devnull case 'P':
55 24c02865 2005-01-04 devnull goodps = 0;
56 24c02865 2005-01-04 devnull break;
57 24c02865 2005-01-04 devnull case 'v':
58 24c02865 2005-01-04 devnull chatty++;
59 24c02865 2005-01-04 devnull break;
60 24c02865 2005-01-04 devnull case 'V':
61 24c02865 2005-01-04 devnull teegs++;
62 24c02865 2005-01-04 devnull break;
63 24c02865 2005-01-04 devnull case 'a':
64 24c02865 2005-01-04 devnull doabort++;
65 24c02865 2005-01-04 devnull break;
66 24c02865 2005-01-04 devnull case 'T':
67 24c02865 2005-01-04 devnull textbits = atoi(EARGF(usage()));
68 24c02865 2005-01-04 devnull gfxbits = atoi(EARGF(usage()));
69 24c02865 2005-01-04 devnull break;
70 24c02865 2005-01-04 devnull
71 24c02865 2005-01-04 devnull /* real options */
72 24c02865 2005-01-04 devnull case 'R':
73 24c02865 2005-01-04 devnull resizing = 1;
74 24c02865 2005-01-04 devnull break;
75 24c02865 2005-01-04 devnull case 'r':
76 24c02865 2005-01-04 devnull reverse = 1;
77 24c02865 2005-01-04 devnull break;
78 24c02865 2005-01-04 devnull case 'p':
79 24c02865 2005-01-04 devnull ppi = atoi(EARGF(usage()));
80 24c02865 2005-01-04 devnull break;
81 24c02865 2005-01-04 devnull case 'b':
82 24c02865 2005-01-04 devnull truetoboundingbox = 1;
83 24c02865 2005-01-04 devnull break;
84 24c02865 2005-01-04 devnull case 'w':
85 24c02865 2005-01-04 devnull mknewwindow = 1;
86 24c02865 2005-01-04 devnull resizing = 1;
87 24c02865 2005-01-04 devnull break;
88 24c02865 2005-01-04 devnull case 'i':
89 24c02865 2005-01-04 devnull imagemode = 1;
90 24c02865 2005-01-04 devnull break;
91 24c02865 2005-01-04 devnull default:
92 24c02865 2005-01-04 devnull usage();
93 24c02865 2005-01-04 devnull }ARGEND;
94 24c02865 2005-01-04 devnull
95 24c02865 2005-01-04 devnull rfork(RFNOTEG);
96 24c02865 2005-01-04 devnull
97 24c02865 2005-01-04 devnull readstdin = 0;
98 24c02865 2005-01-04 devnull if(imagemode == 0 && argc == 0){
99 24c02865 2005-01-04 devnull readstdin = 1;
100 24c02865 2005-01-04 devnull stdinfd = dup(0, -1);
101 24c02865 2005-01-04 devnull close(0);
102 24c02865 2005-01-04 devnull open("/dev/cons", OREAD);
103 24c02865 2005-01-04 devnull }
104 24c02865 2005-01-04 devnull
105 24c02865 2005-01-04 devnull quotefmtinstall();
106 24c02865 2005-01-04 devnull fmtinstall('a', afmt);
107 24c02865 2005-01-04 devnull
108 24c02865 2005-01-04 devnull fmtinstall('R', Rfmt);
109 24c02865 2005-01-04 devnull fmtinstall('P', Pfmt);
110 17157e4a 2006-03-20 devnull if(mknewwindow)
111 17157e4a 2006-03-20 devnull newwin();
112 24c02865 2005-01-04 devnull
113 24c02865 2005-01-04 devnull if(readstdin){
114 24c02865 2005-01-04 devnull b = nil;
115 24c02865 2005-01-04 devnull if(readn(stdinfd, buf, Ninput) != Ninput){
116 24c02865 2005-01-04 devnull fprint(2, "page: short read reading %s\n", argv[0]);
117 24c02865 2005-01-04 devnull wexits("read");
118 24c02865 2005-01-04 devnull }
119 24c02865 2005-01-04 devnull }else if(argc != 0){
120 24c02865 2005-01-04 devnull if(!(b = Bopen(argv[0], OREAD))) {
121 24c02865 2005-01-04 devnull fprint(2, "page: cannot open \"%s\"\n", argv[0]);
122 24c02865 2005-01-04 devnull wexits("open");
123 24c02865 2005-01-04 devnull }
124 24c02865 2005-01-04 devnull
125 24c02865 2005-01-04 devnull if(Bread(b, buf, Ninput) != Ninput) {
126 24c02865 2005-01-04 devnull fprint(2, "page: short read reading %s\n", argv[0]);
127 24c02865 2005-01-04 devnull wexits("read");
128 24c02865 2005-01-04 devnull }
129 24c02865 2005-01-04 devnull }else
130 24c02865 2005-01-04 devnull b = nil;
131 24c02865 2005-01-04 devnull
132 24c02865 2005-01-04 devnull buf[Ninput] = '\0';
133 24c02865 2005-01-04 devnull if(imagemode)
134 24c02865 2005-01-04 devnull doc = initgfx(nil, 0, nil, nil, 0);
135 24c02865 2005-01-04 devnull else if(strncmp((char*)buf, "%PDF-", 5) == 0)
136 24c02865 2005-01-04 devnull doc = initpdf(b, argc, argv, buf, Ninput);
137 24c02865 2005-01-04 devnull else if(strncmp((char*)buf, "\x04%!", 2) == 0)
138 24c02865 2005-01-04 devnull doc = initps(b, argc, argv, buf, Ninput);
139 24c02865 2005-01-04 devnull else if(buf[0] == '\x1B' && strstr((char*)buf, "@PJL"))
140 24c02865 2005-01-04 devnull doc = initps(b, argc, argv, buf, Ninput);
141 24c02865 2005-01-04 devnull else if(strncmp((char*)buf, "%!", 2) == 0)
142 24c02865 2005-01-04 devnull doc = initps(b, argc, argv, buf, Ninput);
143 24c02865 2005-01-04 devnull else if(strcmp((char*)buf, "\xF7\x02\x01\x83\x92\xC0\x1C;") == 0)
144 24c02865 2005-01-04 devnull doc = initdvi(b, argc, argv, buf, Ninput);
145 24c02865 2005-01-04 devnull else if(strncmp((char*)buf, "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1", 8) == 0)
146 24c02865 2005-01-04 devnull doc = initmsdoc(b, argc, argv, buf, Ninput);
147 24c02865 2005-01-04 devnull else if(strncmp((char*)buf, "x T ", 4) == 0)
148 24c02865 2005-01-04 devnull doc = inittroff(b, argc, argv, buf, Ninput);
149 24c02865 2005-01-04 devnull else {
150 24c02865 2005-01-04 devnull if(ppi != 100) {
151 24c02865 2005-01-04 devnull fprint(2, "page: you can't specify -p with graphic files\n");
152 24c02865 2005-01-04 devnull wexits("-p and graphics");
153 24c02865 2005-01-04 devnull }
154 24c02865 2005-01-04 devnull doc = initgfx(b, argc, argv, buf, Ninput);
155 24c02865 2005-01-04 devnull }
156 24c02865 2005-01-04 devnull
157 24c02865 2005-01-04 devnull if(doc == nil) {
158 24c02865 2005-01-04 devnull fprint(2, "page: error reading file: %r\n");
159 24c02865 2005-01-04 devnull wexits("document init");
160 24c02865 2005-01-04 devnull }
161 24c02865 2005-01-04 devnull
162 24c02865 2005-01-04 devnull if(doc->npage < 1 && !imagemode) {
163 24c02865 2005-01-04 devnull fprint(2, "page: no pages found?\n");
164 24c02865 2005-01-04 devnull wexits("pagecount");
165 24c02865 2005-01-04 devnull }
166 24c02865 2005-01-04 devnull
167 24c02865 2005-01-04 devnull if(reverse == -1) /* neither cmdline nor ps reader set it */
168 24c02865 2005-01-04 devnull reverse = 0;
169 24c02865 2005-01-04 devnull
170 24c02865 2005-01-04 devnull if(initdraw(0, 0, "page") < 0){
171 24c02865 2005-01-04 devnull fprint(2, "page: initdraw failed: %r\n");
172 24c02865 2005-01-04 devnull wexits("initdraw");
173 24c02865 2005-01-04 devnull }
174 24c02865 2005-01-04 devnull truecolor = screen->depth > 8;
175 24c02865 2005-01-04 devnull viewer(doc);
176 24c02865 2005-01-04 devnull wexits(0);
177 24c02865 2005-01-04 devnull }
178 24c02865 2005-01-04 devnull
179 24c02865 2005-01-04 devnull void
180 24c02865 2005-01-04 devnull wexits(char *s)
181 24c02865 2005-01-04 devnull {
182 24c02865 2005-01-04 devnull exits(s);
183 24c02865 2005-01-04 devnull }