ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/meta/imagew.c
Revision: 1.1
Committed: Sat Feb 22 02:07:26 2003 UTC (21 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R5
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2     static const char RCSid[] = "$Id$";
3     #endif
4     /*
5     * Program to print meta-files on a dot-matrix printer
6     *
7     * cc -o image image.c mplot.o plot.o mfio.o syscalls.o palloc.o misc.o
8     *
9     * Apple Imagewriter
10     */
11    
12    
13     #define MAXALLOC 5000
14    
15     #define DXSIZE 576 /* x resolution */
16    
17     #define DYSIZE 576 /* y resolution */
18    
19     #define LINWIDT DXSIZE /* line width */
20    
21     #define LINHITE 8 /* line height */
22    
23     #define NLINES (DYSIZE/LINHITE)
24    
25     #define CHARWIDTH 8
26    
27     #define PNORM "\033n\017\033\""
28    
29     #define PCLEAR "\033c"
30    
31     #define PINIT "\033>\033n\033T16"
32    
33     #define LFNORM "\033f"
34    
35     #define LFREV "\033r"
36    
37     #define DBLON "\033!"
38    
39     #define DBLOFF ""
40    
41     #define PTAB "\033F"
42    
43     #define OUTPUT "\033g"
44    
45     #define XCOM "pexpand +vtOCIps %s | psort -Y +x"
46    
47    
48    
49    
50     #include "meta.h"
51    
52     #include "plot.h"
53    
54     #include "span.h"
55    
56    
57    
58    
59     char *progname;
60    
61     struct span outspan;
62    
63     int dxsize = DXSIZE, dysize = DYSIZE,
64     linwidt = LINWIDT, linhite = LINHITE,
65     nrows = (LINHITE-1)/8+1;
66    
67     int maxalloc = MAXALLOC;
68    
69     int spanmin = 0, spanmax = LINWIDT-1;
70    
71     int charwidth = CHARWIDTH;
72    
73     static char chrtype[16][5] = {
74     "\033N",
75     "\033N\016",
76     "\033N",
77     "\033N\016",
78     "\033E",
79     "\033E\016",
80     "\033E",
81     "\033E\016",
82     "\033q",
83     "\033q\016",
84     "\033q",
85     "\033q\016",
86     "\033Q",
87     "\033Q\016",
88     "\033Q",
89     "\033Q\016"
90     };
91    
92     static int lineno = 0;
93    
94     static short condonly = FALSE,
95     conditioned = FALSE;
96    
97    
98     main(argc, argv)
99    
100     int argc;
101     char **argv;
102    
103     {
104     FILE *fp;
105     #ifdef UNIX
106     FILE *popen();
107     #endif
108     char comargs[200], command[300];
109    
110     #ifdef CPM
111     fixargs("imagew", &argc, &argv);
112     #endif
113    
114     progname = *argv++;
115     argc--;
116    
117     condonly = FALSE;
118     #ifdef UNIX
119     conditioned = FALSE;
120     #else
121     conditioned = TRUE;
122     #endif
123    
124     while (argc && **argv == '-') {
125     switch (*(*argv+1)) {
126     #ifdef UNIX
127     case 'c':
128     condonly = TRUE;
129     break;
130     case 'r':
131     conditioned = TRUE;
132     break;
133     #endif
134     default:
135     error(WARNING, "unknown option");
136     break;
137     }
138     argv++;
139     argc--;
140     }
141    
142     if (conditioned) {
143     pinit();
144     if (argc)
145     while (argc) {
146     fp = efopen(*argv, "r");
147     plot(fp);
148     fclose(fp);
149     argv++;
150     argc--;
151     }
152     else
153     plot(stdin);
154     if (lineno > 0)
155     nextpage();
156     puninit();
157     } else {
158     comargs[0] = '\0';
159     while (argc) {
160     strcat(comargs, " ");
161     strcat(comargs, *argv);
162     argv++;
163     argc--;
164     }
165     sprintf(command, XCOM, comargs);
166     #ifdef UNIX
167     if (condonly)
168     return(system(command));
169     else {
170     pinit();
171     if ((fp = popen(command, "r")) == NULL)
172     error(SYSTEM, "cannot execute input filter");
173     plot(fp);
174     pclose(fp);
175     if (lineno > 0)
176     nextpage();
177     puninit();
178     }
179     #endif
180     }
181    
182     return(0);
183     }
184    
185    
186    
187    
188    
189    
190     thispage() /* rewind and initialize current page */
191    
192     {
193    
194     if (lineno != 0) {
195     fputs(LFREV, stdout);
196     while (lineno) {
197     putc('\n', stdout);
198     lineno--;
199     }
200     fputs(LFNORM, stdout);
201     }
202    
203     }
204    
205    
206    
207    
208     nextpage() /* advance to next page */
209    
210     {
211    
212     fputs("\f\r", stdout);
213    
214     lineno = 0;
215    
216     }
217    
218    
219    
220     contpage() /* continue on this page */
221    
222     {
223    
224     while (lineno++ < NLINES)
225     putc('\n', stdout);
226    
227     lineno = 0;
228    
229     }
230    
231    
232    
233     printspan() /* output span to printer */
234    
235     {
236     register int i;
237    
238     if (spanmin <= spanmax) {
239    
240     fprintf(stdout, "%s%4d", PTAB, spanmin);
241     fprintf(stdout, "%s%3d", OUTPUT, (spanmax-spanmin)/8 + 1);
242    
243     for (i = spanmin; i <= spanmax; i++)
244     putc(flipbyte(outspan.cols[i]), stdout);
245    
246     i = 7 - (spanmax-spanmin)%8;
247     while (i--)
248     putc('\0', stdout);
249    
250     putc('\r', stdout);
251     }
252    
253     putc('\n', stdout);
254     lineno++;
255    
256     }
257    
258    
259    
260    
261     int
262     flipbyte(b) /* flip an 8-bit byte end-to-end */
263    
264     register int b;
265    
266     {
267     register int i, a = 0;
268    
269     if (b)
270     for (i = 0; i < 8; i++) {
271     a <<= 1;
272     a |= b & 01;
273     b >>= 1;
274     }
275    
276     return(a);
277     }
278    
279    
280    
281    
282     printstr(p) /* output a string to the printer */
283    
284     PRIMITIVE *p;
285    
286     {
287    
288     fprintf(stdout, "%s%4d", PTAB, CONV(p->xy[XMN], dxsize));
289    
290     if (p->arg0 & 0100) /* double strike */
291     fputs(DBLON, stdout);
292     else
293     fputs(DBLOFF, stdout);
294    
295     fputs(chrtype[(p->arg0 >> 2) & 017], stdout);
296     fputs(p->args, stdout);
297     fputs(PNORM, stdout);
298     putc('\r', stdout);
299    
300     }
301    
302    
303    
304     pinit() /* initialize printer for output */
305     {
306     pclear();
307     /* get eighth bit */
308     fputs("\033Z", stdout);
309     putc('\0', stdout);
310     putc(' ', stdout);
311     fputs(PINIT, stdout);
312     }
313    
314    
315     puninit() /* uninitialize printer */
316     {
317     pclear();
318     }
319    
320    
321     pclear() /* clear printer and sleep */
322    
323     {
324     register int i, j;
325    
326     fputs(PCLEAR, stdout);
327     fflush(stdout);
328     for (i = 0; i < 1000; i++)
329     for (j = 0; j < 500; j++)
330     ;
331    
332     }