mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-16 07:27:35 +00:00
parent
5347278136
commit
42a77c531a
@ -21,7 +21,6 @@ _/src/file_terminal
|
||||
_/src/libc
|
||||
_/src/posix
|
||||
_/src/ncurses
|
||||
_/src/noux
|
||||
_/src/bash-minimal
|
||||
_/src/vim-minimal
|
||||
_/src/coreutils-minimal
|
||||
|
@ -22,7 +22,6 @@ import_from_depot [depot_user]/src/[base_src] \
|
||||
[depot_user]/src/menu_view \
|
||||
[depot_user]/src/fs_query \
|
||||
[depot_user]/src/rom_filter \
|
||||
[depot_user]/src/noux \
|
||||
[depot_user]/src/terminal \
|
||||
[depot_user]/src/posix \
|
||||
[depot_user]/src/ram_block \
|
||||
@ -34,6 +33,7 @@ import_from_depot [depot_user]/src/[base_src] \
|
||||
[depot_user]/src/vim-minimal \
|
||||
[depot_user]/src/coreutils-minimal \
|
||||
[depot_user]/src/fs_utils \
|
||||
[depot_user]/src/vfs_pipe \
|
||||
[depot_user]/src/stdin2out \
|
||||
[depot_user]/src/gpt_write \
|
||||
[depot_user]/src/text_area \
|
||||
@ -274,10 +274,14 @@ install_config {
|
||||
<child name="config_rom"/> </service>
|
||||
<service name="ROM" label_prefix="leitzentrale ->">
|
||||
<child name="leitzentrale"/> </service>
|
||||
<service name="ROM" label="inspect terminal -> clipboard">
|
||||
<service name="ROM" label="inspect -> clipboard">
|
||||
<child name="report_rom" label="clipboard"/> </service>
|
||||
<service name="ROM" label="editor -> clipboard">
|
||||
<child name="report_rom" label="clipboard"/> </service>
|
||||
<service name="ROM" label_last="cached_fs_rom"> <!-- for Linux -->
|
||||
<parent label="fs_rom"/> </service>
|
||||
<service name="Report" label="inspect -> clipboard">
|
||||
<child name="report_rom" label="clipboard"/> </service>
|
||||
<service name="Report" label="editor -> clipboard">
|
||||
<child name="report_rom" label="clipboard"/> </service>
|
||||
<service name="File_system" label="config">
|
||||
|
@ -467,11 +467,11 @@ install_config {
|
||||
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
||||
<service name="Timer"> <child name="timer"/> </service>
|
||||
<service name="Report" label_suffix="-> shape"> <child name="pointer"/> </service>
|
||||
<service name="Report" label="inspect terminal -> clipboard">
|
||||
<service name="Report" label="inspect -> clipboard">
|
||||
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
|
||||
<service name="Report" label="editor -> clipboard">
|
||||
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
|
||||
<service name="ROM" label="inspect terminal -> clipboard">
|
||||
<service name="ROM" label="inspect -> clipboard">
|
||||
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
|
||||
<service name="ROM" label="editor -> clipboard">
|
||||
<child name="clipboard" label="leitzentrale -> manager -> fader -> -> clipboard"/> </service>
|
||||
|
@ -592,9 +592,9 @@ struct Sculpt::Main : Input_event_handler,
|
||||
/*
|
||||
* Fs_dialog::Action interface
|
||||
*/
|
||||
void toggle_file_browser(Storage_target const &target) override
|
||||
void toggle_inspect_view(Storage_target const &target) override
|
||||
{
|
||||
_storage.toggle_file_browser(target);
|
||||
_storage.toggle_inspect_view(target);
|
||||
|
||||
/* refresh visibility to inspect tab */
|
||||
_panel_menu_view.generate();
|
||||
@ -1714,8 +1714,8 @@ void Sculpt::Main::_generate_runtime_config(Xml_generator &xml) const
|
||||
gen_prepare_start_content(xml, _prepare_version); });
|
||||
|
||||
if (_storage.any_file_system_inspected())
|
||||
gen_file_browser(xml, _storage._storage_devices, _storage._ram_fs_state,
|
||||
_storage._file_browser_version);
|
||||
gen_inspect_view(xml, _storage._storage_devices, _storage._ram_fs_state,
|
||||
_storage._inspect_view_version);
|
||||
|
||||
/*
|
||||
* Spawn chroot instances for accessing '/depot' and '/public'. The
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include <runtime/depot_query.cc>
|
||||
#include <runtime/launcher_query.cc>
|
||||
#include <runtime/e2fs.cc>
|
||||
#include <runtime/file_browser.cc>
|
||||
#include <runtime/inspect_view.cc>
|
||||
#include <runtime/file_system.cc>
|
||||
#include <runtime/fs_rom.cc>
|
||||
#include <runtime/gpt_write.cc>
|
||||
|
@ -48,9 +48,9 @@ namespace Sculpt {
|
||||
void gen_runtime_view_start_content(Xml_generator &, Child_state const &,
|
||||
float font_size);
|
||||
|
||||
struct File_browser_version { unsigned value; };
|
||||
void gen_file_browser(Xml_generator &, Storage_devices const &,
|
||||
Ram_fs_state const &, File_browser_version);
|
||||
struct Inspect_view_version { unsigned value; };
|
||||
void gen_inspect_view(Xml_generator &, Storage_devices const &,
|
||||
Ram_fs_state const &, Inspect_view_version);
|
||||
|
||||
void gen_runtime_view(Xml_generator &);
|
||||
|
||||
|
@ -1,231 +0,0 @@
|
||||
/*
|
||||
* \brief XML configuration for file-browser subsystem
|
||||
* \author Norman Feske
|
||||
* \date 2018-05-02
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
#include <runtime.h>
|
||||
|
||||
namespace Sculpt {
|
||||
|
||||
template <typename FN>
|
||||
void for_each_inspected_storage_target(Storage_devices const &devices, FN const &fn)
|
||||
{
|
||||
devices.for_each([&] (Storage_device const &device) {
|
||||
device.for_each_partition([&] (Partition const &partition) {
|
||||
if (partition.file_system.inspected)
|
||||
fn(Storage_target { device.label, partition.number }); }); });
|
||||
}
|
||||
|
||||
void gen_nit_fb_start(Xml_generator &, Rom_name const &);
|
||||
void gen_terminal_start(Xml_generator &, Rom_name const &, Rom_name const &,
|
||||
File_browser_version);
|
||||
void gen_noux_start(Xml_generator &, Rom_name const &, Rom_name const &,
|
||||
Storage_devices const &, Ram_fs_state const &, File_browser_version);
|
||||
}
|
||||
|
||||
|
||||
void Sculpt::gen_nit_fb_start(Xml_generator &xml, Rom_name const &name)
|
||||
{
|
||||
gen_common_start_content(xml, name, Cap_quota{100}, Ram_quota{18*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "nit_fb");
|
||||
|
||||
xml.node("provides", [&] () {
|
||||
gen_service_node<Framebuffer::Session>(xml, [&] () {});
|
||||
gen_service_node<Input::Session>(xml, [&] () {});
|
||||
});
|
||||
|
||||
xml.node("config", [&] () { });
|
||||
|
||||
xml.node("route", [&] () {
|
||||
|
||||
gen_service_node<Nitpicker::Session>(xml, [&] () {
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", String<64>("leitzentrale -> ", name)); }); });
|
||||
|
||||
gen_parent_rom_route(xml, "nit_fb");
|
||||
gen_parent_rom_route(xml, "ld.lib.so");
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void Sculpt::gen_terminal_start(Xml_generator &xml, Rom_name const &name,
|
||||
Rom_name const &nit_fb_name,
|
||||
File_browser_version version)
|
||||
{
|
||||
xml.attribute("version", version.value);
|
||||
|
||||
gen_common_start_content(xml, name, Cap_quota{100}, Ram_quota{4*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "terminal");
|
||||
|
||||
gen_provides<Terminal::Session>(xml);
|
||||
|
||||
xml.node("route", [&] () {
|
||||
gen_service_node<Framebuffer::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", nit_fb_name); });
|
||||
|
||||
gen_service_node<Input::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", nit_fb_name); });
|
||||
|
||||
gen_parent_rom_route(xml, "terminal");
|
||||
gen_parent_rom_route(xml, "ld.lib.so");
|
||||
gen_parent_rom_route(xml, "vfs.lib.so");
|
||||
gen_parent_rom_route(xml, "vfs_ttf.lib.so");
|
||||
gen_parent_rom_route(xml, "Vera.ttf");
|
||||
gen_parent_rom_route(xml, "VeraMono.ttf");
|
||||
gen_parent_rom_route(xml, "libc.lib.so");
|
||||
gen_parent_rom_route(xml, "libm.lib.so");
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
gen_parent_route<Timer::Session> (xml);
|
||||
gen_parent_route<Report::Session>(xml);
|
||||
|
||||
gen_named_node(xml, "service", Rom_session::service_name(), [&] () {
|
||||
xml.attribute("label", "clipboard");
|
||||
xml.node("parent", [&] () { }); });
|
||||
|
||||
gen_named_node(xml, "service", Rom_session::service_name(), [&] () {
|
||||
xml.attribute("label", "config");
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", "config -> managed/fonts"); }); });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void Sculpt::gen_noux_start(Xml_generator &xml, Rom_name const &name,
|
||||
Rom_name const &terminal_name,
|
||||
Storage_devices const &devices,
|
||||
Ram_fs_state const &ram_fs_state,
|
||||
File_browser_version version)
|
||||
{
|
||||
xml.attribute("version", version.value);
|
||||
|
||||
gen_common_start_content(xml, name, Cap_quota{500}, Ram_quota{64*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "noux");
|
||||
|
||||
xml.node("config", [&] () {
|
||||
xml.node("fstab", [&] () {
|
||||
gen_named_node(xml, "tar", "bash-minimal.tar");
|
||||
gen_named_node(xml, "tar", "coreutils-minimal.tar");
|
||||
gen_named_node(xml, "tar", "vim-minimal.tar");
|
||||
gen_named_node(xml, "dir", "dev", [&] () {
|
||||
xml.node("null", [&] () {});
|
||||
xml.node("zero", [&] () {});
|
||||
});
|
||||
gen_named_node(xml, "dir", "share", [&] () {
|
||||
gen_named_node(xml, "tar", "depot_users.tar"); });
|
||||
|
||||
auto fs_dir = [&] (String<64> const &label) {
|
||||
gen_named_node(xml, "dir", label, [&] () {
|
||||
xml.node("fs", [&] () { xml.attribute("label", label); }); }); };
|
||||
|
||||
fs_dir("config");
|
||||
fs_dir("report");
|
||||
|
||||
for_each_inspected_storage_target(devices, [&] (Storage_target const &target) {
|
||||
fs_dir(target.label()); });
|
||||
|
||||
if (ram_fs_state.inspected)
|
||||
fs_dir("ram");
|
||||
|
||||
gen_named_node(xml, "dir", "tmp", [&] () {
|
||||
xml.node("ram", [&] () { }); });
|
||||
|
||||
gen_named_node(xml, "dir", "share", [&] () {
|
||||
gen_named_node(xml, "dir", "vim", [&] () {
|
||||
xml.node("rom", [&] () {
|
||||
xml.attribute("name", "vimrc"); }); }); });
|
||||
|
||||
gen_named_node(xml, "rom", "VERSION");
|
||||
});
|
||||
|
||||
gen_named_node(xml, "start", "/bin/bash", [&] () {
|
||||
|
||||
gen_named_node(xml, "env", "TERM", [&] () {
|
||||
xml.attribute("value", "screen"); });
|
||||
|
||||
gen_named_node(xml, "env", "PS1", [&] () {
|
||||
xml.attribute("value", "inspect:$PWD> "); });
|
||||
});
|
||||
});
|
||||
|
||||
xml.node("route", [&] () {
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "config");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "config"); });
|
||||
});
|
||||
|
||||
gen_service_node<Terminal::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", terminal_name); });
|
||||
|
||||
gen_parent_rom_route(xml, "noux");
|
||||
gen_parent_rom_route(xml, "ld.lib.so");
|
||||
gen_parent_rom_route(xml, "vfs.lib.so");
|
||||
gen_parent_rom_route(xml, "libc.lib.so");
|
||||
gen_parent_rom_route(xml, "libc_noux.lib.so");
|
||||
gen_parent_rom_route(xml, "libm.lib.so");
|
||||
gen_parent_rom_route(xml, "bash-minimal.tar");
|
||||
gen_parent_rom_route(xml, "coreutils-minimal.tar");
|
||||
gen_parent_rom_route(xml, "vim-minimal.tar");
|
||||
gen_parent_rom_route(xml, "ncurses.lib.so");
|
||||
gen_parent_rom_route(xml, "posix.lib.so");
|
||||
gen_parent_rom_route(xml, "depot_users.tar");
|
||||
gen_parent_rom_route(xml, "vimrc", "config -> vimrc");
|
||||
gen_parent_rom_route(xml, "VERSION");
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
gen_parent_route<Timer::Session> (xml);
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "report");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "report"); });
|
||||
});
|
||||
|
||||
for_each_inspected_storage_target(devices, [&] (Storage_target const &target) {
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", target.label());
|
||||
gen_named_node(xml, "child", target.fs());
|
||||
});
|
||||
});
|
||||
|
||||
if (ram_fs_state.inspected)
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "ram");
|
||||
gen_named_node(xml, "child", "ram_fs");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void Sculpt::gen_file_browser(Xml_generator &xml,
|
||||
Storage_devices const &devices,
|
||||
Ram_fs_state const &ram_fs_state,
|
||||
File_browser_version version)
|
||||
{
|
||||
xml.node("start", [&] () {
|
||||
gen_nit_fb_start(xml, "inspect"); });
|
||||
|
||||
xml.node("start", [&] () {
|
||||
gen_terminal_start(xml, "inspect terminal", "inspect",
|
||||
version); });
|
||||
|
||||
xml.node("start", [&] () {
|
||||
gen_noux_start(xml, "inspect noux", "inspect terminal",
|
||||
devices, ram_fs_state, version); });
|
||||
}
|
338
repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc
Normal file
338
repos/gems/src/app/sculpt_manager/runtime/inspect_view.cc
Normal file
@ -0,0 +1,338 @@
|
||||
/*
|
||||
* \brief XML configuration for inspect view
|
||||
* \author Norman Feske
|
||||
* \date 2018-05-02
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 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.
|
||||
*/
|
||||
|
||||
#include <runtime.h>
|
||||
|
||||
using namespace Sculpt;
|
||||
|
||||
|
||||
template <typename FN>
|
||||
static void for_each_inspected_storage_target(Storage_devices const &devices, FN const &fn)
|
||||
{
|
||||
devices.for_each([&] (Storage_device const &device) {
|
||||
device.for_each_partition([&] (Partition const &partition) {
|
||||
if (partition.file_system.inspected)
|
||||
fn(Storage_target { device.label, partition.number }); }); });
|
||||
}
|
||||
|
||||
|
||||
static void gen_nit_fb_start(Xml_generator &xml)
|
||||
{
|
||||
gen_common_start_content(xml, "nit_fb", Cap_quota{100}, Ram_quota{18*1024*1024});
|
||||
|
||||
xml.node("provides", [&] () {
|
||||
gen_service_node<Framebuffer::Session>(xml, [&] () {});
|
||||
gen_service_node<Input::Session>(xml, [&] () {});
|
||||
});
|
||||
|
||||
xml.node("config", [&] () { });
|
||||
|
||||
xml.node("route", [&] () {
|
||||
gen_parent_rom_route(xml, "nit_fb");
|
||||
gen_parent_rom_route(xml, "ld.lib.so");
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
gen_parent_route<Nitpicker::Session> (xml);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
static void gen_terminal_start(Xml_generator &xml)
|
||||
{
|
||||
gen_common_start_content(xml, "terminal", Cap_quota{100}, Ram_quota{4*1024*1024});
|
||||
|
||||
gen_provides<Terminal::Session>(xml);
|
||||
|
||||
xml.node("route", [&] () {
|
||||
gen_service_node<Framebuffer::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", "nit_fb"); });
|
||||
|
||||
gen_service_node<Input::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", "nit_fb"); });
|
||||
|
||||
gen_parent_rom_route(xml, "config", "terminal.config");
|
||||
|
||||
gen_parent_route<Rom_session> (xml);
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
gen_parent_route<Timer::Session> (xml);
|
||||
gen_parent_route<Report::Session>(xml);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
static void gen_vfs_start(Xml_generator &xml,
|
||||
Storage_devices const &devices,
|
||||
Ram_fs_state const &ram_fs_state)
|
||||
{
|
||||
gen_common_start_content(xml, "vfs", Cap_quota{200}, Ram_quota{5*1024*1024});
|
||||
|
||||
gen_provides<::File_system::Session>(xml);
|
||||
|
||||
xml.node("config", [&] () {
|
||||
|
||||
xml.node("vfs", [&] () {
|
||||
gen_named_node(xml, "tar", "bash-minimal.tar");
|
||||
gen_named_node(xml, "tar", "coreutils-minimal.tar");
|
||||
gen_named_node(xml, "tar", "vim-minimal.tar");
|
||||
|
||||
gen_named_node(xml, "dir", "dev", [&] () {
|
||||
xml.node("null", [&] () {});
|
||||
xml.node("zero", [&] () {});
|
||||
xml.node("terminal", [&] () {});
|
||||
gen_named_node(xml, "inline", "rtc", [&] () {
|
||||
xml.append("2018-01-01 00:01");
|
||||
});
|
||||
gen_named_node(xml, "dir", "pipe", [&] () {
|
||||
xml.node("pipe", [&] () { });
|
||||
});
|
||||
});
|
||||
|
||||
gen_named_node(xml, "dir", "share", [&] () {
|
||||
gen_named_node(xml, "tar", "depot_users.tar"); });
|
||||
|
||||
auto fs_dir = [&] (String<64> const &label) {
|
||||
gen_named_node(xml, "dir", label, [&] () {
|
||||
xml.node("fs", [&] () { xml.attribute("label", label); }); }); };
|
||||
|
||||
fs_dir("config");
|
||||
fs_dir("report");
|
||||
|
||||
for_each_inspected_storage_target(devices, [&] (Storage_target const &target) {
|
||||
fs_dir(target.label()); });
|
||||
|
||||
if (ram_fs_state.inspected)
|
||||
fs_dir("ram");
|
||||
|
||||
gen_named_node(xml, "dir", "tmp", [&] () {
|
||||
xml.node("ram", [&] () { }); });
|
||||
|
||||
gen_named_node(xml, "dir", "share", [&] () {
|
||||
gen_named_node(xml, "dir", "vim", [&] () {
|
||||
xml.node("rom", [&] () {
|
||||
xml.attribute("name", "vimrc"); }); }); });
|
||||
|
||||
gen_named_node(xml, "rom", "VERSION");
|
||||
});
|
||||
|
||||
xml.node("default-policy", [&] () {
|
||||
xml.attribute("root", "/");
|
||||
xml.attribute("writeable", "yes");
|
||||
});
|
||||
});
|
||||
|
||||
xml.node("route", [&] () {
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "config");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "config"); });
|
||||
});
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "report");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "report"); });
|
||||
});
|
||||
|
||||
gen_service_node<Terminal::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", "terminal"); });
|
||||
|
||||
xml.node("any-service", [&] () {
|
||||
xml.node("parent", [&] () { }); });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
static void gen_fs_rom_start(Xml_generator &xml)
|
||||
{
|
||||
gen_common_start_content(xml, "vfs_rom", Cap_quota{100}, Ram_quota{15*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "cached_fs_rom", [&] () { });
|
||||
|
||||
gen_provides<Rom_session>(xml);
|
||||
|
||||
xml.node("config", [&] () { });
|
||||
|
||||
xml.node("route", [&] () {
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", "vfs"); });
|
||||
|
||||
xml.node("any-service", [&] () { xml.node("parent", [&] () { }); });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
static void gen_bash_start(Xml_generator &xml)
|
||||
{
|
||||
gen_common_start_content(xml, "bash", Cap_quota{400}, Ram_quota{15*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "/bin/bash", [&] () { });
|
||||
|
||||
xml.node("config", [&] () {
|
||||
|
||||
xml.node("libc", [&] () {
|
||||
xml.attribute("stdout", "/dev/terminal");
|
||||
xml.attribute("stderr", "/dev/terminal");
|
||||
xml.attribute("stdin", "/dev/terminal");
|
||||
xml.attribute("pipe", "/dev/pipe");
|
||||
xml.attribute("rtc", "/dev/rtc");
|
||||
});
|
||||
|
||||
xml.node("vfs", [&] () { xml.node("fs", [&] () { }); });
|
||||
|
||||
auto gen_env = [&] (auto key, auto value) {
|
||||
xml.node("env", [&] () {
|
||||
xml.attribute("key", key);
|
||||
xml.attribute("value", value); }); };
|
||||
|
||||
gen_env("HOME", "/");
|
||||
gen_env("TERM", "screen");
|
||||
gen_env("PATH", "/bin");
|
||||
gen_env("PS1", "inspect:$PWD> ");
|
||||
|
||||
xml.node("arg", [&] () { xml.attribute("value", "bash"); });
|
||||
});
|
||||
|
||||
xml.node("route", [&] () {
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
gen_named_node(xml, "child", "vfs"); });
|
||||
|
||||
gen_service_node<Rom_session>(xml, [&] () {
|
||||
xml.attribute("label_last", "/bin/bash");
|
||||
gen_named_node(xml, "child", "vfs_rom");
|
||||
});
|
||||
|
||||
gen_service_node<Rom_session>(xml, [&] () {
|
||||
xml.attribute("label_prefix", "/bin");
|
||||
gen_named_node(xml, "child", "vfs_rom");
|
||||
});
|
||||
|
||||
xml.node("any-service", [&] () { xml.node("parent", [&] () { }); });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void Sculpt::gen_inspect_view(Xml_generator &xml,
|
||||
Storage_devices const &devices,
|
||||
Ram_fs_state const &ram_fs_state,
|
||||
Inspect_view_version version)
|
||||
{
|
||||
xml.node("start", [&] () {
|
||||
|
||||
xml.attribute("version", version.value);
|
||||
|
||||
gen_common_start_content(xml, "inspect",
|
||||
Cap_quota{1000}, Ram_quota{76*1024*1024});
|
||||
|
||||
gen_named_node(xml, "binary", "init", [&] () { });
|
||||
|
||||
xml.node("config", [&] () {
|
||||
|
||||
xml.node("parent-provides", [&] () {
|
||||
gen_parent_service<Rom_session>(xml);
|
||||
gen_parent_service<Cpu_session>(xml);
|
||||
gen_parent_service<Pd_session> (xml);
|
||||
gen_parent_service<Rm_session> (xml);
|
||||
gen_parent_service<Log_session>(xml);
|
||||
gen_parent_service<Timer::Session>(xml);
|
||||
gen_parent_service<Report::Session>(xml);
|
||||
gen_parent_service<::File_system::Session>(xml);
|
||||
gen_parent_service<Nitpicker::Session>(xml);
|
||||
});
|
||||
|
||||
xml.node("start", [&] () { gen_nit_fb_start(xml); });
|
||||
xml.node("start", [&] () { gen_terminal_start(xml); });
|
||||
xml.node("start", [&] () { gen_vfs_start(xml, devices, ram_fs_state); });
|
||||
xml.node("start", [&] () { gen_fs_rom_start(xml); });
|
||||
xml.node("start", [&] () { gen_bash_start(xml); });
|
||||
});
|
||||
|
||||
xml.node("route", [&] () {
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "config");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "config"); });
|
||||
});
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "report");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "report"); });
|
||||
});
|
||||
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label", "report");
|
||||
xml.node("parent", [&] () { xml.attribute("label", "report"); });
|
||||
});
|
||||
|
||||
gen_parent_rom_route(xml, "ld.lib.so");
|
||||
gen_parent_rom_route(xml, "init");
|
||||
gen_parent_rom_route(xml, "terminal");
|
||||
gen_parent_rom_route(xml, "vfs");
|
||||
gen_parent_rom_route(xml, "nit_fb");
|
||||
gen_parent_rom_route(xml, "cached_fs_rom");
|
||||
gen_parent_rom_route(xml, "vfs.lib.so");
|
||||
gen_parent_rom_route(xml, "vfs_pipe.lib.so");
|
||||
gen_parent_rom_route(xml, "vfs_ttf.lib.so");
|
||||
gen_parent_rom_route(xml, "libc.lib.so");
|
||||
gen_parent_rom_route(xml, "libm.lib.so");
|
||||
gen_parent_rom_route(xml, "bash-minimal.tar");
|
||||
gen_parent_rom_route(xml, "coreutils-minimal.tar");
|
||||
gen_parent_rom_route(xml, "vim-minimal.tar");
|
||||
gen_parent_rom_route(xml, "ncurses.lib.so");
|
||||
gen_parent_rom_route(xml, "posix.lib.so");
|
||||
gen_parent_rom_route(xml, "depot_users.tar");
|
||||
gen_parent_rom_route(xml, "vimrc", "config -> vimrc");
|
||||
gen_parent_rom_route(xml, "VERSION");
|
||||
gen_parent_rom_route(xml, "Vera.ttf");
|
||||
gen_parent_rom_route(xml, "VeraMono.ttf");
|
||||
gen_parent_route<Cpu_session> (xml);
|
||||
gen_parent_route<Pd_session> (xml);
|
||||
gen_parent_route<Rm_session> (xml);
|
||||
gen_parent_route<Log_session> (xml);
|
||||
gen_parent_route<Timer::Session> (xml);
|
||||
|
||||
for_each_inspected_storage_target(devices, [&] (Storage_target const &target) {
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label_last", target.label());
|
||||
gen_named_node(xml, "child", target.fs());
|
||||
});
|
||||
});
|
||||
|
||||
if (ram_fs_state.inspected)
|
||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||
xml.attribute("label_last", "ram");
|
||||
gen_named_node(xml, "child", "ram_fs");
|
||||
});
|
||||
|
||||
gen_service_node<Nitpicker::Session>(xml, [&] () {
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", String<64>("leitzentrale -> inspect")); }); });
|
||||
|
||||
gen_service_node<Rom_session>(xml, [&] () {
|
||||
xml.attribute("label", "terminal.config");
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", String<64>("config -> managed/fonts")); }); });
|
||||
|
||||
gen_service_node<Rom_session>(xml, [&] () {
|
||||
xml.attribute("label", "terminal -> clipboard");
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", String<64>("inspect -> clipboard")); }); });
|
||||
|
||||
gen_service_node<Report::Session>(xml, [&] () {
|
||||
xml.attribute("label", "terminal -> clipboard");
|
||||
xml.node("parent", [&] () {
|
||||
xml.attribute("label", String<64>("inspect -> clipboard")); }); });
|
||||
});
|
||||
});
|
||||
}
|
@ -56,7 +56,7 @@ struct Sculpt::Storage : Storage_dialog::Action, Ram_fs_dialog::Action
|
||||
|
||||
Discovery_state _discovery_state { };
|
||||
|
||||
File_browser_version _file_browser_version { 0 };
|
||||
Inspect_view_version _inspect_view_version { 0 };
|
||||
|
||||
Storage_dialog dialog { _storage_devices, _sculpt_partition };
|
||||
|
||||
@ -149,21 +149,21 @@ struct Sculpt::Storage : Storage_dialog::Action, Ram_fs_dialog::Action
|
||||
partition.check_in_progress = true; });
|
||||
}
|
||||
|
||||
void toggle_file_browser(Storage_target const &target) override
|
||||
void toggle_inspect_view(Storage_target const &target) override
|
||||
{
|
||||
File_browser_version const orig_version = _file_browser_version;
|
||||
Inspect_view_version const orig_version = _inspect_view_version;
|
||||
|
||||
if (target.ram_fs()) {
|
||||
_ram_fs_state.inspected = !_ram_fs_state.inspected;
|
||||
_file_browser_version.value++;
|
||||
_inspect_view_version.value++;
|
||||
}
|
||||
|
||||
_apply_partition(target, [&] (Partition &partition) {
|
||||
partition.file_system.inspected = !partition.file_system.inspected;
|
||||
_file_browser_version.value++;
|
||||
_inspect_view_version.value++;
|
||||
});
|
||||
|
||||
if (orig_version.value == _file_browser_version.value)
|
||||
if (orig_version.value == _inspect_view_version.value)
|
||||
return;
|
||||
|
||||
_runtime_config_generator.generate_runtime_config();
|
||||
|
@ -39,7 +39,7 @@ struct Sculpt::Fs_dialog : Noncopyable, Dialog
|
||||
|
||||
struct Action : Interface
|
||||
{
|
||||
virtual void toggle_file_browser(Storage_target const &) = 0;
|
||||
virtual void toggle_inspect_view(Storage_target const &) = 0;
|
||||
|
||||
virtual void use(Storage_target const &) = 0;
|
||||
};
|
||||
@ -70,7 +70,7 @@ struct Sculpt::Fs_dialog : Noncopyable, Dialog
|
||||
Click_result click(Action &action)
|
||||
{
|
||||
if (_inspect_item.hovered("browse"))
|
||||
action.toggle_file_browser(_target);
|
||||
action.toggle_inspect_view(_target);
|
||||
|
||||
else if (_use_item.hovered("use"))
|
||||
action.use((_used_target == _target) ? Storage_target{ } : _target);
|
||||
|
Loading…
x
Reference in New Issue
Block a user