White-space-only change. The file originally had screwed indentation.
This commit is contained in:
parent
8933a11127
commit
2886c99404
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=58330
@ -86,10 +86,10 @@ static sc_term_input_t scterm_input;
|
|||||||
|
|
||||||
static sc_term_sw_t sc_term_sc = {
|
static sc_term_sw_t sc_term_sc = {
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
"sc", /* emulator name */
|
"sc", /* emulator name */
|
||||||
"syscons terminal", /* description */
|
"syscons terminal", /* description */
|
||||||
"*", /* matching renderer, any :-) */
|
"*", /* matching renderer, any :-) */
|
||||||
sizeof(term_stat), /* softc size */
|
sizeof(term_stat), /* softc size */
|
||||||
0,
|
0,
|
||||||
scterm_init,
|
scterm_init,
|
||||||
scterm_term,
|
scterm_term,
|
||||||
@ -180,394 +180,407 @@ scterm_scan_esc(scr_stat *scp, term_stat *tcp, u_char c)
|
|||||||
sc_softc_t *sc;
|
sc_softc_t *sc;
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
||||||
i = n = 0;
|
i = n = 0;
|
||||||
sc = scp->sc;
|
sc = scp->sc;
|
||||||
if (tcp->esc == 1) { /* seen ESC */
|
if (tcp->esc == 1) { /* seen ESC */
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
|
||||||
case '7': /* Save cursor position */
|
case '7': /* Save cursor position */
|
||||||
tcp->saved_xpos = scp->xpos;
|
tcp->saved_xpos = scp->xpos;
|
||||||
tcp->saved_ypos = scp->ypos;
|
tcp->saved_ypos = scp->ypos;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '8': /* Restore saved cursor position */
|
case '8': /* Restore saved cursor position */
|
||||||
if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0)
|
if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0)
|
||||||
sc_move_cursor(scp, tcp->saved_xpos, tcp->saved_ypos);
|
sc_move_cursor(scp, tcp->saved_xpos,
|
||||||
break;
|
tcp->saved_ypos);
|
||||||
|
break;
|
||||||
|
|
||||||
case '[': /* Start ESC [ sequence */
|
case '[': /* Start ESC [ sequence */
|
||||||
tcp->esc = 2;
|
tcp->esc = 2;
|
||||||
tcp->last_param = -1;
|
tcp->last_param = -1;
|
||||||
for (i = tcp->num_param; i < MAX_ESC_PAR; i++)
|
for (i = tcp->num_param; i < MAX_ESC_PAR; i++)
|
||||||
tcp->param[i] = 1;
|
tcp->param[i] = 1;
|
||||||
tcp->num_param = 0;
|
tcp->num_param = 0;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'M': /* Move cursor up 1 line, scroll if at top */
|
case 'M': /* Move cursor up 1 line, scroll if at top */
|
||||||
sc_term_up_scroll(scp, 1, sc->scr_map[0x20], tcp->cur_attr, 0, 0);
|
sc_term_up_scroll(scp, 1, sc->scr_map[0x20],
|
||||||
break;
|
tcp->cur_attr, 0, 0);
|
||||||
|
break;
|
||||||
#if notyet
|
#if notyet
|
||||||
case 'Q':
|
case 'Q':
|
||||||
tcp->esc = 4;
|
tcp->esc = 4;
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
case 'c': /* Clear screen & home */
|
case 'c': /* Clear screen & home */
|
||||||
sc_clear_screen(scp);
|
sc_clear_screen(scp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '(': /* iso-2022: designate 94 character set to G0 */
|
case '(': /* iso-2022: designate 94 character set to G0 */
|
||||||
tcp->esc = 5;
|
tcp->esc = 5;
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tcp->esc == 2) { /* seen ESC [ */
|
|
||||||
if (c >= '0' && c <= '9') {
|
|
||||||
if (tcp->num_param < MAX_ESC_PAR) {
|
|
||||||
if (tcp->last_param != tcp->num_param) {
|
|
||||||
tcp->last_param = tcp->num_param;
|
|
||||||
tcp->param[tcp->num_param] = 0;
|
|
||||||
} else {
|
|
||||||
tcp->param[tcp->num_param] *= 10;
|
|
||||||
}
|
}
|
||||||
tcp->param[tcp->num_param] += c - '0';
|
} else if (tcp->esc == 2) { /* seen ESC [ */
|
||||||
return;
|
if (c >= '0' && c <= '9') {
|
||||||
}
|
if (tcp->num_param < MAX_ESC_PAR) {
|
||||||
}
|
if (tcp->last_param != tcp->num_param) {
|
||||||
tcp->num_param = tcp->last_param + 1;
|
tcp->last_param = tcp->num_param;
|
||||||
switch (c) {
|
tcp->param[tcp->num_param] = 0;
|
||||||
|
} else {
|
||||||
case ';':
|
tcp->param[tcp->num_param] *= 10;
|
||||||
if (tcp->num_param < MAX_ESC_PAR)
|
}
|
||||||
return;
|
tcp->param[tcp->num_param] += c - '0';
|
||||||
break;
|
return;
|
||||||
|
}
|
||||||
case '=':
|
|
||||||
tcp->esc = 3;
|
|
||||||
tcp->last_param = -1;
|
|
||||||
for (i = tcp->num_param; i < MAX_ESC_PAR; i++)
|
|
||||||
tcp->param[i] = 1;
|
|
||||||
tcp->num_param = 0;
|
|
||||||
return;
|
|
||||||
|
|
||||||
case 'A': /* up n rows */
|
|
||||||
sc_term_up(scp, tcp->param[0], 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'B': /* down n rows */
|
|
||||||
sc_term_down(scp, tcp->param[0], 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'C': /* right n columns */
|
|
||||||
sc_term_right(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'D': /* left n columns */
|
|
||||||
sc_term_left(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'E': /* cursor to start of line n lines down */
|
|
||||||
n = tcp->param[0]; if (n < 1) n = 1;
|
|
||||||
sc_move_cursor(scp, 0, scp->ypos + n);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'F': /* cursor to start of line n lines up */
|
|
||||||
n = tcp->param[0]; if (n < 1) n = 1;
|
|
||||||
sc_move_cursor(scp, 0, scp->ypos - n);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'f': /* Cursor move */
|
|
||||||
case 'H':
|
|
||||||
if (tcp->num_param == 0)
|
|
||||||
sc_move_cursor(scp, 0, 0);
|
|
||||||
else if (tcp->num_param == 2)
|
|
||||||
sc_move_cursor(scp, tcp->param[1] - 1, tcp->param[0] - 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'J': /* Clear all or part of display */
|
|
||||||
if (tcp->num_param == 0)
|
|
||||||
n = 0;
|
|
||||||
else
|
|
||||||
n = tcp->param[0];
|
|
||||||
sc_term_clr_eos(scp, n, sc->scr_map[0x20], tcp->cur_attr);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'K': /* Clear all or part of line */
|
|
||||||
if (tcp->num_param == 0)
|
|
||||||
n = 0;
|
|
||||||
else
|
|
||||||
n = tcp->param[0];
|
|
||||||
sc_term_clr_eol(scp, n, sc->scr_map[0x20], tcp->cur_attr);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'L': /* Insert n lines */
|
|
||||||
sc_term_ins_line(scp, scp->ypos, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'M': /* Delete n lines */
|
|
||||||
sc_term_del_line(scp, scp->ypos, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'P': /* Delete n chars */
|
|
||||||
sc_term_del_char(scp, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '@': /* Insert n chars */
|
|
||||||
sc_term_ins_char(scp, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'S': /* scroll up n lines */
|
|
||||||
sc_term_del_line(scp, 0, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'T': /* scroll down n lines */
|
|
||||||
sc_term_ins_line(scp, 0, tcp->param[0],
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'X': /* erase n characters in line */
|
|
||||||
n = tcp->param[0]; if (n < 1) n = 1;
|
|
||||||
if (n > scp->xsize - scp->xpos)
|
|
||||||
n = scp->xsize - scp->xpos;
|
|
||||||
sc_vtb_erase(&scp->vtb, scp->cursor_pos, n,
|
|
||||||
sc->scr_map[0x20], tcp->cur_attr);
|
|
||||||
mark_for_update(scp, scp->cursor_pos);
|
|
||||||
mark_for_update(scp, scp->cursor_pos + n - 1);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'Z': /* move n tabs backwards */
|
|
||||||
sc_term_backtab(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '`': /* move cursor to column n */
|
|
||||||
sc_term_col(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'a': /* move cursor n columns to the right */
|
|
||||||
sc_term_right(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'd': /* move cursor to row n */
|
|
||||||
sc_term_row(scp, tcp->param[0]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'e': /* move cursor n rows down */
|
|
||||||
sc_term_down(scp, tcp->param[0], 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'm': /* change attribute */
|
|
||||||
if (tcp->num_param == 0) {
|
|
||||||
tcp->attr_mask = NORMAL_ATTR;
|
|
||||||
tcp->cur_color = tcp->std_color;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (i = 0; i < tcp->num_param; i++) {
|
|
||||||
switch (n = tcp->param[i]) {
|
|
||||||
case 0: /* back to normal */
|
|
||||||
tcp->attr_mask = NORMAL_ATTR;
|
|
||||||
tcp->cur_color = tcp->std_color;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 1: /* bold */
|
|
||||||
tcp->attr_mask |= BOLD_ATTR;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 4: /* underline */
|
|
||||||
tcp->attr_mask |= UNDERLINE_ATTR;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 5: /* blink */
|
|
||||||
tcp->attr_mask |= BLINK_ATTR;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 7: /* reverse video */
|
|
||||||
tcp->attr_mask |= REVERSE_ATTR;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 30: case 31: /* set fg color */
|
|
||||||
case 32: case 33: case 34:
|
|
||||||
case 35: case 36: case 37:
|
|
||||||
tcp->attr_mask |= FG_CHANGED;
|
|
||||||
tcp->cur_color.fg = ansi_col[n - 30];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 40: case 41: /* set bg color */
|
|
||||||
case 42: case 43: case 44:
|
|
||||||
case 45: case 46: case 47:
|
|
||||||
tcp->attr_mask |= BG_CHANGED;
|
|
||||||
tcp->cur_color.bg = ansi_col[n - 40];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
tcp->num_param = tcp->last_param + 1;
|
||||||
break;
|
switch (c) {
|
||||||
|
|
||||||
case 's': /* Save cursor position */
|
case ';':
|
||||||
tcp->saved_xpos = scp->xpos;
|
if (tcp->num_param < MAX_ESC_PAR)
|
||||||
tcp->saved_ypos = scp->ypos;
|
return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'u': /* Restore saved cursor position */
|
case '=':
|
||||||
if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0)
|
tcp->esc = 3;
|
||||||
sc_move_cursor(scp, tcp->saved_xpos, tcp->saved_ypos);
|
tcp->last_param = -1;
|
||||||
break;
|
for (i = tcp->num_param; i < MAX_ESC_PAR; i++)
|
||||||
|
tcp->param[i] = 1;
|
||||||
|
tcp->num_param = 0;
|
||||||
|
return;
|
||||||
|
|
||||||
case 'x':
|
case 'A': /* up n rows */
|
||||||
if (tcp->num_param == 0)
|
sc_term_up(scp, tcp->param[0], 0);
|
||||||
n = 0;
|
break;
|
||||||
else
|
|
||||||
n = tcp->param[0];
|
|
||||||
switch (n) {
|
|
||||||
case 0: /* reset attributes */
|
|
||||||
tcp->attr_mask = NORMAL_ATTR;
|
|
||||||
tcp->cur_color = tcp->std_color = tcp->dflt_std_color;
|
|
||||||
tcp->rev_color = tcp->dflt_rev_color;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 1: /* set ansi background */
|
|
||||||
tcp->attr_mask &= ~BG_CHANGED;
|
|
||||||
tcp->cur_color.bg = tcp->std_color.bg =
|
|
||||||
ansi_col[tcp->param[1] & 0x0f];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 2: /* set ansi foreground */
|
|
||||||
tcp->attr_mask &= ~FG_CHANGED;
|
|
||||||
tcp->cur_color.fg = tcp->std_color.fg =
|
|
||||||
ansi_col[tcp->param[1] & 0x0f];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 3: /* set ansi attribute directly */
|
|
||||||
tcp->attr_mask &= ~(FG_CHANGED | BG_CHANGED);
|
|
||||||
tcp->cur_color.fg = tcp->std_color.fg =
|
|
||||||
tcp->param[1] & 0x0f;
|
|
||||||
tcp->cur_color.bg = tcp->std_color.bg =
|
|
||||||
(tcp->param[1] >> 4) & 0x0f;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 5: /* set ansi reverse video background */
|
|
||||||
tcp->rev_color.bg = ansi_col[tcp->param[1] & 0x0f];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 6: /* set ansi reverse video foreground */
|
|
||||||
tcp->rev_color.fg = ansi_col[tcp->param[1] & 0x0f];
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
case 7: /* set ansi reverse video directly */
|
|
||||||
tcp->rev_color.fg = tcp->param[1] & 0x0f;
|
|
||||||
tcp->rev_color.bg = (tcp->param[1] >> 4) & 0x0f;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'z': /* switch to (virtual) console n */
|
case 'B': /* down n rows */
|
||||||
if (tcp->num_param == 1)
|
sc_term_down(scp, tcp->param[0], 0);
|
||||||
sc_switch_scr(sc, tcp->param[0]);
|
break;
|
||||||
break;
|
|
||||||
}
|
case 'C': /* right n columns */
|
||||||
}
|
sc_term_right(scp, tcp->param[0]);
|
||||||
else if (tcp->esc == 3) { /* seen ESC [0-9]+ = */
|
break;
|
||||||
if (c >= '0' && c <= '9') {
|
|
||||||
if (tcp->num_param < MAX_ESC_PAR) {
|
case 'D': /* left n columns */
|
||||||
if (tcp->last_param != tcp->num_param) {
|
sc_term_left(scp, tcp->param[0]);
|
||||||
tcp->last_param = tcp->num_param;
|
break;
|
||||||
tcp->param[tcp->num_param] = 0;
|
|
||||||
} else {
|
case 'E': /* cursor to start of line n lines down */
|
||||||
tcp->param[tcp->num_param] *= 10;
|
n = tcp->param[0];
|
||||||
|
if (n < 1)
|
||||||
|
n = 1;
|
||||||
|
sc_move_cursor(scp, 0, scp->ypos + n);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'F': /* cursor to start of line n lines up */
|
||||||
|
n = tcp->param[0];
|
||||||
|
if (n < 1)
|
||||||
|
n = 1;
|
||||||
|
sc_move_cursor(scp, 0, scp->ypos - n);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f': /* Cursor move */
|
||||||
|
case 'H':
|
||||||
|
if (tcp->num_param == 0)
|
||||||
|
sc_move_cursor(scp, 0, 0);
|
||||||
|
else if (tcp->num_param == 2)
|
||||||
|
sc_move_cursor(scp, tcp->param[1] - 1,
|
||||||
|
tcp->param[0] - 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'J': /* Clear all or part of display */
|
||||||
|
if (tcp->num_param == 0)
|
||||||
|
n = 0;
|
||||||
|
else
|
||||||
|
n = tcp->param[0];
|
||||||
|
sc_term_clr_eos(scp, n, sc->scr_map[0x20],
|
||||||
|
tcp->cur_attr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'K': /* Clear all or part of line */
|
||||||
|
if (tcp->num_param == 0)
|
||||||
|
n = 0;
|
||||||
|
else
|
||||||
|
n = tcp->param[0];
|
||||||
|
sc_term_clr_eol(scp, n, sc->scr_map[0x20],
|
||||||
|
tcp->cur_attr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'L': /* Insert n lines */
|
||||||
|
sc_term_ins_line(scp, scp->ypos, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'M': /* Delete n lines */
|
||||||
|
sc_term_del_line(scp, scp->ypos, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'P': /* Delete n chars */
|
||||||
|
sc_term_del_char(scp, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '@': /* Insert n chars */
|
||||||
|
sc_term_ins_char(scp, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'S': /* scroll up n lines */
|
||||||
|
sc_term_del_line(scp, 0, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'T': /* scroll down n lines */
|
||||||
|
sc_term_ins_line(scp, 0, tcp->param[0],
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'X': /* erase n characters in line */
|
||||||
|
n = tcp->param[0];
|
||||||
|
if (n < 1)
|
||||||
|
n = 1;
|
||||||
|
if (n > scp->xsize - scp->xpos)
|
||||||
|
n = scp->xsize - scp->xpos;
|
||||||
|
sc_vtb_erase(&scp->vtb, scp->cursor_pos, n,
|
||||||
|
sc->scr_map[0x20], tcp->cur_attr);
|
||||||
|
mark_for_update(scp, scp->cursor_pos);
|
||||||
|
mark_for_update(scp, scp->cursor_pos + n - 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Z': /* move n tabs backwards */
|
||||||
|
sc_term_backtab(scp, tcp->param[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '`': /* move cursor to column n */
|
||||||
|
sc_term_col(scp, tcp->param[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'a': /* move cursor n columns to the right */
|
||||||
|
sc_term_right(scp, tcp->param[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd': /* move cursor to row n */
|
||||||
|
sc_term_row(scp, tcp->param[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e': /* move cursor n rows down */
|
||||||
|
sc_term_down(scp, tcp->param[0], 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'm': /* change attribute */
|
||||||
|
if (tcp->num_param == 0) {
|
||||||
|
tcp->attr_mask = NORMAL_ATTR;
|
||||||
|
tcp->cur_color = tcp->std_color;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (i = 0; i < tcp->num_param; i++) {
|
||||||
|
switch (n = tcp->param[i]) {
|
||||||
|
case 0: /* back to normal */
|
||||||
|
tcp->attr_mask = NORMAL_ATTR;
|
||||||
|
tcp->cur_color = tcp->std_color;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 1: /* bold */
|
||||||
|
tcp->attr_mask |= BOLD_ATTR;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 4: /* underline */
|
||||||
|
tcp->attr_mask |= UNDERLINE_ATTR;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 5: /* blink */
|
||||||
|
tcp->attr_mask |= BLINK_ATTR;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 7: /* reverse video */
|
||||||
|
tcp->attr_mask |= REVERSE_ATTR;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 30: case 31: /* set fg color */
|
||||||
|
case 32: case 33: case 34:
|
||||||
|
case 35: case 36: case 37:
|
||||||
|
tcp->attr_mask |= FG_CHANGED;
|
||||||
|
tcp->cur_color.fg = ansi_col[n - 30];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 40: case 41: /* set bg color */
|
||||||
|
case 42: case 43: case 44:
|
||||||
|
case 45: case 46: case 47:
|
||||||
|
tcp->attr_mask |= BG_CHANGED;
|
||||||
|
tcp->cur_color.bg = ansi_col[n - 40];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's': /* Save cursor position */
|
||||||
|
tcp->saved_xpos = scp->xpos;
|
||||||
|
tcp->saved_ypos = scp->ypos;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u': /* Restore saved cursor position */
|
||||||
|
if (tcp->saved_xpos >= 0 && tcp->saved_ypos >= 0)
|
||||||
|
sc_move_cursor(scp, tcp->saved_xpos,
|
||||||
|
tcp->saved_ypos);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'x':
|
||||||
|
if (tcp->num_param == 0)
|
||||||
|
n = 0;
|
||||||
|
else
|
||||||
|
n = tcp->param[0];
|
||||||
|
switch (n) {
|
||||||
|
case 0: /* reset attributes */
|
||||||
|
tcp->attr_mask = NORMAL_ATTR;
|
||||||
|
tcp->cur_color = tcp->std_color
|
||||||
|
= tcp->dflt_std_color;
|
||||||
|
tcp->rev_color = tcp->dflt_rev_color;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 1: /* set ansi background */
|
||||||
|
tcp->attr_mask &= ~BG_CHANGED;
|
||||||
|
tcp->cur_color.bg = tcp->std_color.bg
|
||||||
|
= ansi_col[tcp->param[1] & 0x0f];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 2: /* set ansi foreground */
|
||||||
|
tcp->attr_mask &= ~FG_CHANGED;
|
||||||
|
tcp->cur_color.fg = tcp->std_color.fg
|
||||||
|
= ansi_col[tcp->param[1] & 0x0f];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 3: /* set ansi attribute directly */
|
||||||
|
tcp->attr_mask &= ~(FG_CHANGED | BG_CHANGED);
|
||||||
|
tcp->cur_color.fg = tcp->std_color.fg
|
||||||
|
= tcp->param[1] & 0x0f;
|
||||||
|
tcp->cur_color.bg = tcp->std_color.bg
|
||||||
|
= (tcp->param[1] >> 4) & 0x0f;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 5: /* set ansi reverse video background */
|
||||||
|
tcp->rev_color.bg = ansi_col[tcp->param[1] & 0x0f];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 6: /* set ansi reverse video foreground */
|
||||||
|
tcp->rev_color.fg = ansi_col[tcp->param[1] & 0x0f];
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
case 7: /* set ansi reverse video directly */
|
||||||
|
tcp->rev_color.fg = tcp->param[1] & 0x0f;
|
||||||
|
tcp->rev_color.bg = (tcp->param[1] >> 4) & 0x0f;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'z': /* switch to (virtual) console n */
|
||||||
|
if (tcp->num_param == 1)
|
||||||
|
sc_switch_scr(sc, tcp->param[0]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
tcp->param[tcp->num_param] += c - '0';
|
} else if (tcp->esc == 3) { /* seen ESC [0-9]+ = */
|
||||||
return;
|
if (c >= '0' && c <= '9') {
|
||||||
}
|
if (tcp->num_param < MAX_ESC_PAR) {
|
||||||
}
|
if (tcp->last_param != tcp->num_param) {
|
||||||
tcp->num_param = tcp->last_param + 1;
|
tcp->last_param = tcp->num_param;
|
||||||
switch (c) {
|
tcp->param[tcp->num_param] = 0;
|
||||||
|
} else {
|
||||||
|
tcp->param[tcp->num_param] *= 10;
|
||||||
|
}
|
||||||
|
tcp->param[tcp->num_param] += c - '0';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tcp->num_param = tcp->last_param + 1;
|
||||||
|
switch (c) {
|
||||||
|
|
||||||
case ';':
|
case ';':
|
||||||
if (tcp->num_param < MAX_ESC_PAR)
|
if (tcp->num_param < MAX_ESC_PAR)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'A': /* set display border color */
|
case 'A': /* set display border color */
|
||||||
if (tcp->num_param == 1) {
|
if (tcp->num_param == 1) {
|
||||||
scp->border=tcp->param[0] & 0xff;
|
scp->border=tcp->param[0] & 0xff;
|
||||||
if (scp == sc->cur_scp)
|
if (scp == sc->cur_scp)
|
||||||
sc_set_border(scp, scp->border);
|
sc_set_border(scp, scp->border);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'B': /* set bell pitch and duration */
|
case 'B': /* set bell pitch and duration */
|
||||||
if (tcp->num_param == 2) {
|
if (tcp->num_param == 2) {
|
||||||
scp->bell_pitch = tcp->param[0];
|
scp->bell_pitch = tcp->param[0];
|
||||||
scp->bell_duration = tcp->param[1];
|
scp->bell_duration = tcp->param[1];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'C': /* set cursor type & shape */
|
case 'C': /* set cursor type & shape */
|
||||||
i = spltty();
|
i = spltty();
|
||||||
if (!ISGRAPHSC(sc->cur_scp))
|
if (!ISGRAPHSC(sc->cur_scp))
|
||||||
sc_remove_cursor_image(sc->cur_scp);
|
sc_remove_cursor_image(sc->cur_scp);
|
||||||
if (tcp->num_param == 1) {
|
if (tcp->num_param == 1) {
|
||||||
if (tcp->param[0] & 0x01)
|
if (tcp->param[0] & 0x01)
|
||||||
sc->flags |= SC_BLINK_CURSOR;
|
sc->flags |= SC_BLINK_CURSOR;
|
||||||
else
|
else
|
||||||
sc->flags &= ~SC_BLINK_CURSOR;
|
sc->flags &= ~SC_BLINK_CURSOR;
|
||||||
if (tcp->param[0] & 0x02)
|
if (tcp->param[0] & 0x02)
|
||||||
sc->flags |= SC_CHAR_CURSOR;
|
sc->flags |= SC_CHAR_CURSOR;
|
||||||
else
|
else
|
||||||
sc->flags &= ~SC_CHAR_CURSOR;
|
sc->flags &= ~SC_CHAR_CURSOR;
|
||||||
} else if (tcp->num_param == 2) {
|
} else if (tcp->num_param == 2) {
|
||||||
sc->cursor_base = scp->font_size
|
sc->cursor_base = scp->font_size
|
||||||
- (tcp->param[1] & 0x1F) - 1;
|
- (tcp->param[1] & 0x1F) - 1;
|
||||||
sc->cursor_height = (tcp->param[1] & 0x1F)
|
sc->cursor_height = (tcp->param[1] & 0x1F)
|
||||||
- (tcp->param[0] & 0x1F) + 1;
|
- (tcp->param[0] & 0x1F) + 1;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* The cursor shape is global property; all virtual consoles
|
* The cursor shape is global property;
|
||||||
* are affected. Update the cursor in the current console...
|
* all virtual consoles are affected.
|
||||||
*/
|
* Update the cursor in the current console...
|
||||||
if (!ISGRAPHSC(sc->cur_scp)) {
|
*/
|
||||||
sc_set_cursor_image(sc->cur_scp);
|
if (!ISGRAPHSC(sc->cur_scp)) {
|
||||||
sc_draw_cursor_image(sc->cur_scp);
|
sc_set_cursor_image(sc->cur_scp);
|
||||||
}
|
sc_draw_cursor_image(sc->cur_scp);
|
||||||
splx(i);
|
}
|
||||||
break;
|
splx(i);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'F': /* set ansi foreground */
|
case 'F': /* set ansi foreground */
|
||||||
if (tcp->num_param == 1) {
|
if (tcp->num_param == 1) {
|
||||||
tcp->attr_mask &= ~FG_CHANGED;
|
tcp->attr_mask &= ~FG_CHANGED;
|
||||||
tcp->cur_color.fg = tcp->std_color.fg = tcp->param[0] & 0x0f;
|
tcp->cur_color.fg = tcp->std_color.fg
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
= tcp->param[0] & 0x0f;
|
||||||
}
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'G': /* set ansi background */
|
case 'G': /* set ansi background */
|
||||||
if (tcp->num_param == 1) {
|
if (tcp->num_param == 1) {
|
||||||
tcp->attr_mask &= ~BG_CHANGED;
|
tcp->attr_mask &= ~BG_CHANGED;
|
||||||
tcp->cur_color.bg = tcp->std_color.bg = tcp->param[0] & 0x0f;
|
tcp->cur_color.bg = tcp->std_color.bg
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
= tcp->param[0] & 0x0f;
|
||||||
}
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'H': /* set ansi reverse video foreground */
|
case 'H': /* set ansi reverse video foreground */
|
||||||
if (tcp->num_param == 1) {
|
if (tcp->num_param == 1) {
|
||||||
tcp->rev_color.fg = tcp->param[0] & 0x0f;
|
tcp->rev_color.fg = tcp->param[0] & 0x0f;
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'I': /* set ansi reverse video background */
|
|
||||||
if (tcp->num_param == 1) {
|
|
||||||
tcp->rev_color.bg = tcp->param[0] & 0x0f;
|
|
||||||
tcp->cur_attr = mask2attr(tcp);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
case 'I': /* set ansi reverse video background */
|
||||||
|
if (tcp->num_param == 1) {
|
||||||
|
tcp->rev_color.bg = tcp->param[0] & 0x0f;
|
||||||
|
tcp->cur_attr = mask2attr(tcp);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
#if notyet
|
#if notyet
|
||||||
} else if (tcp->esc == 4) { /* seen ESC Q */
|
} else if (tcp->esc == 4) { /* seen ESC Q */
|
||||||
/* to be filled */
|
/* to be filled */
|
||||||
@ -576,7 +589,7 @@ scterm_scan_esc(scr_stat *scp, term_stat *tcp, u_char c)
|
|||||||
switch (c) {
|
switch (c) {
|
||||||
case 'B': /* iso-2022: desginate ASCII into G0 */
|
case 'B': /* iso-2022: desginate ASCII into G0 */
|
||||||
break;
|
break;
|
||||||
/* other items to be filled */
|
/* other items to be filled */
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user