59
59
if ((ncode = param_write_bool(plist, "ManualFeed", &lprn->ManualFeed)) < 0)
62
62
if ((ncode = param_write_bool(plist, "NegativePrint", &lprn->NegativePrint)) < 0)
65
65
if ((ncode = param_write_bool(plist, "Tumble", &lprn->Tumble)) < 0)
68
68
if ((ncode = param_write_bool(plist, "RITOff", &lprn->RITOff)) < 0)
71
71
if ((ncode = param_write_int(plist, "BlockLine", &lprn->BlockLine)) < 0)
74
74
if ((ncode = param_write_int(plist, "BlockWidth", &lprn->nBw)) < 0)
77
77
if ((ncode = param_write_int(plist, "BlockHeight", &lprn->nBh)) < 0)
80
80
if ((ncode = param_write_bool(plist, "ShowBubble", &lprn->ShowBubble)) < 0)
101
101
bool ShowBubble = lprn->ShowBubble;
103
103
if ((code = param_read_bool(plist,
104
(param_name = "ManualFeed"),
106
param_signal_error(plist, param_name, ecode = code);
109
if ((code = param_read_bool(plist,
110
(param_name = "NegativePrint"),
111
&NegativePrint)) < 0) {
112
param_signal_error(plist, param_name, ecode = code);
114
if ((code = param_read_bool(plist,
115
(param_name = "Tumble"),
117
param_signal_error(plist, param_name, ecode = code);
119
if ((code = param_read_bool(plist,
120
(param_name = "RITOff"),
122
param_signal_error(plist, param_name, ecode = code);
124
switch (code = param_read_int(plist,
125
(param_name = "BlockWidth"),
129
ecode = gs_error_rangecheck;
135
bwidthe:param_signal_error(plist, param_name, ecode = code);
140
switch (code = param_read_int(plist,
141
(param_name = "BlockLine"),
145
ecode = gs_error_rangecheck;
151
crowe:param_signal_error(plist, param_name, ecode = code);
156
switch (code = param_read_int(plist,
157
(param_name = "BlockHeight"),
161
ecode = gs_error_rangecheck;
167
bheighte:param_signal_error(plist, param_name, ecode = code);
172
if ((code = param_read_bool(plist,
173
(param_name = "ShowBubble"),
175
param_signal_error(plist, param_name, ecode = code);
104
(param_name = "ManualFeed"),
106
param_signal_error(plist, param_name, ecode = code);
109
if ((code = param_read_bool(plist,
110
(param_name = "NegativePrint"),
111
&NegativePrint)) < 0) {
112
param_signal_error(plist, param_name, ecode = code);
114
if ((code = param_read_bool(plist,
115
(param_name = "Tumble"),
117
param_signal_error(plist, param_name, ecode = code);
119
if ((code = param_read_bool(plist,
120
(param_name = "RITOff"),
122
param_signal_error(plist, param_name, ecode = code);
124
switch (code = param_read_int(plist,
125
(param_name = "BlockWidth"),
129
ecode = gs_error_rangecheck;
135
bwidthe:param_signal_error(plist, param_name, ecode = code);
140
switch (code = param_read_int(plist,
141
(param_name = "BlockLine"),
145
ecode = gs_error_rangecheck;
151
crowe:param_signal_error(plist, param_name, ecode = code);
156
switch (code = param_read_int(plist,
157
(param_name = "BlockHeight"),
161
ecode = gs_error_rangecheck;
167
bheighte:param_signal_error(plist, param_name, ecode = code);
172
if ((code = param_read_bool(plist,
173
(param_name = "ShowBubble"),
175
param_signal_error(plist, param_name, ecode = code);
179
179
code = gdev_prn_put_params(dev, plist);
183
183
lprn->ManualFeed = ManualFeed;
184
184
lprn->NegativePrint = NegativePrint;
220
220
maxY = lprn->BlockLine / lprn->nBh * lprn->nBh;
222
222
if (!(lprn->ImageBuf = gs_malloc(gs_lib_ctx_get_non_gc_memory_t(), bpl, maxY, "lprn_print_image(ImageBuf)")))
223
return_error(gs_error_VMerror);
223
return_error(gs_error_VMerror);
224
224
if (!(lprn->TmpBuf = gs_malloc(gs_lib_ctx_get_non_gc_memory_t(), bpl, maxY, "lprn_print_iamge(TmpBuf)")))
225
return_error(gs_error_VMerror);
225
return_error(gs_error_VMerror);
226
226
if (!(lprn->bubbleTbl = gs_malloc(gs_lib_ctx_get_non_gc_memory_t(), sizeof(Bubble *), maxBx, "lprn_print_image(bubbleTbl)")))
227
return_error(gs_error_VMerror);
227
return_error(gs_error_VMerror);
228
228
if (!(bubbleBuffer = gs_malloc(gs_lib_ctx_get_non_gc_memory_t(), sizeof(Bubble), maxBx, "lprn_print_image(bubbleBuffer)")))
229
return_error(gs_error_VMerror);
229
return_error(gs_error_VMerror);
231
231
for (i = 0; i < maxBx; i++)
232
lprn->bubbleTbl[i] = NULL;
232
lprn->bubbleTbl[i] = NULL;
233
233
bbtbl = bubbleBuffer;
235
235
for (i = 0; i < maxBx - 1; i++)
236
bbtbl[i].next = &bbtbl[i + 1];
236
bbtbl[i].next = &bbtbl[i + 1];
237
237
bbtbl[i].next = NULL;
238
238
lprn->freeBubbleList = &bbtbl[0];
240
240
for (y = 0; y < maxBy; y++) {
241
if (num_y_blocks + lprn->nBh > maxY) { /* bubble flush for next data */
242
rmin = start_y_block + lprn->nBh; /* process the data under rmin */
243
for (i = 0; i < maxBx; i++) {
244
bbl = lprn->bubbleTbl[i];
245
if (bbl != NULL && bbl->brect.p.y < rmin)
246
lprn_bubble_flush(pdev, fp, bbl);
248
num_y_blocks -= lprn->nBh; /* data if keeps in [r:r+h] */
249
start_y_block += lprn->nBh;
252
ri = start_y_block + num_y_blocks; /* read position */
253
read_y = ri % maxY; /* end of read position */
254
code = gdev_prn_copy_scan_lines(pdev, ri, lprn->ImageBuf + bpl * read_y, bpl * lprn->nBh);
258
num_y_blocks += lprn->nBh;
260
lprn_process_line(pdev, fp, start_y_block, num_y_blocks);
241
if (num_y_blocks + lprn->nBh > maxY) { /* bubble flush for next data */
242
rmin = start_y_block + lprn->nBh; /* process the data under rmin */
243
for (i = 0; i < maxBx; i++) {
244
bbl = lprn->bubbleTbl[i];
245
if (bbl != NULL && bbl->brect.p.y < rmin)
246
lprn_bubble_flush(pdev, fp, bbl);
248
num_y_blocks -= lprn->nBh; /* data if keeps in [r:r+h] */
249
start_y_block += lprn->nBh;
252
ri = start_y_block + num_y_blocks; /* read position */
253
read_y = ri % maxY; /* end of read position */
254
code = gdev_prn_copy_scan_lines(pdev, ri, lprn->ImageBuf + bpl * read_y, bpl * lprn->nBh);
258
num_y_blocks += lprn->nBh;
260
lprn_process_line(pdev, fp, start_y_block, num_y_blocks);
262
262
lprn_bubble_flush_all(pdev, fp); /* flush the rest of bubble */
305
304
for (bx = 0; bx < maxBx; bx++) {
306
bBlack = lprn_is_black(pdev, r, h, bx);
315
lprn_rect_add(pdev, fp, r, h, start, bx);
305
bBlack = lprn_is_black(pdev, r, h, bx);
314
lprn_rect_add(pdev, fp, r, h, start, bx);
320
lprn_rect_add(pdev, fp, r, h, start, bx - 1);
319
lprn_rect_add(pdev, fp, r, h, start, bx - 1);
323
322
/* Search the bx line to make output */
357
356
if ((bbl = lprn->bubbleTbl[start]) != NULL &&
358
bbl->brect.q.y == y0 - 1 &&
359
bbl->brect.p.x == x0 &&
360
bbl->brect.q.x == x1) {
357
bbl->brect.q.y == y0 - 1 &&
358
bbl->brect.p.x == x0 &&
359
bbl->brect.q.x == x1) {
363
for (i = start; i <= end; i++)
364
if (lprn->bubbleTbl[i] != NULL)
365
lprn_bubble_flush(pdev, fp, lprn->bubbleTbl[i]);
366
lprn_bubble_gen(pdev, x0, x1, y0, y1);
362
for (i = start; i <= end; i++)
363
if (lprn->bubbleTbl[i] != NULL)
364
lprn_bubble_flush(pdev, fp, lprn->bubbleTbl[i]);
365
lprn_bubble_gen(pdev, x0, x1, y0, y1);
411
410
int maxY = lprn->BlockLine / lprn->nBh * lprn->nBh;
413
412
for (i = 0; i < height; i++) {
414
p = lprn->ImageBuf + ((i + y) % maxY) * bpl;
415
for (j = 0; j < width / 8; j++) {
416
if (lprn->NegativePrint)
417
*(lprn->TmpBuf + i * width / 8 + j) = ~*(p + j + bbl->brect.p.x);
419
*(lprn->TmpBuf + i * width / 8 + j) = *(p + j + bbl->brect.p.x);
413
p = lprn->ImageBuf + ((i + y) % maxY) * bpl;
414
for (j = 0; j < width / 8; j++) {
415
if (lprn->NegativePrint)
416
*(lprn->TmpBuf + i * width / 8 + j) = ~*(p + j + bbl->brect.p.x);
418
*(lprn->TmpBuf + i * width / 8 + j) = *(p + j + bbl->brect.p.x);
423
422
(*lprn->image_out) (pdev, fp, x, y, width, height);
425
424
/* Initialize bubbleTbl */
426
425
for (bx = bx0; bx <= bx1; bx++) {
427
assert(lprn->bubbleTbl[bx] == bbl);
428
lprn->bubbleTbl[bx] = NULL;
426
assert(lprn->bubbleTbl[bx] == bbl);
427
lprn->bubbleTbl[bx] = NULL;
431
430
bbl->next = lprn->freeBubbleList;