vt/csi: use vt_param_get()

This commit is contained in:
Daniel Eklöf 2019-07-10 16:04:16 +02:00
parent 9df691e1af
commit 454133033c
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 22 additions and 32 deletions

52
csi.c
View file

@ -13,6 +13,7 @@
#define LOG_ENABLE_DBG 0 #define LOG_ENABLE_DBG 0
#include "log.h" #include "log.h"
#include "grid.h" #include "grid.h"
#include "vt.h"
#define min(x, y) ((x) < (y) ? (x) : (y)) #define min(x, y) ((x) < (y) ? (x) : (y))
@ -69,17 +70,6 @@ initialize_colors256(void)
} }
} }
static int
param_get(const struct terminal *term, size_t idx, int default_value)
{
if (term->vt.params.idx > idx) {
int value = term->vt.params.v[idx].value;
return value != 0 ? value : default_value;
}
return default_value;
}
static void static void
sgr_reset(struct terminal *term) sgr_reset(struct terminal *term)
{ {
@ -290,7 +280,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
case 'd': { case 'd': {
/* VPA - vertical line position absolute */ /* VPA - vertical line position absolute */
int row = min(param_get(term, 0, 1), term->rows); int row = min(vt_param_get(term, 0, 1), term->rows);
term_cursor_to(term, row - 1, term->cursor.col); term_cursor_to(term, row - 1, term->cursor.col);
break; break;
} }
@ -300,33 +290,33 @@ csi_dispatch(struct terminal *term, uint8_t final)
break; break;
case 'A': case 'A':
term_cursor_up(term, param_get(term, 0, 1)); term_cursor_up(term, vt_param_get(term, 0, 1));
break; break;
case 'e': case 'e':
case 'B': case 'B':
term_cursor_down(term, param_get(term, 0, 1)); term_cursor_down(term, vt_param_get(term, 0, 1));
break; break;
case 'C': case 'C':
term_cursor_right(term, param_get(term, 0, 1)); term_cursor_right(term, vt_param_get(term, 0, 1));
break; break;
case 'D': case 'D':
term_cursor_left(term, param_get(term, 0, 1)); term_cursor_left(term, vt_param_get(term, 0, 1));
break; break;
case 'G': { case 'G': {
/* Cursor horizontal absolute */ /* Cursor horizontal absolute */
int col = min(param_get(term, 0, 1), term->cols); int col = min(vt_param_get(term, 0, 1), term->cols);
term_cursor_to(term, term->cursor.row, col - 1); term_cursor_to(term, term->cursor.row, col - 1);
break; break;
} }
case 'H': { case 'H': {
/* Move cursor */ /* Move cursor */
int row = min(param_get(term, 0, 1), term->rows); int row = min(vt_param_get(term, 0, 1), term->rows);
int col = min(param_get(term, 1, 1), term->cols); int col = min(vt_param_get(term, 1, 1), term->cols);
term_cursor_to(term, row - 1, col - 1); term_cursor_to(term, row - 1, col - 1);
break; break;
} }
@ -334,7 +324,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
case 'J': { case 'J': {
/* Erase screen */ /* Erase screen */
int param = param_get(term, 0, 0); int param = vt_param_get(term, 0, 0);
switch (param) { switch (param) {
case 0: case 0:
/* From cursor to end of screen */ /* From cursor to end of screen */
@ -369,7 +359,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
case 'K': { case 'K': {
/* Erase line */ /* Erase line */
int param = param_get(term, 0, 0); int param = vt_param_get(term, 0, 0);
switch (param) { switch (param) {
case 0: case 0:
/* From cursor to end of line */ /* From cursor to end of line */
@ -409,7 +399,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
break; break;
int count = min( int count = min(
param_get(term, 0, 1), vt_param_get(term, 0, 1),
term->scroll_region.end - term->cursor.row); term->scroll_region.end - term->cursor.row);
term_scroll_reverse_partial( term_scroll_reverse_partial(
@ -427,7 +417,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
break; break;
int count = min( int count = min(
param_get(term, 0, 1), vt_param_get(term, 0, 1),
term->scroll_region.end - term->cursor.row); term->scroll_region.end - term->cursor.row);
term_scroll_partial( term_scroll_partial(
@ -444,7 +434,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
/* Number of characters to delete */ /* Number of characters to delete */
int count = min( int count = min(
param_get(term, 0, 1), term->cols - term->cursor.col); vt_param_get(term, 0, 1), term->cols - term->cursor.col);
/* Number of characters left after deletion (on current line) */ /* Number of characters left after deletion (on current line) */
int remaining = term->cols - (term->cursor.col + count); int remaining = term->cols - (term->cursor.col + count);
@ -473,17 +463,17 @@ csi_dispatch(struct terminal *term, uint8_t final)
} }
case 'S': case 'S':
term_scroll(term, param_get(term, 0, 1)); term_scroll(term, vt_param_get(term, 0, 1));
break; break;
case 'T': case 'T':
term_scroll_reverse(term, param_get(term, 0, 1)); term_scroll_reverse(term, vt_param_get(term, 0, 1));
break; break;
case 'X': { case 'X': {
/* Erase chars */ /* Erase chars */
int count = min( int count = min(
param_get(term, 0, 1), term->cols - term->cursor.col); vt_param_get(term, 0, 1), term->cols - term->cursor.col);
term_erase( term_erase(
term, term,
@ -510,8 +500,8 @@ csi_dispatch(struct terminal *term, uint8_t final)
break; break;
case 'r': { case 'r': {
int start = param_get(term, 0, 1); int start = vt_param_get(term, 0, 1);
int end = min(param_get(term, 1, term->rows), term->rows); int end = min(vt_param_get(term, 1, term->rows), term->rows);
/* 1-based */ /* 1-based */
term->scroll_region.start = start - 1; term->scroll_region.start = start - 1;
@ -537,7 +527,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
case 'n': { case 'n': {
if (term->vt.params.idx > 0) { if (term->vt.params.idx > 0) {
int param = param_get(term, 0, 0); int param = vt_param_get(term, 0, 0);
switch (param) { switch (param) {
case 6: { case 6: {
/* u7 - cursor position query */ /* u7 - cursor position query */
@ -770,7 +760,7 @@ csi_dispatch(struct terminal *term, uint8_t final)
case '>': { case '>': {
switch (final) { switch (final) {
case 'c': { case 'c': {
int param = param_get(term, 0, 0); int param = vt_param_get(term, 0, 0);
if (param != 0) { if (param != 0) {
LOG_ERR( LOG_ERR(
"unimplemented: send device attributes with param = %d", "unimplemented: send device attributes with param = %d",

2
vt.c
View file

@ -599,7 +599,7 @@ esc_dispatch(struct terminal *term, uint8_t final)
case 'B': { case 'B': {
/* Configure G0-G3 to use ASCII */ /* Configure G0-G3 to use ASCII */
char param = term->vt.params.idx > 0 ? term->vt.params.v[0].value : '('; char param = vt_param_get(term, 0, '(');
switch (param) { switch (param) {
case '(': term->charset[0] = CHARSET_ASCII; break; case '(': term->charset[0] = CHARSET_ASCII; break;