|
@@ -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 */
|