FlightControl-User / x16-flash

Contains the source code of the commander x16 rom flashing utility
GNU General Public License v3.0
4 stars 2 forks source link

Rework the UI line drawing functions. #8

Open FlightControl-User opened 1 year ago

FlightControl-User commented 1 year ago

Make some drawing functions for drawing lines, and intelligently merge the lines using line merge characters, instead of adding each character manually.

Rework this:

void frame_draw() {

    textcolor(WHITE);
    bgcolor(BLUE);

    clrscr();
    unsigned char y = 0;
    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x70);
    cputcxy(79, y, 0x6E);

    y++;
    cputcxy(0, y, 0x5d);
    cputcxy(79, y, 0x5d);

    y++;
    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x6B);
    cputcxy(79, y, 0x73);
    cputcxy(12, y, 0x72);

    y++;
    for (; y < 37; y++) {
        cputcxy(0, y, 0x5D);
        cputcxy(12, y, 0x5D);
        cputcxy(79, y, 0x5D);
    }

    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x6B);
    cputcxy(79, y, 0x73);
    cputcxy(12, y, 0x71);

    y++;
    for (; y < 41; y++) {
        cputcxy(0, y, 0x5D);
        cputcxy(79, y, 0x5D);
    }

    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x6B);
    cputcxy(79, y, 0x73);
    cputcxy(10, y, 0x72);
    cputcxy(20, y, 0x72);
    cputcxy(30, y, 0x72);
    cputcxy(40, y, 0x72);
    cputcxy(50, y, 0x72);
    cputcxy(60, y, 0x72);
    cputcxy(70, y, 0x72);
    cputcxy(79, y, 0x73);

    y++;
    for (; y < 55; y++) {
        cputcxy(0, y, 0x5D);
        cputcxy(79, y, 0x5D);
        cputcxy(10, y, 0x5D);
        cputcxy(20, y, 0x5D);
        cputcxy(30, y, 0x5D);
        cputcxy(40, y, 0x5D);
        cputcxy(50, y, 0x5D);
        cputcxy(60, y, 0x5D);
        cputcxy(70, y, 0x5D);
    }

    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x6B);
    cputcxy(79, y, 0x73);
    cputcxy(10, y, 0x5B);
    cputcxy(20, y, 0x5B);
    cputcxy(30, y, 0x5B);
    cputcxy(40, y, 0x5B);
    cputcxy(50, y, 0x5B);
    cputcxy(60, y, 0x5B);
    cputcxy(70, y, 0x5B);

    y++;
    for (; y < 59; y++) {
        cputcxy(0, y, 0x5D);
        cputcxy(79, y, 0x5D);
        cputcxy(10, y, 0x5D);
        cputcxy(20, y, 0x5D);
        cputcxy(30, y, 0x5D);
        cputcxy(40, y, 0x5D);
        cputcxy(50, y, 0x5D);
        cputcxy(60, y, 0x5D);
        cputcxy(70, y, 0x5D);
    }

    for (unsigned char x = 0; x < 79; x++) {
        cputcxy(x, y, 0x40);
    }
    cputcxy(0, y, 0x6D);
    cputcxy(79, y, 0x7D);
    cputcxy(10, y, 0x71);
    cputcxy(20, y, 0x71);
    cputcxy(30, y, 0x71);
    cputcxy(40, y, 0x71);
    cputcxy(50, y, 0x71);
    cputcxy(60, y, 0x71);
    cputcxy(70, y, 0x71);
    cputcxy(79, y, 0x7D);
}