aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.c')
-rw-r--r--src/parser.c184
1 files changed, 82 insertions, 102 deletions
diff --git a/src/parser.c b/src/parser.c
index 8651128..b9978a0 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -2361,99 +2361,80 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
-void runes_parser_process_string(RunesTerm *t, char *buf, size_t len)
-{
- YY_BUFFER_STATE state;
- yyscan_t scanner;
- int remaining;
-
- /* XXX this will break if buf ends with a partial escape sequence or utf8
- * character. we need to detect that and not consume the entire input in
- * that case */
- runes_parser_yylex_init_extra(t,&scanner);
- state = runes_parser_yy_scan_bytes(buf, len, scanner);
- while ((remaining = runes_parser_yylex(scanner)) == -1);
- t->remaininglen = remaining;
- if (t->remaininglen) {
- memmove(t->readbuf, &buf[len - t->remaininglen], t->remaininglen);
- }
- runes_parser_yy_delete_buffer(state, scanner);
- runes_parser_yylex_destroy(scanner);
-}
-
static void runes_parser_handle_bel(RunesTerm *t)
{
if (t->audible_bell) {
- runes_window_backend_request_audible_bell(t);
+ runes_screen_audible_bell(t);
}
else {
- runes_window_backend_request_visual_bell(t);
+ runes_screen_visual_bell(t);
}
}
static void runes_parser_handle_bs(RunesTerm *t)
{
- runes_display_move_to(t, t->row, t->col - 1);
+ runes_screen_move_to(t, t->scr.cur.row, t->scr.cur.col - 1);
}
static void runes_parser_handle_tab(RunesTerm *t)
{
- runes_display_move_to(t, t->row, t->col - (t->col % 8) + 8);
+ runes_screen_move_to(
+ t, t->scr.cur.row, t->scr.cur.col - (t->scr.cur.col % 8) + 8);
}
static void runes_parser_handle_lf(RunesTerm *t)
{
- runes_display_move_to(t, t->row + 1, t->col);
+ runes_screen_move_to(t, t->scr.cur.row + 1, t->scr.cur.col);
}
static void runes_parser_handle_cr(RunesTerm *t)
{
- runes_display_move_to(t, t->row, 0);
+ runes_screen_move_to(t, t->scr.cur.row, 0);
}
static void runes_parser_handle_deckpam(RunesTerm *t)
{
- t->application_keypad = 1;
+ runes_screen_set_application_keypad(t);
}
static void runes_parser_handle_deckpnm(RunesTerm *t)
{
- t->application_keypad = 0;
+ runes_screen_reset_application_keypad(t);
}
static void runes_parser_handle_ri(RunesTerm *t)
{
- runes_display_move_to(t, t->row - 1, t->col);
+ runes_screen_move_to(t, t->scr.cur.row - 1, t->scr.cur.col);
}
static void runes_parser_handle_ris(RunesTerm *t)
{
- runes_display_use_normal_buffer(t);
- runes_display_set_scroll_region(t, 0, t->rows - 1, 0, t->cols - 1);
- runes_display_clear_screen(t);
- runes_display_save_cursor(t);
- runes_display_reset_text_attributes(t);
- runes_display_show_cursor(t);
-
- t->application_keypad = 0;
- t->application_cursor = 0;
- t->mouse_reporting_press = 0;
- t->mouse_reporting_press_release = 0;
+ runes_screen_use_normal_buffer(t);
+ runes_screen_set_scroll_region(
+ t, 0, t->scr.max.row - 1, 0, t->scr.max.col - 1);
+ runes_screen_clear_screen(t);
+ runes_screen_save_cursor(t);
+ runes_screen_reset_text_attributes(t);
+ runes_screen_show_cursor(t);
+ runes_screen_reset_application_keypad(t);
+ runes_screen_reset_application_cursor(t);
+ runes_screen_reset_mouse_reporting_press(t);
+ runes_screen_reset_mouse_reporting_press_release(t);
}
static void runes_parser_handle_vb(RunesTerm *t)
{
- runes_window_backend_request_visual_bell(t);
+ runes_screen_visual_bell(t);
}
static void runes_parser_handle_decsc(RunesTerm *t)
{
- runes_display_save_cursor(t);
+ runes_screen_save_cursor(t);
}
static void runes_parser_handle_decrc(RunesTerm *t)
{
- runes_display_restore_cursor(t);
+ runes_screen_restore_cursor(t);
}
static void runes_parser_extract_csi_params(
@@ -2506,7 +2487,7 @@ static void runes_parser_handle_ich(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_insert_characters(t, params[0]);
+ runes_screen_insert_characters(t, params[0]);
}
static void runes_parser_handle_cuu(RunesTerm *t, char *buf, size_t len)
@@ -2514,7 +2495,7 @@ static void runes_parser_handle_cuu(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_move_to(t, t->row - params[0], t->col);
+ runes_screen_move_to(t, t->scr.cur.row - params[0], t->scr.cur.col);
}
static void runes_parser_handle_cud(RunesTerm *t, char *buf, size_t len)
@@ -2522,7 +2503,7 @@ static void runes_parser_handle_cud(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_move_to(t, t->row + params[0], t->col);
+ runes_screen_move_to(t, t->scr.cur.row + params[0], t->scr.cur.col);
}
static void runes_parser_handle_cuf(RunesTerm *t, char *buf, size_t len)
@@ -2530,7 +2511,7 @@ static void runes_parser_handle_cuf(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_move_to(t, t->row, t->col + params[0]);
+ runes_screen_move_to(t, t->scr.cur.row, t->scr.cur.col + params[0]);
}
static void runes_parser_handle_cub(RunesTerm *t, char *buf, size_t len)
@@ -2538,7 +2519,7 @@ static void runes_parser_handle_cub(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_move_to(t, t->row, t->col - params[0]);
+ runes_screen_move_to(t, t->scr.cur.row, t->scr.cur.col - params[0]);
}
static void runes_parser_handle_cup(RunesTerm *t, char *buf, size_t len)
@@ -2552,7 +2533,7 @@ static void runes_parser_handle_cup(RunesTerm *t, char *buf, size_t len)
if (params[1] == 0) {
params[1] = 1;
}
- runes_display_move_to(t, params[0] - 1, params[1] - 1);
+ runes_screen_move_to(t, params[0] - 1, params[1] - 1);
}
static void runes_parser_handle_ed(RunesTerm *t, char *buf, size_t len)
@@ -2562,14 +2543,13 @@ static void runes_parser_handle_ed(RunesTerm *t, char *buf, size_t len)
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
switch (params[0]) {
case 0:
- runes_display_clear_screen_forward(t);
+ runes_screen_clear_screen_forward(t);
break;
case 1:
- /* XXX */
- fprintf(stderr, "unhandled ED parameter 1\n");
+ runes_screen_clear_screen_backward(t);
break;
case 2:
- runes_display_clear_screen(t);
+ runes_screen_clear_screen(t);
break;
default:
fprintf(stderr, "unknown ED parameter %d\n", params[0]);
@@ -2584,14 +2564,13 @@ static void runes_parser_handle_el(RunesTerm *t, char *buf, size_t len)
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
switch (params[0]) {
case 0:
- runes_display_kill_line_forward(t);
+ runes_screen_kill_line_forward(t);
break;
case 1:
- runes_display_kill_line_backward(t);
+ runes_screen_kill_line_backward(t);
break;
case 2:
- runes_display_kill_line_forward(t);
- runes_display_kill_line_backward(t);
+ runes_screen_kill_line(t);
break;
default:
fprintf(stderr, "unknown EL parameter %d\n", params[0]);
@@ -2604,8 +2583,8 @@ static void runes_parser_handle_il(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_insert_lines(t, params[0]);
- runes_display_move_to(t, t->row, 0);
+ runes_screen_insert_lines(t, params[0]);
+ runes_screen_move_to(t, t->scr.cur.row, 0);
}
static void runes_parser_handle_dl(RunesTerm *t, char *buf, size_t len)
@@ -2613,8 +2592,8 @@ static void runes_parser_handle_dl(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_delete_lines(t, params[0]);
- runes_display_move_to(t, t->row, 0);
+ runes_screen_delete_lines(t, params[0]);
+ runes_screen_move_to(t, t->scr.cur.row, 0);
}
static void runes_parser_handle_dch(RunesTerm *t, char *buf, size_t len)
@@ -2622,7 +2601,7 @@ static void runes_parser_handle_dch(RunesTerm *t, char *buf, size_t len)
int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1 }, nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_delete_characters(t, params[0]);
+ runes_screen_delete_characters(t, params[0]);
}
static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
@@ -2648,20 +2627,20 @@ static void runes_parser_handle_sm(RunesTerm *t, char *buf, size_t len)
case '?':
switch (params[i]) {
case 1:
- t->application_cursor = 1;
+ runes_screen_set_application_cursor(t);
break;
case 9:
- t->mouse_reporting_press = 1;
+ runes_screen_set_mouse_reporting_press(t);
break;
case 25:
- runes_display_show_cursor(t);
+ runes_screen_show_cursor(t);
break;
case 1000:
- t->mouse_reporting_press_release = 1;
+ runes_screen_set_mouse_reporting_press_release(t);
break;
case 47:
case 1049:
- runes_display_use_alternate_buffer(t);
+ runes_screen_use_alternate_buffer(t);
break;
default:
fprintf(
@@ -2702,20 +2681,20 @@ static void runes_parser_handle_rm(RunesTerm *t, char *buf, size_t len)
case '?':
switch (params[i]) {
case 1:
- t->application_cursor = 0;
+ runes_screen_set_application_cursor(t);
break;
case 9:
- t->mouse_reporting_press = 0;
+ runes_screen_set_mouse_reporting_press(t);
break;
case 25:
- runes_display_hide_cursor(t);
+ runes_screen_hide_cursor(t);
break;
case 1000:
- t->mouse_reporting_press_release = 0;
+ runes_screen_set_mouse_reporting_press_release(t);
break;
case 47:
case 1049:
- runes_display_use_normal_buffer(t);
+ runes_screen_use_normal_buffer(t);
break;
default:
fprintf(
@@ -2744,35 +2723,35 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
for (i = 0; i < nparams; ++i) {
switch (params[i]) {
case 0:
- runes_display_reset_text_attributes(t);
+ runes_screen_reset_text_attributes(t);
break;
case 1:
- runes_display_set_bold(t);
+ runes_screen_set_bold(t);
break;
case 3:
- runes_display_set_italic(t);
+ runes_screen_set_italic(t);
break;
case 4:
- runes_display_set_underline(t);
+ runes_screen_set_underline(t);
break;
case 7:
- runes_display_set_inverse(t);
+ runes_screen_set_inverse(t);
break;
case 22:
- runes_display_reset_bold(t);
+ runes_screen_reset_bold(t);
break;
case 23:
- runes_display_reset_italic(t);
+ runes_screen_reset_italic(t);
break;
case 24:
- runes_display_reset_underline(t);
+ runes_screen_reset_underline(t);
break;
case 27:
- runes_display_reset_inverse(t);
+ runes_screen_reset_inverse(t);
break;
case 30: case 31: case 32: case 33:
case 34: case 35: case 36: case 37:
- runes_display_set_fg_color(t, params[i] - 30);
+ runes_screen_set_fg_color(t, params[i] - 30);
break;
case 38: {
i++;
@@ -2793,7 +2772,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
params[i - 4], params[i - 3]);
break;
}
- runes_display_set_fg_color_rgb(
+ runes_screen_set_fg_color_rgb(
t, params[i - 2], params[i - 1], params[i]);
break;
case 5:
@@ -2805,7 +2784,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
params[i - 2], params[i - 1]);
break;
}
- runes_display_set_fg_color(t, params[i]);
+ runes_screen_set_fg_color(t, params[i]);
break;
default:
i++;
@@ -2817,11 +2796,11 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
}
case 39:
- runes_display_reset_fg_color(t);
+ runes_screen_reset_fg_color(t);
break;
case 40: case 41: case 42: case 43:
case 44: case 45: case 46: case 47:
- runes_display_set_bg_color(t, params[i] - 40);
+ runes_screen_set_bg_color(t, params[i] - 40);
break;
case 48: {
i++;
@@ -2842,7 +2821,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
params[i - 4], params[i - 3]);
break;
}
- runes_display_set_bg_color_rgb(
+ runes_screen_set_bg_color_rgb(
t, params[i - 2], params[i - 1], params[i]);
break;
case 5:
@@ -2854,7 +2833,7 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
params[i - 2], params[i - 1]);
break;
}
- runes_display_set_bg_color(t, params[i]);
+ runes_screen_set_bg_color(t, params[i]);
break;
default:
i++;
@@ -2866,15 +2845,15 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
break;
}
case 49:
- runes_display_reset_bg_color(t);
+ runes_screen_reset_bg_color(t);
break;
case 90: case 91: case 92: case 93:
case 94: case 95: case 96: case 97:
- runes_display_set_fg_color(t, params[i] - 82);
+ runes_screen_set_fg_color(t, params[i] - 82);
break;
case 100: case 101: case 102: case 103:
case 104: case 105: case 106: case 107:
- runes_display_set_bg_color(t, params[i] - 92);
+ runes_screen_set_bg_color(t, params[i] - 92);
break;
default:
fprintf(stderr, "unknown SGR parameter: %d\n", params[i]);
@@ -2885,12 +2864,13 @@ static void runes_parser_handle_sgr(RunesTerm *t, char *buf, size_t len)
static void runes_parser_handle_csr(RunesTerm *t, char *buf, size_t len)
{
- int params[RUNES_PARSER_CSI_MAX_PARAMS] = { 1, t->rows, 1, t->cols };
+ int params[RUNES_PARSER_CSI_MAX_PARAMS] = {
+ 1, t->scr.max.row, 1, t->scr.max.col };
int nparams;
runes_parser_extract_csi_params(buf + 2, len - 3, params, &nparams);
- runes_display_set_scroll_region(
+ runes_screen_set_scroll_region(
t, params[0] - 1, params[1] - 1, params[2] - 1, params[3] - 1);
}
@@ -2902,7 +2882,7 @@ static void runes_parser_handle_decsed(RunesTerm *t, char *buf, size_t len)
switch (params[0]) {
case 0:
/* XXX not quite correct */
- runes_display_clear_screen_forward(t);
+ runes_screen_clear_screen_forward(t);
break;
case 1:
/* XXX */
@@ -2910,7 +2890,7 @@ static void runes_parser_handle_decsed(RunesTerm *t, char *buf, size_t len)
break;
case 2:
/* XXX not quite correct */
- runes_display_clear_screen(t);
+ runes_screen_clear_screen(t);
break;
default:
fprintf(stderr, "unknown DECSED parameter %d\n", params[0]);
@@ -2926,7 +2906,7 @@ static void runes_parser_handle_decsel(RunesTerm *t, char *buf, size_t len)
switch (params[0]) {
case 0:
/* XXX not quite correct */
- runes_display_kill_line_forward(t);
+ runes_screen_kill_line_forward(t);
break;
case 1:
/* XXX */
@@ -2944,28 +2924,28 @@ static void runes_parser_handle_decsel(RunesTerm *t, char *buf, size_t len)
static void runes_parser_handle_osc0(RunesTerm *t, char *buf, size_t len)
{
- runes_window_backend_set_icon_name(t, buf + 4, len - 5);
- runes_window_backend_set_window_title(t, buf + 4, len - 5);
+ runes_screen_set_icon_name(t, buf + 4, len - 5);
+ runes_screen_set_window_title(t, buf + 4, len - 5);
}
static void runes_parser_handle_osc1(RunesTerm *t, char *buf, size_t len)
{
- runes_window_backend_set_icon_name(t, buf + 4, len - 5);
+ runes_screen_set_icon_name(t, buf + 4, len - 5);
}
static void runes_parser_handle_osc2(RunesTerm *t, char *buf, size_t len)
{
- runes_window_backend_set_window_title(t, buf + 4, len - 5);
+ runes_screen_set_window_title(t, buf + 4, len - 5);
}
static void runes_parser_handle_ascii(RunesTerm *t, char *text, size_t len)
{
- runes_display_show_string_ascii(t, text, len);
+ runes_screen_show_string_ascii(t, text, len);
}
static void runes_parser_handle_text(RunesTerm *t, char *text, size_t len)
{
- runes_display_show_string_utf8(t, text, len);
+ runes_screen_show_string_utf8(t, text, len);
}
/* XXX these are copied from the generated file so that I can add the UNUSED