/* -------------------------------------------------------- colpos.cpp ermoeglicht farbige Ausgaben und Cursorsteuerung in einem Terminal 10.04..2025 R. Seelig -------------------------------------------------------- */ #include "colpos.h" /* Farbnummern der ESC-Sequenzen sw bl gn cy rt mg br gr 30, 34, 32, 36, 31, 35, 33, 37 Vordergrund 40, 44, 42, 46, 41, 45, 41, 47 Hintergrund */ const uint8_t ega_colors [] = { 30, 34, 32, 36, 31, 35, 33, 37 }; uint8_t textattr = 0x07; /* ------------------------------------------------- clrscr loescht den Bildschirminhalt des seriellen Terminals ------------------------------------------------- */ void clrscr(void) { printf("\033[2J\033[H"); } /* ------------------------------------------------- gotoxy loescht den Bildschirminhalt des seriellen Terminals Uebergabe: x,y : Textkoordinate auf die der Cursor positioniert wird. Die Koordinate 1,1 repraesentiert hierbei die linke obere Ecke. ------------------------------------------------- */ void gotoxy(uint8_t x, uint8_t y) { printf("\033[%d;%dH",y,x); } /* ------------------------------------------------- settextattr setzt die Farben fuer Hintergrund und Text. Hier- bei repraesentieren die oberen 4 Bit die Hintergrund-, die unteren 4 Bit die Textfarbe. Die Farbnummerierung erfolgt nach dem EGA-Farbschema Argumente: attr : Farbattribut fuer Hinter- und Vordergrundfarbe ------------------------------------------------- */ /* void settextattr(uint8_t attr) { uint8_t bk, vg, bright; textattr= attr; bright= 0; bk= attr >> 4; if (bk > 7) { bk= bk & 0x07; } vg= attr & 0x0f; if (vg > 7) { vg= vg & 0x07; bright= 1; } printf("\033[49;%d;%d;%dm", bright,ega_colors[vg], ega_colors[bk]+10); } */ void settextattr(uint8_t attr) { uint8_t bk, vg; uint8_t bright = 0; uint8_t fg_code, bg_code; textattr = attr; vg = attr & 0x0F; // Textfarbe bk = (attr >> 4) & 0x0F; // Hintergrundfarbe if (vg > 7) { bright = 1; vg &= 7; } fg_code = ega_colors[vg]; bg_code = ega_colors[bk & 7] + 10; if (bk > 7) { bg_code += 0x3c; // 0x3c .. 0x43 => intensive Hintergrundfarben } printf("\033[%d;%d;%dm", bright, fg_code, bg_code); }