diff options
| author | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2014-06-20 09:51:18 +0200 | 
|---|---|---|
| committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2014-07-08 23:32:28 +0200 | 
| commit | 984c12d2a67fd19ee69b35152d93de8cb67595e8 (patch) | |
| tree | 50c21bd4dd9b0bbc274286b0704ffeb2d6c36355 | |
| parent | da78629cf5fa234204f002ff2c2b597a2bf7e76f (diff) | |
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.
| -rw-r--r-- | st.c | 39 | 
1 files changed, 32 insertions, 7 deletions
| @@ -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); @@ -2348,6 +2349,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 */ | 
