static void write_line(mps_t *mps, unsigned int prnr)
{
    int x, y;

    for (y = 0; y < 7; y++) {
        for (x = 0; x < 480; x++) {
            output_select_putc(prnr, (BYTE)(mps->line[x][y]
                                            ? OUTPUT_PIXEL_BLACK : OUTPUT_PIXEL_WHITE));
        }
        output_select_putc(prnr, (BYTE)(OUTPUT_NEWLINE));
    }

    if (!is_mode(mps, MPS_BITMODE)) {
        /* bitmode:  9 rows/inch (7lines/row * 9rows/inch=63 lines/inch) */
        /* charmode: 6 rows/inch (7lines/row * 6rows/inch=42 lines/inch) */
        /*   --> 63lines/inch - 42lines/inch = 21lines/inch missing */
        /*   --> 21lines/inch / 9row/inch = 3lines/row missing */
        output_select_putc(prnr, OUTPUT_NEWLINE);
        output_select_putc(prnr, OUTPUT_NEWLINE);
        output_select_putc(prnr, OUTPUT_NEWLINE);
    }

    mps->pos = 0;
}
Exemple #2
0
static int print_char(raw_t *raw, unsigned int prnr, const BYTE c)
{
    switch (c) {
        case 17: /* lowercase */
            if (raw->mode == 1) {
                return 0;
            }
            raw->mode = 1;
            break;
        case 145: /* uppercase */
            if (raw->mode == 0) {
                return 0;
            }
            raw->mode = 0;
            break;
    }
    if (output_select_putc(prnr, c) < 0) {
        return -1;
    }
    return 0;
}
Exemple #3
0
static int print_char(ascii_t *ascii, unsigned int prnr, BYTE c)
{
    BYTE asc;

    switch (c) {
    case 8: /* bitmap mode */
        return 0;
    case 10: /* linefeed */
        break;
    case 13: /* return */
        /* ascii->mode = 0; */ /* ? */
        break;
    case 14:  /* EN on*/
    case 15:  /* EN off*/
    case 16:  /* POS*/
        return 0;
    case 17: /* lowercase */
        ascii->mode = 1;
        return 0;
    case 18: /* revers on */
        return 0;
    case 145: /* uppercase */
        ascii->mode = 0;
        return 0;
    case 146: /* revers off */
        return 0;
    }

    /* fix duplicated chrout codes */
    if ((c >= 0x60) && (c <= 0x7f)) {
        /* uppercase */
        c = ((c - 0x60) + 0xc0);
    }

    if (ascii->mode == 0) {
        /* uppercase / graphics mode */
        if ((c >= 0x41) && (c <= 0x5a)) {
            /* lowercase (petscii 0x41 -) */
            c += 0x80; /* convert to uppercase */
        } else if ((c >= 0xc1) && (c <= 0xda)) {
            /* uppercase (petscii 0xc1 -) */
            c = '.'; /* can't convert gfx characters */
        }
    }

    asc = charset_p_toascii(c, 0);

    if (output_select_putc(prnr, asc) < 0) {
        return -1;
    }
    ascii->pos++;

    if (asc == '\n') {
        ascii->pos = 0;
#if defined(__MSDOS__) || defined(WIN32) || defined(__OS2__) || defined(__BEOS__)
        if (output_select_putc(prnr, '\r') < 0) {
            return -1;
        }
#endif
    }

    if (ascii->pos == CHARSPERLINE) {
        ascii->pos = 0;
        if (output_select_putc(prnr, '\n') < 0) {
            return -1;
        }
#if defined(__MSDOS__) || defined(WIN32) || defined(__OS2__) || defined(__BEOS__)
        if (output_select_putc(prnr, '\r') < 0) {
            return -1;
        }
#endif
    }

    return 0;
}