#include <dos.h>

#define SET(x, y) set_func((x), (y), col)

void alpha_letter(char, int, int, int, void (*)());
void alpha_word(char *, int, int, int, void (*)());

void alpha_word(char *s, int x, int y, int col, void (*set_func)()) {
    int i;

    for(i = 0; i < strlen(s); i ++) {
        alpha_letter(toupper(s[i]), x+(i*4), y, col, set_func);
    }
}

void alpha_letter(char c, int x, int y, int col, void (*set_func)()) {
    switch(c) {
        case 'A':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3);
            SET(x, y+4), SET(x+2, y+4); break;
        case 'B':
            SET(x, y), SET(x+1, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+1, y+4); break;
        case 'C':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x, y+3), SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
        case 'D':
            SET(x, y), SET(x+1, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4); break;
        case 'E':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case 'F':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x, y+4); break;
        case 'G':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case 'H':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+2, y+4); break;
        case 'I':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+1, y+1), SET(x+1, y+2);
            SET(x+1, y+3), SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
        case 'J':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+1, y+1), SET(x+1, y+2);
            SET(x+1, y+3), SET(x, y+4), SET(x+1, y+4); break;
        case 'K':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4), SET(x+2, y+4); break;
        case 'L':
            SET(x, y), SET(x, y+1), SET(x, y+2), SET(x, y+3), SET(x, y+4);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case 'M':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+1, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+2, y+4); break;
        case 'N':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+1, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3);
            SET(x, y+4), SET(x+2, y+4); break;
        case 'O':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case 'P':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x, y+4); break;
        case 'Q':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x+1, y+3);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case 'R':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+1, y+3);
            SET(x, y+4), SET(x+2, y+4); break;
        case 'S':
            SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2), SET(x+1, y+2);
            SET(x+2, y+2), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4); break;
        case 'T':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+1, y+1), SET(x+1, y+2);
            SET(x+1, y+3), SET(x+1, y+4); break;
        case 'U':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case 'V':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x+1, y+4); break;
        case 'W':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+2, y+2), SET(x, y+3), SET(x+1, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+2, y+4); break;
        case 'X':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x+1, y+2);
            SET(x, y+3), SET(x+2, y+3), SET(x, y+4), SET(x+2, y+4); break;
        case 'Y':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x+1, y+2);
            SET(x+1, y+3), SET(x+1, y+4); break;
        case 'Z':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+2, y+1), SET(x+1, y+2);
            SET(x, y+3), SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
            
        /*****************************/
        /* end of uppercase alphabet */
        /*****************************/
        case '0':
            SET(x+1, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2), SET(x+2, y+2);
            SET(x, y+3), SET(x+2, y+3), SET(x+1, y+4); break;
        case '1':
            SET(x+1, y), SET(x, y+1), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+3);
            SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
        case '2':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case '3':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case '4':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x+2, y+3), SET(x+2, y+4); break;
        case '5':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x+2, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case '6':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case '7':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+2, y+1), SET(x+1, y+2);
            SET(x+1, y+3), SET(x+1, y+4); break;
        case '8':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+2, y+3);
            SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
        case '9':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x+2, y+3), SET(x, y+4);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case '"':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1); break;
        case '\'':
            SET(x+1, y), SET(x+1, y+1); break;
        case '!':
            SET(x+1, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+4); break;
        case '?':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x+2, y+1), SET(x+1, y+2);
            SET(x+1, y+4); break;
        case '(':
            SET(x+2, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+3), SET(x+2, y+4); break;
        case ')':
            SET(x, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+3), SET(x, y+4); break;
        case '{':
            SET(x+2, y), SET(x+1, y+1), SET(x, y+2), SET(x+1, y+2), SET(x+1, y+3);
            SET(x+2, y+4); break;
        case '}':
            SET(x, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+2, y+2), SET(x+1, y+3);
            SET(x, y+4); break;
        case '[':
            SET(x+1, y), SET(x+2, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+3);
            SET(x+1, y+4), SET(x+2, y+4); break;
        case ']':
            SET(x, y), SET(x+1, y), SET(x+1, y+1), SET(x+1, y+2), SET(x+1, y+3);
            SET(x, y+4), SET(x+1, y+4); break;
        case '.':
            SET(x+1, y+4); break;
        case ',':
            SET(x+1, y+3), SET(x+1, y+4); break;
        case ':':
            SET(x+1, y+2), SET(x+1, y+4); break;
        case ';':
            SET(x+1, y+1), SET(x+1, y+3), SET(x, y+4); break;
        case '-':
            SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2); break;
        case '_':
            SET(x, y+4), SET(x+1, y+4), SET(x+2, y+4); break;
        case '=':
            SET(x, y+1), SET(x+1, y+1), SET(x+2, y+1), SET(x, y+3), SET(x+1, y+3);
            SET(x+2, y+3); break;
        case '+':
            SET(x+1, y+1), SET(x, y+2), SET(x+1, y+2), SET(x+2, y+2), SET(x+1, y+3); break;
        case '<':
            SET(x+2, y), SET(x+1, y+1), SET(x, y+2), SET(x+1, y+3), SET(x+2, y+4); break;
        case '>':
            SET(x, y), SET(x+1, y+1), SET(x+2, y+2), SET(x+1, y+3), SET(x, y+4); break;
        case '|':
            SET(x+1, y), SET(x+1, y+1), SET(x+1, y+3), SET(x+1, y+4); break;
        case '\\':
            SET(x, y), SET(x, y+1), SET(x+1, y+2), SET(x+2, y+3), SET(x+2, y+4); break;
        case '/':
            SET(x+2, y), SET(x+2, y+1), SET(x+1, y+2), SET(x, y+3), SET(x, y+4); break;
        case '@':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+2, y+2), SET(x, y+3), SET(x, y+4), SET(x+1, y+4);
            SET(x+2, y+4); break;
        case '#':
            SET(x, y), SET(x+2, y), SET(x, y+1), SET(x+1, y+1), SET(x+2, y+1);
            SET(x, y+2), SET(x+2, y+2), SET(x, y+3), SET(x+1, y+3), SET(x+2, y+3);
            SET(x, y+4), SET(x+2, y+4); break;
        case '$':
            SET(x+1, y), SET(x+1, y+1), SET(x+2, y+1), SET(x, y+2), SET(x+1, y+2);
            SET(x+1, y+3), SET(x+2, y+3), SET(x+1, y+4); break;
        case '%':
            SET(x, y), SET(x+2, y), SET(x+2, y+1), SET(x+1, y+2), SET(x, y+3);
            SET(x, y+4), SET(x+2, y+4); break;
        case '^':
            SET(x+1, y), SET(x, y+1), SET(x+2, y+1); break;
        case '&':
            SET(x, y), SET(x+1, y), SET(x, y+1), SET(x+1, y+1), SET(x, y+2);
            SET(x+1, y+2), SET(x+2, y+2), SET(x+1, y+3), SET(x+2, y+3), SET(x, y+4);
            SET(x+2, y+4); break;
        case '*':
            SET(x, y), SET(x+2, y), SET(x+1, y+1), SET(x, y+2), SET(x+2, y+2); break;
        case '~':
            SET(x, y), SET(x+1, y), SET(x+2, y), SET(x, y+1), SET(x+1, y+1);
            SET(x+2, y+1); break;
        case '`':
            SET(x, y), SET(x+1, y+1); break;
        default: break;
    }
}

