Lines Matching refs:tem
118 static void tem_clear_chars(struct tem_vt_state *tem,
120 static void tem_copy_area(struct tem_vt_state *tem,
124 static void tem_bell(struct tem_vt_state *tem);
125 static void tem_pix_clear_prom_output(struct tem_vt_state *tem);
131 static void tem_align_cursor(struct tem_vt_state *tem);
133 static void tem_check_first_time(struct tem_vt_state *tem);
163 static void bit_to_pix32(struct tem_vt_state *tem, tem_char_t c,
193 tem_add(struct tem_vt_state *tem) in tem_add() argument
195 list_insert_head(&tems.ts_list, tem); in tem_add()
205 struct tem_vt_state *tem = (struct tem_vt_state *)tem_arg; in tem_write() local
207 if (tems.ts_initialized == 0 || tem->tvs_initialized == 0) { in tem_write()
211 tem_check_first_time(tem); in tem_write()
212 tem_terminal_emulate(tem, buf, len); in tem_write()
302 tem_reinit(struct tem_vt_state *tem, bool reset_display) in tem_reinit() argument
304 tem_free_buf(tem); /* only free virtual buffers */ in tem_reinit()
307 tem_internal_init(tem, false, reset_display); in tem_reinit()
311 tem_free_buf(struct tem_vt_state *tem) in tem_free_buf() argument
313 free(tem->tvs_outbuf); in tem_free_buf()
314 tem->tvs_outbuf = NULL; in tem_free_buf()
316 free(tem->tvs_pix_data); in tem_free_buf()
317 tem->tvs_pix_data = NULL; in tem_free_buf()
319 free(tem->tvs_screen_buf); in tem_free_buf()
320 tem->tvs_screen_buf = NULL; in tem_free_buf()
322 free(tem->tvs_tabs); in tem_free_buf()
323 tem->tvs_tabs = NULL; in tem_free_buf()
772 tem_prom_scroll_up(struct tem_vt_state *tem, int nrows) in tem_prom_scroll_up() argument
792 tem_pix_cls_range(tem, 0, nrows, tems.ts_p_offset.y, in tem_prom_scroll_up()
801 tem_adjust_row(struct tem_vt_state *tem, int prom_row) in tem_adjust_row() argument
827 tem_prom_scroll_up(tem, scroll_up_lines); in tem_adjust_row()
835 tem_pix_align(struct tem_vt_state *tem) in tem_pix_align() argument
855 row = tem_adjust_row(tem, row); in tem_pix_align()
858 tem->tvs_first_line = row + 1; in tem_pix_align()
861 tem->tvs_s_cursor.row = tem->tvs_c_cursor.row = in tem_pix_align()
863 tem->tvs_s_cursor.col = tem->tvs_c_cursor.col = 0; in tem_pix_align()
865 tem_reset_display(tem, true, true); in tem_pix_align()
931 struct tem_vt_state *tem = (struct tem_vt_state *)tem_arg; in tem_activate() local
933 tems.ts_active = tem; in tem_activate()
934 tem->tvs_isactive = true; in tem_activate()
936 tem_kdsetmode(tem->tvs_fbmode); in tem_activate()
939 tem_cls(tem); in tem_activate()
943 tem_check_first_time(struct tem_vt_state *tem) in tem_check_first_time() argument
958 tem_text_cursor(tem, VIS_GET_CURSOR); in tem_check_first_time()
960 tem_pix_cursor(tem, VIS_GET_CURSOR); in tem_check_first_time()
961 tem_align_cursor(tem); in tem_check_first_time()
966 tem_input_partial(struct tem_vt_state *tem) in tem_input_partial() argument
971 if (tem->tvs_utf8_left == 0) in tem_input_partial()
974 for (i = 0; i < sizeof (tem->tvs_utf8_partial); i++) { in tem_input_partial()
975 c = (tem->tvs_utf8_partial >> (24 - (i << 3))) & 0xff; in tem_input_partial()
977 tem_parse(tem, c); in tem_input_partial()
980 tem->tvs_utf8_left = 0; in tem_input_partial()
981 tem->tvs_utf8_partial = 0; in tem_input_partial()
988 tem_input_byte(struct tem_vt_state *tem, uint8_t c) in tem_input_byte() argument
998 tem_input_partial(tem); in tem_input_byte()
999 tem_parse(tem, c); in tem_input_byte()
1004 tem_input_partial(tem); in tem_input_byte()
1005 tem->tvs_utf8_left = 1; in tem_input_byte()
1006 tem->tvs_utf8_partial = c; in tem_input_byte()
1011 tem_input_partial(tem); in tem_input_byte()
1012 tem->tvs_utf8_left = 2; in tem_input_byte()
1013 tem->tvs_utf8_partial = c; in tem_input_byte()
1018 tem_input_partial(tem); in tem_input_byte()
1019 tem->tvs_utf8_left = 3; in tem_input_byte()
1020 tem->tvs_utf8_partial = c; in tem_input_byte()
1025 if (tem->tvs_utf8_left == 0) { in tem_input_byte()
1026 tem_parse(tem, c); in tem_input_byte()
1029 tem->tvs_utf8_left--; in tem_input_byte()
1030 tem->tvs_utf8_partial = (tem->tvs_utf8_partial << 8) | c; in tem_input_byte()
1031 if (tem->tvs_utf8_left == 0) { in tem_input_byte()
1040 u = tem->tvs_utf8_partial; in tem_input_byte()
1062 tem_parse(tem, v); in tem_input_byte()
1063 tem->tvs_utf8_partial = 0; in tem_input_byte()
1068 tem_input_partial(tem); in tem_input_byte()
1069 tem_parse(tem, c); in tem_input_byte()
1081 tem_terminal_emulate(struct tem_vt_state *tem, uint8_t *buf, int len) in tem_terminal_emulate() argument
1083 if (tem->tvs_isactive && !tem->tvs_cursor_hidden) in tem_terminal_emulate()
1084 tem_callback_cursor(tem, VIS_HIDE_CURSOR); in tem_terminal_emulate()
1087 tem_input_byte(tem, *buf); in tem_terminal_emulate()
1092 tem_send_data(tem); in tem_terminal_emulate()
1094 if (tem->tvs_isactive && !tem->tvs_cursor_hidden) in tem_terminal_emulate()
1095 tem_callback_cursor(tem, VIS_DISPLAY_CURSOR); in tem_terminal_emulate()
1104 tem_control(struct tem_vt_state *tem, uint8_t ch) in tem_control() argument
1106 tem->tvs_state = A_STATE_START; in tem_control()
1109 tem_bell(tem); in tem_control()
1113 tem_mv_cursor(tem, in tem_control()
1114 tem->tvs_c_cursor.row, in tem_control()
1115 tem->tvs_c_cursor.col - 1); in tem_control()
1119 tem_tab(tem); in tem_control()
1130 tem_send_data(tem); in tem_control()
1131 tem_lf(tem); in tem_control()
1135 tem_send_data(tem); in tem_control()
1136 tem_cls(tem); in tem_control()
1140 tem_send_data(tem); in tem_control()
1141 tem_cr(tem); in tem_control()
1145 tem->tvs_state = A_STATE_ESC; in tem_control()
1149 tem->tvs_curparam = 0; in tem_control()
1150 tem->tvs_paramval = 0; in tem_control()
1151 tem->tvs_gotparam = false; in tem_control()
1154 tem->tvs_params[i] = -1; in tem_control()
1155 tem->tvs_state = A_STATE_CSI; in tem_control()
1159 tem_back_tab(tem); in tem_control()
1174 tem_setparam(struct tem_vt_state *tem, int count, int newparam) in tem_setparam() argument
1179 if (tem->tvs_params[i] == -1) in tem_setparam()
1180 tem->tvs_params[i] = newparam; in tem_setparam()
1190 tem_select_color(struct tem_vt_state *tem, int color, bool fg) in tem_select_color() argument
1201 tem->tvs_flags &= ~TEM_ATTR_RGB_FG; in tem_select_color()
1202 tem->tvs_fg_color.n = color; in tem_select_color()
1204 tem->tvs_flags &= ~TEM_ATTR_RGB_BG; in tem_select_color()
1205 tem->tvs_bg_color.n = color; in tem_select_color()
1213 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_FG; in tem_select_color()
1215 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_BG; in tem_select_color()
1224 tem->tvs_fg_color.n -= 8; in tem_select_color()
1225 tem->tvs_flags |= TEM_ATTR_BRIGHT_FG; in tem_select_color()
1227 tem->tvs_bg_color.n -= 8; in tem_select_color()
1228 tem->tvs_flags |= TEM_ATTR_BRIGHT_BG; in tem_select_color()
1237 tem_selgraph(struct tem_vt_state *tem) in tem_selgraph() argument
1244 tem->tvs_state = A_STATE_START; in tem_selgraph()
1246 curparam = tem->tvs_curparam; in tem_selgraph()
1248 param = tem->tvs_params[count]; in tem_selgraph()
1254 tem->tvs_fg_color = tems.ts_init_color.fg_color; in tem_selgraph()
1255 tem->tvs_bg_color = tems.ts_init_color.bg_color; in tem_selgraph()
1256 tem->tvs_flags = tems.ts_init_color.a_flags; in tem_selgraph()
1260 tem->tvs_flags |= TEM_ATTR_BOLD; in tem_selgraph()
1264 tem->tvs_flags &= ~TEM_ATTR_BOLD; in tem_selgraph()
1268 tem->tvs_flags |= TEM_ATTR_UNDERLINE; in tem_selgraph()
1272 tem->tvs_flags |= TEM_ATTR_BLINK; in tem_selgraph()
1276 if (tem->tvs_flags & TEM_ATTR_SCREEN_REVERSE) { in tem_selgraph()
1277 tem->tvs_flags &= ~TEM_ATTR_REVERSE; in tem_selgraph()
1279 tem->tvs_flags |= TEM_ATTR_REVERSE; in tem_selgraph()
1284 tem->tvs_flags &= ~TEM_ATTR_BOLD; in tem_selgraph()
1288 tem->tvs_flags &= ~TEM_ATTR_UNDERLINE; in tem_selgraph()
1292 tem->tvs_flags &= ~TEM_ATTR_BLINK; in tem_selgraph()
1296 if (tem->tvs_flags & TEM_ATTR_SCREEN_REVERSE) { in tem_selgraph()
1297 tem->tvs_flags |= TEM_ATTR_REVERSE; in tem_selgraph()
1299 tem->tvs_flags &= ~TEM_ATTR_REVERSE; in tem_selgraph()
1311 tem->tvs_fg_color.n = param - 30; in tem_selgraph()
1312 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_FG; in tem_selgraph()
1313 tem->tvs_flags &= ~TEM_ATTR_RGB_FG; in tem_selgraph()
1332 param = tem->tvs_params[count]; in tem_selgraph()
1339 r = tem->tvs_params[++count]; in tem_selgraph()
1340 g = tem->tvs_params[++count]; in tem_selgraph()
1341 b = tem->tvs_params[++count]; in tem_selgraph()
1349 tem->tvs_flags |= TEM_ATTR_RGB_FG; in tem_selgraph()
1350 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_FG; in tem_selgraph()
1351 tem->tvs_fg_color.rgb.a = in tem_selgraph()
1352 tem->tvs_alpha; in tem_selgraph()
1353 tem->tvs_fg_color.rgb.r = r; in tem_selgraph()
1354 tem->tvs_fg_color.rgb.g = g; in tem_selgraph()
1355 tem->tvs_fg_color.rgb.b = b; in tem_selgraph()
1361 tem_select_color(tem, tem->tvs_params[count], in tem_selgraph()
1374 tem->tvs_fg_color = tems.ts_init_color.fg_color; in tem_selgraph()
1375 tem->tvs_flags &= ~TEM_ATTR_RGB_FG; in tem_selgraph()
1377 tem->tvs_flags |= TEM_ATTR_BRIGHT_FG; in tem_selgraph()
1379 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_FG; in tem_selgraph()
1390 tem->tvs_bg_color.n = param - 40; in tem_selgraph()
1391 tem->tvs_flags &= ~TEM_ATTR_RGB_BG; in tem_selgraph()
1392 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_BG; in tem_selgraph()
1412 param = tem->tvs_params[count]; in tem_selgraph()
1419 r = tem->tvs_params[++count]; in tem_selgraph()
1420 g = tem->tvs_params[++count]; in tem_selgraph()
1421 b = tem->tvs_params[++count]; in tem_selgraph()
1429 tem->tvs_flags |= TEM_ATTR_RGB_BG; in tem_selgraph()
1430 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_BG; in tem_selgraph()
1431 tem->tvs_bg_color.rgb.a = in tem_selgraph()
1432 tem->tvs_alpha; in tem_selgraph()
1433 tem->tvs_bg_color.rgb.r = r; in tem_selgraph()
1434 tem->tvs_bg_color.rgb.g = g; in tem_selgraph()
1435 tem->tvs_bg_color.rgb.b = b; in tem_selgraph()
1441 tem_select_color(tem, tem->tvs_params[count], in tem_selgraph()
1454 tem->tvs_bg_color = tems.ts_init_color.bg_color; in tem_selgraph()
1455 tem->tvs_flags &= ~TEM_ATTR_RGB_BG; in tem_selgraph()
1457 tem->tvs_flags |= TEM_ATTR_BRIGHT_BG; in tem_selgraph()
1459 tem->tvs_flags &= ~TEM_ATTR_BRIGHT_BG; in tem_selgraph()
1470 tem->tvs_fg_color.n = param - 90; in tem_selgraph()
1471 tem->tvs_flags |= TEM_ATTR_BRIGHT_FG; in tem_selgraph()
1472 tem->tvs_flags &= ~TEM_ATTR_RGB_FG; in tem_selgraph()
1483 tem->tvs_bg_color.n = param - 100; in tem_selgraph()
1484 tem->tvs_flags |= TEM_ATTR_BRIGHT_BG; in tem_selgraph()
1485 tem->tvs_flags &= ~TEM_ATTR_RGB_BG; in tem_selgraph()
1504 tem_chkparam(struct tem_vt_state *tem, uint8_t ch) in tem_chkparam() argument
1510 row = tem->tvs_c_cursor.row; in tem_chkparam()
1511 col = tem->tvs_c_cursor.col; in tem_chkparam()
1516 tem_send_data(tem); in tem_chkparam()
1517 tem_selgraph(tem); in tem_chkparam()
1521 tem_setparam(tem, 1, 1); in tem_chkparam()
1522 tem_shift(tem, tem->tvs_params[0], TEM_SHIFT_RIGHT); in tem_chkparam()
1526 tem_setparam(tem, 1, 1); in tem_chkparam()
1527 tem_mv_cursor(tem, row - tem->tvs_params[0], col); in tem_chkparam()
1531 tem_setparam(tem, 1, 1); in tem_chkparam()
1532 tem_mv_cursor(tem, tem->tvs_params[0] - 1, col); in tem_chkparam()
1537 tem_setparam(tem, 1, 1); in tem_chkparam()
1538 tem_mv_cursor(tem, row + tem->tvs_params[0], col); in tem_chkparam()
1543 tem_setparam(tem, 1, 1); in tem_chkparam()
1544 tem_mv_cursor(tem, row, col + tem->tvs_params[0]); in tem_chkparam()
1548 tem_setparam(tem, 1, 1); in tem_chkparam()
1549 tem_mv_cursor(tem, row, tem->tvs_params[0] - 1); in tem_chkparam()
1553 tem_setparam(tem, 1, 1); in tem_chkparam()
1554 tem_mv_cursor(tem, row, col - tem->tvs_params[0]); in tem_chkparam()
1558 tem_setparam(tem, 1, 1); in tem_chkparam()
1559 tem_mv_cursor(tem, row + tem->tvs_params[0], 0); in tem_chkparam()
1563 tem_setparam(tem, 1, 1); in tem_chkparam()
1564 tem_mv_cursor(tem, row - tem->tvs_params[0], 0); in tem_chkparam()
1568 tem_setparam(tem, 1, 1); in tem_chkparam()
1569 tem_mv_cursor(tem, row, tem->tvs_params[0] - 1); in tem_chkparam()
1573 tem_setparam(tem, 1, 0); in tem_chkparam()
1574 tem_clear_tabs(tem, tem->tvs_params[0]); in tem_chkparam()
1579 tem_setparam(tem, 2, 1); in tem_chkparam()
1580 tem_mv_cursor(tem, in tem_chkparam()
1581 tem->tvs_params[0] - 1, tem->tvs_params[1] - 1); in tem_chkparam()
1589 tem_send_data(tem); in tem_chkparam()
1590 tem_setparam(tem, 1, 0); in tem_chkparam()
1591 switch (tem->tvs_params[0]) { in tem_chkparam()
1595 tem_clear_chars(tem, in tem_chkparam()
1597 tem->tvs_c_cursor.col, in tem_chkparam()
1598 tem->tvs_c_cursor.row, in tem_chkparam()
1599 tem->tvs_c_cursor.col); in tem_chkparam()
1602 for (row = tem->tvs_c_cursor.row + 1; in tem_chkparam()
1605 tem_clear_chars(tem, in tem_chkparam()
1614 row < tem->tvs_c_cursor.row; in tem_chkparam()
1616 tem_clear_chars(tem, in tem_chkparam()
1620 tem_clear_chars(tem, in tem_chkparam()
1621 tem->tvs_c_cursor.col + 1, in tem_chkparam()
1622 tem->tvs_c_cursor.row, 0); in tem_chkparam()
1630 tem_clear_chars(tem, in tem_chkparam()
1638 tem_send_data(tem); in tem_chkparam()
1639 tem_setparam(tem, 1, 0); in tem_chkparam()
1640 switch (tem->tvs_params[0]) { in tem_chkparam()
1643 tem_clear_chars(tem, in tem_chkparam()
1645 tem->tvs_c_cursor.col), in tem_chkparam()
1646 tem->tvs_c_cursor.row, in tem_chkparam()
1647 tem->tvs_c_cursor.col); in tem_chkparam()
1652 tem_clear_chars(tem, in tem_chkparam()
1653 tem->tvs_c_cursor.col + 1, in tem_chkparam()
1654 tem->tvs_c_cursor.row, 0); in tem_chkparam()
1659 tem_clear_chars(tem, in tem_chkparam()
1661 tem->tvs_c_cursor.row, 0); in tem_chkparam()
1667 tem_send_data(tem); in tem_chkparam()
1668 tem_setparam(tem, 1, 1); in tem_chkparam()
1669 tem_scroll(tem, in tem_chkparam()
1670 tem->tvs_c_cursor.row, in tem_chkparam()
1672 tem->tvs_params[0], TEM_SCROLL_DOWN); in tem_chkparam()
1676 tem_send_data(tem); in tem_chkparam()
1677 tem_setparam(tem, 1, 1); in tem_chkparam()
1678 tem_scroll(tem, in tem_chkparam()
1679 tem->tvs_c_cursor.row, in tem_chkparam()
1681 tem->tvs_params[0], TEM_SCROLL_UP); in tem_chkparam()
1685 tem_setparam(tem, 1, 1); in tem_chkparam()
1686 tem_shift(tem, tem->tvs_params[0], TEM_SHIFT_LEFT); in tem_chkparam()
1690 tem_send_data(tem); in tem_chkparam()
1691 tem_setparam(tem, 1, 1); in tem_chkparam()
1692 tem_scroll(tem, 0, in tem_chkparam()
1694 tem->tvs_params[0], TEM_SCROLL_UP); in tem_chkparam()
1698 tem_send_data(tem); in tem_chkparam()
1699 tem_setparam(tem, 1, 1); in tem_chkparam()
1700 tem_scroll(tem, 0, in tem_chkparam()
1702 tem->tvs_params[0], TEM_SCROLL_DOWN); in tem_chkparam()
1706 tem_setparam(tem, 1, 1); in tem_chkparam()
1707 tem_clear_chars(tem, in tem_chkparam()
1708 tem->tvs_params[0], in tem_chkparam()
1709 tem->tvs_c_cursor.row, in tem_chkparam()
1710 tem->tvs_c_cursor.col); in tem_chkparam()
1714 tem_setparam(tem, 1, 1); in tem_chkparam()
1723 if (tem->tvs_params[0] > tems.ts_c_dimension.width) in tem_chkparam()
1724 tem->tvs_params[0] = tems.ts_c_dimension.width; in tem_chkparam()
1726 for (i = 0; i < tem->tvs_params[0]; i++) in tem_chkparam()
1727 tem_back_tab(tem); in tem_chkparam()
1730 tem->tvs_state = A_STATE_START; in tem_chkparam()
1734 tem_chkparam_qmark(struct tem_vt_state *tem, tem_char_t ch) in tem_chkparam_qmark() argument
1738 tem_setparam(tem, 1, 1); in tem_chkparam_qmark()
1739 switch (tem->tvs_params[0]) { in tem_chkparam_qmark()
1741 tem->tvs_stateflags |= TVS_AUTOWRAP; in tem_chkparam_qmark()
1751 tem_send_data(tem); in tem_chkparam_qmark()
1752 tem->tvs_cursor_hidden = false; in tem_chkparam_qmark()
1758 tem_setparam(tem, 1, 1); in tem_chkparam_qmark()
1759 switch (tem->tvs_params[0]) { in tem_chkparam_qmark()
1761 tem->tvs_stateflags &= ~TVS_AUTOWRAP; in tem_chkparam_qmark()
1771 tem_send_data(tem); in tem_chkparam_qmark()
1772 tem->tvs_cursor_hidden = true; in tem_chkparam_qmark()
1777 tem->tvs_state = A_STATE_START; in tem_chkparam_qmark()
1784 tem_getparams(struct tem_vt_state *tem, uint8_t ch) in tem_getparams() argument
1787 tem->tvs_paramval = ((tem->tvs_paramval * 10) + (ch - '0')); in tem_getparams()
1788 tem->tvs_gotparam = true; /* Remember got parameter */ in tem_getparams()
1790 } else if (tem->tvs_state == A_STATE_CSI_EQUAL) { in tem_getparams()
1791 tem->tvs_state = A_STATE_START; in tem_getparams()
1792 } else if (tem->tvs_state == A_STATE_CSI_QMARK) { in tem_getparams()
1793 if (tem->tvs_curparam < TEM_MAXPARAMS) { in tem_getparams()
1794 if (tem->tvs_gotparam) { in tem_getparams()
1796 tem->tvs_params[tem->tvs_curparam] = in tem_getparams()
1797 tem->tvs_paramval; in tem_getparams()
1799 tem->tvs_curparam++; in tem_getparams()
1803 tem->tvs_gotparam = false; in tem_getparams()
1804 tem->tvs_paramval = 0; /* No parameter value yet */ in tem_getparams()
1807 tem_chkparam_qmark(tem, ch); in tem_getparams()
1810 if (tem->tvs_curparam < TEM_MAXPARAMS) { in tem_getparams()
1811 if (tem->tvs_gotparam) { in tem_getparams()
1813 tem->tvs_params[tem->tvs_curparam] = in tem_getparams()
1814 tem->tvs_paramval; in tem_getparams()
1816 tem->tvs_curparam++; in tem_getparams()
1821 tem->tvs_gotparam = false; in tem_getparams()
1822 tem->tvs_paramval = 0; /* No parameter value yet */ in tem_getparams()
1825 tem_chkparam(tem, ch); in tem_getparams()
1835 tem_outch(struct tem_vt_state *tem, tem_char_t ch) in tem_outch() argument
1842 if ((tem->tvs_stateflags & (TVS_AUTOWRAP | TVS_WRAPPED)) == in tem_outch()
1844 tem_new_line(tem); in tem_outch()
1848 tem_get_attr(tem, &fg, &bg, &attr, TEM_ATTR_REVERSE); in tem_outch()
1849 tem->tvs_outbuf[tem->tvs_outindex].tc_char = ch | TEM_ATTR(attr); in tem_outch()
1850 tem->tvs_outbuf[tem->tvs_outindex].tc_fg_color = fg; in tem_outch()
1851 tem->tvs_outbuf[tem->tvs_outindex].tc_bg_color = bg; in tem_outch()
1852 tem->tvs_outindex++; in tem_outch()
1853 tem->tvs_c_cursor.col++; in tem_outch()
1854 if (tem->tvs_c_cursor.col >= tems.ts_c_dimension.width) { in tem_outch()
1855 tem->tvs_stateflags |= TVS_WRAPPED; in tem_outch()
1856 tem->tvs_c_cursor.col--; in tem_outch()
1857 tem_send_data(tem); in tem_outch()
1859 tem->tvs_stateflags &= ~TVS_WRAPPED; in tem_outch()
1864 tem_new_line(struct tem_vt_state *tem) in tem_new_line() argument
1866 tem_cr(tem); in tem_new_line()
1867 tem_lf(tem); in tem_new_line()
1871 tem_cr(struct tem_vt_state *tem) in tem_cr() argument
1873 tem->tvs_c_cursor.col = 0; in tem_cr()
1874 tem->tvs_stateflags &= ~TVS_WRAPPED; in tem_cr()
1875 tem_align_cursor(tem); in tem_cr()
1879 tem_lf(struct tem_vt_state *tem) in tem_lf() argument
1883 tem->tvs_stateflags &= ~TVS_WRAPPED; in tem_lf()
1890 row = tem->tvs_c_cursor.row + 1; in tem_lf()
1893 if (tem->tvs_nscroll != 0) { in tem_lf()
1894 tem_scroll(tem, 0, in tem_lf()
1896 tem->tvs_nscroll, TEM_SCROLL_UP); in tem_lf()
1898 tem->tvs_nscroll; in tem_lf()
1909 tem_mv_cursor(tem, row, tem->tvs_c_cursor.col); in tem_lf()
1911 if (tem->tvs_nscroll == 0) { in tem_lf()
1913 tem_clear_chars(tem, in tem_lf()
1915 tem->tvs_c_cursor.col, in tem_lf()
1916 tem->tvs_c_cursor.row, in tem_lf()
1917 tem->tvs_c_cursor.col); in tem_lf()
1921 tem_align_cursor(tem); in tem_lf()
1925 tem_send_data(struct tem_vt_state *tem) in tem_send_data() argument
1927 if (tem->tvs_outindex == 0) { in tem_send_data()
1928 tem_align_cursor(tem); in tem_send_data()
1932 tem_virtual_display(tem, tem->tvs_outbuf, tem->tvs_outindex, in tem_send_data()
1933 tem->tvs_s_cursor.row, tem->tvs_s_cursor.col); in tem_send_data()
1935 if (tem->tvs_isactive) { in tem_send_data()
1939 tem_callback_display(tem, in tem_send_data()
1940 tem->tvs_outbuf, tem->tvs_outindex, in tem_send_data()
1941 tem->tvs_s_cursor.row, tem->tvs_s_cursor.col); in tem_send_data()
1944 tem->tvs_outindex = 0; in tem_send_data()
1946 tem_align_cursor(tem); in tem_send_data()
1956 tem_align_cursor(struct tem_vt_state *tem) in tem_align_cursor() argument
1958 tem->tvs_s_cursor.row = tem->tvs_c_cursor.row; in tem_align_cursor()
1959 tem->tvs_s_cursor.col = tem->tvs_c_cursor.col; in tem_align_cursor()
1968 tem_parse(struct tem_vt_state *tem, tem_char_t ch) in tem_parse() argument
1972 if (tem->tvs_state == A_STATE_START) { /* Normal state? */ in tem_parse()
1975 tem_control(tem, ch); in tem_parse()
1978 tem_outch(tem, ch); in tem_parse()
1984 if (tem->tvs_state != A_STATE_ESC) { /* Need to get parameters? */ in tem_parse()
1985 if (tem->tvs_state != A_STATE_CSI) { in tem_parse()
1986 tem_getparams(tem, ch); in tem_parse()
1992 tem->tvs_state = A_STATE_CSI_QMARK; in tem_parse()
1995 tem->tvs_state = A_STATE_CSI_EQUAL; in tem_parse()
2019 tem->tvs_state = A_STATE_START; in tem_parse()
2022 tem_mv_cursor(tem, tem->tvs_r_cursor.row, in tem_parse()
2023 tem->tvs_r_cursor.col); in tem_parse()
2024 tem->tvs_state = A_STATE_START; in tem_parse()
2027 tem_send_data(tem); in tem_parse()
2032 if (tem->tvs_flags & TEM_ATTR_SCREEN_REVERSE) { in tem_parse()
2033 tem->tvs_flags &= ~TEM_ATTR_SCREEN_REVERSE; in tem_parse()
2039 if (tem->tvs_flags & TEM_ATTR_REVERSE) in tem_parse()
2040 tem->tvs_flags &= ~TEM_ATTR_REVERSE; in tem_parse()
2042 tem->tvs_flags |= TEM_ATTR_REVERSE; in tem_parse()
2044 tem_cls(tem); in tem_parse()
2045 tem->tvs_state = A_STATE_START; in tem_parse()
2048 tem_send_data(tem); in tem_parse()
2053 if (!(tem->tvs_flags & TEM_ATTR_SCREEN_REVERSE)) { in tem_parse()
2054 tem->tvs_flags |= TEM_ATTR_SCREEN_REVERSE; in tem_parse()
2060 if (!(tem->tvs_flags & TEM_ATTR_REVERSE)) in tem_parse()
2061 tem->tvs_flags |= TEM_ATTR_REVERSE; in tem_parse()
2063 tem->tvs_flags &= ~TEM_ATTR_REVERSE; in tem_parse()
2066 tem_cls(tem); in tem_parse()
2067 tem->tvs_state = A_STATE_START; in tem_parse()
2073 tem->tvs_nscroll = tem->tvs_paramval; in tem_parse()
2074 if (tem->tvs_nscroll > tems.ts_c_dimension.height) in tem_parse()
2075 tem->tvs_nscroll = tems.ts_c_dimension.height; in tem_parse()
2076 if (tem->tvs_nscroll < 0) in tem_parse()
2077 tem->tvs_nscroll = 1; in tem_parse()
2078 tem->tvs_state = A_STATE_START; in tem_parse()
2081 tem_getparams(tem, ch); in tem_parse()
2088 tem->tvs_curparam = 0; in tem_parse()
2089 tem->tvs_paramval = 0; in tem_parse()
2090 tem->tvs_gotparam = false; in tem_parse()
2093 tem->tvs_params[i] = -1; in tem_parse()
2094 tem->tvs_state = A_STATE_CSI; in tem_parse()
2096 tem->tvs_state = A_STATE_START; in tem_parse()
2098 tem->tvs_state = A_STATE_START; in tem_parse()
2100 tem->tvs_state = A_STATE_START; in tem_parse()
2103 tem_reset_display(tem, true, true); in tem_parse()
2106 tem_set_tab(tem); in tem_parse()
2109 tem->tvs_r_cursor.row = tem->tvs_c_cursor.row; in tem_parse()
2110 tem->tvs_r_cursor.col = tem->tvs_c_cursor.col; in tem_parse()
2113 tem_mv_cursor(tem, tem->tvs_r_cursor.row, in tem_parse()
2114 tem->tvs_r_cursor.col); in tem_parse()
2117 tem_control(tem, ch); in tem_parse()
2119 tem_outch(tem, ch); in tem_parse()
2126 tem_bell(struct tem_vt_state *tem __unused) in tem_bell()
2133 tem_scroll(struct tem_vt_state *tem, int start, int end, int count, in tem_scroll() argument
2148 tem_copy_area(tem, 0, start + count, in tem_scroll()
2152 tem_clear_chars(tem, tems.ts_c_dimension.width, row, 0); in tem_scroll()
2158 tem_copy_area(tem, 0, start, in tem_scroll()
2163 tem_clear_chars(tem, tems.ts_c_dimension.width, row, 0); in tem_scroll()
2195 tem_copy_area(struct tem_vt_state *tem, in tem_copy_area() argument
2225 if (tem->tvs_screen_buf == NULL) { in tem_copy_area()
2226 if (tem->tvs_isactive) { in tem_copy_area()
2227 tem_callback_copy(tem, s_col, s_row, in tem_copy_area()
2235 src = tem->tvs_screen_buf + soffset; in tem_copy_area()
2236 dst = tem->tvs_screen_buf + toffset; in tem_copy_area()
2251 if (tem->tvs_isactive) { in tem_copy_area()
2252 tem_callback_copy(tem, s_col, s_row + i, in tem_copy_area()
2266 if (tem->tvs_isactive) { in tem_copy_area()
2267 tem_callback_copy(tem, s_col, s_row + i, in tem_copy_area()
2276 tem_clear_chars(struct tem_vt_state *tem, int count, screen_pos_t row, in tem_clear_chars() argument
2292 tem_virtual_cls(tem, count, row, col); in tem_clear_chars()
2294 if (!tem->tvs_isactive) in tem_clear_chars()
2297 tem_callback_cls(tem, count, row, col); in tem_clear_chars()
2301 tem_text_display(struct tem_vt_state *tem __unused, term_char_t *string, in tem_text_display()
2318 tem_get_color(tem, &fg, &bg, &string[i]); in tem_text_display()
2332 tem_image_display(struct tem_vt_state *tem, screen_pos_t s_row, in tem_image_display() argument
2342 tem_virtual_display(tem, &c, 1, i, j); in tem_image_display()
2349 tem_text_copy(struct tem_vt_state *tem __unused, in tem_text_copy()
2366 tem_text_cls(struct tem_vt_state *tem, in tem_text_cls() argument
2373 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_text_cls()
2382 tem_text_display(tem, &c, 1, row, col++); in tem_text_cls()
2387 tem_pix_display(struct tem_vt_state *tem, in tem_pix_display() argument
2394 da.data = (uint8_t *)tem->tvs_pix_data; in tem_pix_display()
2401 tem_callback_bit2pix(tem, &string[i]); in tem_pix_display()
2408 tem_pix_copy(struct tem_vt_state *tem, in tem_pix_copy() argument
2416 if (need_clear && tem->tvs_first_line > 0) { in tem_pix_copy()
2425 tem_pix_clear_prom_output(tem); in tem_pix_copy()
2438 if (tem->tvs_first_line > 0 && t_row < s_row && t_col == 0 && in tem_pix_copy()
2457 if (tem->tvs_first_line > 0 && t_row < s_row) { in tem_pix_copy()
2459 tem->tvs_first_line -= (s_row - t_row); in tem_pix_copy()
2460 if (tem->tvs_first_line <= 0) { in tem_pix_copy()
2462 tem->tvs_first_line = 0; in tem_pix_copy()
2468 tem_pix_bit2pix(struct tem_vt_state *tem, term_char_t *c) in tem_pix_bit2pix() argument
2472 tem_get_color(tem, &fg, &bg, c); in tem_pix_bit2pix()
2473 bit_to_pix32(tem, c->tc_char, fg, bg); in tem_pix_bit2pix()
2481 tem_pix_cls(struct tem_vt_state *tem, int count, in tem_pix_cls() argument
2484 tem_pix_cls_range(tem, row, 1, tems.ts_p_offset.y, in tem_pix_cls()
2512 tem_pix_clear_prom_output(struct tem_vt_state *tem) in tem_pix_clear_prom_output() argument
2524 tem_pix_cls_range(tem, 0, nrows, offset, 0, ncols, 0, false); in tem_pix_clear_prom_output()
2531 tem_cls(struct tem_vt_state *tem) in tem_cls() argument
2541 tem_virtual_cls(tem, tems.ts_c_dimension.width, row, 0); in tem_cls()
2544 if (!tem->tvs_isactive) in tem_cls()
2547 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_cls()
2551 tem_get_color(tem, &fg_color, &bg_color, &c); in tem_cls()
2555 tem->tvs_c_cursor.row = 0; in tem_cls()
2556 tem->tvs_c_cursor.col = 0; in tem_cls()
2557 tem_align_cursor(tem); in tem_cls()
2561 tem_back_tab(struct tem_vt_state *tem) in tem_back_tab() argument
2568 for (i = tem->tvs_ntabs - 1; i >= 0; i--) { in tem_back_tab()
2569 if (tem->tvs_tabs[i] < tem->tvs_c_cursor.col) { in tem_back_tab()
2570 tabstop = tem->tvs_tabs[i]; in tem_back_tab()
2575 tem_mv_cursor(tem, tem->tvs_c_cursor.row, tabstop); in tem_back_tab()
2579 tem_tab(struct tem_vt_state *tem) in tem_tab() argument
2586 for (i = 0; i < tem->tvs_ntabs; i++) { in tem_tab()
2587 if (tem->tvs_tabs[i] > tem->tvs_c_cursor.col) { in tem_tab()
2588 tabstop = tem->tvs_tabs[i]; in tem_tab()
2593 tem_mv_cursor(tem, tem->tvs_c_cursor.row, tabstop); in tem_tab()
2597 tem_set_tab(struct tem_vt_state *tem) in tem_set_tab() argument
2601 if (tem->tvs_ntabs == tem->tvs_maxtab) in tem_set_tab()
2603 if (tem->tvs_ntabs == 0 || in tem_set_tab()
2604 tem->tvs_tabs[tem->tvs_ntabs] < tem->tvs_c_cursor.col) { in tem_set_tab()
2605 tem->tvs_tabs[tem->tvs_ntabs++] = tem->tvs_c_cursor.col; in tem_set_tab()
2608 for (i = 0; i < tem->tvs_ntabs; i++) { in tem_set_tab()
2609 if (tem->tvs_tabs[i] == tem->tvs_c_cursor.col) in tem_set_tab()
2611 if (tem->tvs_tabs[i] > tem->tvs_c_cursor.col) { in tem_set_tab()
2612 for (j = tem->tvs_ntabs - 1; j >= i; j--) in tem_set_tab()
2613 tem->tvs_tabs[j+ 1] = tem->tvs_tabs[j]; in tem_set_tab()
2614 tem->tvs_tabs[i] = tem->tvs_c_cursor.col; in tem_set_tab()
2615 tem->tvs_ntabs++; in tem_set_tab()
2622 tem_clear_tabs(struct tem_vt_state *tem, int action) in tem_clear_tabs() argument
2628 tem->tvs_ntabs = 0; in tem_clear_tabs()
2632 for (i = 0; i < tem->tvs_ntabs; i++) { in tem_clear_tabs()
2633 if (tem->tvs_tabs[i] == tem->tvs_c_cursor.col) { in tem_clear_tabs()
2634 tem->tvs_ntabs--; in tem_clear_tabs()
2635 for (j = i; j < tem->tvs_ntabs; j++) in tem_clear_tabs()
2636 tem->tvs_tabs[j] = tem->tvs_tabs[j + 1]; in tem_clear_tabs()
2645 tem_mv_cursor(struct tem_vt_state *tem, int row, int col) in tem_mv_cursor() argument
2659 tem->tvs_stateflags |= TVS_WRAPPED; in tem_mv_cursor()
2662 tem->tvs_stateflags &= ~TVS_WRAPPED; in tem_mv_cursor()
2665 tem_send_data(tem); in tem_mv_cursor()
2666 tem->tvs_c_cursor.row = (screen_pos_t)row; in tem_mv_cursor()
2667 tem->tvs_c_cursor.col = (screen_pos_t)col; in tem_mv_cursor()
2668 tem_align_cursor(tem); in tem_mv_cursor()
2673 tem_reset_emulator(struct tem_vt_state *tem, bool init_color) in tem_reset_emulator() argument
2677 tem->tvs_c_cursor.row = 0; in tem_reset_emulator()
2678 tem->tvs_c_cursor.col = 0; in tem_reset_emulator()
2679 tem->tvs_r_cursor.row = 0; in tem_reset_emulator()
2680 tem->tvs_r_cursor.col = 0; in tem_reset_emulator()
2681 tem->tvs_s_cursor.row = 0; in tem_reset_emulator()
2682 tem->tvs_s_cursor.col = 0; in tem_reset_emulator()
2683 tem->tvs_outindex = 0; in tem_reset_emulator()
2684 tem->tvs_state = A_STATE_START; in tem_reset_emulator()
2685 tem->tvs_gotparam = false; in tem_reset_emulator()
2686 tem->tvs_curparam = 0; in tem_reset_emulator()
2687 tem->tvs_paramval = 0; in tem_reset_emulator()
2688 tem->tvs_nscroll = 1; in tem_reset_emulator()
2692 tem->tvs_alpha = 0xff; in tem_reset_emulator()
2693 tem->tvs_fg_color = tems.ts_init_color.fg_color; in tem_reset_emulator()
2694 tem->tvs_bg_color = tems.ts_init_color.bg_color; in tem_reset_emulator()
2695 tem->tvs_flags = tems.ts_init_color.a_flags; in tem_reset_emulator()
2701 tem->tvs_ntabs = 0; in tem_reset_emulator()
2703 tem->tvs_tabs[tem->tvs_ntabs++] = (screen_pos_t)j; in tem_reset_emulator()
2706 tem->tvs_params[j] = 0; in tem_reset_emulator()
2710 tem_reset_display(struct tem_vt_state *tem, bool clear_txt, bool init_color) in tem_reset_display() argument
2712 tem_reset_emulator(tem, init_color); in tem_reset_display()
2715 if (tem->tvs_isactive) in tem_reset_display()
2716 tem_callback_cursor(tem, VIS_HIDE_CURSOR); in tem_reset_display()
2718 tem_cls(tem); in tem_reset_display()
2720 if (tem->tvs_isactive) in tem_reset_display()
2721 tem_callback_cursor(tem, VIS_DISPLAY_CURSOR); in tem_reset_display()
2726 tem_shift(struct tem_vt_state *tem, int count, int direction) in tem_shift() argument
2730 rest_of_line = tems.ts_c_dimension.width - tem->tvs_c_cursor.col; in tem_shift()
2740 tem_copy_area(tem, in tem_shift()
2741 tem->tvs_c_cursor.col + count, in tem_shift()
2742 tem->tvs_c_cursor.row, in tem_shift()
2744 tem->tvs_c_cursor.row, in tem_shift()
2745 tem->tvs_c_cursor.col, in tem_shift()
2746 tem->tvs_c_cursor.row); in tem_shift()
2749 tem_clear_chars(tem, count, tem->tvs_c_cursor.row, in tem_shift()
2754 tem_copy_area(tem, in tem_shift()
2755 tem->tvs_c_cursor.col, in tem_shift()
2756 tem->tvs_c_cursor.row, in tem_shift()
2758 tem->tvs_c_cursor.row, in tem_shift()
2759 tem->tvs_c_cursor.col + count, in tem_shift()
2760 tem->tvs_c_cursor.row); in tem_shift()
2763 tem_clear_chars(tem, count, tem->tvs_c_cursor.row, in tem_shift()
2764 tem->tvs_c_cursor.col); in tem_shift()
2770 tem_text_cursor(struct tem_vt_state *tem, short action) in tem_text_cursor() argument
2774 ca.row = tem->tvs_c_cursor.row; in tem_text_cursor()
2775 ca.col = tem->tvs_c_cursor.col; in tem_text_cursor()
2781 tem->tvs_c_cursor.row = ca.row; in tem_text_cursor()
2782 tem->tvs_c_cursor.col = ca.col; in tem_text_cursor()
2787 tem_pix_cursor(struct tem_vt_state *tem, short action) in tem_pix_cursor() argument
2794 ca.row = tem->tvs_c_cursor.row * tems.ts_font.vf_height + in tem_pix_cursor()
2796 ca.col = tem->tvs_c_cursor.col * tems.ts_font.vf_width + in tem_pix_cursor()
2801 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_pix_cursor()
2805 tem_get_color(tem, &fg, &bg, &c); in tem_pix_cursor()
2814 tem->tvs_c_cursor.row = 0; in tem_pix_cursor()
2815 tem->tvs_c_cursor.col = 0; in tem_pix_cursor()
2818 tem->tvs_c_cursor.row = (ca.row - tems.ts_p_offset.y) / in tem_pix_cursor()
2822 tem->tvs_c_cursor.col = (ca.col - tems.ts_p_offset.x) / in tem_pix_cursor()
2829 bit_to_pix32(struct tem_vt_state *tem, in bit_to_pix32() argument
2834 dest = (uint32_t *)tem->tvs_pix_data; in bit_to_pix32()
2842 tem_get_attr(struct tem_vt_state *tem, text_color_t *fg, in tem_get_attr() argument
2845 if (tem->tvs_flags & flag) { in tem_get_attr()
2846 *fg = tem->tvs_bg_color; in tem_get_attr()
2847 *bg = tem->tvs_fg_color; in tem_get_attr()
2849 *fg = tem->tvs_fg_color; in tem_get_attr()
2850 *bg = tem->tvs_bg_color; in tem_get_attr()
2854 *attr = tem->tvs_flags; in tem_get_attr()
2858 tem_get_color(struct tem_vt_state *tem, text_color_t *fg, text_color_t *bg, in tem_get_color() argument
2901 fg->n = rgb_color_map(&rgb_info, fg->n, tem->tvs_alpha); in tem_get_color()
2908 bg->n = rgb_color_map(&rgb_info, bg->n, tem->tvs_alpha); in tem_get_color()
2929 struct tem_vt_state *tem = (struct tem_vt_state *)tem_arg; in tem_get_colors() local
2933 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_get_colors()
2936 tem_get_color(tem, fg, bg, &c); in tem_get_colors()
2953 tem_pix_cls_range(struct tem_vt_state *tem, in tem_pix_cls_range() argument
2970 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_pix_cls_range()
2975 tem_callback_bit2pix(tem, &c); in tem_pix_cls_range()
2976 da.data = (uint8_t *)tem->tvs_pix_data; in tem_pix_cls_range()
2992 tem_virtual_display(struct tem_vt_state *tem, term_char_t *string, in tem_virtual_display() argument
2998 if (tem->tvs_screen_buf == NULL) in tem_virtual_display()
3007 addr = tem->tvs_screen_buf + (row * width + col); in tem_virtual_display()
3014 tem_virtual_cls(struct tem_vt_state *tem, size_t count, in tem_virtual_cls() argument
3020 tem_get_attr(tem, &c.tc_fg_color, &c.tc_bg_color, &attr, in tem_virtual_cls()
3026 tem_virtual_display(tem, &c, 1, row, col); in tem_virtual_cls()