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 { - + + + +