diff --git a/repos/gems/recipes/pkg/fonts_fs/README b/repos/gems/recipes/pkg/fonts_fs/README
new file mode 100644
index 000000000..3716e57ec
--- /dev/null
+++ b/repos/gems/recipes/pkg/fonts_fs/README
@@ -0,0 +1 @@
+File system for providing the default fonts
diff --git a/repos/gems/recipes/pkg/fonts_fs/archives b/repos/gems/recipes/pkg/fonts_fs/archives
new file mode 100644
index 000000000..a04f1f3a2
--- /dev/null
+++ b/repos/gems/recipes/pkg/fonts_fs/archives
@@ -0,0 +1,4 @@
+_/raw/ttf-bitstream-vera-minimal
+_/src/vfs
+_/src/vfs_ttf
+_/src/libc
diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash
new file mode 100644
index 000000000..26889a15c
--- /dev/null
+++ b/repos/gems/recipes/pkg/fonts_fs/hash
@@ -0,0 +1 @@
+2018-04-13-b 34ed3dca0405409ed930319fb2357ffbcfb130e2
diff --git a/repos/gems/recipes/pkg/fonts_fs/runtime b/repos/gems/recipes/pkg/fonts_fs/runtime
new file mode 100644
index 000000000..11140b5a5
--- /dev/null
+++ b/repos/gems/recipes/pkg/fonts_fs/runtime
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/recipes/pkg/sculpt-installation/archives b/repos/gems/recipes/pkg/sculpt-installation/archives
index e80bbedd2..f53136077 100644
--- a/repos/gems/recipes/pkg/sculpt-installation/archives
+++ b/repos/gems/recipes/pkg/sculpt-installation/archives
@@ -10,3 +10,4 @@ _/pkg/vbox5-nova-sculpt
_/pkg/themed_wm
_/pkg/sticks_blue_backdrop
_/pkg/nano3d
+_/pkg/fonts_fs
diff --git a/repos/gems/recipes/pkg/sculpt/archives b/repos/gems/recipes/pkg/sculpt/archives
index eb6ec67fd..1e2d0207b 100644
--- a/repos/gems/recipes/pkg/sculpt/archives
+++ b/repos/gems/recipes/pkg/sculpt/archives
@@ -1,6 +1,7 @@
_/pkg/drivers_managed-pc
_/pkg/wifi
_/pkg/depot_download
+_/pkg/terminal
_/src/report_rom
_/src/init
_/src/ram_fs
@@ -16,7 +17,6 @@ _/src/top
_/src/trace_subject_reporter
_/src/cpu_load_display
_/src/rom_filter
-_/src/terminal
_/src/terminal_log
_/src/file_terminal
_/src/libc
diff --git a/repos/gems/recipes/pkg/terminal/README b/repos/gems/recipes/pkg/terminal/README
new file mode 100644
index 000000000..ebccfbc72
--- /dev/null
+++ b/repos/gems/recipes/pkg/terminal/README
@@ -0,0 +1 @@
+Graphical terminal with a simple default font configuration
diff --git a/repos/gems/recipes/pkg/terminal/archives b/repos/gems/recipes/pkg/terminal/archives
new file mode 100644
index 000000000..dc711350e
--- /dev/null
+++ b/repos/gems/recipes/pkg/terminal/archives
@@ -0,0 +1,5 @@
+_/raw/ttf-bitstream-vera-minimal
+_/raw/terminal
+_/src/terminal
+_/src/vfs_ttf
+_/src/libc
diff --git a/repos/gems/recipes/pkg/terminal/hash b/repos/gems/recipes/pkg/terminal/hash
new file mode 100644
index 000000000..62279dad5
--- /dev/null
+++ b/repos/gems/recipes/pkg/terminal/hash
@@ -0,0 +1 @@
+2018-04-11-b 035355bb942e636193a57c5d6a6934c278194ff6
diff --git a/repos/gems/recipes/pkg/terminal/runtime b/repos/gems/recipes/pkg/terminal/runtime
new file mode 100644
index 000000000..3c90daa3b
--- /dev/null
+++ b/repos/gems/recipes/pkg/terminal/runtime
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/recipes/raw/terminal/content.mk b/repos/gems/recipes/raw/terminal/content.mk
new file mode 100644
index 000000000..34afe035c
--- /dev/null
+++ b/repos/gems/recipes/raw/terminal/content.mk
@@ -0,0 +1,4 @@
+content: terminal.config
+
+terminal.config:
+ cp $(REP_DIR)/recipes/raw/terminal/$@ $@
diff --git a/repos/gems/recipes/raw/terminal/hash b/repos/gems/recipes/raw/terminal/hash
new file mode 100644
index 000000000..3e80af21f
--- /dev/null
+++ b/repos/gems/recipes/raw/terminal/hash
@@ -0,0 +1 @@
+2018-04-11 c9678f3083788e171fcda2d72c67300dcc2b13e4
diff --git a/repos/gems/recipes/raw/terminal/terminal.config b/repos/gems/recipes/raw/terminal/terminal.config
new file mode 100644
index 000000000..c91be2e13
--- /dev/null
+++ b/repos/gems/recipes/raw/terminal/terminal.config
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/recipes/src/terminal/used_apis b/repos/gems/recipes/src/terminal/used_apis
index 9a1a6931e..f6af6ded5 100644
--- a/repos/gems/recipes/src/terminal/used_apis
+++ b/repos/gems/recipes/src/terminal/used_apis
@@ -5,3 +5,8 @@ input_session
nitpicker_gfx
terminal_session
timer_session
+vfs
+gems
+block_session
+file_system_session
+rtc_session
diff --git a/repos/gems/run/cpu_sampler_noux.run b/repos/gems/run/cpu_sampler_noux.run
index 63566ed70..493bd3700 100644
--- a/repos/gems/run/cpu_sampler_noux.run
+++ b/repos/gems/run/cpu_sampler_noux.run
@@ -4,18 +4,23 @@ if { ![have_spec foc] && ![have_spec nova] &&
exit 0
}
-set build_components {
- core init drivers/timer noux/minimal lib/libc_noux
- drivers/input
- server/terminal server/ram_fs
- server/log_terminal
- test/libports/ncurses
- server/fs_log
- server/cpu_sampler
- test/cpu_sampler
-}
+create_boot_directory
-lappend_if [have_spec framebuffer] build_components drivers/framebuffer
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init \
+ genodelabs/src/noux \
+ genodelabs/src/posix \
+ genodelabs/src/ram_fs \
+ genodelabs/src/log_terminal \
+ genodelabs/src/ncurses \
+ genodelabs/src/bash-minimal \
+ genodelabs/src/vim-minimal \
+ genodelabs/src/coreutils-minimal
+
+
+set build_components { server/fs_log server/cpu_sampler test/cpu_sampler }
if {[have_spec foc] || [have_spec nova]} {
lappend build_components lib/cpu_sampler_platform-$::env(KERNEL)
@@ -23,19 +28,12 @@ if {[have_spec foc] || [have_spec nova]} {
lappend build_components lib/cpu_sampler_platform-generic
}
-source ${genode_dir}/repos/base/run/platform_drv.inc
-
-lappend_if [need_usb_hid] build_components drivers/usb
-lappend_if [have_spec gpio] build_components drivers/gpio
-
#
# Build Noux packages only once
#
-foreach pkg {bash coreutils vim diffutils} {
+foreach pkg {diffutils} {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
-append_platform_drv_build_components
-
build $build_components
# write default vimrc file
@@ -49,12 +47,6 @@ set noswapfile
set viminfo=}
close $vimrc_fd
-create_boot_directory
-
-proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
- if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
- return gpio_drv }
-
append config {
@@ -76,50 +68,35 @@ append config {
}
-append_platform_drv_config
-
-append_if [expr [have_spec framebuffer] && ![get_cmd_switch --autopilot]] config {
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
- }
-
-append_if [have_spec gpio] config "
-
-
-
-
- "
-
-append_if [need_usb_hid] config {
-
-
-
-
- }
-
append_if [get_cmd_switch --autopilot] config {
- }
+ }
append_if [expr ![get_cmd_switch --autopilot]] config {
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- }
+
+
+
+
+ }
append config {
@@ -183,10 +160,10 @@ append config {
-
-
+
+
-
+
@@ -205,12 +182,10 @@ append config {
-
-}
+ }
install_config $config
-
#
# Boot modules
#
@@ -224,29 +199,11 @@ proc binary_name_cpu_sampler_platform_lib_so { } {
}
}
-# generic modules
-set boot_modules {
- core ld.lib.so init timer noux terminal ram_fs log_terminal
- libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so posix.lib.so
- bash.tar coreutils.tar diffutils.tar vim.tar vimrc
+build_boot_image {
+ diffutils.tar vimrc
fs_log cpu_sampler cpu_sampler_platform.lib.so test-cpu_sampler
}
-# platform-specific modules
-lappend_if [have_spec ps2] boot_modules ps2_drv
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [need_usb_hid] boot_modules usb_drv
-lappend_if [have_spec gpio] boot_modules [gpio_drv]
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
-
-if {[have_spec x86_64]} {
- # bash.tar is really huge when built for x86_64
-} else {
-}
-
if { ![get_cmd_switch --autopilot] } { run_genode_until forever }
# autopilot test
diff --git a/repos/gems/run/depot_deploy.run b/repos/gems/run/depot_deploy.run
index 7d4c9cc78..763b0053d 100644
--- a/repos/gems/run/depot_deploy.run
+++ b/repos/gems/run/depot_deploy.run
@@ -1,20 +1,23 @@
create_boot_directory
-import_from_depot genodelabs/src/[base_src] \
- genodelabs/pkg/[drivers_interactive_pkg] \
- genodelabs/src/report_rom \
- genodelabs/src/fs_rom \
- genodelabs/src/ram_fs \
- genodelabs/src/vfs \
- genodelabs/src/nitpicker \
- genodelabs/src/init
+proc depot_user {} { return nfeske }
+
+import_from_depot [depot_user]/src/[base_src] \
+ [depot_user]/pkg/[drivers_interactive_pkg] \
+ [depot_user]/src/report_rom \
+ [depot_user]/src/fs_rom \
+ [depot_user]/src/ram_fs \
+ [depot_user]/src/vfs \
+ [depot_user]/src/nitpicker \
+ [depot_user]/src/init \
+ [depot_user]/src/vfs_ttf \
+ [depot_user]/src/libc \
+ [depot_user]/raw/ttf-bitstream-vera-minimal
create_tar_from_depot_binaries [run_dir]/genode/depot.tar \
- genodelabs/pkg/sculpt-installation \
- genodelabs/pkg/themed_wm \
- genodelabs/pkg/sticks_blue_backdrop
-
-proc depot_user {} { return genodelabs }
+ [depot_user]/pkg/sculpt-installation \
+ [depot_user]/pkg/themed_wm \
+ [depot_user]/pkg/sticks_blue_backdrop
proc current_pkg { pkg } { return $pkg/[_current_depot_archive_version pkg $pkg] }
@@ -57,7 +60,7 @@ install_config {
-
+
@@ -177,9 +180,16 @@ install_config {
-->
+
+
+
+
+
+
+
@@ -201,6 +211,7 @@ install_config {
+
@@ -214,6 +225,15 @@ install_config {
build { app/depot_query app/depot_deploy }
+file copy -force [genode_dir]/repos/gems/run/sculpt/fonts.config [run_dir]/genode/
+
+#
+# Pin the nitpicker focus to the window manager by providing a static focus ROM
+#
+set fd [open [run_dir]/genode/focus w]
+puts $fd " wm -> wm -> \"/>"
+close $fd
+
build_boot_image { depot_query depot_deploy }
run_genode_until forever
diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run
index 66b1f81ef..942ddbc38 100644
--- a/repos/gems/run/sculpt.run
+++ b/repos/gems/run/sculpt.run
@@ -107,6 +107,7 @@ install_config {
+
@@ -383,7 +384,9 @@ install_config {
-
+
+
+
@@ -559,6 +562,12 @@ append depot_deploy_config {
+
+
+
+
+
+
@@ -578,6 +587,8 @@ append depot_deploy_config {
+
+
diff --git a/repos/gems/run/sculpt/block_runtime.config b/repos/gems/run/sculpt/block_runtime.config
index 286465ba9..bc5c415eb 100644
--- a/repos/gems/run/sculpt/block_runtime.config
+++ b/repos/gems/run/sculpt/block_runtime.config
@@ -40,7 +40,12 @@
-
+
+
+
+
+
+
diff --git a/repos/gems/run/sculpt/default_noux_subinit.config b/repos/gems/run/sculpt/default_noux_subinit.config
index f0124b5d6..f9477e4aa 100644
--- a/repos/gems/run/sculpt/default_noux_subinit.config
+++ b/repos/gems/run/sculpt/default_noux_subinit.config
@@ -24,7 +24,12 @@
-
+
+
+
+
+
+
diff --git a/repos/gems/run/sculpt/deploy_runtime.config b/repos/gems/run/sculpt/deploy_runtime.config
index 96cd8b848..5e1cab251 100644
--- a/repos/gems/run/sculpt/deploy_runtime.config
+++ b/repos/gems/run/sculpt/deploy_runtime.config
@@ -101,6 +101,8 @@
+
+
diff --git a/repos/gems/run/sculpt/download_runtime.config b/repos/gems/run/sculpt/download_runtime.config
index c1cb858f7..c44328436 100644
--- a/repos/gems/run/sculpt/download_runtime.config
+++ b/repos/gems/run/sculpt/download_runtime.config
@@ -51,6 +51,8 @@
+
+
diff --git a/repos/gems/run/sculpt/fonts.config b/repos/gems/run/sculpt/fonts.config
new file mode 100644
index 000000000..c1446edfc
--- /dev/null
+++ b/repos/gems/run/sculpt/fonts.config
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/gems/run/sculpt/fs_runtime.config b/repos/gems/run/sculpt/fs_runtime.config
index 5c1de02e3..7b44902a6 100644
--- a/repos/gems/run/sculpt/fs_runtime.config
+++ b/repos/gems/run/sculpt/fs_runtime.config
@@ -49,6 +49,8 @@
+
+
diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config
index 23ef2eb9c..9adc4b2a8 100644
--- a/repos/gems/run/sculpt/leitzentrale.config
+++ b/repos/gems/run/sculpt/leitzentrale.config
@@ -84,8 +84,14 @@
-
-
+
+
+
+
+
+
+
+
@@ -131,11 +137,8 @@
-
-
-
-
+
diff --git a/repos/gems/run/sculpt/load_runtime.config b/repos/gems/run/sculpt/load_runtime.config
index 707d6f7f1..f83004705 100644
--- a/repos/gems/run/sculpt/load_runtime.config
+++ b/repos/gems/run/sculpt/load_runtime.config
@@ -40,7 +40,12 @@
-
+
+
+
+
+
+
diff --git a/repos/gems/run/terminal_echo.run b/repos/gems/run/terminal_echo.run
index 2b6b4f1df..46da9aa94 100644
--- a/repos/gems/run/terminal_echo.run
+++ b/repos/gems/run/terminal_echo.run
@@ -1,21 +1,12 @@
-set build_components {
- core init drivers/timer
- server/input_filter server/terminal test/terminal_echo
- drivers/framebuffer drivers/input
-}
-
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
-build $build_components
-
create_boot_directory
-exec cp -f [genode_dir]/repos/os/src/server/input_filter/en_us.chargen bin/
-exec cp -f [genode_dir]/repos/os/src/server/input_filter/de.chargen bin/
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init
-append config {
-
+install_config {
+
@@ -26,82 +17,36 @@ append config {
+
+
-}
-append_if [have_spec sdl] config {
-
-
-
-
-
-
-
-
- }
-
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
-
- }
-
-append config {
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
@@ -112,26 +57,9 @@ append config {
}
-install_config $config
+build { server/terminal test/terminal_echo }
-#
-# Boot modules
-#
-
-# generic modules
-set boot_modules {
- core ld.lib.so init timer input_filter terminal test-terminal_echo
- en_us.chargen de.chargen
-}
-
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [have_spec ps2] boot_modules ps2_drv
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
+build_boot_image { terminal test-terminal_echo }
run_genode_until forever
diff --git a/repos/gems/run/terminal_log.run b/repos/gems/run/terminal_log.run
index 29091d5c3..72845aeca 100644
--- a/repos/gems/run/terminal_log.run
+++ b/repos/gems/run/terminal_log.run
@@ -1,32 +1,14 @@
-#
-# \brief Showcases terminal_log server
-# \author Stefan Kalkowski
-# \date 2012-05-21
-#
-
-set build_components {
- core
- init
- drivers/framebuffer
- drivers/input
- drivers/timer
- server/nitpicker
- server/nit_fb
- server/terminal
- server/terminal_log
- test/nitpicker
- app/launchpad
- app/pointer
-}
-
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
-build $build_components
-
create_boot_directory
-append config {
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/nitpicker \
+ genodelabs/src/nit_fb \
+ genodelabs/src/demo \
+ genodelabs/src/init
+
+install_config {
@@ -45,42 +27,29 @@ append config {
+
+
-}
-append_if [have_spec sdl] config {
-
-
+
+
+
+
+
+
+
+
-
-
+
-
- }
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
-
- }
-
-append config {
-
+
@@ -89,14 +58,16 @@ append config {
-
-
+
+
+
+
@@ -106,53 +77,37 @@ append config {
+
+
+
-
+
+
-
+
-
-}
-install_config $config
+}
-# generic modules
-set boot_modules {
- core ld.lib.so init
- timer
- nitpicker
- pointer
- launchpad
- testnit
- nit_fb
- terminal
- terminal_log
-}
+build { server/terminal_log test/nitpicker }
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [have_spec ps2] boot_modules ps2_drv
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
+build_boot_image { terminal_log testnit }
run_genode_until forever
diff --git a/repos/gems/src/server/terminal/framebuffer.h b/repos/gems/src/server/terminal/framebuffer.h
index 08b3e4eb3..472fce62e 100644
--- a/repos/gems/src/server/terminal/framebuffer.h
+++ b/repos/gems/src/server/terminal/framebuffer.h
@@ -72,8 +72,18 @@ class Terminal::Framebuffer
void switch_to_new_mode()
{
- _ds.construct(_env.rm(), _fb.dataspace());
+ /*
+ * The mode information must be obtained before updating the
+ * dataspace to ensure that the mode is consistent with the
+ * obtained version of the dataspace.
+ *
+ * Otherwise - if the server happens to change the mode just after
+ * the dataspace update - the mode information may correspond to
+ * the next pending mode at the server while we are operating on
+ * the old (possibly too small) dataspace.
+ */
_mode = _fb.mode();
+ _ds.construct(_env.rm(), _fb.dataspace());
}
};
diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc
index 9aa6314ef..32a1ca7ee 100644
--- a/repos/gems/src/server/terminal/main.cc
+++ b/repos/gems/src/server/terminal/main.cc
@@ -21,7 +21,9 @@
#include
#include
#include
-#include
+#include
+#include
+#include
/* terminal includes */
#include
@@ -46,16 +48,27 @@ struct Terminal::Main : Character_consumer
Attached_rom_dataspace _config { _env, "config" };
- /**
- * Return font data according to config
- */
- static char const *_font_data(Xml_node config);
+ Heap _heap { _env.ram(), _env.rm() };
- Tff_font::Static_glyph_buffer<4096> _glyph_buffer { };
+ Root_directory _root_dir { _env, _heap, _config.xml().sub_node("vfs") };
- Reconstructible _font { _font_data(_config.xml()), _glyph_buffer };
+ Cached_font::Limit _font_cache_limit { 0 };
- Reconstructible _font_family { *_font };
+ struct Font
+ {
+ Vfs_font _vfs_font;
+ Cached_font _cached_font;
+
+ Font(Allocator &alloc, Directory &root_dir, Cached_font::Limit limit)
+ :
+ _vfs_font(alloc, root_dir, "fonts/monospace/regular"),
+ _cached_font(alloc, _vfs_font, limit)
+ { }
+
+ Text_painter::Font const &font() const { return _cached_font; }
+ };
+
+ Constructible _font { };
Color_palette _color_palette { };
@@ -67,15 +80,13 @@ struct Terminal::Main : Character_consumer
Input::Connection _input { _env };
Timer::Connection _timer { _env };
- Heap _heap { _env.ram(), _env.rm() };
-
Framebuffer _framebuffer { _env, _config_handler };
typedef Pixel_rgb565 PT;
Constructible> _text_screen_surface { };
- Session::Size _terminal_size { };
+ Area _terminal_size { };
/*
* Time in milliseconds between a change of the terminal content and the
@@ -86,22 +97,21 @@ struct Terminal::Main : Character_consumer
bool _flush_scheduled = false;
- void _handle_flush(Duration)
+ void _handle_flush()
{
_flush_scheduled = false;
- // XXX distinguish between normal and alternate display
if (_text_screen_surface.constructed())
_text_screen_surface->redraw();
}
- Timer::One_shot_timeout _flush_timeout {
- _timer, *this, &Main::_handle_flush };
+ Signal_handler _flush_handler {
+ _env.ep(), *this, &Main::_handle_flush };
void _schedule_flush()
{
if (!_flush_scheduled) {
- _flush_timeout.schedule(Microseconds{1000*_flush_delay});
+ _timer.trigger_once(1000*_flush_delay);
_flush_scheduled = true;
}
}
@@ -131,10 +141,11 @@ struct Terminal::Main : Character_consumer
Main(Env &env) : _env(env)
{
- _handle_config();
+ _timer .sigh(_flush_handler);
_config.sigh(_config_handler);
+ _input .sigh(_input_handler);
- _input.sigh(_input_handler);
+ _handle_config();
/* announce service at our parent */
_env.parent().announce(_env.ep().manage(_root));
@@ -142,48 +153,65 @@ struct Terminal::Main : Character_consumer
};
-/* built-in fonts */
-extern char const _binary_notix_8_tff_start;
-extern char const _binary_terminus_12_tff_start;
-extern char const _binary_terminus_16_tff_start;
-
-
-char const *Terminal::Main::_font_data(Xml_node config)
-{
- if (config.has_sub_node("font")) {
- size_t const size = config.sub_node("font").attribute_value("size", 16U);
-
- switch (size) {
- case 8: return &_binary_notix_8_tff_start; break;
- case 12: return &_binary_terminus_12_tff_start; break;
- case 16: return &_binary_terminus_16_tff_start; break;
- default: break;
- }
- }
- return &_binary_terminus_16_tff_start;
-}
-
-
void Terminal::Main::_handle_config()
{
_config.update();
- _font_family.destruct();
- _font.destruct();
-
Xml_node const config = _config.xml();
- _font.construct(_font_data(config), _glyph_buffer);
- _font_family.construct(*_font);
+ _font.destruct();
+
+ _root_dir.apply_config(config.sub_node("vfs"));
+
+ Cached_font::Limit const cache_limit {
+ config.attribute_value("cache", Number_of_bytes(256*1024)) };
+
+ _font.construct(_heap, _root_dir, cache_limit);
/*
- * Adapt terminal to framebuffer mode changes
+ * Adapt terminal to font or framebuffer mode changes
*/
_framebuffer.switch_to_new_mode();
- _text_screen_surface.construct(_heap, *_font_family,
- _color_palette, _framebuffer);
- _terminal_size = _text_screen_surface->size();
- _root.notify_resized(_terminal_size);
+
+ /*
+ * Distinguish the case where the framebuffer change affects the character
+ * grid size from the case where merely the pixel position of the character
+ * grid within the framebuffer changed.
+ *
+ * In the former case, the text-screen surface is reallocated and cleared.
+ * Clients (like ncurses) are expected to respond to a terminal-size change
+ * with a redraw. In the latter case, the client would skip the redraw. So
+ * we need to preserve the content and just reposition the character grid.
+ */
+
+ try {
+ Text_screen_surface::Geometry const new_geometry(_font->font(), _framebuffer);
+
+ bool const reconstruct = !_text_screen_surface.constructed() ||
+ _text_screen_surface->size() != new_geometry.size();
+ if (reconstruct) {
+ _text_screen_surface.construct(_heap, _font->font(),
+ _color_palette, _framebuffer);
+ _terminal_size = _text_screen_surface->size();
+
+ } else {
+ _text_screen_surface->geometry(new_geometry);
+ }
+ }
+ catch (Text_screen_surface::Geometry::Invalid)
+ {
+ warning("invalid framebuffer size");
+
+ /*
+ * Make sure to never operate on an invalid-sized framebuffer
+ *
+ * If the exception is thrown by the construction of 'new_geometry',
+ * there may still be a stale '_text_screen_surface'.
+ */
+ _text_screen_surface.destruct();
+ }
+
+ _root.notify_resized(Session::Size(_terminal_size.w(), _terminal_size.h()));
_schedule_flush();
}
diff --git a/repos/gems/src/server/terminal/notix-8.tff b/repos/gems/src/server/terminal/notix-8.tff
deleted file mode 100644
index c4bf3c6a7..000000000
Binary files a/repos/gems/src/server/terminal/notix-8.tff and /dev/null differ
diff --git a/repos/gems/src/server/terminal/target.mk b/repos/gems/src/server/terminal/target.mk
index 46b6e93be..d5a9ebee1 100644
--- a/repos/gems/src/server/terminal/target.mk
+++ b/repos/gems/src/server/terminal/target.mk
@@ -1,4 +1,3 @@
TARGET = terminal
SRC_CC = main.cc
-LIBS = base
-SRC_BIN = $(notdir $(wildcard $(PRG_DIR)/*.tff))
+LIBS = base vfs
diff --git a/repos/gems/src/server/terminal/terminus-12.tff b/repos/gems/src/server/terminal/terminus-12.tff
deleted file mode 100644
index 93abd6687..000000000
Binary files a/repos/gems/src/server/terminal/terminus-12.tff and /dev/null differ
diff --git a/repos/gems/src/server/terminal/terminus-16.tff b/repos/gems/src/server/terminal/terminus-16.tff
deleted file mode 100644
index e066b6965..000000000
Binary files a/repos/gems/src/server/terminal/terminus-16.tff and /dev/null differ
diff --git a/repos/gems/src/server/terminal/text_screen_surface.h b/repos/gems/src/server/terminal/text_screen_surface.h
index 11a216cab..56ae95ab9 100644
--- a/repos/gems/src/server/terminal/text_screen_surface.h
+++ b/repos/gems/src/server/terminal/text_screen_surface.h
@@ -25,7 +25,6 @@
#include
/* local includes */
-#include "font_family.h"
#include "color_palette.h"
#include "framebuffer.h"
@@ -35,19 +34,70 @@ namespace Terminal { template class Text_screen_surface; }
template
class Terminal::Text_screen_surface
{
+ public:
+
+ class Invalid_framebuffer_size : Genode::Exception { };
+
+ typedef Text_painter::Font Font;
+ typedef Glyph_painter::Fixpoint_number Fixpoint_number;
+
+ struct Geometry
+ {
+ Area fb_size;
+ Fixpoint_number char_width;
+ unsigned char_height;
+ unsigned columns;
+ unsigned lines;
+
+ class Invalid : Genode::Exception { };
+
+ Geometry(Font const &font, Framebuffer const &framebuffer)
+ :
+ fb_size(framebuffer.w(), framebuffer.h()),
+ char_width(font.string_width(Utf8_ptr("M"))),
+ char_height(font.height()),
+ columns((framebuffer.w() << 8)/char_width.value),
+ lines(framebuffer.h()/char_height)
+ {
+ if (columns*lines == 0)
+ throw Invalid();
+ }
+
+ Rect fb_rect() const { return Rect(Point(0, 0), fb_size); }
+ Rect used_rect() const { return Rect(start(), used_pixels()); }
+ Area size() const { return Area(columns, lines); }
+
+ /**
+ * Return pixel area covered by the character grid
+ */
+ Area used_pixels() const
+ {
+ return Area((columns*char_width.value)>>8, lines*char_height);
+ }
+
+ /**
+ * Return excess area in pixels
+ */
+ Area unused_pixels() const
+ {
+ return Area(fb_size.w() - used_pixels().w(),
+ fb_size.h() - used_pixels().h());
+ }
+
+ /**
+ * Return start position of character grid
+ */
+ Point start() const { return Point(1, 1); }
+
+ bool valid() const { return columns*lines > 0; }
+ };
+
private:
- Font_family const &_font_family;
+ Font const &_font;
Color_palette const &_palette;
Framebuffer &_framebuffer;
-
- /* take size of space character as character cell size */
- unsigned const _char_width { _font_family.cell_width() };
- unsigned const _char_height { _font_family.cell_height() };
-
- /* number of characters fitting on the framebuffer */
- unsigned const _columns { _framebuffer.w()/_char_width };
- unsigned const _lines { _framebuffer.h()/_char_height };
+ Geometry _geometry { _font, _framebuffer };
Cell_array _cell_array;
Char_cell_array_character_screen _character_screen { _cell_array };
@@ -56,46 +106,62 @@ class Terminal::Text_screen_surface
public:
- Text_screen_surface(Allocator &alloc, Font_family const &font_family,
+ /**
+ * Constructor
+ *
+ * \throw Geometry::Invalid
+ */
+ Text_screen_surface(Allocator &alloc, Font const &font,
Color_palette &palette, Framebuffer &framebuffer)
:
- _font_family(font_family),
+ _font(font),
_palette(palette),
_framebuffer(framebuffer),
- _cell_array(_columns, _lines, alloc)
+ _cell_array(_geometry.columns, _geometry.lines, alloc)
{ }
+ /**
+ * Update geometry
+ *
+ * Called whenever the framebuffer dimensions slightly change but
+ * without any effect on the grid size. In contrast, if the grid
+ * size changes, the entire 'Text_screen_surface' is reconstructed.
+ */
+ void geometry(Geometry const &geometry)
+ {
+ _geometry = geometry;
+ _cell_array.mark_all_lines_as_dirty(); /* trigger refresh */
+ }
+
void redraw()
{
- Font const ®ular_font = _font_family.font(Font_face::REGULAR);
-
- Area const cell_size = regular_font.bounding_box();
-
- unsigned const glyph_height = regular_font.bounding_box().h(),
- glyph_step_x = regular_font.bounding_box().w();
-
- unsigned const fb_width = _framebuffer.w(),
- fb_height = _framebuffer.h();
-
- int const clip_top = 0, clip_bottom = fb_height,
- clip_left = 0, clip_right = fb_width;
-
PT *fb_base = _framebuffer.pixel();
- Surface surface(fb_base, Area(_framebuffer.w(), _framebuffer.h()));
+ Surface surface(fb_base, _geometry.fb_size);
unsigned const fg_alpha = 255;
- unsigned y = 0;
+ /* clear border */
+ {
+ Rect r[4] { };
+ Rect const all(Point(0, 0), _geometry.fb_size);
+ _geometry.fb_rect().cut(_geometry.used_rect(), &r[0], &r[1], &r[2], &r[3]);
+ for (unsigned i = 0; i < 4; i++)
+ Box_painter::paint(surface, r[i], Color(0, 0, 0));
+ }
+
+ int const clip_top = 0, clip_bottom = _geometry.fb_size.h(),
+ clip_left = 0, clip_right = _geometry.fb_size.w();
+
+ unsigned y = _geometry.start().y();
for (unsigned line = 0; line < _cell_array.num_lines(); line++) {
if (_cell_array.line_dirty(line)) {
- unsigned x = 0;
+ Fixpoint_number x { (int)_geometry.start().x() };
for (unsigned column = 0; column < _cell_array.num_cols(); column++) {
Char_cell cell = _cell_array.get_cell(column, line);
- Font const &font = _font_family.font(cell.font_face());
unsigned char ascii = cell.ascii;
if (ascii == 0)
@@ -103,7 +169,7 @@ class Terminal::Text_screen_surface
Text_painter::Codepoint const c { ascii };
- font.apply_glyph(c, [&] (Glyph_painter::Glyph const &glyph) {
+ _font.apply_glyph(c, [&] (Glyph_painter::Glyph const &glyph) {
Color_palette::Highlighted const highlighted { cell.highlight() };
Color_palette::Inverse const inverse { cell.inverse() };
@@ -123,17 +189,27 @@ class Terminal::Text_screen_surface
PT const pixel(fg_color.r, fg_color.g, fg_color.b);
- Box_painter::paint(surface, Rect(Point(x, y), cell_size), bg_color);
+ Fixpoint_number next_x = x;
+ next_x.value += _geometry.char_width.value;
- Glyph_painter::paint(Glyph_painter::Position((int)x, (int)y),
- glyph, fb_base, fb_width,
+ Box_painter::paint(surface,
+ Rect(Point(x.decimal(), y),
+ Point(next_x.decimal() - 1,
+ y + _geometry.char_height - 1)),
+ bg_color);
+
+ /* horizontally align glyph within cell */
+ x.value += (_geometry.char_width.value - (int)((glyph.width - 1)<<8)) >> 1;
+
+ Glyph_painter::paint(Glyph_painter::Position(x, (int)y),
+ glyph, fb_base, _geometry.fb_size.w(),
clip_top, clip_bottom, clip_left, clip_right,
pixel, fg_alpha);
- x += glyph_step_x;
+ x = next_x;
});
}
}
- y += glyph_height;
+ y += _geometry.char_height;
}
int first_dirty_line = 10000,
@@ -150,9 +226,10 @@ class Terminal::Text_screen_surface
int const num_dirty_lines = last_dirty_line - first_dirty_line + 1;
if (num_dirty_lines > 0)
- _framebuffer.refresh(Rect(Point(0, first_dirty_line*_char_height),
- Area(fb_width,
- num_dirty_lines*_char_height)));
+ _framebuffer.refresh(Rect(Point(0, first_dirty_line*_geometry.char_height),
+ Area(_geometry.fb_size.w(),
+ num_dirty_lines*_geometry.char_height +
+ _geometry.unused_pixels().h())));
}
void apply_character(Character c)
@@ -161,7 +238,10 @@ class Terminal::Text_screen_surface
_decoder.insert(c.c);
}
- Session::Size size() const { return Session::Size(_columns, _lines); }
+ /**
+ * Return size in colums/rows
+ */
+ Area size() const { return _geometry.size(); }
};
#endif /* _TEXT_SCREEN_SURFACE_H_ */
diff --git a/repos/os/include/terminal/cell_array.h b/repos/os/include/terminal/cell_array.h
index 337cc8bca..3f7e212d2 100644
--- a/repos/os/include/terminal/cell_array.h
+++ b/repos/os/include/terminal/cell_array.h
@@ -88,8 +88,7 @@ class Cell_array
_array = new (alloc) Char_cell_line[num_lines];
_line_dirty = new (alloc) bool[num_lines];
- for (unsigned i = 0; i < num_lines; i++)
- _line_dirty[i] = false;
+ mark_all_lines_as_dirty();
for (unsigned i = 0; i < num_lines; i++)
_array[i] = new (alloc) CELL[num_cols];
@@ -104,6 +103,12 @@ class Cell_array
Genode::destroy(_alloc, _array);
}
+ void mark_all_lines_as_dirty()
+ {
+ for (unsigned i = 0; i < _num_lines; i++)
+ _line_dirty[i] = true;
+ }
+
void set_cell(int column, int line, CELL cell)
{
_array[line][column] = cell;
diff --git a/repos/ports/recipes/pkg/noux-system/runtime b/repos/ports/recipes/pkg/noux-system/runtime
index 53d94725a..6c17902c5 100644
--- a/repos/ports/recipes/pkg/noux-system/runtime
+++ b/repos/ports/recipes/pkg/noux-system/runtime
@@ -6,6 +6,7 @@
+
diff --git a/repos/ports/recipes/raw/noux-system/init.config b/repos/ports/recipes/raw/noux-system/init.config
index 91b3b4b0f..8c88d7d3a 100644
--- a/repos/ports/recipes/raw/noux-system/init.config
+++ b/repos/ports/recipes/raw/noux-system/init.config
@@ -23,7 +23,13 @@
-
+
+
+
+
+
+
+
diff --git a/repos/ports/run/noux_bash.run b/repos/ports/run/noux_bash.run
index 4f8e96f36..c023768c3 100644
--- a/repos/ports/run/noux_bash.run
+++ b/repos/ports/run/noux_bash.run
@@ -2,10 +2,10 @@ create_boot_directory
import_from_depot genodelabs/src/[base_src] \
genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
genodelabs/src/init \
genodelabs/src/libc \
genodelabs/src/noux \
- genodelabs/src/terminal \
genodelabs/src/posix \
genodelabs/src/ncurses \
genodelabs/src/vim \
@@ -64,10 +64,10 @@ install_config {
-
-
-
-
+
+
+
+
diff --git a/repos/ports/run/noux_gdb.run b/repos/ports/run/noux_gdb.run
index 3572c59c1..98cfea76d 100644
--- a/repos/ports/run/noux_gdb.run
+++ b/repos/ports/run/noux_gdb.run
@@ -3,15 +3,21 @@ if {!([have_spec nova])} {
exit 0
}
+create_boot_directory
+
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init \
+ genodelabs/src/libc \
+ genodelabs/src/noux \
+ genodelabs/src/posix \
+ genodelabs/src/ncurses
+
source ${genode_dir}/repos/ports/run/noux_gdb.inc
-if {[have_spec arm]} {
- set tool_prefix "genode-arm-"
-}
-
-if {[have_spec x86]} {
- set tool_prefix "genode-x86-"
-}
+if {[have_spec arm]} { set tool_prefix "genode-arm-" }
+if {[have_spec x86]} { set tool_prefix "genode-x86-" }
#
# Uncomment the following line when working on the GDB source code. Otherwise,
@@ -20,32 +26,16 @@ if {[have_spec x86]} {
#exec rm -rf noux-pkg/[noux_gdb_pkg_name]/ bin/[noux_gdb_pkg_name]/
set build_components {
- core init drivers/timer noux lib/libc_noux
- drivers/framebuffer drivers/input drivers/usb
- server/terminal server/terminal_crosslink
+ server/terminal_crosslink
app/gdb_monitor
}
lappend build_components "lib/gdbserver_platform-$::env(KERNEL)"
-proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
- if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
- return gpio_drv }
-
-lappend_if [have_spec gpio] build_components drivers/gpio
-
-lappend_if [have_spec nova] build_components lib/ld/nova
-lappend_if [have_spec foc] build_components lib/ld/foc
-
-lappend build_components noux-pkg/[noux_gdb_pkg_name]
-
# the application to be debugged with GDB
lappend build_components test/gdb_monitor
set gdb_target_binary_name test-gdb_monitor
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
build $build_components
# GDB loads symbols from 'debug/ld.lib.so'
@@ -82,67 +72,47 @@ append config {
+
+
+
- }
+
-append_if [have_spec sdl] config {
-
-
+
+
+
+
+
+
+
+
-
-
+
- }
-
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
- }
-
-append_if [have_spec gpio] config "
-
-
-
-
- "
-
-append_if [expr ![have_spec ps2] && [have_spec usb]] config {
-
-
-
-
- }
-
-append config {
+
-
-
-
+
+
+
+
+
+
@@ -224,23 +194,15 @@ proc binary_name_gdbserver_platform_lib_so { } {
return "gdbserver_platform-$::env(KERNEL).lib.so"
}
-# generic modules
-append boot_modules {
- core init timer ld.lib.so noux terminal terminal_crosslink
- posix.lib.so libc.lib.so libm.lib.so ncurses.lib.so expat.lib.so
- libc_noux.lib.so libc_pipe.lib.so libc_terminal.lib.so
+set boot_modules {
+ terminal_crosslink
+ expat.lib.so
+ libc_pipe.lib.so libc_terminal.lib.so
gdb_monitor gdbserver_platform.lib.so test-gdb_monitor
test-gdb_monitor.tar test-gdb_monitor-src.tar
-} [noux_gdb_pkg_name].tar
+}
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [have_spec ps2] boot_modules ps2_drv
-lappend_if [have_spec usb] boot_modules usb_drv
-lappend_if [have_spec gpio] boot_modules [gpio_drv]
-
-append_platform_drv_boot_modules
+lappend boot_modules [noux_gdb_pkg_name].tar
build_boot_image $boot_modules
diff --git a/repos/ports/run/noux_shell_script.run b/repos/ports/run/noux_shell_script.run
index cea8e6136..fd604ee9f 100644
--- a/repos/ports/run/noux_shell_script.run
+++ b/repos/ports/run/noux_shell_script.run
@@ -1,87 +1,73 @@
-set build_components {
- core init drivers/timer noux/minimal lib/libc_noux
- drivers/framebuffer drivers/input
- server/terminal server/ram_fs
- test/libports/ncurses
-}
-set use_usb_input [expr ![have_spec ps2] && ![have_spec sdl] && [have_spec usb]]
+create_boot_directory
-lappend_if $use_usb_input build_components drivers/usb
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init \
+ genodelabs/src/libc \
+ genodelabs/src/noux \
+ genodelabs/src/posix \
+ genodelabs/src/bash \
+ genodelabs/src/ncurses \
+ genodelabs/src/coreutils \
+ genodelabs/src/ram_fs
#
# Build Noux packages only once
#
-set noux_pkgs {bash coreutils make}
-
+set noux_pkgs {make}
+set build_components { }
foreach pkg $noux_pkgs {
lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
build $build_components
-create_boot_directory
+install_config {
+
+
+
+
+
+
+
+
+
+
+
-append config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
+
+
+
-append_if [have_spec sdl] config {
-
-
-
-
-
-
- }
+
-append_if $use_usb_input config {
-
-
-
-
- }
-
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
+
-
- }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-append config {
-
-
-
+
+
+
+
+
@@ -113,19 +99,17 @@ echo "$1"
+
- }
-
-foreach pkg $noux_pkgs {
- append config " " }
-
-append config {
+
+
+
+
-
@@ -134,32 +118,8 @@ append config {
-
-}
-
-install_config $config
-
-
-#
-# Boot modules
-#
-
-# generic modules
-set boot_modules {
- core init timer ld.lib.so noux terminal ram_fs posix.lib.so
- libc.lib.so libm.lib.so libc_noux.lib.so ncurses.lib.so }
-
-foreach pkg $noux_pkgs { lappend boot_modules "$pkg.tar" }
-
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [have_spec ps2] boot_modules ps2_drv
-lappend_if $use_usb_input boot_modules usb_drv
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
+ }
+build_boot_image { make.tar }
run_genode_until forever
diff --git a/repos/ports/run/noux_terminal_fs.run b/repos/ports/run/noux_terminal_fs.run
index fd191cf8e..8209655b4 100644
--- a/repos/ports/run/noux_terminal_fs.run
+++ b/repos/ports/run/noux_terminal_fs.run
@@ -6,81 +6,68 @@
#
# The test shows two framebuffer terminals. The upper terminal runs an
-# interatctive shell and the lower terminal can be accessed from the shell via
+# interactive shell and the lower terminal can be accessed from the shell via
# /dev/terminal.
#
# Example for writing to the lower terminal: echo "test" > /dev/terminal
# Example for reading a line from the lower terminal: head -n 1 /dev/terminal
#
-set build_components {
- core init drivers/timer noux lib/libc_noux
- drivers/framebuffer drivers/input
- server/terminal server/ram_fs server/nitpicker app/pointer
- server/nit_fb
-}
-
-#
-# Build Noux packages only once
-#
-foreach pkg {bash coreutils} {
- lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
-
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
-build $build_components
-
create_boot_directory
-append config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init \
+ genodelabs/src/nitpicker \
+ genodelabs/src/nit_fb \
+ genodelabs/src/libc \
+ genodelabs/src/noux \
+ genodelabs/src/posix \
+ genodelabs/src/ncurses \
+ genodelabs/src/bash \
+ genodelabs/src/coreutils \
+ genodelabs/src/ram_fs
-append_if [have_spec sdl] config {
-
-
-
+install_config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
- }
+
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
- }
-
-append config {
-
+
@@ -88,19 +75,17 @@ append config {
- }
-append_if [have_spec ps2] config {
- }
-append_if [have_spec sdl] config {
- }
-append config {
-
+
+
+
+
+
@@ -110,6 +95,7 @@ append config {
+
@@ -119,32 +105,31 @@ append config {
+
+
-
-
-
+
+
-
-
-
+
@@ -153,6 +138,7 @@ append config {
+
@@ -175,32 +161,8 @@ append config {
-
-}
+ }
-install_config $config
-
-
-#
-# Boot modules
-#
-
-# generic modules
-set boot_modules {
- core init timer ld.lib.so noux terminal ram_fs nitpicker nit_fb pointer
- libc.lib.so libm.lib.so libc_noux.lib.so posix.lib.so
- bash.tar coreutils.tar
-}
-
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [have_spec ps2] boot_modules ps2_drv
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
-
-# bash.tar is really huge when built for x86_64
+build_boot_image { }
run_genode_until forever
diff --git a/repos/ports/run/noux_trace_fs.run b/repos/ports/run/noux_trace_fs.run
index 53138d3bb..3e61787e2 100644
--- a/repos/ports/run/noux_trace_fs.run
+++ b/repos/ports/run/noux_trace_fs.run
@@ -7,47 +7,23 @@ if {[have_spec linux]} {
exit 0
}
-proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
- if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
- return gpio_drv }
-
-#
-# On OMAP4 where no PS/2 is available, we rely on USB HID
-#
-proc use_usb_input { } { return [expr ![have_spec ps2] && [have_spec usb]] }
-
-#
-# Uncomment the following line when working on the VIM source code. Otherwise,
-# the package may get recompiled, yet it does not get reinstalled into 'bin/'.
-#
-#exec rm -rf noux-pkg/bash bin/bash
-
-set build_components {
- core init drivers/timer noux/minimal lib/libc_noux
- drivers/framebuffer drivers/input
- server/terminal server/ram_fs server/trace_fs
- test/libports/ncurses
-
- lib/trace/policy/rpc_name
-}
-
-lappend_if [use_usb_input] build_components drivers/usb
-lappend_if [have_spec gpio] build_components drivers/gpio
-
-set noux_pkgs "bash coreutils grep vim"
-#
-# Build Noux packages only once
-#
-foreach pkg $noux_pkgs {
- lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg }
-
-source ${genode_dir}/repos/base/run/platform_drv.inc
-append_platform_drv_build_components
-
-build $build_components
-
create_boot_directory
+import_from_depot genodelabs/src/[base_src] \
+ genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
+ genodelabs/src/init \
+ genodelabs/src/libc \
+ genodelabs/src/noux \
+ genodelabs/src/posix \
+ genodelabs/src/ncurses \
+ genodelabs/src/vim \
+ genodelabs/src/bash \
+ genodelabs/src/grep \
+ genodelabs/src/coreutils \
+ genodelabs/src/ram_fs
+
+
# write default vimrc file
set vimrc_fd [open "bin/vimrc" w]
puts $vimrc_fd {
@@ -59,7 +35,7 @@ set noswapfile
set viminfo=}
close $vimrc_fd
-append config {
+install_config {
@@ -72,69 +48,49 @@ append config {
+
+
+
- }
+
-append_if [have_spec sdl] config {
-
-
+
+
+
+
+
+
+
+
-
-
+
- }
+
-append_platform_drv_config
-
-append_if [have_spec framebuffer] config {
-
-
-
-
- }
-
-append_if [have_spec ps2] config {
-
-
-
- }
-
-append_if [have_spec gpio] config "
-
-
-
-
- "
-
-append_if [use_usb_input] config {
-
-
-
-
- }
-
-append config {
-
-
-
-
+
+
+
+
-
+
+
-
+
+
@@ -156,28 +112,29 @@ append config {
-
+
+
- }
-foreach pkg $noux_pkgs {
-append config " " }
-append config {
+
+
+
+
+
+
-
-
-
+
-
+
@@ -194,37 +151,9 @@ append config {
}
-install_config $config
-
-
-#
-# Boot modules
-#
-
-# generic modules
-set boot_modules {
- core init timer ld.lib.so noux terminal ram_fs
- libc.lib.so libm.lib.so libc_noux.lib.so posix.lib.so
- ncurses.lib.so pcre.lib.so zlib.lib.so readline.lib.so
- trace_fs
-
- rpc_name
-}
-
-foreach pkg $noux_pkgs {
- append boot_modules " $pkg.tar " }
-
-# platform-specific modules
-lappend_if [have_spec linux] boot_modules fb_sdl
-lappend_if [have_spec ps2] boot_modules ps2_drv
-lappend_if [have_spec framebuffer] boot_modules fb_drv
-lappend_if [use_usb_input ] boot_modules usb_drv
-lappend_if [have_spec gpio] boot_modules [gpio_drv]
-
-append_platform_drv_boot_modules
-
-build_boot_image $boot_modules
+build { server/trace_fs lib/trace/policy/rpc_name }
+build_boot_image { vimrc trace_fs rpc_name }
run_genode_until forever
diff --git a/repos/ports/run/noux_vim.run b/repos/ports/run/noux_vim.run
index 8d83a06a9..e9b3ae4eb 100644
--- a/repos/ports/run/noux_vim.run
+++ b/repos/ports/run/noux_vim.run
@@ -2,10 +2,10 @@ create_boot_directory
import_from_depot genodelabs/src/[base_src] \
genodelabs/pkg/[drivers_interactive_pkg] \
+ genodelabs/pkg/terminal \
genodelabs/src/init \
genodelabs/src/libc \
genodelabs/src/noux \
- genodelabs/src/terminal \
genodelabs/src/posix \
genodelabs/src/ncurses \
genodelabs/src/vim
@@ -50,7 +50,10 @@ install_config {
-
+
+
+
+