|
|
1.1 root 1: /*
2: * lpr/print.c
3: */
4:
5: #include <stdio.h>
6:
7: #define LINESIZ 512
8:
9: #define lputc(c) putc((c), lp)
10:
11: static col, /* current print position */
12: endcol; /* leftmost unused position */
13: static char line0[LINESIZ],
14: line1[LINESIZ];
15:
16: extern int printing;
17: extern FILE *lp;
18:
19: print( file)
20: char *file;
21: {
22: register FILE *f;
23: register c;
24:
25: f = fopen( file, "r");
26: if (f == NULL)
27: return (1);
28:
29: while ((c=getline( f)) && printing>0) {
30: putline( line1);
31: putline( line0);
32: lputc( c);
33: }
34:
35: fclose( f);
36: return (0);
37: }
38:
39:
40:
41: getline( f)
42: register FILE *f;
43: {
44: register c;
45:
46: col = 0;
47: endcol = 0;
48:
49: while ((c=getc( f)) != EOF)
50: switch (c) {
51: case '\n':
52: case '\f':
53: line0[col] = '\0';
54: line1[col] = '\0';
55: return (c);
56: case '\b':
57: if (col)
58: --col;
59: break;
60: case '\r':
61: col = 0;
62: break;
63: case '\t':
64: do {
65: store( ' ');
66: } while (col & 7);
67: break;
68: default:
69: store( c);
70: }
71:
72: return (0);
73: }
74:
75: store( c)
76: {
77:
78: if (col < LINESIZ-1)
79: if (col >= endcol) {
80: line0[col] = c;
81: line1[col] = ' ';
82: ++endcol;
83: }
84: else
85: line1[col] = c;
86: ++col;
87: }
88:
89: putline( linep)
90: register char *linep;
91: {
92: register c,
93: xcol;
94:
95: col = 0;
96: xcol = 0;
97:
98: for (; ; )
99: switch (c = *linep++) {
100: case '\0':
101: if (col)
102: lputc( '\r');
103: return;
104: default:
105: while (col < xcol) {
106: ++col;
107: lputc( ' ');
108: }
109: lputc( c);
110: ++col;
111: case ' ':
112: ++xcol;
113: }
114: }
115:
116: /* end of lpr/print.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.