mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-31 17:31:20 +02:00
* add sigc function to collect terminal output * terminal output is collected without escape codes, "text only" * if a newline is seen, each newline starts a new line, * else, some cursor move escape sequences start a new line
104 lines
1.9 KiB
C
104 lines
1.9 KiB
C
/* See LICENSE for licence details. */
|
|
/* function for control character */
|
|
void bs(struct terminal_t *term)
|
|
{
|
|
if (term->mode & MODE_VWBS
|
|
&& term->cursor.x - 1 >= 0
|
|
&& term->cells[term->cursor.y][term->cursor.x - 1].width == NEXT_TO_WIDE)
|
|
move_cursor(term, 0, -2);
|
|
else
|
|
move_cursor(term, 0, -1);
|
|
}
|
|
|
|
void tab(struct terminal_t *term)
|
|
{
|
|
int i;
|
|
const char *c = " ";
|
|
term->txt.back().append(c, 1);
|
|
for (i = term->cursor.x + 1; i < term->cols; i++) {
|
|
if (term->tabstop[i]) {
|
|
set_cursor(term, term->cursor.y, i);
|
|
return;
|
|
}
|
|
}
|
|
set_cursor(term, term->cursor.y, term->cols - 1);
|
|
}
|
|
|
|
void nl(struct terminal_t *term)
|
|
{
|
|
term->nlseen = true;
|
|
term->txt.push("");
|
|
term->lines_available++;
|
|
move_cursor(term, 1, 0);
|
|
}
|
|
|
|
void cr(struct terminal_t *term)
|
|
{
|
|
set_cursor(term, term->cursor.y, 0);
|
|
}
|
|
|
|
void enter_esc(struct terminal_t *term)
|
|
{
|
|
term->esc.state = STATE_ESC;
|
|
}
|
|
|
|
/* function for escape sequence */
|
|
void save_state(struct terminal_t *term)
|
|
{
|
|
term->state.mode = term->mode & MODE_ORIGIN;
|
|
term->state.cursor = term->cursor;
|
|
term->state.attribute = term->attribute;
|
|
}
|
|
|
|
void restore_state(struct terminal_t *term)
|
|
{
|
|
/* restore state */
|
|
if (term->state.mode & MODE_ORIGIN)
|
|
term->mode |= MODE_ORIGIN;
|
|
else
|
|
term->mode &= ~MODE_ORIGIN;
|
|
term->cursor = term->state.cursor;
|
|
term->attribute = term->state.attribute;
|
|
}
|
|
|
|
void crnl(struct terminal_t *term)
|
|
{
|
|
cr(term);
|
|
nl(term);
|
|
}
|
|
|
|
void set_tabstop(struct terminal_t *term)
|
|
{
|
|
term->tabstop[term->cursor.x] = true;
|
|
}
|
|
|
|
void reverse_nl(struct terminal_t *term)
|
|
{
|
|
move_cursor(term, -1, 0);
|
|
}
|
|
|
|
void identify(struct terminal_t *term)
|
|
{
|
|
ewrite(term->fd, "\033[?6c", 5); /* "I am a VT102" */
|
|
}
|
|
|
|
void enter_csi(struct terminal_t *term)
|
|
{
|
|
term->esc.state = STATE_CSI;
|
|
}
|
|
|
|
void enter_osc(struct terminal_t *term)
|
|
{
|
|
term->esc.state = STATE_OSC;
|
|
}
|
|
|
|
void enter_dcs(struct terminal_t *term)
|
|
{
|
|
term->esc.state = STATE_DCS;
|
|
}
|
|
|
|
void ris(struct terminal_t *term)
|
|
{
|
|
reset(term);
|
|
}
|