Add 8 bit version of DCS, APC, PM, OSC

DCS, APC, PM, OSC version for 7 bits environments already was implemented
in st.  This patch adds the 8 bit version of it.
This commit is contained in:
Roberto E. Vargas Caballero 2014-06-20 09:51:18 +02:00
parent da78629cf5
commit 984c12d2a6
1 changed files with 32 additions and 7 deletions

39
st.c
View File

@ -405,6 +405,7 @@ static void ttyread(void);
static void ttyresize(void);
static void ttysend(char *, size_t);
static void ttywrite(const char *, size_t);
static void tstrsequence(uchar c);
static void xdraws(char *, Glyph, int, int, int, int);
static void xhints(void);
@ -2347,6 +2348,30 @@ tdeftran(char ascii) {
}
}
void
tstrsequence(uchar c) {
if (c & 0x80) {
switch (c) {
case 0x90: /* DCS -- Device Control String */
c = 'P';
break;
case 0x9f: /* APC -- Application Program Command */
c = '_';
break;
case 0x9e: /* PM -- Privacy Message */
c = '^';
break;
case 0x9d: /* OSC -- Operating System Command */
c = ']';
break;
}
}
strreset();
strescseq.type = c;
term.esc |= ESC_STR;
return;
}
void
tcontrolcode(uchar ascii) {
static char question[UTF_SIZ] = "?";
@ -2411,7 +2436,6 @@ tcontrolcode(uchar ascii) {
case 0x8d: /* TODO: RI */
case 0x8e: /* TODO: SS2 */
case 0x8f: /* TODO: SS3 */
case 0x90: /* TODO: DCS */
case 0x98: /* TODO: SOS */
break;
case 0x9a: /* DECID -- Identify Terminal */
@ -2419,10 +2443,13 @@ tcontrolcode(uchar ascii) {
break;
case 0x9b: /* TODO: CSI */
case 0x9c: /* TODO: ST */
case 0x9d: /* TODO: OSC */
case 0x9e: /* TODO: PM */
case 0x9f: /* TODO: APC */
break;
case 0x90: /* DCS -- Device Control String */
case 0x9f: /* APC -- Application Program Command */
case 0x9e: /* PM -- Privacy Message */
case 0x9d: /* OSC -- Operating System Command */
tstrsequence(ascii);
return;
}
/* only CAN, SUB, \a and C1 chars interrupt a sequence */
term.esc &= ~(ESC_STR_END|ESC_STR);
@ -2538,9 +2565,7 @@ tputc(char *c, int len) {
case '^': /* PM -- Privacy Message */
case ']': /* OSC -- Operating System Command */
case 'k': /* old title set compatibility */
strreset();
strescseq.type = ascii;
term.esc |= ESC_STR;
tstrsequence(ascii);
return;
case '(': /* set primary charset G0 */
case ')': /* set secondary charset G1 */