diff options
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 184 |
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 |