24
24
static dev_proc_print_page (necp6_print_page);
25
25
const gx_device_printer far_data gs_necp6_device =
26
26
prn_device (prn_std_procs, "necp6",
27
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
29
0, 0, 0.5, 0, /* margins */
27
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
29
0, 0, 0.5, 0, /* margins */
33
32
/* Driver for Epson LQ850 */
34
33
/* I've tested this driver on a BJ300 with LQ850 emulation and there it produce correct 360x360dpi output. */
35
34
static dev_proc_print_page (lq850_print_page);
36
35
const gx_device_printer gs_lq850_device =
37
36
prn_device (prn_std_procs, "lq850",
38
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
40
0, 0, 0.5, 0, /* margins */
37
DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
39
0, 0, 0.5, 0, /* margins */
43
42
/* ------ Internal routines ------ */
93
92
/* Copy 1 scan line and test for all zero. */
94
93
gdev_prn_copy_scan_lines (pdev, lnum, in, line_size);
96
&& !memcmp ((char *) in, (char *) in + 1, line_size - 1))
95
&& !memcmp ((char *) in, (char *) in + 1, line_size - 1))
103
102
/* Vertical tab to the appropriate position. */
104
103
while ((skip >> 1) > 255)
106
fputs ("\033J\377", prn_stream);
105
fputs ("\033J\377", prn_stream);
113
fprintf (prn_stream, "\033J%c", skip >> 1);
115
fputc ('\n', prn_stream);
112
fprintf (prn_stream, "\033J%c", skip >> 1);
114
fputc ('\n', prn_stream);
118
117
/* Copy the rest of the scan lines. */
121
inp = in + line_size;
122
for (lcnt = 1; lcnt < 24; lcnt++, inp += line_size)
123
if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2, inp,
126
memset (inp, 0, (24 - lcnt) * line_size);
129
inp = in + line_size * 24;
130
for (lcnt = 0; lcnt < 24; lcnt++, inp += line_size)
131
if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2 + 1, inp,
134
memset (inp, 0, (24 - lcnt) * line_size);
120
inp = in + line_size;
121
for (lcnt = 1; lcnt < 24; lcnt++, inp += line_size)
122
if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2, inp,
125
memset (inp, 0, (24 - lcnt) * line_size);
128
inp = in + line_size * 24;
129
for (lcnt = 0; lcnt < 24; lcnt++, inp += line_size)
130
if (!gdev_prn_copy_scan_lines (pdev, lnum + lcnt * 2 + 1, inp,
133
memset (inp, 0, (24 - lcnt) * line_size);
140
lcnt = 1 + gdev_prn_copy_scan_lines (pdev, lnum + 1, in + line_size,
141
in_size - line_size);
143
/* Pad with lines of zeros. */
144
memset (in + lcnt * line_size, 0, in_size - lcnt * line_size);
139
lcnt = 1 + gdev_prn_copy_scan_lines (pdev, lnum + 1, in + line_size,
140
in_size - line_size);
142
/* Pad with lines of zeros. */
143
memset (in + lcnt * line_size, 0, in_size - lcnt * line_size);
147
146
for (ypass = 0; ypass < y_passes; ypass++)
152
inp += line_size * 24;
153
in_end = inp + line_size;
155
for (; inp < in_end; inp++, out_end += 24)
157
memflip8x8 (inp, line_size, out_end, 3);
158
memflip8x8 (inp + line_size * 8, line_size, out_end + 1, 3);
159
memflip8x8 (inp + line_size * 16, line_size, out_end + 2, 3);
161
/* Remove trailing 0s. */
162
while (out_end - 3 >= out && out_end[-1] == 0
163
&& out_end[-2] == 0 && out_end[-3] == 0)
166
for (out_blk = outp = out; outp < out_end;)
168
/* Skip a run of leading 0s. */
169
/* At least 10 are needed to make tabbing worth it. */
171
if (outp[0] == 0 && outp + 12 <= out_end
172
&& outp[1] == 0 && outp[2] == 0
173
&& outp[3] == 0 && outp[4] == 0 && outp[5] == 0
174
&& outp[6] == 0 && outp[7] == 0 && outp[8] == 0
175
&& outp[9] == 0 && outp[10] == 0 && outp[11] == 0)
181
while (outp + 3 <= out_end
182
&& outp[0] == 0 && outp[1] == 0 && outp[2] == 0)
184
tpos = (outp - out) / bytes_per_space;
185
newp = out + tpos * bytes_per_space;
188
/* Output preceding bit data. */
189
/* only false at beginning of line */
193
dot24_improve_bitmap (out_blk, (int) (zp - out_blk));
194
dot24_output_run (out_blk, (int) (zp - out_blk),
197
/* Tab over to the appropriate position. */
198
fprintf (prn_stream, "\033D%c%c\t", tpos, 0);
199
out_blk = outp = newp;
208
dot24_improve_bitmap (out_blk, (int) (outp - out_blk));
209
dot24_output_run (out_blk, (int) (outp - out_blk), x_high,
213
fputc ('\r', prn_stream);
214
if (ypass < y_passes - 1)
215
fputc ('\n', prn_stream);
151
inp += line_size * 24;
152
in_end = inp + line_size;
154
for (; inp < in_end; inp++, out_end += 24)
156
memflip8x8 (inp, line_size, out_end, 3);
157
memflip8x8 (inp + line_size * 8, line_size, out_end + 1, 3);
158
memflip8x8 (inp + line_size * 16, line_size, out_end + 2, 3);
160
/* Remove trailing 0s. */
161
while (out_end - 3 >= out && out_end[-1] == 0
162
&& out_end[-2] == 0 && out_end[-3] == 0)
165
for (out_blk = outp = out; outp < out_end;)
167
/* Skip a run of leading 0s. */
168
/* At least 10 are needed to make tabbing worth it. */
170
if (outp[0] == 0 && outp + 12 <= out_end
171
&& outp[1] == 0 && outp[2] == 0
172
&& outp[3] == 0 && outp[4] == 0 && outp[5] == 0
173
&& outp[6] == 0 && outp[7] == 0 && outp[8] == 0
174
&& outp[9] == 0 && outp[10] == 0 && outp[11] == 0)
180
while (outp + 3 <= out_end
181
&& outp[0] == 0 && outp[1] == 0 && outp[2] == 0)
183
tpos = (outp - out) / bytes_per_space;
184
newp = out + tpos * bytes_per_space;
187
/* Output preceding bit data. */
188
/* only false at beginning of line */
192
dot24_improve_bitmap (out_blk, (int) (zp - out_blk));
193
dot24_output_run (out_blk, (int) (zp - out_blk),
196
/* Tab over to the appropriate position. */
197
fprintf (prn_stream, "\033D%c%c\t", tpos, 0);
198
out_blk = outp = newp;
207
dot24_improve_bitmap (out_blk, (int) (outp - out_blk));
208
dot24_output_run (out_blk, (int) (outp - out_blk), x_high,
212
fputc ('\r', prn_stream);
213
if (ypass < y_passes - 1)
214
fputc ('\n', prn_stream);
217
216
skip = 48 - y_high;
218
217
lnum += bits_per_column;