9 #define GMAP_FIRST 0xb0
10 #define GMAP_LAST 0xda
12 unsigned char gmap[] = {
13 0x61, 0x61, 0x61, /* checker */
15 0x75, 0x75, 0x75, /* right T */
16 0x6b, 0x6b, /* upper-right corner */
19 0x6b, /* upper-right corner */
20 0x6a, 0x6a, 0x6a, /* lower-right corner */
21 0x6b, /* upper-right corner */
22 0x6d, /* lower-left corner */
28 0x74, 0x74, /* left T */
29 0x6d, /* lower-left corner */
30 0x6c, /* upper-left corner */
36 0x76, 0x76, /* bottom T */
37 0x77, 0x77, /* top T */
38 0x6d, 0x6d, /* lower-left corner */
39 0x6c, 0x6c, /* upper-left corner */
40 0x6e, 0x6e, /* cross */
41 0x6a, /* lower-right corner */
42 0x6c /* upper-left corner */
45 static unsigned char cmap[] = {0, 4, 2, 6, 1, 5, 3, 7};
47 static unsigned char cur_attr = 0xff;
48 static int cur_cs = CS_ASCII;
52 fputs("\033c", stdout);
56 void ansi_clearscr(void)
58 fputs("\033[2J", stdout);
61 void ansi_setcursor(int row, int col)
63 printf("\033[%d;%dH", row + 1, col + 1);
66 void ansi_ibmchar(unsigned char c, unsigned char attr)
71 if(c >= GMAP_FIRST && c <= GMAP_LAST) {
72 if(cur_cs == CS_ASCII) {
73 memcpy(ptr, "\033(0", 3);
78 c = gmap[c - GMAP_FIRST];
80 if(cur_cs == CS_GRAPH) {
81 memcpy(ptr, "\033(B", 3);
87 if(attr != cur_attr) {
88 unsigned char bg = cmap[attr & 7];
89 unsigned char fg = cmap[(attr >> 4) & 7];
91 ptr += sprintf(ptr, "\033[;%d;%dm", fg + 30, bg + 40);