mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-20 11:39:14 +00:00
parent
92edcb17e5
commit
97317b0c95
@ -196,7 +196,7 @@ append config {
|
||||
<dir name="share"> <dir name="vim"> <rom name="vimrc"/> </dir> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="HOME" value="/home" />
|
||||
</start>
|
||||
</config>
|
||||
|
@ -58,7 +58,7 @@
|
||||
</dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="block:$PWD> " />
|
||||
</start>
|
||||
</config>
|
||||
|
@ -43,7 +43,7 @@
|
||||
<dir name="share"> <dir name="vim"> <rom name="vimrc"/> </dir> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="noux:$PWD> " />
|
||||
</start>
|
||||
</config>
|
||||
|
@ -102,7 +102,7 @@
|
||||
<dir name="report"> <fs label="report"/> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/tail">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<arg value="-f"/>
|
||||
<arg value="/report/log"/>
|
||||
</start>
|
||||
@ -156,7 +156,7 @@
|
||||
<rom name="README"/>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="genode:$PWD> " />
|
||||
</start>
|
||||
</config>
|
||||
|
@ -63,7 +63,7 @@
|
||||
<dir name="config"> <fs label="config"/> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="fs:$PWD> " />
|
||||
<env name="HOME" value="/" />
|
||||
<arg value="--login"/>
|
||||
|
@ -1,25 +0,0 @@
|
||||
build "core init test/terminal_decoder"
|
||||
|
||||
create_boot_directory
|
||||
|
||||
install_config {
|
||||
<config>
|
||||
<parent-provides>
|
||||
<service name="ROM"/>
|
||||
<service name="LOG"/>
|
||||
<service name="RM"/>
|
||||
</parent-provides>
|
||||
<default-route>
|
||||
<any-service> <any-child/> <parent/> </any-service>
|
||||
</default-route>
|
||||
<start name="test-terminal_decoder">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
</start>
|
||||
</config>
|
||||
}
|
||||
|
||||
build_boot_image "core ld.lib.so init test-terminal_decoder"
|
||||
|
||||
run_genode_until "--- finished test ---" 10
|
||||
|
||||
puts "Test succeeded"
|
@ -80,7 +80,7 @@ append config {
|
||||
<config>
|
||||
<fstab> <tar name="vim.tar" /> </fstab>
|
||||
<start name="/bin/vim">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
|
||||
<!-- Deactivate the loading of plugins. Otherwise, vim will
|
||||
attempt to use a sub shell for pattern matching -->
|
||||
|
@ -1,278 +0,0 @@
|
||||
/*
|
||||
* \brief Test for decoding terminal input
|
||||
* \author Norman Feske
|
||||
* \date 2011-07-05
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2011-2017 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/log.h>
|
||||
#include <util/misc_math.h>
|
||||
#include <util/string.h>
|
||||
|
||||
/* Terminal includes */
|
||||
#include <terminal/decoder.h>
|
||||
|
||||
|
||||
class Static_character_screen : public Terminal::Character_screen
|
||||
{
|
||||
private:
|
||||
|
||||
Terminal::Character_array &_char_array;
|
||||
Terminal::Boundary _boundary;
|
||||
Terminal::Position _cursor_pos;
|
||||
|
||||
public:
|
||||
|
||||
Static_character_screen(Terminal::Character_array &char_array)
|
||||
: _char_array(char_array), _boundary(_char_array.boundary()) { }
|
||||
|
||||
void dump() const;
|
||||
|
||||
|
||||
/********************************
|
||||
** Character_screen interface **
|
||||
********************************/
|
||||
|
||||
void output(Terminal::Character c)
|
||||
{
|
||||
if (c.ascii() > 0x10)
|
||||
_char_array.set(_cursor_pos, c);
|
||||
_cursor_pos.x++;
|
||||
if (_cursor_pos.x >= _boundary.width) {
|
||||
_cursor_pos.x = 0;
|
||||
_cursor_pos.y++;
|
||||
}
|
||||
if (_cursor_pos.y >= _boundary.height) {
|
||||
_cursor_pos.y = _boundary.height - 1;
|
||||
}
|
||||
}
|
||||
|
||||
void civis()
|
||||
{
|
||||
}
|
||||
|
||||
void cnorm()
|
||||
{
|
||||
}
|
||||
|
||||
void cvvis()
|
||||
{
|
||||
}
|
||||
|
||||
void cpr()
|
||||
{
|
||||
}
|
||||
|
||||
void csr(int, int)
|
||||
{
|
||||
}
|
||||
|
||||
void cub(int)
|
||||
{
|
||||
}
|
||||
|
||||
void cuf(int)
|
||||
{
|
||||
if (_cursor_pos.x >= _boundary.width)
|
||||
_cursor_pos.x++;
|
||||
//
|
||||
// _cursor_pos = _cursor_pos + Terminal::Offset(1, 0);
|
||||
}
|
||||
|
||||
void cup(int y, int x)
|
||||
{
|
||||
using namespace Genode;
|
||||
x = max(0, min(x, _boundary.width - 1));
|
||||
y = max(0, min(y, _boundary.height - 1));
|
||||
_cursor_pos = Terminal::Position(x, y);
|
||||
}
|
||||
|
||||
void cuu1()
|
||||
{
|
||||
// if (_cursor_pos.y > 0)
|
||||
// _cursor_pos.y--;
|
||||
}
|
||||
|
||||
void dch(int)
|
||||
{
|
||||
}
|
||||
|
||||
void dl(int)
|
||||
{
|
||||
}
|
||||
|
||||
void ech(int)
|
||||
{
|
||||
}
|
||||
|
||||
void ed()
|
||||
{
|
||||
}
|
||||
|
||||
void el()
|
||||
{
|
||||
}
|
||||
|
||||
void el1()
|
||||
{
|
||||
}
|
||||
|
||||
void home()
|
||||
{
|
||||
_cursor_pos = Terminal::Position(0, 0);
|
||||
}
|
||||
|
||||
void hpa(int x)
|
||||
{
|
||||
}
|
||||
|
||||
void hts()
|
||||
{
|
||||
}
|
||||
|
||||
void ich(int)
|
||||
{
|
||||
}
|
||||
|
||||
void il(int)
|
||||
{
|
||||
}
|
||||
|
||||
void oc()
|
||||
{
|
||||
}
|
||||
|
||||
void op()
|
||||
{
|
||||
}
|
||||
|
||||
void rc()
|
||||
{
|
||||
}
|
||||
|
||||
void ri()
|
||||
{
|
||||
}
|
||||
|
||||
void ris()
|
||||
{
|
||||
}
|
||||
|
||||
void rmam()
|
||||
{
|
||||
}
|
||||
|
||||
void rmir()
|
||||
{
|
||||
}
|
||||
|
||||
void setab(int)
|
||||
{
|
||||
}
|
||||
|
||||
void setaf(int)
|
||||
{
|
||||
}
|
||||
|
||||
void sgr(int)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void sgr0()
|
||||
{
|
||||
}
|
||||
|
||||
void sc()
|
||||
{
|
||||
}
|
||||
|
||||
void smam()
|
||||
{
|
||||
}
|
||||
|
||||
void smir()
|
||||
{
|
||||
}
|
||||
|
||||
void tbc()
|
||||
{
|
||||
}
|
||||
|
||||
void u6(int, int)
|
||||
{
|
||||
}
|
||||
|
||||
void u7()
|
||||
{
|
||||
}
|
||||
|
||||
void u8()
|
||||
{
|
||||
}
|
||||
|
||||
void u9()
|
||||
{
|
||||
}
|
||||
|
||||
void vpa(int y)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void Static_character_screen::dump() const
|
||||
{
|
||||
using namespace Terminal;
|
||||
|
||||
Genode::log("--- screen dump follows ---");
|
||||
|
||||
Boundary const boundary = _char_array.boundary();
|
||||
for (int y = 0; y < boundary.height; y++) {
|
||||
|
||||
char line[boundary.width + 1];
|
||||
|
||||
for (int x = 0; x < boundary.width; x++) {
|
||||
|
||||
Character c = _char_array.get(Position(x, y));
|
||||
if (c.valid())
|
||||
line[x] = c.ascii();
|
||||
else
|
||||
line[x] = ' ';
|
||||
}
|
||||
|
||||
line[boundary.width] = 0;
|
||||
Genode::log(Genode::Cstring(line));
|
||||
}
|
||||
|
||||
Genode::log("--- end of screen dump ---");
|
||||
}
|
||||
|
||||
|
||||
extern "C" char _binary_vim_vt_start;
|
||||
extern "C" char _binary_vim_vt_end;
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
using namespace Terminal;
|
||||
|
||||
Static_character_array<81, 26> char_array;
|
||||
|
||||
Static_character_screen screen(char_array);
|
||||
|
||||
Decoder decoder(screen);
|
||||
for (char *c = &_binary_vim_vt_start; c < &_binary_vim_vt_end; c++) {
|
||||
decoder.insert(*c);
|
||||
}
|
||||
|
||||
screen.dump();
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
TARGET = test-terminal_decoder
|
||||
SRC_CC = main.cc
|
||||
SRC_BIN = vim.vt
|
||||
LIBS = base
|
||||
|
||||
CC_CXX_WARN_STRICT =
|
@ -1 +0,0 @@
|
||||
[1;25r[?25h[?8c[?25h[?0c[27m[24m[0m[H[J[?25l[?1c[2;1H[1m[34m~ [3;1H~ [4;1H~ [5;1H~ [6;1H~ [7;1H~ [8;1H~ [9;1H~ [10;1H~ [11;1H~ [12;1H~ [13;1H~ [14;1H~ [15;1H~ [16;1H~ [17;1H~ [18;1H~ [19;1H~ [20;1H~ [21;1H~ [22;1H~ [23;1H~ [0m[24;1H[1m[7m[No Name] 0,0-1 All[0m[7;32HVIM - Vi IMproved[9;33Hversion 7.2.330[10;29Hby Bram Moolenaar et al.[11;19HVim is open source and freely distributable[13;26HHelp poor children in Uganda![14;18Htype :help iccf[1m[34m<Enter>[0m for information [16;18Htype :q[1m[34m<Enter>[0m to exit [17;18Htype :help[1m[34m<Enter>[0m or [1m[34m<F1>[0m for on-line help[18;18Htype :help version7[1m[34m<Enter>[0m for version info[1;1H[?25h[?0c[?25l[?1c[25;70H:[1;1H[25;70H[K[25;1H:[?25h[?0cq[?25l[?1c[?25h[?0c
[?25l[?1c[?25h[?0c[25;1H[K[25;1H
|
@ -1 +1 @@
|
||||
e08f39cf745a5b9c8ac0cb8f4ffe7f7c74df5a46
|
||||
4f26912a3db5f084a3b6a2890b654e9fa1671c48
|
||||
|
@ -146,7 +146,7 @@ src/lib/ncurses/codes.c:
|
||||
|
||||
src/lib/ncurses/fallback.c: $(ncurses_src_dir)/tinfo/MKfallback.sh
|
||||
@$(MSG_GENERATE)$@
|
||||
$(VERBOSE)sh -e $< x src/lib/ncurses/misc/terminfo.src tic linux vt102 > $@ 2> /dev/null
|
||||
$(VERBOSE)sh -e $< x src/lib/ncurses/misc/terminfo.src tic screen vt102 > $@ 2> /dev/null
|
||||
$(VERBOSE)#sh -e $< /usr/share/terminfo $(ncurses_src_dir)/misc/terminfo.src /usr/bin/tic > $@
|
||||
|
||||
src/lib/ncurses/unctrl.c:
|
||||
|
@ -114,21 +114,10 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
}
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
Char_cell_array_character_screen(Cell_array<Char_cell> &char_cell_array)
|
||||
:
|
||||
_char_cell_array(char_cell_array),
|
||||
_boundary(_char_cell_array.num_cols(), _char_cell_array.num_lines()),
|
||||
_color_index(DEFAULT_COLOR_INDEX),
|
||||
_inverse(false),
|
||||
_highlight(false),
|
||||
_cursor_visibility(CURSOR_VISIBLE),
|
||||
_region_start(0),
|
||||
_region_end(_boundary.height - 1),
|
||||
_tab_size(DEFAULT_TAB_SIZE)
|
||||
{ }
|
||||
|
||||
static void _missing(char const *method_name)
|
||||
{
|
||||
Genode::warning(method_name, " not implemented");
|
||||
}
|
||||
|
||||
void _line_feed()
|
||||
{
|
||||
@ -149,6 +138,21 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_cursor_pos.x = 0;
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
Char_cell_array_character_screen(Cell_array<Char_cell> &char_cell_array)
|
||||
:
|
||||
_char_cell_array(char_cell_array),
|
||||
_boundary(_char_cell_array.num_cols(), _char_cell_array.num_lines()),
|
||||
_color_index(DEFAULT_COLOR_INDEX),
|
||||
_inverse(false),
|
||||
_highlight(false),
|
||||
_cursor_visibility(CURSOR_VISIBLE),
|
||||
_region_start(0),
|
||||
_region_end(_boundary.height - 1),
|
||||
_tab_size(DEFAULT_TAB_SIZE)
|
||||
{ }
|
||||
|
||||
|
||||
/********************************
|
||||
** Character_screen interface **
|
||||
@ -204,24 +208,24 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
}
|
||||
}
|
||||
|
||||
void civis()
|
||||
void cbt() override { _missing(__func__); }
|
||||
|
||||
void civis() override
|
||||
{
|
||||
_cursor_visibility = CURSOR_INVISIBLE;
|
||||
}
|
||||
|
||||
void cnorm()
|
||||
void cnorm() override
|
||||
{
|
||||
_cursor_visibility = CURSOR_VISIBLE;
|
||||
}
|
||||
|
||||
void cvvis()
|
||||
void cvvis() override
|
||||
{
|
||||
_cursor_visibility = CURSOR_VERY_VISIBLE;
|
||||
}
|
||||
|
||||
void cpr() { Genode::warning(__func__, " not implemented"); }
|
||||
|
||||
void csr(int start, int end)
|
||||
void csr(int start, int end) override
|
||||
{
|
||||
/* the arguments are specified use coordinate origin (1, 1) */
|
||||
start--;
|
||||
@ -234,7 +238,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_region_end = Genode::max(_region_end, _region_start);
|
||||
}
|
||||
|
||||
void cub(int dx)
|
||||
void cub(int dx) override
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
@ -242,7 +246,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_cursor_pos.x = Genode::max(0, _cursor_pos.x);
|
||||
}
|
||||
|
||||
void cuf(int dx)
|
||||
void cuf(int dx) override
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
@ -250,7 +254,7 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_cursor_pos.x = Genode::min(_boundary.width - 1, _cursor_pos.x);
|
||||
}
|
||||
|
||||
void cup(int y, int x)
|
||||
void cup(int y, int x) override
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
@ -265,83 +269,47 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_cursor_pos = Terminal::Position(x, y);
|
||||
}
|
||||
|
||||
void cuu1() { Genode::warning(__func__, " not implemented"); }
|
||||
void dch(int) { Genode::warning(__func__, " not implemented"); }
|
||||
void cud(int) override { _missing(__func__); }
|
||||
void cuu1() override { _missing(__func__); }
|
||||
void cuu(int) override { _missing(__func__); }
|
||||
void dch(int) override { _missing(__func__); }
|
||||
|
||||
void dl(int num_lines)
|
||||
void dl(int num_lines) override
|
||||
{
|
||||
/* delete number of lines */
|
||||
for (int i = 0; i < num_lines; i++)
|
||||
_char_cell_array.scroll_up(_cursor_pos.y, _region_end);
|
||||
}
|
||||
|
||||
void ech(int v)
|
||||
{
|
||||
/* clear number of characters */
|
||||
|
||||
int x = _cursor_pos.x;
|
||||
int y = _cursor_pos.y;
|
||||
|
||||
while (v-- > 0) {
|
||||
|
||||
_char_cell_array.set_cell(x, y,
|
||||
Char_cell(' ', Font_face::REGULAR,
|
||||
_color_index, _inverse, _highlight));
|
||||
|
||||
if (x == (_boundary.width - 1)) {
|
||||
/* end of line reached */
|
||||
if (y < (_boundary.height - 1)) {
|
||||
/* continue at beginning of next line */
|
||||
x = 0;
|
||||
y++;
|
||||
} else {
|
||||
/* end of screen reached */
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
x++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ed()
|
||||
void ed() override
|
||||
{
|
||||
/* clear to end of screen */
|
||||
el();
|
||||
_char_cell_array.clear(_cursor_pos.y + 1, _boundary.height - 1);
|
||||
}
|
||||
|
||||
void el()
|
||||
void el() override
|
||||
{
|
||||
/* clear to end of line */
|
||||
for (int x = _cursor_pos.x; x < _boundary.width; x++)
|
||||
_char_cell_array.set_cell(x, _cursor_pos.y, Char_cell());
|
||||
}
|
||||
|
||||
void el1() { Genode::warning(__func__, " not implemented"); }
|
||||
void el1() override { _missing(__func__); }
|
||||
void enacs() override { _missing(__func__); }
|
||||
void flash() override { _missing(__func__); }
|
||||
|
||||
void home()
|
||||
void home() override
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
_cursor_pos = Terminal::Position(0, 0);
|
||||
}
|
||||
|
||||
void hpa(int x)
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
void hts() override { _missing(__func__); }
|
||||
void ich(int) override { _missing(__func__); }
|
||||
|
||||
/* top-left cursor position is reported as (1, 1) */
|
||||
x--;
|
||||
|
||||
using namespace Genode;
|
||||
_cursor_pos.x = max(0, min(x, _boundary.width - 1));
|
||||
}
|
||||
|
||||
void hts() { Genode::warning(__func__, " not implemented"); }
|
||||
void ich(int) { Genode::warning(__func__, " not implemented"); }
|
||||
|
||||
void il(int value)
|
||||
void il(int value) override
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
@ -356,32 +324,33 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
_char_cell_array.cursor(_cursor_pos, true);
|
||||
}
|
||||
|
||||
void oc() { Genode::warning(__func__, " not implemented"); }
|
||||
void is2() override { _missing(__func__); }
|
||||
void nel() override { _missing(__func__); }
|
||||
|
||||
void op()
|
||||
void op() override
|
||||
{
|
||||
_color_index = DEFAULT_COLOR_INDEX | (DEFAULT_COLOR_INDEX_BG << 3);
|
||||
}
|
||||
|
||||
void rc() { Genode::warning(__func__, " not implemented"); }
|
||||
void ri() { Genode::warning(__func__, " not implemented"); }
|
||||
void ris() { Genode::warning(__func__, " not implemented"); }
|
||||
void rmam() { Genode::warning(__func__, " not implemented"); }
|
||||
void rmir() { Genode::warning(__func__, " not implemented"); }
|
||||
void rc() override { _missing(__func__); }
|
||||
void rs2() override { _missing(__func__); }
|
||||
void rmir() override { _missing(__func__); }
|
||||
void rmcup() override { }
|
||||
void rmkx() override { }
|
||||
|
||||
void setab(int value)
|
||||
void setab(int value) override
|
||||
{
|
||||
_color_index &= ~0x38; /* clear 111000 */
|
||||
_color_index |= (((value == 9) ? DEFAULT_COLOR_INDEX_BG : value) << 3);
|
||||
}
|
||||
|
||||
void setaf(int value)
|
||||
void setaf(int value) override
|
||||
{
|
||||
_color_index &= ~0x7; /* clear 000111 */
|
||||
_color_index |= (value == 9) ? DEFAULT_COLOR_INDEX : value;
|
||||
}
|
||||
|
||||
void sgr(int value)
|
||||
void sgr(int value) override
|
||||
{
|
||||
switch (value) {
|
||||
case 0:
|
||||
@ -401,30 +370,13 @@ class Char_cell_array_character_screen : public Terminal::Character_screen
|
||||
}
|
||||
}
|
||||
|
||||
void sgr0()
|
||||
{
|
||||
sgr(0);
|
||||
}
|
||||
void sgr0() override { sgr(0); }
|
||||
|
||||
void sc() { Genode::warning(__func__, " not implemented"); }
|
||||
void smam() { Genode::warning(__func__, " not implemented"); }
|
||||
void smir() { Genode::warning(__func__, " not implemented"); }
|
||||
void tbc() { Genode::warning(__func__, " not implemented"); }
|
||||
void u6(int, int) { Genode::warning(__func__, " not implemented"); }
|
||||
void u7() { Genode::warning(__func__, " not implemented"); }
|
||||
void u8() { Genode::warning(__func__, " not implemented"); }
|
||||
void u9() { Genode::warning(__func__, " not implemented"); }
|
||||
|
||||
void vpa(int y)
|
||||
{
|
||||
Cursor_guard guard(*this);
|
||||
|
||||
/* top-left cursor position is reported as (1, 1) */
|
||||
y--;
|
||||
|
||||
using namespace Genode;
|
||||
_cursor_pos.y = max(0, min(y, _boundary.height - 1));
|
||||
}
|
||||
void sc() override { _missing(__func__); }
|
||||
void smcup() override { }
|
||||
void smir() override { _missing(__func__); }
|
||||
void smkx() override { }
|
||||
void tbc() override { _missing(__func__); }
|
||||
};
|
||||
|
||||
#endif /* _TERMINAL__CHAR_CELL_ARRAY_CHARACTER_SCREEN_H_ */
|
||||
|
@ -37,6 +37,11 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
* thorough description of these commands.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Back tab
|
||||
*/
|
||||
virtual void cbt() = 0;
|
||||
|
||||
/**
|
||||
* Make cursor invisible
|
||||
*/
|
||||
@ -52,11 +57,6 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
*/
|
||||
virtual void cvvis() = 0;
|
||||
|
||||
/**
|
||||
* Reset string
|
||||
*/
|
||||
virtual void cpr() = 0;
|
||||
|
||||
/**
|
||||
* Change region to line #1 ... line #2
|
||||
*/
|
||||
@ -77,11 +77,21 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
*/
|
||||
virtual void cup(int, int) = 0;
|
||||
|
||||
/**
|
||||
* Down #1 lines
|
||||
*/
|
||||
virtual void cud(int) = 0;
|
||||
|
||||
/**
|
||||
* Move cursor up one line
|
||||
*/
|
||||
virtual void cuu1() = 0;
|
||||
|
||||
/**
|
||||
* Up #1 lines
|
||||
*/
|
||||
virtual void cuu(int) = 0;
|
||||
|
||||
/**
|
||||
* Delete #1 characters
|
||||
*/
|
||||
@ -92,11 +102,6 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
*/
|
||||
virtual void dl(int) = 0;
|
||||
|
||||
/**
|
||||
* Erase #1 characters
|
||||
*/
|
||||
virtual void ech(int) = 0;
|
||||
|
||||
/**
|
||||
* Clear to end of screen
|
||||
*/
|
||||
@ -112,16 +117,21 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
*/
|
||||
virtual void el1() = 0;
|
||||
|
||||
/**
|
||||
* Enable alternative character set
|
||||
*/
|
||||
virtual void enacs() = 0;
|
||||
|
||||
/**
|
||||
* Visible bell
|
||||
*/
|
||||
virtual void flash() = 0;
|
||||
|
||||
/**
|
||||
* Home cursor
|
||||
*/
|
||||
virtual void home() = 0;
|
||||
|
||||
/**
|
||||
* Horizontal position #1 absolute
|
||||
*/
|
||||
virtual void hpa(int) = 0;
|
||||
|
||||
/**
|
||||
* Set a tab in every row, current column
|
||||
*/
|
||||
@ -138,9 +148,14 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
virtual void il(int) = 0;
|
||||
|
||||
/**
|
||||
* Set all color pairs to the original ones
|
||||
* Initialization string
|
||||
*/
|
||||
virtual void oc() = 0;
|
||||
virtual void is2() = 0;
|
||||
|
||||
/**
|
||||
* Newline
|
||||
*/
|
||||
virtual void nel() = 0;
|
||||
|
||||
/**
|
||||
* Set default pair to its original value
|
||||
@ -152,26 +167,26 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
*/
|
||||
virtual void rc() = 0;
|
||||
|
||||
/**
|
||||
* Scroll text down
|
||||
*/
|
||||
virtual void ri() = 0;
|
||||
|
||||
/**
|
||||
* Reset string
|
||||
*/
|
||||
virtual void ris() = 0;
|
||||
virtual void rs2() = 0;
|
||||
|
||||
/**
|
||||
* Turn off automatic margins
|
||||
* Leave cup mode
|
||||
*/
|
||||
virtual void rmam() = 0;
|
||||
virtual void rmcup() = 0;
|
||||
|
||||
/**
|
||||
* Exit insert mode
|
||||
*/
|
||||
virtual void rmir() = 0;
|
||||
|
||||
/**
|
||||
* Exit keyboard transmission mode
|
||||
*/
|
||||
virtual void rmkx() = 0;
|
||||
|
||||
/**
|
||||
* Set background color to #1, using ANSI escape
|
||||
*/
|
||||
@ -198,32 +213,24 @@ struct Terminal::Character_screen : Genode::Interface
|
||||
virtual void sc() = 0;
|
||||
|
||||
/**
|
||||
* Turn on automatic margins
|
||||
* Enter cup mode
|
||||
*/
|
||||
virtual void smam() = 0;
|
||||
virtual void smcup() = 0;
|
||||
|
||||
/**
|
||||
* Enter insert mode
|
||||
*/
|
||||
virtual void smir() = 0;
|
||||
|
||||
/**
|
||||
* Enter keyboard transmission mode
|
||||
*/
|
||||
virtual void smkx() = 0;
|
||||
|
||||
/**
|
||||
* Clear all tab stops
|
||||
*/
|
||||
virtual void tbc() = 0;
|
||||
|
||||
/**
|
||||
* User strings
|
||||
*/
|
||||
virtual void u6(int, int) = 0;
|
||||
virtual void u7() = 0;
|
||||
virtual void u8() = 0;
|
||||
virtual void u9() = 0;
|
||||
|
||||
/**
|
||||
* Vertical position #1 absolute)
|
||||
*/
|
||||
virtual void vpa(int) = 0;
|
||||
};
|
||||
|
||||
#endif /* _TERMINAL__CHARACTER_SCREEN_H_ */
|
||||
|
@ -200,9 +200,13 @@ class Terminal::Decoder
|
||||
{
|
||||
switch (_escape_stack[0].value) {
|
||||
case '7': return (_screen.sc(), true);
|
||||
case 'c': return (_screen.ris(), true);
|
||||
case '8': return (_screen.rc(), true);
|
||||
case 'E': return (_screen.nel(), true);
|
||||
case 'H': return (_screen.hts(), true);
|
||||
case 'M': return (_screen.ri(), true);
|
||||
case 'M': return (_screen.cuu1(), true);
|
||||
case '=': return true; /* follows 'smkx' */
|
||||
case '>': return true; /* follows 'rmkx' */
|
||||
case 'c': return true; /* prefixes 'rs2' */
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
@ -214,32 +218,21 @@ class Terminal::Decoder
|
||||
case '[':
|
||||
|
||||
switch (_escape_stack[1].value) {
|
||||
case 'A': return (_screen.cuu1(), true);
|
||||
case 'C': return (_screen.cuf(1), true);
|
||||
case 'c': return (_screen.u9(), true);
|
||||
case 'H': return (_screen.home(), true);
|
||||
case 'J': return (_screen.ed(), true);
|
||||
case 'K': return (_screen.el(), true);
|
||||
case 'L': return (_screen.il(1), true);
|
||||
case 'M': return (_screen.dl(1), true);
|
||||
case 'P': return (_screen.dch(1), true);
|
||||
case '@': return (_screen.ich(1), true);
|
||||
case 'R': return (_screen.cpr(), true);
|
||||
case 'Z': return (_screen.cbt(), true);
|
||||
case 'm': return (_screen.sgr0(), true);
|
||||
default: return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case ']':
|
||||
|
||||
switch (_escape_stack[1].value) {
|
||||
case 'R': return (_screen.oc(), true);
|
||||
default : return false;
|
||||
}
|
||||
|
||||
case 8:
|
||||
|
||||
return (_escape_stack[1].value == 'A') && (_screen.rc(), true);
|
||||
case ')':
|
||||
return (_escape_stack[1].value == 0) && (_screen.is2(), true);
|
||||
|
||||
default: return false;
|
||||
}
|
||||
@ -262,19 +255,19 @@ class Terminal::Decoder
|
||||
switch (command) {
|
||||
case 'm': return _sgr(p1);
|
||||
case 'D': return (_screen.cub(p1), true);
|
||||
case 'd': return (_screen.vpa(p1), true);
|
||||
case 'A': return (_screen.cuu(p1), true);
|
||||
case 'B': return (_screen.cud(p1), true);
|
||||
case 'g': return (p1 == 3) && (_screen.tbc(), true);
|
||||
case 'G': return (_screen.hpa(p1), true);
|
||||
case 'h': return (p1 == 4) && (_screen.smir(), true);
|
||||
case 'K': return ((p1 == 0) && (_screen.el(), true))
|
||||
|| ((p1 == 1) && (_screen.el1(), true));
|
||||
case 'l': return (p1 == 4) && (_screen.rmir(), true);
|
||||
case 'h': return ((p1 == 4) && (_screen.smir(), true))
|
||||
|| ((p1 == 34) && (_screen.cnorm(), true));
|
||||
case 'K': return ((p1 == 0) && (_screen.el(), true))
|
||||
|| ((p1 == 1) && (_screen.el1(), true));
|
||||
case 'l': return ((p1 == 4) && (_screen.rmir(), true))
|
||||
|| ((p1 == 34) && (_screen.cvvis(), true));
|
||||
case 'L': return (_screen.il(p1), true);
|
||||
case 'M': return (_screen.dl(p1), true);
|
||||
case 'n': return (p1 == 6) && (_screen.u7(), true);
|
||||
case 'P': return (_screen.dch(p1), true);
|
||||
case '@': return (_screen.ich(p1), true);
|
||||
case 'X': return (_screen.ech(p1), true);
|
||||
case 'C': return (_screen.cuf(p1), true);
|
||||
|
||||
default: return false;
|
||||
@ -297,8 +290,10 @@ class Terminal::Decoder
|
||||
|
||||
switch (command) {
|
||||
case 'l':
|
||||
if (p1 == 7) return (_screen.rmam(), true);
|
||||
if (p1 == 1) return (_screen.rmkx(), true);
|
||||
if (p1 == 25) return (_screen.civis(), true);
|
||||
if (p1 == 1000) return (_screen.rs2(), true);
|
||||
if (p1 == 1049) return (_screen.rmcup(), true);
|
||||
if (p1 == 2004) {
|
||||
/* disable bracketed paste */
|
||||
Genode::warning("Sequence '[?2004l' is not implemented");
|
||||
@ -306,20 +301,15 @@ class Terminal::Decoder
|
||||
}
|
||||
return false;
|
||||
case 'h':
|
||||
if (p1 == 7) return (_screen.smam(), true);
|
||||
if (p1 == 1) return (_screen.smkx(), true);
|
||||
if (p1 == 25) return (_screen.cnorm(), true);
|
||||
if (p1 == 1049) return (_screen.smcup(), true);
|
||||
if (p1 == 2004) {
|
||||
/* enable bracketed paste */
|
||||
Genode::warning("Sequence '[?2004h' is not implemented");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
case 'c':
|
||||
if (p1 == 0) return true; /* appended to cnorm */
|
||||
if (p1 == 1) return true; /* appended to civis */
|
||||
if (p1 == 6) return (_screen.u8(), true);
|
||||
if (p1 == 8) return (_screen.cvvis(), true);
|
||||
return false;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
@ -345,6 +335,9 @@ class Terminal::Decoder
|
||||
case 'H': return (_screen.cup(p[0], p[1]), true);
|
||||
case 'm':
|
||||
|
||||
if (p[0] == 39 && p[1] == 49)
|
||||
return (_screen.op(), true);
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (!_sgr(p[i]))
|
||||
Genode::warning("Number ", p[i],
|
||||
@ -354,7 +347,6 @@ class Terminal::Decoder
|
||||
|
||||
return true;
|
||||
|
||||
case 'R': return (_screen.u6(p[0], p[1]), true);
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
@ -154,21 +154,21 @@ class Terminal::Scancode_tracker
|
||||
/* handle special key to be represented by an escape sequence */
|
||||
if (!_last_character) {
|
||||
switch (keycode) {
|
||||
case Input::KEY_DOWN: _last_sequence = "\E[B"; break;
|
||||
case Input::KEY_UP: _last_sequence = "\E[A"; break;
|
||||
case Input::KEY_RIGHT: _last_sequence = "\E[C"; break;
|
||||
case Input::KEY_LEFT: _last_sequence = "\E[D"; break;
|
||||
case Input::KEY_DOWN: _last_sequence = "\EOB"; break;
|
||||
case Input::KEY_UP: _last_sequence = "\EOA"; break;
|
||||
case Input::KEY_RIGHT: _last_sequence = "\EOC"; break;
|
||||
case Input::KEY_LEFT: _last_sequence = "\EOD"; break;
|
||||
case Input::KEY_HOME: _last_sequence = "\E[1~"; break;
|
||||
case Input::KEY_INSERT: _last_sequence = "\E[2~"; break;
|
||||
case Input::KEY_DELETE: _last_sequence = "\E[3~"; break;
|
||||
case Input::KEY_END: _last_sequence = "\E[4~"; break;
|
||||
case Input::KEY_PAGEUP: _last_sequence = "\E[5~"; break;
|
||||
case Input::KEY_PAGEDOWN: _last_sequence = "\E[6~"; break;
|
||||
case Input::KEY_F1: _last_sequence = "\E[[A"; break;
|
||||
case Input::KEY_F2: _last_sequence = "\E[[B"; break;
|
||||
case Input::KEY_F3: _last_sequence = "\E[[C"; break;
|
||||
case Input::KEY_F4: _last_sequence = "\E[[D"; break;
|
||||
case Input::KEY_F5: _last_sequence = "\E[[E"; break;
|
||||
case Input::KEY_F1: _last_sequence = "\EOP"; break;
|
||||
case Input::KEY_F2: _last_sequence = "\EOQ"; break;
|
||||
case Input::KEY_F3: _last_sequence = "\EOR"; break;
|
||||
case Input::KEY_F4: _last_sequence = "\EOS"; break;
|
||||
case Input::KEY_F5: _last_sequence = "\E[15~"; break;
|
||||
case Input::KEY_F6: _last_sequence = "\E[17~"; break;
|
||||
case Input::KEY_F7: _last_sequence = "\E[18~"; break;
|
||||
case Input::KEY_F8: _last_sequence = "\E[19~"; break;
|
||||
|
@ -42,7 +42,7 @@
|
||||
<dir name="share"> <dir name="vim"> <rom name="vimrc"/> </dir> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="noux:$PWD> " />
|
||||
</start>
|
||||
</config>
|
||||
|
@ -125,7 +125,7 @@ Hello world !!
|
||||
</dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
</start>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -98,7 +98,7 @@ append config {
|
||||
<dir name="rw"> <fs/> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="PS1" value="fs:$PWD> " />
|
||||
<env name="HOME" value="/" />
|
||||
<arg value="--login"/>
|
||||
|
@ -128,7 +128,7 @@ append config {
|
||||
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="HOME" value="/home" />
|
||||
<arg value="--login" />
|
||||
</start>
|
||||
|
@ -171,7 +171,7 @@ append config {
|
||||
<dir name="dev"> <terminal name="terminal" label="terminal_fs" /> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
</start>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -261,7 +261,7 @@ append config {
|
||||
</dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="HOME" value="/home" />
|
||||
<env name="PATH" value="/bin" />
|
||||
<arg value="--login" />
|
||||
|
@ -175,7 +175,7 @@ append config {
|
||||
<dir name="share"> <dir name="vim"> <rom name="vimrc"/> </dir> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
<env name="HOME" value="/home" />
|
||||
<arg value="--login" />
|
||||
</start>
|
||||
|
@ -183,7 +183,7 @@ append config {
|
||||
<dir name="dev"> <terminal name="terminal" label="terminal_fs" /> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
</start>
|
||||
</config>
|
||||
</start>
|
||||
@ -205,7 +205,7 @@ append config {
|
||||
<dir name="dev"> <terminal name="terminal" label="terminal_fs" /> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
</start>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -58,7 +58,7 @@ install_config {
|
||||
<config>
|
||||
<fstab> <tar name="vim.tar" /> </fstab>
|
||||
<start name="/bin/vim">
|
||||
<env name="TERM" value="linux" />
|
||||
<env name="TERM" value="screen" />
|
||||
|
||||
<!-- Deactivate the loading of plugins. Otherwise, vim will
|
||||
attempt to use a sub shell for pattern matching -->
|
||||
|
@ -152,7 +152,7 @@ set config_of_app {
|
||||
<dir name="to"> <fs label="share_to"/> </dir>
|
||||
</fstab>
|
||||
<start name="/bin/bash">
|
||||
<env name="TERM" value="linux"/>
|
||||
<env name="TERM" value="screen"/>
|
||||
</start>
|
||||
</config>
|
||||
<route>
|
||||
|
Loading…
Reference in New Issue
Block a user