[comp.sys.ibm.pc.programmer] Printing USER-DEFINED chars on EPSON LQ: How?

marwk@levels.sait.edu.au (04/10/91)

The following program is designed to create a user-defined character inside
the EPSON LQ-400 24-pin printer and then print the character.

It does not work.

The command summary on page 6-7 of the USER's GUIDE uses

    ESC & 0 n1 n2 d0 d1 d2 data

as the description of the command, where n1 = code for the first character,
n2 = the code for the last character, d0 = left space of character, d1 = body
width of character, d2 = right space of character and data is 3 bytes for
each column.

Could someone please explain what I am doing wrong here and tell me how
to do it properly.

Ray
----

/* PRNCHAR.C */

#include <stdio.h>

#define ESC 0x1B

void define_a_character(char a[24][18])
    {
    int i,j;

    for (i = 0; i < 24; ++i)
    for (j = 0; j < 24; ++j)
        a[i][j] = i == j;
    }

void select_user_defined_set(void)
    {
    fprintf(stdprn, "%c%c%c", ESC, '%', 1);
    }

void print_character(int c)
    {
    fprintf(stdprn, "%c", c);
    }

void send_character_to_printer(char a[24][18])
    {
    int i,bit, col;
    char byte[3];

    fprintf(stdprn, "%c%c%c%c%c%c%c%c",
                    ESC, '&', 1, 128, 128, 2, 18, 2);

    for (col = 0; col < 18; ++col)
        {
        for (i = 0; i < 3; ++i)  /* set up the 3 bytes */
            {
            byte[i] = 0;
            for (bit = 0; bit < 8; ++bit)
                byte[i] &= a[bit][col] << (7 - i);

            fprintf(stdprn, "%c", byte[i]);
            }
        }
    }

void main(void)
    {
    char a[24][18];

    select_user_defined_set();
    define_a_character(a);
    send_character_to_printer(a);

    print_character(128);
    }



--
University of South Australia   | Plus ca change, plus c'est la meme chose.
P.O. Box 1                      | Ghing thien me how, ming thien gung me how.
Ingle Farm                      | Knobs, knobs everywhere,
South Australia                 |              just vary a knob to think!