Move flags to generic function, add charset handler stubs.
This commit is contained in:
parent
ae7959c6a4
commit
f4475b4f00
@ -42,7 +42,10 @@
|
|||||||
|
|
||||||
int guac_terminal_echo(guac_terminal* term, char c);
|
int guac_terminal_echo(guac_terminal* term, char c);
|
||||||
int guac_terminal_escape(guac_terminal* term, char c);
|
int guac_terminal_escape(guac_terminal* term, char c);
|
||||||
int guac_terminal_charset(guac_terminal* term, char c);
|
int guac_terminal_g0_charset(guac_terminal* term, char c);
|
||||||
|
int guac_terminal_g1_charset(guac_terminal* term, char c);
|
||||||
|
int guac_terminal_g2_charset(guac_terminal* term, char c);
|
||||||
|
int guac_terminal_g3_charset(guac_terminal* term, char c);
|
||||||
int guac_terminal_csi(guac_terminal* term, char c);
|
int guac_terminal_csi(guac_terminal* term, char c);
|
||||||
int guac_terminal_osc(guac_terminal* term, char c);
|
int guac_terminal_osc(guac_terminal* term, char c);
|
||||||
int guac_terminal_ctrl_func(guac_terminal* term, char c);
|
int guac_terminal_ctrl_func(guac_terminal* term, char c);
|
||||||
|
@ -173,7 +173,19 @@ int guac_terminal_escape(guac_terminal* term, char c) {
|
|||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
case '(':
|
case '(':
|
||||||
term->char_handler = guac_terminal_charset;
|
term->char_handler = guac_terminal_g0_charset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ')':
|
||||||
|
term->char_handler = guac_terminal_g1_charset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
term->char_handler = guac_terminal_g2_charset;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '+':
|
||||||
|
term->char_handler = guac_terminal_g3_charset;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ']':
|
case ']':
|
||||||
@ -273,9 +285,58 @@ int guac_terminal_escape(guac_terminal* term, char c) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int guac_terminal_charset(guac_terminal* term, char c) {
|
int guac_terminal_g0_charset(guac_terminal* term, char c) {
|
||||||
|
|
||||||
|
/* STUB */
|
||||||
|
guac_client_log_info(term->client, "Ignoring G0 charset: 0x%02x", c);
|
||||||
term->char_handler = guac_terminal_echo;
|
term->char_handler = guac_terminal_echo;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int guac_terminal_g1_charset(guac_terminal* term, char c) {
|
||||||
|
|
||||||
|
/* STUB */
|
||||||
|
guac_client_log_info(term->client, "Ignoring G1 charset: 0x%02x", c);
|
||||||
|
term->char_handler = guac_terminal_echo;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int guac_terminal_g2_charset(guac_terminal* term, char c) {
|
||||||
|
|
||||||
|
/* STUB */
|
||||||
|
guac_client_log_info(term->client, "Ignoring G2 charset: 0x%02x", c);
|
||||||
|
term->char_handler = guac_terminal_echo;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int guac_terminal_g3_charset(guac_terminal* term, char c) {
|
||||||
|
|
||||||
|
/* STUB */
|
||||||
|
guac_client_log_info(term->client, "Ignoring G3 charset: 0x%02x", c);
|
||||||
|
term->char_handler = guac_terminal_echo;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Looks up the flag specified by the given number and mode. Used by the Set/Reset Mode
|
||||||
|
* functions of the terminal.
|
||||||
|
*/
|
||||||
|
static bool* __guac_terminal_get_flag(guac_terminal* term, int num, char private_mode) {
|
||||||
|
|
||||||
|
if (private_mode == '?') {
|
||||||
|
switch (num) {
|
||||||
|
case 1: return &(term->application_cursor_keys); /* DECCKM */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Unknown flag */
|
||||||
|
return NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int guac_terminal_csi(guac_terminal* term, char c) {
|
int guac_terminal_csi(guac_terminal* term, char c) {
|
||||||
@ -304,6 +365,7 @@ int guac_terminal_csi(guac_terminal* term, char c) {
|
|||||||
else if ((c >= 0x40 && c <= 0x7E) || c == ';') {
|
else if ((c >= 0x40 && c <= 0x7E) || c == ';') {
|
||||||
|
|
||||||
int i, row, col, amount;
|
int i, row, col, amount;
|
||||||
|
bool* flag;
|
||||||
|
|
||||||
/* At most 16 parameters */
|
/* At most 16 parameters */
|
||||||
if (argc < 16) {
|
if (argc < 16) {
|
||||||
@ -554,10 +616,11 @@ int guac_terminal_csi(guac_terminal* term, char c) {
|
|||||||
|
|
||||||
/* h: Set Mode */
|
/* h: Set Mode */
|
||||||
case 'h':
|
case 'h':
|
||||||
|
|
||||||
/* DECCKM */
|
/* Look up flag and set */
|
||||||
if (argv[0] == 1 && private_mode_character == '?')
|
flag = __guac_terminal_get_flag(term, argv[0], private_mode_character);
|
||||||
term->application_cursor_keys = true;
|
if (flag != NULL)
|
||||||
|
*flag = true;
|
||||||
|
|
||||||
else
|
else
|
||||||
guac_client_log_info(term->client,
|
guac_client_log_info(term->client,
|
||||||
@ -568,10 +631,11 @@ int guac_terminal_csi(guac_terminal* term, char c) {
|
|||||||
|
|
||||||
/* l: Reset Mode */
|
/* l: Reset Mode */
|
||||||
case 'l':
|
case 'l':
|
||||||
|
|
||||||
/* DECCKM */
|
/* Look up flag and clear */
|
||||||
if (argv[0] == 1 && private_mode_character == '?')
|
flag = __guac_terminal_get_flag(term, argv[0], private_mode_character);
|
||||||
term->application_cursor_keys = false;
|
if (flag != NULL)
|
||||||
|
*flag = false;
|
||||||
|
|
||||||
else
|
else
|
||||||
guac_client_log_info(term->client,
|
guac_client_log_info(term->client,
|
||||||
|
Loading…
Reference in New Issue
Block a user