28 Paper(
unsigned x,
unsigned y,
double dotSizeX,
double dotSizeY);
31 std::string
save()
const;
33 void plot(
double x,
double y);
36 byte& dot(
unsigned x,
unsigned y);
39 std::vector<int> table;
51 : toPrint(0), prevStrobe(true)
66 if (!strobe && prevStrobe) {
122 : motherBoard(motherBoard_)
123 , graphicsHiLo(graphicsHiLo_)
126 if (info.counter == 0) {
130 "resolution of the output image of emulated dot matrix printer in DPI",
173 assert(info.counter);
175 assert(dpiSetting == info.stuff);
177 if (info.counter == 0) {
179 info.stuff =
nullptr;
234 for (
int i = 0; i < 9; ++i) {
235 if (pattern & (1 << i)) {
246 double destHeight = pixelSizeY * 9.0;
279 double dpi = dpiSetting->
getValue();
280 unsigned paperSizeX = unsigned((210 / 25.4) * dpi);
281 unsigned paperSizeY = unsigned((297 / 25.4) * dpi);
283 unsigned dotsX, dotsY;
288 paper = make_unique<Paper>(paperSizeX, paperSizeY,
298 string filename = paper->save();
300 "Printed to " + filename);
314 static unsigned compress9(
unsigned a)
317 for (
unsigned i = 0; i < 9; ++i) {
319 result |= 1 << (i / 2);
331 byte attribute = charBitmap[0];
332 unsigned start = (attribute >> 4) & 0x07;
333 unsigned end = attribute & 0x0f;
334 unsigned topBits = attribute >> 7;
358 for (
unsigned i = start; i < end; ++i) {
359 unsigned charBits = unsigned(charBitmap[i + 1]) << topBits;
365 charBits = compress9(charBits);
369 for (
int b = 0; b <= (
bold?1:0); ++b) {
372 plot9Dots(destX, destY + y * dblStrikeOffset, charBits);
376 hPos += headRelative;
385 static const byte MSXFontRaw[256 * 8] = {
386 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
387 0x3C, 0x42, 0xA5, 0x81, 0xA5, 0x99, 0x42, 0x3C,
388 0x3C, 0x7E, 0xDB, 0xFF, 0xFF, 0xDB, 0x66, 0x3C,
389 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
390 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,
391 0x10, 0x38, 0x54, 0xFE, 0x54, 0x10, 0x38, 0x00,
392 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x10, 0x38, 0x00,
393 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00,
394 0xFF, 0xFF, 0xFF, 0xE7, 0xE7, 0xFF, 0xFF, 0xFF,
395 0x38, 0x44, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00,
396 0xC7, 0xBB, 0x7D, 0x7D, 0x7D, 0xBB, 0xC7, 0xFF,
397 0x0F, 0x03, 0x05, 0x79, 0x88, 0x88, 0x88, 0x70,
398 0x38, 0x44, 0x44, 0x44, 0x38, 0x10, 0x7C, 0x10,
399 0x30, 0x28, 0x24, 0x24, 0x28, 0x20, 0xE0, 0xC0,
400 0x3C, 0x24, 0x3C, 0x24, 0x24, 0xE4, 0xDC, 0x18,
401 0x10, 0x54, 0x38, 0xEE, 0x38, 0x54, 0x10, 0x00,
402 0x10, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10,
403 0x10, 0x10, 0x10, 0xFF, 0x00, 0x00, 0x00, 0x00,
404 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10,
405 0x10, 0x10, 0x10, 0xF0, 0x10, 0x10, 0x10, 0x10,
406 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10,
407 0x10, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x10, 0x10,
408 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
409 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
410 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10,
411 0x00, 0x00, 0x00, 0xF0, 0x10, 0x10, 0x10, 0x10,
412 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00,
413 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00,
414 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,
415 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
416 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,
417 0x00, 0x10, 0x10, 0xFF, 0x10, 0x10, 0x00, 0x00,
418 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
419 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00,
420 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
421 0x50, 0x50, 0xF8, 0x50, 0xF8, 0x50, 0x50, 0x00,
422 0x20, 0x78, 0xA0, 0x70, 0x28, 0xF0, 0x20, 0x00,
423 0xC0, 0xC8, 0x10, 0x20, 0x40, 0x98, 0x18, 0x00,
424 0x40, 0xA0, 0x40, 0xA8, 0x90, 0x98, 0x60, 0x00,
425 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
426 0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00,
427 0x40, 0x20, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00,
428 0x20, 0xA8, 0x70, 0x20, 0x70, 0xA8, 0x20, 0x00,
429 0x00, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0x00,
430 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40,
431 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
432 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
433 0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00,
434 0x70, 0x88, 0x98, 0xA8, 0xC8, 0x88, 0x70, 0x00,
435 0x20, 0x60, 0xA0, 0x20, 0x20, 0x20, 0xF8, 0x00,
436 0x70, 0x88, 0x08, 0x10, 0x60, 0x80, 0xF8, 0x00,
437 0x70, 0x88, 0x08, 0x30, 0x08, 0x88, 0x70, 0x00,
438 0x10, 0x30, 0x50, 0x90, 0xF8, 0x10, 0x10, 0x00,
439 0xF8, 0x80, 0xE0, 0x10, 0x08, 0x10, 0xE0, 0x00,
440 0x30, 0x40, 0x80, 0xF0, 0x88, 0x88, 0x70, 0x00,
441 0xF8, 0x88, 0x10, 0x20, 0x20, 0x20, 0x20, 0x00,
442 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70, 0x00,
443 0x70, 0x88, 0x88, 0x78, 0x08, 0x10, 0x60, 0x00,
444 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00,
445 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x40,
446 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00,
447 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00, 0x00,
448 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00,
449 0x70, 0x88, 0x08, 0x10, 0x20, 0x00, 0x20, 0x00,
450 0x70, 0x88, 0x08, 0x68, 0xA8, 0xA8, 0x70, 0x00,
451 0x20, 0x50, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x00,
452 0xF0, 0x48, 0x48, 0x70, 0x48, 0x48, 0xF0, 0x00,
453 0x30, 0x48, 0x80, 0x80, 0x80, 0x48, 0x30, 0x00,
454 0xE0, 0x50, 0x48, 0x48, 0x48, 0x50, 0xE0, 0x00,
455 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0xF8, 0x00,
456 0xF8, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00,
457 0x70, 0x88, 0x80, 0xB8, 0x88, 0x88, 0x70, 0x00,
458 0x88, 0x88, 0x88, 0xF8, 0x88, 0x88, 0x88, 0x00,
459 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
460 0x38, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60, 0x00,
461 0x88, 0x90, 0xA0, 0xC0, 0xA0, 0x90, 0x88, 0x00,
462 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00,
463 0x88, 0xD8, 0xA8, 0xA8, 0x88, 0x88, 0x88, 0x00,
464 0x88, 0xC8, 0xC8, 0xA8, 0x98, 0x98, 0x88, 0x00,
465 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
466 0xF0, 0x88, 0x88, 0xF0, 0x80, 0x80, 0x80, 0x00,
467 0x70, 0x88, 0x88, 0x88, 0xA8, 0x90, 0x68, 0x00,
468 0xF0, 0x88, 0x88, 0xF0, 0xA0, 0x90, 0x88, 0x00,
469 0x70, 0x88, 0x80, 0x70, 0x08, 0x88, 0x70, 0x00,
470 0xF8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
471 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
472 0x88, 0x88, 0x88, 0x88, 0x50, 0x50, 0x20, 0x00,
473 0x88, 0x88, 0x88, 0xA8, 0xA8, 0xD8, 0x88, 0x00,
474 0x88, 0x88, 0x50, 0x20, 0x50, 0x88, 0x88, 0x00,
475 0x88, 0x88, 0x88, 0x70, 0x20, 0x20, 0x20, 0x00,
476 0xF8, 0x08, 0x10, 0x20, 0x40, 0x80, 0xF8, 0x00,
477 0x70, 0x40, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00,
478 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00,
479 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00,
480 0x20, 0x50, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
481 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00,
482 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
483 0x00, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
484 0x80, 0x80, 0xB0, 0xC8, 0x88, 0xC8, 0xB0, 0x00,
485 0x00, 0x00, 0x70, 0x88, 0x80, 0x88, 0x70, 0x00,
486 0x08, 0x08, 0x68, 0x98, 0x88, 0x98, 0x68, 0x00,
487 0x00, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
488 0x10, 0x28, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x00,
489 0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x70,
490 0x80, 0x80, 0xF0, 0x88, 0x88, 0x88, 0x88, 0x00,
491 0x20, 0x00, 0x60, 0x20, 0x20, 0x20, 0x70, 0x00,
492 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x90, 0x60,
493 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00,
494 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x00,
495 0x00, 0x00, 0xD0, 0xA8, 0xA8, 0xA8, 0xA8, 0x00,
496 0x00, 0x00, 0xB0, 0xC8, 0x88, 0x88, 0x88, 0x00,
497 0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,
498 0x00, 0x00, 0xB0, 0xC8, 0xC8, 0xB0, 0x80, 0x80,
499 0x00, 0x00, 0x68, 0x98, 0x98, 0x68, 0x08, 0x08,
500 0x00, 0x00, 0xB0, 0xC8, 0x80, 0x80, 0x80, 0x00,
501 0x00, 0x00, 0x78, 0x80, 0xF0, 0x08, 0xF0, 0x00,
502 0x40, 0x40, 0xF0, 0x40, 0x40, 0x48, 0x30, 0x00,
503 0x00, 0x00, 0x90, 0x90, 0x90, 0x90, 0x68, 0x00,
504 0x00, 0x00, 0x88, 0x88, 0x88, 0x50, 0x20, 0x00,
505 0x00, 0x00, 0x88, 0xA8, 0xA8, 0xA8, 0x50, 0x00,
506 0x00, 0x00, 0x88, 0x50, 0x20, 0x50, 0x88, 0x00,
507 0x00, 0x00, 0x88, 0x88, 0x98, 0x68, 0x08, 0x70,
508 0x00, 0x00, 0xF8, 0x10, 0x20, 0x40, 0xF8, 0x00,
509 0x18, 0x20, 0x20, 0x40, 0x20, 0x20, 0x18, 0x00,
510 0x20, 0x20, 0x20, 0x00, 0x20, 0x20, 0x20, 0x00,
511 0xC0, 0x20, 0x20, 0x10, 0x20, 0x20, 0xC0, 0x00,
512 0x40, 0xA8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
513 0x00, 0x00, 0x20, 0x50, 0xF8, 0x00, 0x00, 0x00,
514 0x70, 0x88, 0x80, 0x80, 0x88, 0x70, 0x20, 0x60,
515 0x90, 0x00, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,
516 0x10, 0x20, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
517 0x20, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
518 0x48, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
519 0x20, 0x10, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
520 0x20, 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
521 0x00, 0x70, 0x80, 0x80, 0x80, 0x70, 0x10, 0x60,
522 0x20, 0x50, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
523 0x50, 0x00, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
524 0x20, 0x10, 0x70, 0x88, 0xF8, 0x80, 0x70, 0x00,
525 0x50, 0x00, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
526 0x20, 0x50, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
527 0x40, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
528 0x50, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
529 0x20, 0x00, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
530 0x10, 0x20, 0xF8, 0x80, 0xF0, 0x80, 0xF8, 0x00,
531 0x00, 0x00, 0x6C, 0x12, 0x7E, 0x90, 0x6E, 0x00,
532 0x3E, 0x50, 0x90, 0x9C, 0xF0, 0x90, 0x9E, 0x00,
533 0x60, 0x90, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
534 0x90, 0x00, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
535 0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
536 0x40, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
537 0x40, 0x20, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
538 0x90, 0x00, 0x90, 0x90, 0xB0, 0x50, 0x10, 0xE0,
539 0x50, 0x00, 0x70, 0x88, 0x88, 0x88, 0x70, 0x00,
540 0x50, 0x00, 0x88, 0x88, 0x88, 0x88, 0x70, 0x00,
541 0x20, 0x20, 0x78, 0x80, 0x80, 0x78, 0x20, 0x20,
542 0x18, 0x24, 0x20, 0xF8, 0x20, 0xE2, 0x5C, 0x00,
543 0x88, 0x50, 0x20, 0xF8, 0x20, 0xF8, 0x20, 0x00,
544 0xC0, 0xA0, 0xA0, 0xC8, 0x9C, 0x88, 0x88, 0x8C,
545 0x18, 0x20, 0x20, 0xF8, 0x20, 0x20, 0x20, 0x40,
546 0x10, 0x20, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
547 0x10, 0x20, 0x00, 0x60, 0x20, 0x20, 0x70, 0x00,
548 0x20, 0x40, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
549 0x20, 0x40, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00,
550 0x50, 0xA0, 0x00, 0xA0, 0xD0, 0x90, 0x90, 0x00,
551 0x28, 0x50, 0x00, 0xC8, 0xA8, 0x98, 0x88, 0x00,
552 0x00, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00, 0xF8,
553 0x00, 0x60, 0x90, 0x90, 0x90, 0x60, 0x00, 0xF0,
554 0x20, 0x00, 0x20, 0x40, 0x80, 0x88, 0x70, 0x00,
555 0x00, 0x00, 0x00, 0xF8, 0x80, 0x80, 0x00, 0x00,
556 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x00, 0x00,
557 0x84, 0x88, 0x90, 0xA8, 0x54, 0x84, 0x08, 0x1C,
558 0x84, 0x88, 0x90, 0xA8, 0x58, 0xA8, 0x3C, 0x08,
559 0x20, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x00,
560 0x00, 0x00, 0x24, 0x48, 0x90, 0x48, 0x24, 0x00,
561 0x00, 0x00, 0x90, 0x48, 0x24, 0x48, 0x90, 0x00,
562 0x28, 0x50, 0x20, 0x50, 0x88, 0xF8, 0x88, 0x00,
563 0x28, 0x50, 0x70, 0x08, 0x78, 0x88, 0x78, 0x00,
564 0x28, 0x50, 0x00, 0x70, 0x20, 0x20, 0x70, 0x00,
565 0x28, 0x50, 0x00, 0x20, 0x20, 0x20, 0x70, 0x00,
566 0x28, 0x50, 0x00, 0x70, 0x88, 0x88, 0x70, 0x00,
567 0x50, 0xA0, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00,
568 0x28, 0x50, 0x00, 0x88, 0x88, 0x88, 0x70, 0x00,
569 0x50, 0xA0, 0x00, 0xA0, 0xA0, 0xA0, 0x50, 0x00,
570 0xFC, 0x48, 0x48, 0x48, 0xE8, 0x08, 0x50, 0x20,
571 0x00, 0x50, 0x00, 0x50, 0x50, 0x50, 0x10, 0x20,
572 0xC0, 0x44, 0xC8, 0x54, 0xEC, 0x54, 0x9E, 0x04,
573 0x10, 0xA8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
574 0x00, 0x20, 0x50, 0x88, 0x50, 0x20, 0x00, 0x00,
575 0x88, 0x10, 0x20, 0x40, 0x80, 0x28, 0x00, 0x00,
576 0x7C, 0xA8, 0xA8, 0x68, 0x28, 0x28, 0x28, 0x00,
577 0x38, 0x40, 0x30, 0x48, 0x48, 0x30, 0x08, 0x70,
578 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
579 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
580 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
581 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
582 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x00, 0x00, 0x00,
583 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
584 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
585 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
586 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC,
587 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
588 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
589 0x11, 0x22, 0x44, 0x88, 0x11, 0x22, 0x44, 0x88,
590 0x88, 0x44, 0x22, 0x11, 0x88, 0x44, 0x22, 0x11,
591 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
592 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE,
593 0x80, 0xC0, 0xE0, 0xF0, 0xE0, 0xC0, 0x80, 0x00,
594 0x01, 0x03, 0x07, 0x0F, 0x07, 0x03, 0x01, 0x00,
595 0xFF, 0x7E, 0x3C, 0x18, 0x18, 0x3C, 0x7E, 0xFF,
596 0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81,
597 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
598 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
599 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
600 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
601 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC,
602 0x00, 0x20, 0x20, 0x50, 0x50, 0x88, 0xF8, 0x00,
603 0x20, 0x20, 0x70, 0x20, 0x70, 0x20, 0x20, 0x00,
604 0x00, 0x00, 0x00, 0x50, 0x88, 0xA8, 0x50, 0x00,
605 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
606 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
607 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
608 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
609 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
610 0x00, 0x00, 0x68, 0x90, 0x90, 0x90, 0x68, 0x00,
611 0x30, 0x48, 0x48, 0x70, 0x48, 0x48, 0x70, 0xC0,
612 0xF8, 0x88, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
613 0xF8, 0x50, 0x50, 0x50, 0x50, 0x50, 0x98, 0x00,
614 0xF8, 0x88, 0x40, 0x20, 0x40, 0x88, 0xF8, 0x00,
615 0x00, 0x00, 0x78, 0x90, 0x90, 0x90, 0x60, 0x00,
616 0x00, 0x50, 0x50, 0x50, 0x50, 0x68, 0x80, 0x80,
617 0x00, 0x50, 0xA0, 0x20, 0x20, 0x20, 0x20, 0x00,
618 0xF8, 0x20, 0x70, 0xA8, 0xA8, 0x70, 0x20, 0xF8,
619 0x20, 0x50, 0x88, 0xF8, 0x88, 0x50, 0x20, 0x00,
620 0x70, 0x88, 0x88, 0x88, 0x50, 0x50, 0xD8, 0x00,
621 0x30, 0x40, 0x40, 0x20, 0x50, 0x50, 0x50, 0x20,
622 0x00, 0x00, 0x00, 0x50, 0xA8, 0xA8, 0x50, 0x00,
623 0x08, 0x70, 0xA8, 0xA8, 0xA8, 0x70, 0x80, 0x00,
624 0x38, 0x40, 0x80, 0xF8, 0x80, 0x40, 0x38, 0x00,
625 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00,
626 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x00,
627 0x20, 0x20, 0xF8, 0x20, 0x20, 0x00, 0xF8, 0x00,
628 0xC0, 0x30, 0x08, 0x30, 0xC0, 0x00, 0xF8, 0x00,
629 0x18, 0x60, 0x80, 0x60, 0x18, 0x00, 0xF8, 0x00,
630 0x10, 0x28, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
631 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0x40,
632 0x00, 0x20, 0x00, 0xF8, 0x00, 0x20, 0x00, 0x00,
633 0x00, 0x50, 0xA0, 0x00, 0x50, 0xA0, 0x00, 0x00,
634 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
635 0x00, 0x30, 0x78, 0x78, 0x30, 0x00, 0x00, 0x00,
636 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
637 0x3E, 0x20, 0x20, 0x20, 0xA0, 0x60, 0x20, 0x00,
638 0xA0, 0x50, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00,
639 0x40, 0xA0, 0x20, 0x40, 0xE0, 0x00, 0x00, 0x00,
640 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00,
641 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
644 static byte MSXFont[256 * 9];
649 msxPrnSetFont(MSXFontRaw);
655 static const string name(
"msx-printer");
662 return "Emulate MSX printer, prints to image.";
665 void ImagePrinterMSX::msxPrnSetFont(
const byte* msxBits)
668 byte* font = MSXFont;
670 for (
int i = 0; i < 256; ++i) {
676 for (
int j = 0; j < 8; ++j) {
678 for (
int k = 0; k < 8; ++k) {
679 charBits |= ((msxBits[7 - k] >> (7 - j)) & 1) << k;
683 if (oneBits != 0 && start < 0) start = j;
684 if (charBits != 0) end = j;
685 font[j + 1] = charBits;
689 if (start < 0 || start >= 7) start = 0;
690 if (end == 1) end = 5;
691 if (end >= 7) end = 7;
692 font[0] = (start << 4) | end;
699 void ImagePrinterMSX::getNumberOfDots(
unsigned& dotsX,
unsigned& dotsY)
705 void ImagePrinterMSX::resetSettings()
725 unsigned ImagePrinterMSX::calcEscSequenceLength(
byte character)
732 case 'O':
case '\\':
case 'L':
case '/':
743 unsigned ImagePrinterMSX::parseNumber(
unsigned sizeStart,
unsigned sizeChars)
746 while (sizeChars--) {
749 if (data >=
'0' && data <=
'9') {
750 Value += unsigned(data -
'0');
756 void ImagePrinterMSX::processEscSequence()
894 void ImagePrinterMSX::processCharacter(
byte data)
958 template<
typename Archive>
969 static const byte EpsonFontRom[] = {
970 0x8b, 0x04, 0x0a, 0x20, 0x8a, 0x60, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
971 0x8b, 0x1c, 0x22, 0x08, 0xa2, 0x48, 0x22, 0x08, 0x22, 0x18, 0x00, 0x00,
972 0x9b, 0x00, 0x3c, 0x00, 0x82, 0x40, 0x02, 0x00, 0x3c, 0x02, 0x00, 0x00,
973 0x9a, 0x00, 0x1c, 0x22, 0x80, 0x62, 0x00, 0x22, 0x1c, 0x00, 0x00, 0x00,
974 0x96, 0x00, 0x12, 0x80, 0x5e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
975 0xa7, 0x00, 0x00, 0x40, 0xa0, 0x00, 0xa0, 0x40, 0x00, 0x00, 0x00, 0x00,
976 0x8b, 0x12, 0x00, 0x7e, 0x80, 0x12, 0x80, 0x02, 0x80, 0x42, 0x00, 0x00,
977 0xc8, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
978 0x8b, 0x06, 0x00, 0x09, 0x00, 0x51, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00,
979 0x8b, 0x5e, 0x80, 0x10, 0x80, 0x08, 0x40, 0x04, 0x40, 0x9e, 0x00, 0x00,
980 0x8a, 0x40, 0x9e, 0x00, 0x90, 0x40, 0x10, 0x4e, 0x80, 0x00, 0x00, 0x00,
981 0x8b, 0x92, 0x28, 0x44, 0x00, 0x44, 0x00, 0x44, 0x28, 0x92, 0x00, 0x00,
982 0x8b, 0xfe, 0x00, 0xa0, 0x00, 0x48, 0x00, 0x1e, 0x00, 0x0a, 0x00, 0x00,
983 0x8b, 0x06, 0x08, 0x54, 0xa0, 0x04, 0xa0, 0x54, 0x08, 0x06, 0x00, 0x00,
984 0x8b, 0x04, 0x0a, 0x20, 0x0a, 0xa0, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
985 0x0a, 0x38, 0x44, 0x01, 0x44, 0x01, 0x46, 0x00, 0x44, 0x00, 0x00, 0x00,
986 0x9a, 0x00, 0x50, 0xaa, 0x00, 0xaa, 0x00, 0xaa, 0x14, 0x00, 0x00, 0x00,
987 0x8a, 0x7e, 0x80, 0x00, 0x80, 0x12, 0x80, 0x12, 0x6c, 0x00, 0x00, 0x00,
988 0x8b, 0x3e, 0x40, 0x90, 0x00, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x00,
989 0x8b, 0x2c, 0x02, 0x28, 0x02, 0x1c, 0x20, 0x0a, 0x20, 0x1a, 0x00, 0x00,
990 0x8b, 0x3a, 0x44, 0x00, 0x8a, 0x10, 0xa2, 0x00, 0x44, 0xb8, 0x00, 0x00,
991 0x8b, 0x02, 0x08, 0x14, 0x22, 0x08, 0x22, 0x14, 0x08, 0x20, 0x00, 0x00,
992 0xa9, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
993 0x8b, 0x06, 0x88, 0x14, 0x20, 0x44, 0x20, 0x14, 0x88, 0x06, 0x00, 0x00,
994 0x8b, 0x1c, 0xa2, 0x00, 0x22, 0x00, 0x22, 0x00, 0xa2, 0x1c, 0x00, 0x00,
995 0x8b, 0x3c, 0x82, 0x00, 0x02, 0x00, 0x02, 0x00, 0x82, 0x3c, 0x00, 0x00,
996 0x8b, 0x04, 0x0a, 0xa0, 0x0a, 0x20, 0x0a, 0xa0, 0x1c, 0x02, 0x00, 0x00,
997 0x9a, 0x00, 0x1c, 0xa2, 0x00, 0x22, 0x00, 0xa2, 0x1c, 0x00, 0x00, 0x00,
998 0x8a, 0x3c, 0x80, 0x02, 0x00, 0x02, 0x80, 0x3c, 0x02, 0x00, 0x00, 0x00,
999 0x8b, 0x3e, 0x00, 0x2a, 0x00, 0x6a, 0x80, 0x2a, 0x00, 0x22, 0x00, 0x00,
1000 0x8b, 0x1c, 0x22, 0x08, 0x22, 0x48, 0xa2, 0x08, 0x22, 0x18, 0x00, 0x00,
1001 0x8b, 0xa8, 0x00, 0x68, 0x00, 0x3e, 0x00, 0x68, 0x00, 0xa8, 0x00, 0x00,
1002 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1003 0xc8, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1004 0xa9, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
1005 0x8b, 0x28, 0x00, 0xfe, 0x00, 0x28, 0x00, 0xfe, 0x00, 0x28, 0x00, 0x00,
1006 0x8b, 0x24, 0x00, 0x54, 0x00, 0xfe, 0x00, 0x54, 0x00, 0x48, 0x00, 0x00,
1007 0x8b, 0xc0, 0x02, 0xc4, 0x08, 0x10, 0x20, 0x46, 0x80, 0x06, 0x00, 0x00,
1008 0x8b, 0x4c, 0xa0, 0x12, 0xa0, 0x4a, 0x00, 0x04, 0x08, 0x12, 0x00, 0x00,
1009 0xc8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
1010 0xc9, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00,
1011 0xa7, 0x00, 0x00, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1012 0x8b, 0x10, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x10, 0x00, 0x00,
1013 0x8b, 0x10, 0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
1014 0x39, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
1015 0x8b, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
1016 0xa8, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1017 0x9a, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1018 0x8b, 0x38, 0x44, 0x00, 0x82, 0x00, 0x82, 0x00, 0x44, 0x38, 0x00, 0x00,
1019 0xa9, 0x00, 0x00, 0x42, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
1020 0x8b, 0x42, 0x80, 0x06, 0x80, 0x0a, 0x80, 0x12, 0x80, 0x62, 0x00, 0x00,
1021 0x8b, 0x84, 0x00, 0x82, 0x00, 0xa2, 0x00, 0xd2, 0x00, 0x8c, 0x00, 0x00,
1022 0x8b, 0x08, 0x10, 0x28, 0x40, 0x88, 0x00, 0xfe, 0x00, 0x08, 0x00, 0x00,
1023 0x8b, 0xe4, 0x02, 0xa0, 0x02, 0xa0, 0x02, 0xa0, 0x02, 0x9c, 0x00, 0x00,
1024 0x8b, 0x0c, 0x12, 0x20, 0x52, 0x80, 0x12, 0x00, 0x12, 0x0c, 0x00, 0x00,
1025 0x8b, 0x80, 0x00, 0x82, 0x04, 0x88, 0x10, 0xa0, 0x40, 0x80, 0x00, 0x00,
1026 0x8b, 0x6c, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x6c, 0x00, 0x00,
1027 0x8b, 0x60, 0x90, 0x00, 0x90, 0x02, 0x94, 0x08, 0x90, 0x60, 0x00, 0x00,
1028 0xa7, 0x00, 0x00, 0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1029 0x27, 0x00, 0x00, 0x6d, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1030 0x89, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
1031 0x8b, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x00,
1032 0xab, 0x00, 0x00, 0x82, 0x00, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00,
1033 0x8b, 0x40, 0x80, 0x00, 0x80, 0x0a, 0x80, 0x10, 0x80, 0x60, 0x00, 0x00,
1034 0x8b, 0x38, 0x44, 0x82, 0x10, 0xaa, 0x00, 0xaa, 0x00, 0x7a, 0x00, 0x00,
1035 0x8b, 0x1e, 0x20, 0x48, 0x80, 0x08, 0x80, 0x48, 0x20, 0x1e, 0x00, 0x00,
1036 0x8b, 0x82, 0x7c, 0x82, 0x10, 0x82, 0x10, 0x82, 0x10, 0x6c, 0x00, 0x00,
1037 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x44, 0x00, 0x00,
1038 0x8b, 0x82, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x44, 0x38, 0x00, 0x00,
1039 0x8b, 0xfe, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x82, 0x00, 0x00,
1040 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x80, 0x00, 0x00,
1041 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x10, 0x82, 0x10, 0x82, 0x5c, 0x00, 0x00,
1042 0x8b, 0xfe, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xfe, 0x00, 0x00,
1043 0xa9, 0x00, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
1044 0x8a, 0x0c, 0x02, 0x00, 0x82, 0x00, 0x82, 0x7c, 0x80, 0x00, 0x00, 0x00,
1045 0x8b, 0xfe, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x00,
1046 0x8b, 0xfe, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00,
1047 0x8b, 0xfe, 0x00, 0x40, 0x20, 0x10, 0x20, 0x40, 0x00, 0xfe, 0x00, 0x00,
1048 0x8b, 0xfe, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0xfe, 0x00, 0x00,
1049 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x00, 0x82, 0x00, 0x82, 0x7c, 0x00, 0x00,
1050 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x60, 0x00, 0x00,
1051 0x8b, 0x7c, 0x82, 0x00, 0x82, 0x08, 0x82, 0x04, 0x80, 0x7a, 0x00, 0x00,
1052 0x8b, 0xfe, 0x00, 0x90, 0x00, 0x90, 0x00, 0x98, 0x04, 0x62, 0x00, 0x00,
1053 0x8b, 0x64, 0x92, 0x00, 0x92, 0x00, 0x92, 0x00, 0x92, 0x4c, 0x00, 0x00,
1054 0x8b, 0x80, 0x00, 0x80, 0x00, 0xfe, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1055 0x8b, 0xfc, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0xfc, 0x00, 0x00,
1056 0x8b, 0xe0, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0xe0, 0x00, 0x00,
1057 0x8b, 0xfc, 0x02, 0x04, 0x08, 0x30, 0x08, 0x04, 0x02, 0xfc, 0x00, 0x00,
1058 0x9a, 0x00, 0x82, 0x44, 0x28, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00,
1059 0x8b, 0x80, 0x40, 0x20, 0x10, 0x0e, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
1060 0x9a, 0x00, 0x82, 0x04, 0x8a, 0x10, 0xa2, 0x40, 0x82, 0x00, 0x00, 0x00,
1061 0xa9, 0x00, 0x00, 0xfe, 0x00, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00,
1062 0x9a, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00,
1063 0xa9, 0x00, 0x00, 0x82, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
1064 0x8b, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00,
1065 0x0b, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
1066 0xb7, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1067 0x8b, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x20, 0x1c, 0x02, 0x00, 0x00,
1068 0x8a, 0xfe, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x1c, 0x00, 0x00, 0x00,
1069 0x8a, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x00, 0x00,
1070 0x8a, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0xfe, 0x00, 0x00, 0x00,
1071 0x8b, 0x1c, 0x22, 0x08, 0x22, 0x08, 0x22, 0x08, 0x22, 0x18, 0x00, 0x00,
1072 0x89, 0x10, 0x00, 0x10, 0x7e, 0x90, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00,
1073 0x0a, 0x38, 0x44, 0x01, 0x44, 0x01, 0x44, 0x01, 0x7e, 0x00, 0x00, 0x00,
1074 0x8a, 0xfe, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00, 0x00,
1075 0x98, 0x00, 0x22, 0x00, 0xbe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1076 0x99, 0x00, 0x01, 0x00, 0x01, 0x20, 0x01, 0xbe, 0x00, 0x00, 0x00, 0x00,
1077 0x9a, 0x00, 0xfe, 0x00, 0x08, 0x00, 0x14, 0x00, 0x22, 0x00, 0x00, 0x00,
1078 0x98, 0x00, 0x82, 0x00, 0xfe, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1079 0x8b, 0x1e, 0x20, 0x00, 0x20, 0x1e, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00,
1080 0x8a, 0x3e, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x1e, 0x00, 0x00, 0x00,
1081 0x8b, 0x1c, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x1c, 0x00, 0x00,
1082 0x0a, 0x7f, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x38, 0x00, 0x00, 0x00,
1083 0x1b, 0x00, 0x38, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x7e, 0x00, 0x00,
1084 0x8a, 0x3e, 0x00, 0x10, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00,
1085 0x8b, 0x10, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x04, 0x00, 0x00,
1086 0x8a, 0x20, 0x00, 0x7c, 0x02, 0x20, 0x02, 0x20, 0x02, 0x00, 0x00, 0x00,
1087 0x8b, 0x3c, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3c, 0x02, 0x00, 0x00,
1088 0x8b, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
1089 0x8b, 0x3c, 0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02, 0x3c, 0x00, 0x00,
1090 0x89, 0x22, 0x14, 0x00, 0x08, 0x00, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00,
1091 0x0b, 0x40, 0x20, 0x11, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
1092 0x89, 0x22, 0x04, 0x22, 0x08, 0x22, 0x10, 0x22, 0x00, 0x00, 0x00, 0x00,
1093 0xaa, 0x00, 0x00, 0x10, 0x00, 0x6c, 0x82, 0x00, 0x82, 0x00, 0x00, 0x00,
1094 0xc7, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1095 0xaa, 0x00, 0x82, 0x00, 0x82, 0x6c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
1096 0x8b, 0x40, 0x80, 0x00, 0x80, 0x40, 0x20, 0x00, 0x20, 0x40, 0x00, 0x00,
1097 0x8b, 0x7c, 0x82, 0x04, 0x8a, 0x10, 0xa2, 0x40, 0x82, 0x7c, 0x00, 0x00,
1098 0x8a, 0x04, 0x0a, 0x80, 0x2a, 0x60, 0x0a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1099 0x8a, 0x0c, 0x12, 0x28, 0x82, 0x68, 0x02, 0x28, 0x10, 0x00, 0x00, 0x00,
1100 0x8a, 0x0c, 0x32, 0x00, 0x82, 0x40, 0x02, 0x0c, 0x32, 0x00, 0x00, 0x00,
1101 0x8a, 0x0c, 0x12, 0x00, 0xa0, 0x42, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1102 0x98, 0x00, 0x02, 0x00, 0x16, 0x88, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00,
1103 0xa9, 0x00, 0x00, 0x40, 0xa0, 0x00, 0xa0, 0x40, 0x00, 0x00, 0x00, 0x00,
1104 0x8b, 0x12, 0x00, 0x1e, 0x60, 0x12, 0x80, 0x12, 0x80, 0x40, 0x00, 0x00,
1105 0x9a, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00,
1106 0x8a, 0x06, 0x01, 0x08, 0x01, 0x10, 0x21, 0x80, 0x02, 0x00, 0x00, 0x00,
1107 0x8b, 0x06, 0x58, 0x80, 0x08, 0x84, 0x40, 0x06, 0x58, 0x80, 0x00, 0x00,
1108 0x8b, 0x12, 0x4c, 0x80, 0x10, 0x80, 0x50, 0x02, 0x4c, 0x80, 0x00, 0x00,
1109 0x8b, 0x02, 0x18, 0x24, 0x80, 0x44, 0x02, 0x48, 0x30, 0x80, 0x00, 0x00,
1110 0x8b, 0x06, 0x38, 0xc0, 0x20, 0x88, 0x26, 0xd8, 0x02, 0x08, 0x00, 0x00,
1111 0x8b, 0x02, 0x04, 0x08, 0x14, 0x40, 0xa4, 0x00, 0xbe, 0x40, 0x00, 0x00,
1112 0x8a, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x8a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1113 0x1b, 0x00, 0x18, 0x21, 0x04, 0x41, 0x06, 0x40, 0x04, 0x40, 0x00, 0x00,
1114 0x8b, 0x02, 0x10, 0x6a, 0x00, 0xaa, 0x00, 0xac, 0x10, 0x80, 0x00, 0x00,
1115 0x8a, 0x06, 0x18, 0x60, 0x00, 0x82, 0x10, 0x82, 0x6c, 0x00, 0x00, 0x00,
1116 0x8b, 0x0e, 0x30, 0x40, 0x90, 0x0e, 0x70, 0x82, 0x10, 0x82, 0x00, 0x00,
1117 0x8b, 0x04, 0x22, 0x08, 0x22, 0x1c, 0x22, 0x08, 0x22, 0x10, 0x00, 0x00,
1118 0x8b, 0x1a, 0x24, 0x42, 0x08, 0x92, 0x20, 0x84, 0x48, 0xb0, 0x00, 0x00,
1119 0x8a, 0x0c, 0x11, 0x02, 0x2c, 0x12, 0x20, 0x44, 0x18, 0x00, 0x00, 0x00,
1120 0xa9, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
1121 0x8b, 0x02, 0x04, 0x08, 0x14, 0x80, 0x24, 0x00, 0x3e, 0x80, 0x00, 0x00,
1122 0x8b, 0x0c, 0x12, 0x00, 0xa2, 0x00, 0x22, 0x00, 0xa4, 0x18, 0x00, 0x00,
1123 0x8b, 0x0c, 0x32, 0x00, 0x82, 0x00, 0x02, 0x00, 0x8c, 0x30, 0x00, 0x00,
1124 0x8a, 0x04, 0x0a, 0x20, 0x8a, 0x20, 0x0a, 0x24, 0x9a, 0x00, 0x00, 0x00,
1125 0x8a, 0x0c, 0x12, 0x00, 0xa0, 0x02, 0x00, 0x24, 0x98, 0x00, 0x00, 0x00,
1126 0x8b, 0x0c, 0x32, 0x80, 0x02, 0x00, 0x02, 0x0c, 0xb2, 0x00, 0x00, 0x00,
1127 0x8b, 0x06, 0x18, 0x22, 0x08, 0x22, 0x48, 0x22, 0x80, 0x20, 0x00, 0x00,
1128 0x8a, 0x0c, 0x12, 0x28, 0x02, 0x68, 0x02, 0xa8, 0x10, 0x00, 0x00, 0x00,
1129 0x8b, 0x08, 0x20, 0x88, 0x66, 0x18, 0x20, 0x48, 0x20, 0x80, 0x00, 0x00,
1130 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1131 0x9a, 0x00, 0x02, 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1132 0x9a, 0x00, 0x20, 0x40, 0x80, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1133 0x8b, 0x28, 0x06, 0x38, 0xc0, 0x28, 0x06, 0x38, 0xc0, 0x28, 0x00, 0x00,
1134 0x8a, 0x00, 0x24, 0x10, 0x46, 0x38, 0xc4, 0x10, 0x48, 0x00, 0x00, 0x00,
1135 0x8b, 0x40, 0x82, 0x44, 0x88, 0x10, 0x22, 0x44, 0x82, 0x04, 0x00, 0x00,
1136 0x8b, 0x0c, 0x10, 0x42, 0xa0, 0x12, 0xa8, 0x44, 0x0a, 0x10, 0x00, 0x00,
1137 0xc8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
1138 0xba, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00,
1139 0x98, 0x00, 0x02, 0x00, 0x04, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
1140 0x8b, 0x10, 0x04, 0x50, 0x28, 0x10, 0x28, 0x14, 0x40, 0x10, 0x00, 0x00,
1141 0x8b, 0x10, 0x00, 0x14, 0x08, 0x10, 0x20, 0x50, 0x00, 0x10, 0x00, 0x00,
1142 0x29, 0x00, 0x00, 0x01, 0x04, 0x0a, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
1143 0x8b, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00,
1144 0xa8, 0x00, 0x00, 0x02, 0x04, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
1145 0x9a, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
1146 0x8b, 0x1c, 0x20, 0x42, 0x00, 0x82, 0x00, 0x84, 0x08, 0x70, 0x00, 0x00,
1147 0x99, 0x00, 0x02, 0x00, 0x46, 0x18, 0x62, 0x80, 0x00, 0x00, 0x00, 0x00,
1148 0x8b, 0x02, 0x40, 0x06, 0x80, 0x0a, 0x80, 0x12, 0x80, 0x60, 0x00, 0x00,
1149 0x8b, 0x04, 0x00, 0x82, 0x00, 0x92, 0x00, 0xb2, 0x4c, 0x80, 0x00, 0x00,
1150 0x8b, 0x08, 0x10, 0x08, 0x20, 0x08, 0x46, 0x38, 0xc0, 0x08, 0x00, 0x00,
1151 0x8b, 0x04, 0x60, 0x82, 0x20, 0x82, 0x20, 0x84, 0x18, 0x80, 0x00, 0x00,
1152 0x8a, 0x0c, 0x10, 0x22, 0x10, 0x42, 0x10, 0x82, 0x0c, 0x00, 0x00, 0x00,
1153 0x8b, 0x80, 0x02, 0x84, 0x08, 0x90, 0x20, 0x80, 0x40, 0x80, 0x00, 0x00,
1154 0x8b, 0x0c, 0x62, 0x10, 0x82, 0x10, 0x82, 0x10, 0x8c, 0x60, 0x00, 0x00,
1155 0x8a, 0x60, 0x02, 0x90, 0x04, 0x90, 0x08, 0x90, 0x60, 0x00, 0x00, 0x00,
1156 0xa9, 0x00, 0x00, 0x02, 0x14, 0x22, 0x14, 0x20, 0x00, 0x00, 0x00, 0x00,
1157 0x2a, 0x00, 0x00, 0x01, 0x04, 0x2a, 0x44, 0x28, 0x40, 0x00, 0x00, 0x00,
1158 0x9a, 0x00, 0x10, 0x08, 0x24, 0x02, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00,
1159 0x8a, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, 0x00, 0x00,
1160 0x9a, 0x00, 0x02, 0x00, 0x04, 0x80, 0x48, 0x20, 0x10, 0x00, 0x00, 0x00,
1161 0x8a, 0x48, 0x02, 0x80, 0x08, 0x80, 0x10, 0x80, 0x60, 0x00, 0x00, 0x00,
1162 0x8b, 0x1c, 0x20, 0x42, 0x80, 0x12, 0x88, 0x22, 0x88, 0x70, 0x00, 0x00,
1163 0x8b, 0x02, 0x04, 0x08, 0x10, 0x28, 0x40, 0x88, 0x00, 0xfe, 0x00, 0x00,
1164 0x8b, 0x06, 0x98, 0x62, 0x80, 0x12, 0x80, 0x12, 0x8c, 0x60, 0x00, 0x00,
1165 0x8b, 0x1c, 0x22, 0x40, 0x82, 0x00, 0x82, 0x00, 0x84, 0x40, 0x00, 0x00,
1166 0x8b, 0x06, 0x98, 0x62, 0x80, 0x02, 0x80, 0x04, 0x88, 0x70, 0x00, 0x00,
1167 0x8b, 0x06, 0x38, 0xc2, 0x10, 0x82, 0x10, 0x82, 0x00, 0x80, 0x00, 0x00,
1168 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x80, 0x10, 0x80, 0x00, 0x80, 0x00, 0x00,
1169 0x8b, 0x1c, 0x22, 0x40, 0x82, 0x00, 0x92, 0x04, 0x98, 0x40, 0x00, 0x00,
1170 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x00, 0x10, 0x06, 0x38, 0xc0, 0x00, 0x00,
1171 0x92, 0x00, 0x02, 0x00, 0x86, 0x18, 0xe2, 0x00, 0x80, 0x00, 0x00, 0x00,
1172 0x8b, 0x0c, 0x02, 0x00, 0x02, 0x80, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00,
1173 0x8b, 0x06, 0x38, 0xc0, 0x10, 0x20, 0x08, 0x44, 0x02, 0x80, 0x00, 0x00,
1174 0x9a, 0x00, 0x06, 0x18, 0x62, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00,
1175 0x8b, 0x06, 0x38, 0xc0, 0x00, 0x30, 0x00, 0x46, 0x38, 0xc0, 0x00, 0x00,
1176 0x8b, 0x06, 0x38, 0xc0, 0x20, 0x10, 0x08, 0x06, 0x38, 0xc0, 0x00, 0x00,
1177 0x8b, 0x0c, 0x32, 0x40, 0x82, 0x00, 0x82, 0x04, 0x98, 0x60, 0x00, 0x00,
1178 0x8b, 0x06, 0x18, 0x60, 0x90, 0x00, 0x90, 0x00, 0x90, 0x60, 0x00, 0x00,
1179 0x8b, 0x1c, 0x20, 0x42, 0x00, 0x8a, 0x00, 0x84, 0x0a, 0x70, 0x00, 0x00,
1180 0x8b, 0x06, 0x18, 0x60, 0x80, 0x10, 0x88, 0x14, 0x82, 0x60, 0x00, 0x00,
1181 0x8b, 0x04, 0x62, 0x00, 0x92, 0x00, 0x92, 0x00, 0x8c, 0x40, 0x00, 0x00,
1182 0x8b, 0x80, 0x00, 0x86, 0x18, 0xe0, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
1183 0x8b, 0x0c, 0x32, 0xc0, 0x02, 0x00, 0x02, 0x0c, 0x30, 0xc0, 0x00, 0x00,
1184 0x9b, 0x00, 0xfe, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
1185 0x8b, 0x06, 0x38, 0xc4, 0x08, 0x10, 0x08, 0x06, 0x38, 0xc0, 0x00, 0x00,
1186 0x8b, 0x02, 0x84, 0x48, 0x20, 0x18, 0x24, 0x02, 0x40, 0x80, 0x00, 0x00,
1187 0x8b, 0x80, 0x40, 0x26, 0x18, 0x00, 0x20, 0x00, 0x40, 0x80, 0x00, 0x00,
1188 0x8b, 0x02, 0x04, 0x8a, 0x00, 0x92, 0x00, 0xa2, 0x40, 0x80, 0x00, 0x00,
1189 0x9b, 0x00, 0x06, 0x18, 0x62, 0x80, 0x02, 0x80, 0x00, 0x80, 0x00, 0x00,
1190 0xa8, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
1191 0x8a, 0x02, 0x00, 0x02, 0x80, 0x06, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00,
1192 0x9a, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00,
1193 0x0b, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00,
1194 0xb7, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1195 0x8a, 0x04, 0x0a, 0x20, 0x0a, 0x20, 0x0a, 0x24, 0x1a, 0x00, 0x00, 0x00,
1196 0x8a, 0x06, 0x18, 0xe2, 0x00, 0x22, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1197 0x8a, 0x0c, 0x10, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00,
1198 0x8b, 0x0c, 0x10, 0x02, 0x20, 0x02, 0x20, 0x06, 0x38, 0xc0, 0x00, 0x00,
1199 0x8a, 0x0c, 0x12, 0x28, 0x02, 0x28, 0x02, 0x28, 0x10, 0x00, 0x00, 0x00,
1200 0x8b, 0x20, 0x00, 0x26, 0x18, 0x60, 0x00, 0xa0, 0x00, 0x80, 0x00, 0x00,
1201 0x1b, 0x00, 0x18, 0x25, 0x00, 0x45, 0x00, 0x46, 0x18, 0x60, 0x00, 0x00,
1202 0x8a, 0x06, 0x18, 0xe0, 0x00, 0x20, 0x00, 0x26, 0x18, 0x00, 0x00, 0x00,
1203 0x99, 0x00, 0x02, 0x00, 0x26, 0x18, 0x22, 0x80, 0x00, 0x00, 0x00, 0x00,
1204 0x89, 0x01, 0x00, 0x01, 0x00, 0x26, 0x18, 0xa0, 0x00, 0x00, 0x00, 0x00,
1205 0x8a, 0x06, 0x18, 0x60, 0x88, 0x04, 0x12, 0x00, 0x20, 0x00, 0x00, 0x00,
1206 0x99, 0x00, 0x02, 0x00, 0x06, 0x98, 0x62, 0x80, 0x00, 0x00, 0x00, 0x00,
1207 0x8a, 0x26, 0x18, 0x20, 0x06, 0x38, 0x00, 0x26, 0x18, 0x00, 0x00, 0x00,
1208 0x89, 0x26, 0x18, 0x20, 0x00, 0x20, 0x06, 0x18, 0x00, 0x00, 0x00, 0x00,
1209 0x8a, 0x0c, 0x12, 0x00, 0x20, 0x02, 0x00, 0x24, 0x18, 0x00, 0x00, 0x00,
1210 0x0a, 0x03, 0x1c, 0x60, 0x04, 0x40, 0x04, 0x48, 0x30, 0x00, 0x00, 0x00,
1211 0x1b, 0x00, 0x18, 0x24, 0x00, 0x44, 0x00, 0x47, 0x18, 0x60, 0x00, 0x00,
1212 0x89, 0x06, 0x38, 0x00, 0x10, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
1213 0x8a, 0x02, 0x10, 0x02, 0x28, 0x02, 0x28, 0x04, 0x20, 0x00, 0x00, 0x00,
1214 0x9a, 0x00, 0x20, 0x0c, 0x32, 0xc0, 0x22, 0x00, 0x20, 0x00, 0x00, 0x00,
1215 0x8a, 0x0c, 0x32, 0x00, 0x02, 0x00, 0x02, 0x0c, 0x32, 0x00, 0x00, 0x00,
1216 0x9a, 0x00, 0x3e, 0x00, 0x04, 0x00, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
1217 0x8b, 0x0e, 0x30, 0x04, 0x00, 0x18, 0x04, 0x00, 0x06, 0x38, 0x00, 0x00,
1218 0x8b, 0x02, 0x00, 0x24, 0x10, 0x08, 0x04, 0x12, 0x00, 0x20, 0x00, 0x00,
1219 0x1b, 0x00, 0x40, 0x21, 0x12, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
1220 0x8b, 0x02, 0x00, 0x26, 0x00, 0x2a, 0x00, 0x32, 0x00, 0x20, 0x00, 0x00,
1221 0x9a, 0x00, 0x10, 0x04, 0x1a, 0x60, 0x82, 0x00, 0x80, 0x00, 0x00, 0x00,
1222 0x99, 0x00, 0x02, 0x04, 0x08, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
1223 0x9a, 0x00, 0x02, 0x00, 0x82, 0x0c, 0xb0, 0x40, 0x10, 0x00, 0x00, 0x00,
1224 0x8b, 0x40, 0x80, 0x00, 0x80, 0x40, 0x20, 0x00, 0x20, 0x40, 0x00, 0x00,
1225 0x8b, 0x1a, 0x24, 0x42, 0x08, 0x92, 0x20, 0x84, 0x48, 0xb0, 0x00, 0x00
1236 static const string name(
"epson-printer");
1242 return "Emulate Epson FX80 printer, prints to image.";
1245 void ImagePrinterEpson::getNumberOfDots(
unsigned& dotsX,
unsigned& dotsY)
1251 void ImagePrinterEpson::resetSettings()
1263 memcpy(
fontInfo.
rom, EpsonFontRom,
sizeof(EpsonFontRom));
1269 unsigned ImagePrinterEpson::calcEscSequenceLength(
byte character)
1271 switch (character & 127) {
1272 case '!':
case '-':
case '/':
case '3':
case 'A':
case 'J':
1273 case 'N':
case 'Q':
case 'R':
case 'S':
case 'U':
case 'W':
1274 case 'b':
case 'i':
case 'j':
case 'l':
case 'p':
case 's':
1276 case '%':
case '?':
case 'K':
case 'L':
case 'Z':
case '^':
1278 case '*':
case ':':
case '&':
1291 unsigned ImagePrinterEpson::parseNumber(
unsigned sizeStart,
unsigned sizeChars)
1294 sizeStart += sizeChars;
1295 while (sizeChars--) {
1296 Value = Value * 256 +
abEscSeq[--sizeStart];
1301 void ImagePrinterEpson::processEscSequence()
1305 switch (character) {
1307 unsigned masterSelect = parseNumber(1, 1);
1308 elite = (masterSelect & 1) != 0;
1310 bold = (masterSelect & 8) != 0;
1337 switch (parseNumber(1, 1)) {
1375 lineFeed = (parseNumber(1, 1) & 127) / 3.0;
1434 lineFeed = parseNumber(1, 1) & 127;
1458 vpos += (parseNumber(1, 1) & 127) / 3.0;
1486 int width = parseNumber(1, 2);
1487 if (width > 78) width = 78;
1498 int script = parseNumber(1, 1) & 1;
1531 vpos -= (parseNumber(1, 1) & 127) / 3.0;
1550 static byte intlChar35 [9] = { 35, 35, 35, 6, 35, 35, 35, 12, 35 };
1551 static byte intlChar36 [9] = { 36, 36, 36, 36, 36, 11, 36, 36, 36 };
1552 static byte intlChar64 [9] = { 64, 0, 16, 64, 64, 29, 64, 64, 64 };
1553 static byte intlChar91 [9] = { 91, 5, 23, 91, 18, 23, 5, 7, 91 };
1554 static byte intlChar92 [9] = { 92, 15, 24, 92, 20, 24, 92, 9, 31 };
1555 static byte intlChar93 [9] = { 93, 16, 25, 93, 13, 13, 30, 8, 93 };
1556 static byte intlChar94 [9] = { 94, 94, 94, 94, 94, 25, 94, 94, 94 };
1557 static byte intlChar96 [9] = { 96, 96, 96, 96, 96, 30, 2, 96, 96 };
1558 static byte intlChar123[9] = { 123, 30, 26, 123, 19, 26, 0, 22, 123 };
1559 static byte intlChar124[9] = { 124, 2, 27, 124, 21, 27, 3, 10, 124 };
1560 static byte intlChar125[9] = { 125, 1, 28, 125, 14, 14, 1, 125, 125 };
1561 static byte intlChar126[9] = { 126, 22, 17, 126, 126, 28, 4, 126, 126 };
1563 void ImagePrinterEpson::processCharacter(
byte data)
1578 switch (data & 0x7f) {
1579 case 35: data = (data & 0x80) | intlChar35 [
countryCode];
break;
1580 case 36: data = (data & 0x80) | intlChar36 [
countryCode];
break;
1581 case 64: data = (data & 0x80) | intlChar64 [
countryCode];
break;
1582 case 91: data = (data & 0x80) | intlChar91 [
countryCode];
break;
1583 case 92: data = (data & 0x80) | intlChar92 [
countryCode];
break;
1584 case 93: data = (data & 0x80) | intlChar93 [
countryCode];
break;
1585 case 94: data = (data & 0x80) | intlChar94 [
countryCode];
break;
1586 case 96: data = (data & 0x80) | intlChar96 [
countryCode];
break;
1587 case 123: data = (data & 0x80) | intlChar123[
countryCode];
break;
1588 case 124: data = (data & 0x80) | intlChar124[
countryCode];
break;
1589 case 125: data = (data & 0x80) | intlChar125[
countryCode];
break;
1590 case 126: data = (data & 0x80) | intlChar126[
countryCode];
break;
1668 template<
typename Archive>
1681 , sizeX(x), sizeY(y)
1683 memset(buf.
data(), 255, x * y);
1694 "prints",
"page",
".png");
1695 VLA(
const void*, rowPointers, sizeY);
1696 for (
unsigned y = 0; y < sizeY; ++y) {
1697 rowPointers[y] = &buf[sizeX * y];
1705 radiusX = sizeX / 2.0;
1706 radiusY = sizeY / 2.0;
1708 int rx = int(16 * radiusX);
1709 int ry = int(16 * radiusY);
1713 table.resize(2 * (radius16 + 16), -(1 << 30));
1716 int rx2 = 2 * rx * rx;
1717 int ry2 = 2 * ry * ry;
1722 int de_y = (1 - 2 * ry) * rx * rx;
1727 table[offset - y - 1] = x;
1728 table[offset + y ] = x;
1733 if ((2 * e + de_y) > 0) {
1743 de_x = (1 - 2 * rx) * ry * ry;
1749 table[offset - y - 1] = x;
1750 table[offset + y ] = x;
1755 if ((2 * e + de_x) > 0) {
1766 unsigned xx1 = max<int>(int(floor(xPos - radiusX)), 0);
1767 unsigned xx2 = min<int>(int(ceil (xPos + radiusX)), sizeX);
1768 unsigned yy1 = max<int>(int(floor(yPos - radiusY)), 0);
1769 unsigned yy2 = min<int>(int(ceil (yPos + radiusY)), sizeY);
1771 int y = 16 * yy1 - int(16 * yPos) + 16 + radius16;
1772 for (
unsigned yy = yy1; yy < yy2; ++yy) {
1773 int x = 16 * xx1 - int(16 * xPos);
1774 for (
unsigned xx = xx1; xx < xx2; ++xx) {
1776 for (
int i = 0; i < 16; ++i) {
1777 int a = table[y + i];
1781 sum += min(t, 2 * a);
1790 dot(xx, yy) = max(0, dot(xx, yy) - sum);
1797 byte& Paper::dot(
unsigned x,
unsigned y)
1801 return buf[y * sizeX + x];