LF OS
Hobby operating system for amd64 with high ambitions
|
#include "vterm_internal.h"
#include <stdio.h>
#include <string.h>
#include "rect.h"
#include "utf8.h"
Go to the source code of this file.
Data Structures | |
struct | ScreenPen |
struct | ScreenCell |
struct | VTermScreen |
Macros | |
#define | UNICODE_SPACE 0x20 |
#define | UNICODE_LINEFEED 0x0a |
#define | REFLOW (screen->reflow) |
#define | PUT(c) |
Variables | |
static VTermStateCallbacks | state_cbs |
struct ScreenPen |
Data Fields | ||
---|---|---|
unsigned int | baseline: 2 | |
VTermColor | bg | |
unsigned int | blink: 1 | |
unsigned int | bold: 1 | |
unsigned int | conceal: 1 | |
unsigned int | dhl: 2 | |
unsigned int | dwl: 1 | |
VTermColor | fg | |
unsigned int | font: 4 | |
unsigned int | italic: 1 | |
unsigned int | protected_cell: 1 | |
unsigned int | reverse: 1 | |
unsigned int | small: 1 | |
unsigned int | strike: 1 | |
unsigned int | underline: 2 |
struct ScreenCell |
Data Fields | ||
---|---|---|
uint32_t | chars[VTERM_MAX_CHARS_PER_CELL] | |
ScreenPen | pen |
struct VTermScreen |
Data Fields | ||
---|---|---|
ScreenCell * | buffer | |
ScreenCell * | buffers[2] | |
const VTermScreenCallbacks * | callbacks | |
void * | cbdata | |
int | cols | |
VTermDamageSize | damage_merge | |
VTermRect | damaged | |
unsigned int | global_reverse: 1 | |
ScreenPen | pen | |
int | pending_scroll_downward | |
int | pending_scroll_rightward | |
VTermRect | pending_scrollrect | |
unsigned int | reflow: 1 | |
int | rows | |
VTermScreenCell * | sb_buffer | |
VTermState * | state | |
VTerm * | vt |
#define PUT | ( | c | ) |
|
static |
Definition at line 910 of file screen.c.
References ScreenCell::chars, VTermRect::end_col, VTermRect::end_row, getcell(), PUT, screen, VTermRect::start_col, VTermRect::start_row, UNICODE_LINEFEED, UNICODE_SPACE, and VTERM_MAX_CHARS_PER_CELL.
|
static |
Definition at line 91 of file screen.c.
References clearcell(), cols, rows, screen, VTermScreen::vt, and vterm_allocator_malloc().
|
static |
Definition at line 1097 of file screen.c.
References ScreenPen::baseline, ScreenPen::bg, ScreenPen::blink, ScreenPen::bold, ScreenPen::conceal, ScreenPen::fg, ScreenPen::font, ScreenPen::italic, ScreenCell::pen, ScreenPen::reverse, ScreenPen::small, ScreenPen::strike, ScreenPen::underline, VTERM_ATTR_BACKGROUND_MASK, VTERM_ATTR_BASELINE_MASK, VTERM_ATTR_BLINK_MASK, VTERM_ATTR_BOLD_MASK, VTERM_ATTR_CONCEAL_MASK, VTERM_ATTR_FONT_MASK, VTERM_ATTR_FOREGROUND_MASK, VTERM_ATTR_ITALIC_MASK, VTERM_ATTR_REVERSE_MASK, VTERM_ATTR_SMALL_MASK, VTERM_ATTR_STRIKE_MASK, VTERM_ATTR_UNDERLINE_MASK, and vterm_color_is_equal().
|
static |
Definition at line 485 of file screen.c.
References VTermScreenCallbacks::bell, VTermScreen::callbacks, VTermScreen::cbdata, and screen.
|
inlinestatic |
Definition at line 76 of file screen.c.
References ScreenCell::chars, ScreenCell::pen, VTermScreen::pen, and screen.
|
static |
Definition at line 104 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermScreenCallbacks::damage, VTermScreen::damage_merge, VTermScreen::damaged, DEBUG_LOG, VTermRect::end_col, VTermRect::end_row, rect_expand(), screen, VTermRect::start_col, VTermRect::start_row, VTERM_DAMAGE_CELL, VTERM_DAMAGE_ROW, VTERM_DAMAGE_SCREEN, VTERM_DAMAGE_SCROLL, and vterm_screen_flush_damage().
|
static |
Definition at line 161 of file screen.c.
References VTermScreen::cols, damagerect(), VTermScreen::rows, screen, and VTermRect::start_row.
|
static |
Definition at line 306 of file screen.c.
References erase_internal(), and erase_user().
|
static |
Definition at line 270 of file screen.c.
References ScreenPen::bg, ScreenCell::chars, ScreenPen::dhl, ScreenPen::dwl, VTermRect::end_col, VTermRect::end_row, ScreenPen::fg, getcell(), info, ScreenCell::pen, VTermScreen::pen, ScreenPen::protected_cell, VTermState::rows, screen, VTermRect::start_col, VTermRect::start_row, VTermScreen::state, and vterm_state_get_lineinfo().
|
static |
Definition at line 297 of file screen.c.
References damagerect(), and screen.
|
inlinestatic |
Definition at line 82 of file screen.c.
References VTermScreen::buffer, VTermScreen::cols, VTermScreen::rows, and screen.
|
static |
Definition at line 396 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermScreenCallbacks::movecursor, and screen.
Definition at line 217 of file screen.c.
References VTermScreen::buffer, VTermScreen::buffers, BUFIDX_PRIMARY, VTermScreen::callbacks, cols, VTermScreen::cols, VTermRect::end_col, VTermRect::end_row, getcell(), memmove(), VTermScreenCallbacks::sb_pushline, sb_pushline_from_row(), screen, VTermRect::start_col, and VTermRect::start_row.
Definition at line 252 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermScreen::damage_merge, damagerect(), VTermScreenCallbacks::moverect, screen, VTERM_DAMAGE_SCROLL, and vterm_screen_flush_damage().
|
static |
Definition at line 173 of file screen.c.
References ScreenCell::chars, VTermPos::col, damagerect(), ScreenPen::dhl, ScreenPen::dwl, getcell(), info, ScreenCell::pen, VTermScreen::pen, ScreenPen::protected_cell, VTermPos::row, screen, VTermRect::start_row, and VTERM_MAX_CHARS_PER_CELL.
|
static |
Definition at line 1160 of file screen.c.
References ScreenPen::bg, VTermScreen::cols, ScreenPen::fg, ScreenCell::pen, VTermScreen::pen, VTermScreen::rows, screen, VTERM_COLOR_IS_DEFAULT_BG, and VTERM_COLOR_IS_DEFAULT_FG.
|
static |
Definition at line 746 of file screen.c.
References VTermScreen::buffer, VTermScreen::buffers, BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermScreen::callbacks, VTermScreen::cbdata, VTermScreen::cols, damagescreen(), VTermStateFields::lineinfos, VTermScreenCallbacks::resize, resize_buffer(), VTermScreen::rows, VTermScreen::sb_buffer, screen, VTermScreen::vt, vterm_allocator_free(), and vterm_allocator_malloc().
|
static |
Definition at line 507 of file screen.c.
References VTermScreenCell::attrs, VTermScreenCellAttrs::baseline, ScreenPen::baseline, VTermScreenCell::bg, ScreenPen::bg, VTermScreenCellAttrs::blink, ScreenPen::blink, VTermScreenCellAttrs::bold, ScreenPen::bold, VTermScreen::buffers, BUFIDX_PRIMARY, VTermScreen::callbacks, VTermScreen::cbdata, VTermScreenCell::chars, ScreenCell::chars, clearcell(), VTermPos::col, VTermScreen::cols, VTermScreenCellAttrs::conceal, ScreenPen::conceal, VTermLineInfo::continuation, VTermScreenCell::fg, ScreenPen::fg, VTermScreenCellAttrs::font, ScreenPen::font, VTermScreen::global_reverse, VTermScreenCellAttrs::italic, ScreenPen::italic, line_popcount(), VTermStateFields::lineinfos, memmove(), ScreenCell::pen, VTermStateFields::pos, REFLOW, VTermScreenCellAttrs::reverse, ScreenPen::reverse, VTermPos::row, VTermScreen::rows, VTermScreen::sb_buffer, VTermScreenCallbacks::sb_popline, VTermScreenCallbacks::sb_pushline, sb_pushline_from_row(), screen, VTermScreenCellAttrs::small, ScreenPen::small, VTermScreenCellAttrs::strike, ScreenPen::strike, VTermScreenCellAttrs::underline, ScreenPen::underline, VTermScreen::vt, vterm_allocator_free(), vterm_allocator_malloc(), VTERM_MAX_CHARS_PER_CELL, width, and VTermScreenCell::width.
|
static |
Definition at line 830 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermScreenCallbacks::sb_clear, and screen.
|
static |
Definition at line 208 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermPos::col, VTermScreen::cols, VTermPos::row, VTermScreen::sb_buffer, VTermScreenCallbacks::sb_pushline, screen, and vterm_screen_get_cell().
|
static |
Definition at line 853 of file screen.c.
References alloc_buffer(), VTermScreen::buffer, VTermScreen::buffers, BUFIDX_PRIMARY, VTermScreen::callbacks, VTermScreen::cbdata, cols, VTermScreen::cols, VTermScreen::damage_merge, VTermScreen::damaged, VTermScreen::global_reverse, VTermScreen::pending_scrollrect, VTermScreen::reflow, rows, VTermScreen::rows, VTermScreen::sb_buffer, screen, VTermRect::start_row, VTermScreen::state, state, state_cbs, vt, VTermScreen::vt, vterm_allocator_malloc(), VTERM_DAMAGE_CELL, vterm_get_size(), vterm_obtain_state(), and vterm_state_set_callbacks().
|
static |
Definition at line 312 of file screen.c.
References ARGSrect, VTermScreen::damage_merge, VTermScreen::damaged, DEBUG_LOG, VTermRect::end_col, VTermRect::end_row, erase_internal(), erase_user(), moverect_internal(), moverect_user(), VTermScreen::pending_scroll_downward, VTermScreen::pending_scroll_rightward, VTermScreen::pending_scrollrect, rect_clip(), rect_contains(), rect_equal(), rect_intersects(), screen, VTermRect::start_col, VTermRect::start_row, STRFrect, VTERM_DAMAGE_SCROLL, vterm_rect_move(), vterm_screen_flush_damage(), and vterm_scroll_rect().
|
static |
Definition at line 799 of file screen.c.
References VTermScreen::cols, damagerect(), ScreenPen::dhl, VTermLineInfo::doubleheight, VTermLineInfo::doublewidth, ScreenPen::dwl, VTermRect::end_col, erase_internal(), getcell(), ScreenCell::pen, screen, VTermRect::start_col, and VTermRect::start_row.
|
static |
Definition at line 406 of file screen.c.
References ScreenPen::baseline, ScreenPen::bg, ScreenPen::blink, ScreenPen::bold, VTermValue::boolean, VTermValue::color, ScreenPen::conceal, ScreenPen::fg, ScreenPen::font, ScreenPen::italic, VTermValue::number, VTermScreen::pen, ScreenPen::reverse, screen, ScreenPen::small, ScreenPen::strike, ScreenPen::underline, VTERM_ATTR_BACKGROUND, VTERM_ATTR_BASELINE, VTERM_ATTR_BLINK, VTERM_ATTR_BOLD, VTERM_ATTR_CONCEAL, VTERM_ATTR_FONT, VTERM_ATTR_FOREGROUND, VTERM_ATTR_ITALIC, VTERM_ATTR_REVERSE, VTERM_ATTR_SMALL, VTERM_ATTR_STRIKE, VTERM_ATTR_UNDERLINE, and VTERM_N_ATTRS.
|
static |
Definition at line 455 of file screen.c.
References VTermValue::boolean, VTermScreen::buffer, VTermScreen::buffers, BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermScreen::callbacks, VTermScreen::cbdata, damagescreen(), VTermScreen::global_reverse, screen, VTermScreenCallbacks::settermprop, VTERM_PROP_ALTSCREEN, and VTERM_PROP_REVERSE.
VTermScreen * vterm_obtain_screen | ( | VTerm * | vt | ) |
Definition at line 1021 of file screen.c.
References VTerm::screen, screen, screen_new(), and vt.
void vterm_screen_convert_color_to_rgb | ( | const VTermScreen * | screen, |
VTermColor * | col | ||
) |
Same as vterm_state_convert_color_to_rgb(), but takes a screen
instead of a state
instance.
Definition at line 1155 of file screen.c.
References screen, VTermScreen::state, and vterm_state_convert_color_to_rgb().
void vterm_screen_enable_altscreen | ( | VTermScreen * | screen, |
int | altscreen | ||
) |
Definition at line 1043 of file screen.c.
References alloc_buffer(), VTermScreen::buffers, BUFIDX_ALTSCREEN, cols, rows, screen, VTermScreen::vt, and vterm_get_size().
void vterm_screen_enable_reflow | ( | VTermScreen * | screen, |
bool | reflow | ||
) |
Definition at line 1032 of file screen.c.
References VTermScreen::reflow, and screen.
void vterm_screen_flush_damage | ( | VTermScreen * | screen | ) |
Definition at line 1074 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, VTermScreenCallbacks::damage, VTermScreen::damaged, erase_user(), moverect_user(), VTermScreen::pending_scroll_downward, VTermScreen::pending_scroll_rightward, VTermScreen::pending_scrollrect, screen, VTermRect::start_row, and vterm_scroll_rect().
INTERNAL void vterm_screen_free | ( | VTermScreen * | screen | ) |
Definition at line 891 of file screen.c.
References VTermScreen::buffers, BUFIDX_ALTSCREEN, BUFIDX_PRIMARY, VTermScreen::sb_buffer, screen, VTermScreen::vt, and vterm_allocator_free().
int vterm_screen_get_attrs_extent | ( | const VTermScreen * | screen, |
VTermRect * | extent, | ||
VTermPos | pos, | ||
VTermAttrMask | attrs | ||
) |
Definition at line 1127 of file screen.c.
References attrs_differ(), VTermPos::col, VTermScreen::cols, VTermRect::end_col, VTermRect::end_row, getcell(), VTermPos::row, screen, VTermRect::start_col, and VTermRect::start_row.
void * vterm_screen_get_cbdata | ( | VTermScreen * | screen | ) |
Definition at line 1059 of file screen.c.
References VTermScreen::cbdata, and screen.
int vterm_screen_get_cell | ( | const VTermScreen * | screen, |
VTermPos | pos, | ||
VTermScreenCell * | cell | ||
) |
Definition at line 971 of file screen.c.
References VTermScreenCell::attrs, VTermScreenCellAttrs::baseline, ScreenPen::baseline, VTermScreenCell::bg, ScreenPen::bg, VTermScreenCellAttrs::blink, ScreenPen::blink, VTermScreenCellAttrs::bold, ScreenPen::bold, VTermScreenCell::chars, ScreenCell::chars, VTermPos::col, VTermScreen::cols, VTermScreenCellAttrs::conceal, ScreenPen::conceal, VTermScreenCellAttrs::dhl, ScreenPen::dhl, VTermScreenCellAttrs::dwl, ScreenPen::dwl, VTermScreenCell::fg, ScreenPen::fg, VTermScreenCellAttrs::font, ScreenPen::font, getcell(), VTermScreen::global_reverse, VTermScreenCellAttrs::italic, ScreenPen::italic, ScreenCell::pen, VTermScreenCellAttrs::reverse, ScreenPen::reverse, VTermPos::row, screen, VTermScreenCellAttrs::small, ScreenPen::small, VTermScreenCellAttrs::strike, ScreenPen::strike, VTermScreenCellAttrs::underline, ScreenPen::underline, VTERM_MAX_CHARS_PER_CELL, and VTermScreenCell::width.
size_t vterm_screen_get_chars | ( | const VTermScreen * | screen, |
uint32_t * | chars, | ||
size_t | len, | ||
const VTermRect | rect | ||
) |
Definition at line 960 of file screen.c.
References _get_chars(), and screen.
size_t vterm_screen_get_text | ( | const VTermScreen * | screen, |
char * | str, | ||
size_t | len, | ||
const VTermRect | rect | ||
) |
Definition at line 965 of file screen.c.
References _get_chars(), and screen.
void * vterm_screen_get_unrecognised_fbdata | ( | VTermScreen * | screen | ) |
Definition at line 1069 of file screen.c.
References screen, VTermScreen::state, and vterm_state_get_unrecognised_fbdata().
int vterm_screen_is_eol | ( | const VTermScreen * | screen, |
VTermPos | pos | ||
) |
Definition at line 1009 of file screen.c.
References ScreenCell::chars, VTermPos::col, VTermScreen::cols, getcell(), VTermPos::row, and screen.
void vterm_screen_reset | ( | VTermScreen * | screen, |
int | hard | ||
) |
Definition at line 902 of file screen.c.
References VTermScreen::damaged, VTermScreen::pending_scrollrect, screen, VTermRect::start_row, VTermScreen::state, vterm_screen_flush_damage(), and vterm_state_reset().
void vterm_screen_set_callbacks | ( | VTermScreen * | screen, |
const VTermScreenCallbacks * | callbacks, | ||
void * | user | ||
) |
Definition at line 1053 of file screen.c.
References VTermScreen::callbacks, VTermScreen::cbdata, and screen.
void vterm_screen_set_damage_merge | ( | VTermScreen * | screen, |
VTermDamageSize | size | ||
) |
Definition at line 1091 of file screen.c.
References VTermScreen::damage_merge, screen, size, and vterm_screen_flush_damage().
void vterm_screen_set_default_colors | ( | VTermScreen * | screen, |
const VTermColor * | default_fg, | ||
const VTermColor * | default_bg | ||
) |
Similar to vterm_state_set_default_colors(), but also resets colours in the screen buffer(s)
Definition at line 1172 of file screen.c.
References ScreenPen::bg, VTermScreen::buffers, ScreenPen::fg, VTermScreen::pen, reset_default_colours(), screen, VTermScreen::state, VTermColor::type, VTERM_COLOR_DEFAULT_BG, VTERM_COLOR_DEFAULT_FG, VTERM_COLOR_IS_DEFAULT_BG, VTERM_COLOR_IS_DEFAULT_FG, and vterm_state_set_default_colors().
void vterm_screen_set_reflow | ( | VTermScreen * | screen, |
bool | reflow | ||
) |
Definition at line 1038 of file screen.c.
References screen, and vterm_screen_enable_reflow().
void vterm_screen_set_unrecognised_fallbacks | ( | VTermScreen * | screen, |
const VTermStateFallbacks * | fallbacks, | ||
void * | user | ||
) |
Definition at line 1064 of file screen.c.
References fallbacks, screen, VTermScreen::state, and vterm_state_set_unrecognised_fallbacks().
|
static |