From f72add79bdc4b72a54fb72e512d3a15263e7484c Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 25 Apr 2014 00:04:06 -0400 Subject: start refactoring to draw parsed text to an intermediary data structure --- src/parser.l | 181 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 82 insertions(+), 99 deletions(-) (limited to 'src/parser.l') diff --git a/src/parser.l b/src/parser.l index 2a2e94c..f2682c8 100644 --- a/src/parser.l +++ b/src/parser.l @@ -231,96 +231,80 @@ static void runes_parser_handle_text(RunesTerm *t, char *text, size_t len); %% -void runes_parser_process_string(RunesTerm *t, char *buf, size_t len) -{ - YY_BUFFER_STATE state; - yyscan_t scanner; - int remaining; - - 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); - 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( @@ -373,7 +357,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) @@ -381,7 +365,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) @@ -389,7 +373,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) @@ -397,7 +381,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) @@ -405,7 +389,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) @@ -419,7 +403,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) @@ -429,14 +413,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]); @@ -451,14 +434,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]); @@ -471,8 +453,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) @@ -480,8 +462,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) @@ -489,7 +471,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) @@ -515,20 +497,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( @@ -569,20 +551,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( @@ -611,35 +593,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++; @@ -660,7 +642,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: @@ -672,7 +654,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++; @@ -684,11 +666,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++; @@ -709,7 +691,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: @@ -721,7 +703,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++; @@ -733,15 +715,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]); @@ -752,12 +734,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); } @@ -769,7 +752,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 */ @@ -777,7 +760,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]); @@ -793,7 +776,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 */ @@ -811,28 +794,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 -- cgit v1.2.3-54-g00ecf