aboutsummaryrefslogtreecommitdiffstats
path: root/src/parser.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser.l')
-rw-r--r--src/parser.l181
1 files changed, 82 insertions, 99 deletions
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