X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=inject_csi.c;h=e2b6430a28ce8a3cf481674aa590e24416f5536f;hb=7ea77f37c3d2ad6f176182e2b1441dd33e39af8c;hp=8d5ee9d829f9831dd08c8a1b46a947454e113826;hpb=1d26603be3c785ed147834cb7c750454a5866599;p=apps%2Fmadtty.git diff --git a/inject_csi.c b/inject_csi.c index 8d5ee9d..e2b6430 100644 --- a/inject_csi.c +++ b/inject_csi.c @@ -48,11 +48,46 @@ static void interpret_csi_SGR(RoteTerm *rt, int param[], int pcount) { } for (i = 0; i < pcount; i++) { + +// From http://vt100.net/docs/vt510-rm/SGR table 5-16 +// 0 All attributes off +// 1 Bold +// 4 Underline +// 5 Blinking +// 7 Negative image +// 8 Invisible image +// 10 The ASCII character set is the current 7-bit +// display character set (default) - SCO Console only. +// 11 Map Hex 00-7F of the PC character set codes +// to the current 7-bit display character set +// - SCO Console only. +// 12 Map Hex 80-FF of the current character set to +// the current 7-bit display character set - SCO +// Console only. +// 22 Bold off +// 24 Underline off +// 25 Blinking off +// 27 Negative image off +// 28 Invisible image off + if (param[i] == 0) rt->curattr = 0x70; else if (param[i] == 1 || param[i] == 2 || param[i] == 4) /* set bold */ - rt->curattr |= 0x80; - else if (param[i] == 5) rt->curattr |= 0x08; /* set blink */ - else if (param[i] == 7) rt->curattr = 0x07; /* reverse video */ + ROTE_ATTR_MOD_BOLD(rt->curattr,1); + else if (param[i] == 5) /* set blink */ + ROTE_ATTR_MOD_BLINK(rt->curattr,1); + else if (param[i] == 7 || param[i] == 27) { /* reverse video */ + int fg = ROTE_ATTR_FG(rt->curattr); + int bg = ROTE_ATTR_BG(rt->curattr); + ROTE_ATTR_MOD_FG(rt->curattr, bg); + ROTE_ATTR_MOD_BG(rt->curattr, fg); + } + else if (param[i] == 8) rt->curattr = 0x0; /* invisible */ + else if (param[i] == 22 || param[i] == 24) /* bold off */ + ROTE_ATTR_MOD_BOLD(rt->curattr,0); + else if (param[i] == 25) /* blink off */ + ROTE_ATTR_MOD_BLINK(rt->curattr,0); + else if (param[i] == 28) /* invisible off */ + rt->curattr = 0x70; else if (param[i] >= 30 && param[i] <= 37) /* set fg */ ROTE_ATTR_MOD_FG(rt->curattr, param[i] - 30); else if (param[i] >= 40 && param[i] <= 47) /* set bg */