mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
vt: refactor vc_ques to allow of other private sequences.
The vc_ques keeps track if a csi sequence is a private DEC control function beginning with '?'. Nowadays some private control functions begin with '>' and '='. Switch the code to instead use a new 3-bit vc_priv that allows for all private use parameter prefixes. Signed-off-by: Martin Hostettler <textshell@uchuujin.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
17504fd7db
commit
2ff5c5a1dc
@@ -1341,6 +1341,8 @@ struct vc_data *vc_deallocate(unsigned int currcons)
|
|||||||
* VT102 emulator
|
* VT102 emulator
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
enum { EPecma = 0, EPdec, EPeq, EPgt, EPlt};
|
||||||
|
|
||||||
#define set_kbd(vc, x) vt_set_kbd_mode_bit((vc)->vc_num, (x))
|
#define set_kbd(vc, x) vt_set_kbd_mode_bit((vc)->vc_num, (x))
|
||||||
#define clr_kbd(vc, x) vt_clr_kbd_mode_bit((vc)->vc_num, (x))
|
#define clr_kbd(vc, x) vt_clr_kbd_mode_bit((vc)->vc_num, (x))
|
||||||
#define is_kbd(vc, x) vt_get_kbd_mode_bit((vc)->vc_num, (x))
|
#define is_kbd(vc, x) vt_get_kbd_mode_bit((vc)->vc_num, (x))
|
||||||
@@ -1814,7 +1816,7 @@ static void set_mode(struct vc_data *vc, int on_off)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i <= vc->vc_npar; i++)
|
for (i = 0; i <= vc->vc_npar; i++)
|
||||||
if (vc->vc_ques) {
|
if (vc->vc_priv == EPdec) {
|
||||||
switch(vc->vc_par[i]) { /* DEC private modes set/reset */
|
switch(vc->vc_par[i]) { /* DEC private modes set/reset */
|
||||||
case 1: /* Cursor keys send ^[Ox/^[[x */
|
case 1: /* Cursor keys send ^[Ox/^[[x */
|
||||||
if (on_off)
|
if (on_off)
|
||||||
@@ -2030,7 +2032,7 @@ static void reset_terminal(struct vc_data *vc, int do_clear)
|
|||||||
vc->vc_top = 0;
|
vc->vc_top = 0;
|
||||||
vc->vc_bottom = vc->vc_rows;
|
vc->vc_bottom = vc->vc_rows;
|
||||||
vc->vc_state = ESnormal;
|
vc->vc_state = ESnormal;
|
||||||
vc->vc_ques = 0;
|
vc->vc_priv = EPecma;
|
||||||
vc->vc_translate = set_translate(LAT1_MAP, vc);
|
vc->vc_translate = set_translate(LAT1_MAP, vc);
|
||||||
vc->vc_G0_charset = LAT1_MAP;
|
vc->vc_G0_charset = LAT1_MAP;
|
||||||
vc->vc_G1_charset = GRAF_MAP;
|
vc->vc_G1_charset = GRAF_MAP;
|
||||||
@@ -2234,8 +2236,8 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
|
|||||||
vc->vc_state=ESfunckey;
|
vc->vc_state=ESfunckey;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vc->vc_ques = (c == '?');
|
vc->vc_priv = (c == '?') ? EPdec : EPecma;
|
||||||
if (vc->vc_ques)
|
if (vc->vc_priv != EPecma)
|
||||||
return;
|
return;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case ESgetpars:
|
case ESgetpars:
|
||||||
@@ -2256,7 +2258,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
|
|||||||
set_mode(vc, 0);
|
set_mode(vc, 0);
|
||||||
return;
|
return;
|
||||||
case 'c':
|
case 'c':
|
||||||
if (vc->vc_ques) {
|
if (vc->vc_priv == EPdec) {
|
||||||
if (vc->vc_par[0])
|
if (vc->vc_par[0])
|
||||||
vc->vc_cursor_type = vc->vc_par[0] | (vc->vc_par[1] << 8) | (vc->vc_par[2] << 16);
|
vc->vc_cursor_type = vc->vc_par[0] | (vc->vc_par[1] << 8) | (vc->vc_par[2] << 16);
|
||||||
else
|
else
|
||||||
@@ -2265,7 +2267,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
if (vc->vc_ques) {
|
if (vc->vc_priv == EPdec) {
|
||||||
clear_selection();
|
clear_selection();
|
||||||
if (vc->vc_par[0])
|
if (vc->vc_par[0])
|
||||||
vc->vc_complement_mask = vc->vc_par[0] << 8 | vc->vc_par[1];
|
vc->vc_complement_mask = vc->vc_par[0] << 8 | vc->vc_par[1];
|
||||||
@@ -2275,7 +2277,7 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
if (!vc->vc_ques) {
|
if (vc->vc_priv == EPecma) {
|
||||||
if (vc->vc_par[0] == 5)
|
if (vc->vc_par[0] == 5)
|
||||||
status_report(tty);
|
status_report(tty);
|
||||||
else if (vc->vc_par[0] == 6)
|
else if (vc->vc_par[0] == 6)
|
||||||
@@ -2283,8 +2285,8 @@ static void do_con_trol(struct tty_struct *tty, struct vc_data *vc, int c)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (vc->vc_ques) {
|
if (vc->vc_priv != EPecma) {
|
||||||
vc->vc_ques = 0;
|
vc->vc_priv = EPecma;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch(c) {
|
switch(c) {
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ struct vc_data {
|
|||||||
unsigned int vc_s_blink : 1;
|
unsigned int vc_s_blink : 1;
|
||||||
unsigned int vc_s_reverse : 1;
|
unsigned int vc_s_reverse : 1;
|
||||||
/* misc */
|
/* misc */
|
||||||
unsigned int vc_ques : 1;
|
unsigned int vc_priv : 3;
|
||||||
unsigned int vc_need_wrap : 1;
|
unsigned int vc_need_wrap : 1;
|
||||||
unsigned int vc_can_do_color : 1;
|
unsigned int vc_can_do_color : 1;
|
||||||
unsigned int vc_report_mouse : 2;
|
unsigned int vc_report_mouse : 2;
|
||||||
|
|||||||
Reference in New Issue
Block a user