Blame


1 61f5c35c 2004-05-15 devnull #include <u.h>
2 61f5c35c 2004-05-15 devnull #include <libc.h>
3 61f5c35c 2004-05-15 devnull #include <bio.h>
4 61f5c35c 2004-05-15 devnull #include <stdio.h>
5 61f5c35c 2004-05-15 devnull #include "common.h"
6 61f5c35c 2004-05-15 devnull #include "tr2post.h"
7 61f5c35c 2004-05-15 devnull #include "comments.h"
8 61f5c35c 2004-05-15 devnull #include "path.h"
9 61f5c35c 2004-05-15 devnull
10 61f5c35c 2004-05-15 devnull int formsperpage = 1;
11 61f5c35c 2004-05-15 devnull int picflag = 1;
12 61f5c35c 2004-05-15 devnull double aspectratio = 1.0;
13 61f5c35c 2004-05-15 devnull int copies = 1;
14 61f5c35c 2004-05-15 devnull int landscape = 0;
15 61f5c35c 2004-05-15 devnull double magnification = 1.0;
16 61f5c35c 2004-05-15 devnull int linesperpage = 66;
17 61f5c35c 2004-05-15 devnull int pointsize = 10;
18 61f5c35c 2004-05-15 devnull double xoffset = .25;
19 61f5c35c 2004-05-15 devnull double yoffset = .25;
20 61f5c35c 2004-05-15 devnull char *passthrough = 0;
21 61f5c35c 2004-05-15 devnull
22 61f5c35c 2004-05-15 devnull Biobuf binp, *bstdout, bstderr;
23 61f5c35c 2004-05-15 devnull Biobuf *Bstdin, *Bstdout, *Bstderr;
24 61f5c35c 2004-05-15 devnull int debug = 0;
25 61f5c35c 2004-05-15 devnull
26 e8fb1d3e 2004-05-17 devnull #ifndef MAXPATHLEN
27 e8fb1d3e 2004-05-17 devnull #define MAXPATHLEN 255
28 e8fb1d3e 2004-05-17 devnull #endif
29 e8fb1d3e 2004-05-17 devnull
30 b855148c 2004-05-16 devnull char tmpfilename[MAXPATHLEN+1];
31 61f5c35c 2004-05-15 devnull char copybuf[BUFSIZ];
32 61f5c35c 2004-05-15 devnull
33 61f5c35c 2004-05-15 devnull
34 61f5c35c 2004-05-15 devnull struct charent **build_char_list = 0;
35 61f5c35c 2004-05-15 devnull int build_char_cnt = 0;
36 61f5c35c 2004-05-15 devnull
37 61f5c35c 2004-05-15 devnull void
38 61f5c35c 2004-05-15 devnull prologues(void) {
39 61f5c35c 2004-05-15 devnull int i;
40 61f5c35c 2004-05-15 devnull char charlibname[MAXTOKENSIZE];
41 61f5c35c 2004-05-15 devnull
42 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s", CONFORMING);
43 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s %s\n", VERSION, PROGRAMVERSION);
44 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s %s\n", DOCUMENTFONTS, ATEND);
45 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s %s\n", PAGES, ATEND);
46 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s", ENDCOMMENTS);
47 61f5c35c 2004-05-15 devnull
48 e8fb1d3e 2004-05-17 devnull if (cat(unsharp(DPOST))) {
49 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "can't read %s\n", DPOST);
50 61f5c35c 2004-05-15 devnull exits("dpost prologue");
51 61f5c35c 2004-05-15 devnull }
52 61f5c35c 2004-05-15 devnull
53 61f5c35c 2004-05-15 devnull if (drawflag) {
54 e8fb1d3e 2004-05-17 devnull if (cat(unsharp(DRAW))) {
55 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "can't read %s\n", DRAW);
56 61f5c35c 2004-05-15 devnull exits("draw prologue");
57 61f5c35c 2004-05-15 devnull }
58 61f5c35c 2004-05-15 devnull }
59 61f5c35c 2004-05-15 devnull
60 61f5c35c 2004-05-15 devnull if (DOROUND)
61 e8fb1d3e 2004-05-17 devnull cat(unsharp(ROUNDPAGE));
62 61f5c35c 2004-05-15 devnull
63 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s", ENDPROLOG);
64 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s", BEGINSETUP);
65 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "mark\n");
66 61f5c35c 2004-05-15 devnull if (formsperpage > 1) {
67 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s %d\n", FORMSPERPAGE, formsperpage);
68 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "/formsperpage %d def\n", formsperpage);
69 61f5c35c 2004-05-15 devnull }
70 61f5c35c 2004-05-15 devnull if (aspectratio != 1) Bprint(Bstdout, "/aspectratio %g def\n", aspectratio);
71 61f5c35c 2004-05-15 devnull if (copies != 1) Bprint(Bstdout, "/#copies %d store\n", copies);
72 61f5c35c 2004-05-15 devnull if (landscape) Bprint(Bstdout, "/landscape true def\n");
73 61f5c35c 2004-05-15 devnull if (magnification != 1) Bprint(Bstdout, "/magnification %g def\n", magnification);
74 61f5c35c 2004-05-15 devnull if (pointsize != 10) Bprint(Bstdout, "/pointsize %d def\n", pointsize);
75 61f5c35c 2004-05-15 devnull if (xoffset != .25) Bprint(Bstdout, "/xoffset %g def\n", xoffset);
76 61f5c35c 2004-05-15 devnull if (yoffset != .25) Bprint(Bstdout, "/yoffset %g def\n", yoffset);
77 e8fb1d3e 2004-05-17 devnull cat(unsharp(ENCODINGDIR"/Latin1.enc"));
78 61f5c35c 2004-05-15 devnull if (passthrough != 0) Bprint(Bstdout, "%s\n", passthrough);
79 61f5c35c 2004-05-15 devnull
80 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "setup\n");
81 61f5c35c 2004-05-15 devnull if (formsperpage > 1) {
82 e8fb1d3e 2004-05-17 devnull cat(unsharp(FORMFILE));
83 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%d setupforms \n", formsperpage);
84 61f5c35c 2004-05-15 devnull }
85 61f5c35c 2004-05-15 devnull /* output Build character info from charlib if necessary. */
86 61f5c35c 2004-05-15 devnull
87 61f5c35c 2004-05-15 devnull for (i=0; i<build_char_cnt; i++) {
88 61f5c35c 2004-05-15 devnull sprint(charlibname, "%s/%s", CHARLIB, build_char_list[i]->name);
89 e8fb1d3e 2004-05-17 devnull if (cat(unsharp(charlibname)))
90 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "cannot open %s\n", charlibname);
91 61f5c35c 2004-05-15 devnull }
92 61f5c35c 2004-05-15 devnull
93 61f5c35c 2004-05-15 devnull Bprint(Bstdout, "%s", ENDSETUP);
94 61f5c35c 2004-05-15 devnull }
95 61f5c35c 2004-05-15 devnull
96 61f5c35c 2004-05-15 devnull void
97 61f5c35c 2004-05-15 devnull cleanup(void) {
98 61f5c35c 2004-05-15 devnull remove(tmpfilename);
99 61f5c35c 2004-05-15 devnull }
100 61f5c35c 2004-05-15 devnull
101 e8fb1d3e 2004-05-17 devnull int
102 61f5c35c 2004-05-15 devnull main(int argc, char *argv[]) {
103 b855148c 2004-05-16 devnull Biobuf btmp;
104 61f5c35c 2004-05-15 devnull Biobuf *binp;
105 e8fb1d3e 2004-05-17 devnull Biobuf *Binp;
106 b855148c 2004-05-16 devnull int i, tot, ifd, fd;
107 61f5c35c 2004-05-15 devnull char *t;
108 61f5c35c 2004-05-15 devnull
109 61f5c35c 2004-05-15 devnull programname = argv[0];
110 61f5c35c 2004-05-15 devnull if (Binit(&bstderr, 2, OWRITE) == Beof) {
111 61f5c35c 2004-05-15 devnull exits("Binit");
112 61f5c35c 2004-05-15 devnull }
113 b855148c 2004-05-16 devnull Bstderr = &bstderr; /* &bstderr.Biobufhdr; */
114 61f5c35c 2004-05-15 devnull
115 b855148c 2004-05-16 devnull bstdout = &btmp;
116 b855148c 2004-05-16 devnull fd = safe_tmpnam(tmpfilename);
117 b855148c 2004-05-16 devnull if ((Binit(bstdout, fd, OWRITE)) == Beof) {
118 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "cannot open temporary file %s\n", tmpfilename);
119 61f5c35c 2004-05-15 devnull exits("Bopen");
120 61f5c35c 2004-05-15 devnull }
121 61f5c35c 2004-05-15 devnull atexit(cleanup);
122 b855148c 2004-05-16 devnull Bstdout = bstdout; /* &bstdout->Biobufhdr; */
123 61f5c35c 2004-05-15 devnull
124 61f5c35c 2004-05-15 devnull ARGBEGIN{
125 61f5c35c 2004-05-15 devnull case 'a': /* aspect ratio */
126 61f5c35c 2004-05-15 devnull aspectratio = atof(ARGF());
127 61f5c35c 2004-05-15 devnull break;
128 61f5c35c 2004-05-15 devnull case 'c': /* copies */
129 61f5c35c 2004-05-15 devnull copies = atoi(ARGF());
130 61f5c35c 2004-05-15 devnull break;
131 61f5c35c 2004-05-15 devnull case 'd':
132 61f5c35c 2004-05-15 devnull debug = 1;
133 61f5c35c 2004-05-15 devnull break;
134 61f5c35c 2004-05-15 devnull case 'm': /* magnification */
135 61f5c35c 2004-05-15 devnull magnification = atof(ARGF());
136 61f5c35c 2004-05-15 devnull break;
137 61f5c35c 2004-05-15 devnull case 'n': /* forms per page */
138 61f5c35c 2004-05-15 devnull formsperpage = atoi(ARGF());
139 61f5c35c 2004-05-15 devnull break;
140 61f5c35c 2004-05-15 devnull case 'o': /* output page list */
141 61f5c35c 2004-05-15 devnull pagelist(ARGF());
142 61f5c35c 2004-05-15 devnull break;
143 61f5c35c 2004-05-15 devnull case 'p': /* landscape or portrait mode */
144 61f5c35c 2004-05-15 devnull if ( ARGF()[0] == 'l' )
145 61f5c35c 2004-05-15 devnull landscape = 1;
146 61f5c35c 2004-05-15 devnull else
147 61f5c35c 2004-05-15 devnull landscape = 0;
148 61f5c35c 2004-05-15 devnull break;
149 61f5c35c 2004-05-15 devnull case 'x': /* shift things horizontally */
150 61f5c35c 2004-05-15 devnull xoffset = atof(ARGF());
151 61f5c35c 2004-05-15 devnull break;
152 61f5c35c 2004-05-15 devnull case 'y': /* and vertically on the page */
153 61f5c35c 2004-05-15 devnull yoffset = atof(ARGF());
154 61f5c35c 2004-05-15 devnull break;
155 61f5c35c 2004-05-15 devnull case 'P': /* PostScript pass through */
156 61f5c35c 2004-05-15 devnull t = ARGF();
157 61f5c35c 2004-05-15 devnull i = strlen(t) + 1;
158 61f5c35c 2004-05-15 devnull passthrough = malloc(i);
159 61f5c35c 2004-05-15 devnull if (passthrough == 0) {
160 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "cannot allocate memory for argument string\n");
161 61f5c35c 2004-05-15 devnull exits("malloc");
162 61f5c35c 2004-05-15 devnull }
163 61f5c35c 2004-05-15 devnull strncpy(passthrough, t, i);
164 61f5c35c 2004-05-15 devnull break;
165 61f5c35c 2004-05-15 devnull default: /* don't know what to do for ch */
166 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "unknown option %C\n", ARGC());
167 61f5c35c 2004-05-15 devnull break;
168 61f5c35c 2004-05-15 devnull }ARGEND;
169 61f5c35c 2004-05-15 devnull readDESC();
170 61f5c35c 2004-05-15 devnull if (argc == 0) {
171 61f5c35c 2004-05-15 devnull if ((binp = (Biobuf *)malloc(sizeof(Biobuf))) < (Biobuf *)0) {
172 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "malloc failed.\n");
173 61f5c35c 2004-05-15 devnull exits("malloc");
174 61f5c35c 2004-05-15 devnull }
175 61f5c35c 2004-05-15 devnull if (Binit(binp, 0, OREAD) == Beof) {
176 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "Binit of <stdin> failed.\n");
177 61f5c35c 2004-05-15 devnull exits("Binit");
178 61f5c35c 2004-05-15 devnull }
179 b855148c 2004-05-16 devnull Binp = binp; /* &(binp->Biobufhdr); */
180 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "using standard input\n");
181 61f5c35c 2004-05-15 devnull conv(Binp);
182 61f5c35c 2004-05-15 devnull Bterm(Binp);
183 61f5c35c 2004-05-15 devnull }
184 61f5c35c 2004-05-15 devnull for (i=0; i<argc; i++) {
185 61f5c35c 2004-05-15 devnull if ((binp=Bopen(argv[i], OREAD)) == 0) {
186 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "cannot open file %s\n", argv[i]);
187 61f5c35c 2004-05-15 devnull continue;
188 61f5c35c 2004-05-15 devnull }
189 b855148c 2004-05-16 devnull Binp = binp; /* &(binp->Biobufhdr); */
190 61f5c35c 2004-05-15 devnull inputfilename = argv[i];
191 61f5c35c 2004-05-15 devnull conv(Binp);
192 61f5c35c 2004-05-15 devnull Bterm(Binp);
193 61f5c35c 2004-05-15 devnull }
194 61f5c35c 2004-05-15 devnull Bterm(Bstdout);
195 61f5c35c 2004-05-15 devnull
196 61f5c35c 2004-05-15 devnull if ((ifd=open(tmpfilename, OREAD)) < 0) {
197 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "open of %s failed.\n", tmpfilename);
198 61f5c35c 2004-05-15 devnull exits("open");
199 61f5c35c 2004-05-15 devnull }
200 61f5c35c 2004-05-15 devnull
201 61f5c35c 2004-05-15 devnull bstdout = galloc(0, sizeof(Biobuf), "bstdout");
202 61f5c35c 2004-05-15 devnull if (Binit(bstdout, 1, OWRITE) == Beof) {
203 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "Binit of <stdout> failed.\n");
204 61f5c35c 2004-05-15 devnull exits("Binit");
205 61f5c35c 2004-05-15 devnull }
206 b855148c 2004-05-16 devnull Bstdout = bstdout; /* &(bstdout->Biobufhdr); */
207 61f5c35c 2004-05-15 devnull prologues();
208 61f5c35c 2004-05-15 devnull Bflush(Bstdout);
209 61f5c35c 2004-05-15 devnull tot = 0; i = 0;
210 61f5c35c 2004-05-15 devnull while ((i=read(ifd, copybuf, BUFSIZ)) > 0) {
211 61f5c35c 2004-05-15 devnull if (write(1, copybuf, i) != i) {
212 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "write error on copying from temp file.\n");
213 61f5c35c 2004-05-15 devnull exits("write");
214 61f5c35c 2004-05-15 devnull }
215 61f5c35c 2004-05-15 devnull tot += i;
216 61f5c35c 2004-05-15 devnull }
217 61f5c35c 2004-05-15 devnull if (debug) Bprint(Bstderr, "copied %d bytes to final output i=%d\n", tot, i);
218 61f5c35c 2004-05-15 devnull if (i < 0) {
219 61f5c35c 2004-05-15 devnull Bprint(Bstderr, "read error on copying from temp file.\n");
220 61f5c35c 2004-05-15 devnull exits("read");
221 61f5c35c 2004-05-15 devnull }
222 61f5c35c 2004-05-15 devnull finish();
223 61f5c35c 2004-05-15 devnull
224 61f5c35c 2004-05-15 devnull exits("");
225 e8fb1d3e 2004-05-17 devnull return 0;
226 61f5c35c 2004-05-15 devnull }