[comp.fonts] Please, how do I print user-def chr on EPSON LQ 24-pin?

marwk@levels.sait.edu.au (05/20/91)

I have reached the length of my tether in solving the problem of
printing a user-defined character on an EPSON LQ 24-pin printer using
TURBO C 2.01.

The program listing is provided below.
The main program prints the first message and the second message but
not the user-defined character.

Please tell me what I am doing wrong and how to correct it.

Thank you
Ray Kennington
------------------------------

/* PRNCHAR.C */

#include <stdio.h>

#define ESC 0x1B

void set_letter_quality(void)
        {
        fprintf(stdprn, "%c%c%c", ESC, 0x78, 1);
        }

void set_ten_characters_per_inch(void)
        {
        fprintf(stdprn, "%c%c", ESC, 0x50, 1);
        }

void copy_font_from_rom_to_ram(void)
        {
        fprintf(stdprn, "%c%c%c%c%c", ESC, 0x3A, 0, 0, 0);
        }


void define_a_character(char a[24][18])
        {
        register 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, 0x25, 1);
        }

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

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

        fprintf(stdprn, "%c%c%c%c%c%c%c%c",
                                        ESC, 0x26, 0, 0x21, 0x21, 0, 18, 0);

        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];

        fprintf(stdprn, "About to print user-defined character\n");

        set_letter_quality();
        set_ten_characters_per_inch();
        copy_font_from_rom_to_ram();

        define_a_character(a);

        send_character_to_printer(a);
        select_user_defined_set();

        print_character(0x21);
        fprintf(stdprn, "\nHaving printed user-defined character\n");
        }


--
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!