feat: update to c3 0.8.2
This commit is contained in:
parent
59eb5ff636
commit
e899260b27
@ -1,37 +0,0 @@
|
||||
{
|
||||
"Debug": {
|
||||
"build": [
|
||||
{
|
||||
"args": "-j8",
|
||||
"command": "make",
|
||||
"working_dir": ""
|
||||
}
|
||||
],
|
||||
"build_types": [],
|
||||
"clean": [
|
||||
{
|
||||
"args": "clean",
|
||||
"command": "c3c",
|
||||
"working_dir": ""
|
||||
}
|
||||
],
|
||||
"config": {
|
||||
"clear_sys_env": false
|
||||
},
|
||||
"os": [],
|
||||
"output_parser": {
|
||||
"config": {
|
||||
"preset": "generic",
|
||||
"relative_file_paths": true
|
||||
}
|
||||
},
|
||||
"run": [
|
||||
{
|
||||
"args": "",
|
||||
"command": "build/ugui",
|
||||
"name": "Custom Executable",
|
||||
"working_dir": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -1 +1 @@
|
||||
Subproject commit 64d168f53b0fe70bda77e2ed7bec35f3f0f1af78
|
||||
Subproject commit fedf67ecfe4fcfa6ea617a03628d51c1657f8da2
|
||||
@ -1 +0,0 @@
|
||||
Subproject commit e7356df5d1d0c22a6bba822bda6994062b0b75d7
|
||||
BIN
lib/sdl3.c3l
Normal file
BIN
lib/sdl3.c3l
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
Subproject commit 60bec17d36aa2fd1bddb3ffd4413bbfe867b6716
|
||||
Subproject commit 1584b04fd31490967fd53c95af57b516e5e99cdc
|
||||
@ -1 +1 @@
|
||||
Subproject commit 050624fd67c2d80190114c7774ccfa64b0f449b9
|
||||
Subproject commit 6c2f3fc2834a439bab4adaf1194ee0789edacb82
|
||||
@ -2,7 +2,7 @@
|
||||
"langrev": "1",
|
||||
"warnings": [ "no-unused" ],
|
||||
"dependency-search-paths": [ "lib" ],
|
||||
"dependencies": ["ugui", "ugui_sdl3"],
|
||||
"dependencies": [ "ugui", "ugui_sdl3", "sdl3", "schrift" ],
|
||||
"features": [ "DEBUG_POINTER" ],
|
||||
"authors": [ "Alessandro Mauri <ale@shitposting.expert>" ],
|
||||
"version": "0.1.0",
|
||||
|
||||
46
src/conf.c3
46
src/conf.c3
@ -17,7 +17,7 @@ alias StrList = list::List{String};
|
||||
alias ConfFList = list::List{ConfigFile};
|
||||
|
||||
|
||||
fn Path? String.to_expanded_path(&str, Allocator allocator)
|
||||
fn Path? String.to_expanded_path(&str, Allocator allocator, String[] extra_env = {})
|
||||
{
|
||||
@pool() {
|
||||
StrList l;
|
||||
@ -30,10 +30,27 @@ fn Path? String.to_expanded_path(&str, Allocator allocator)
|
||||
Path? x;
|
||||
if (try p) {
|
||||
String n = p.basename();
|
||||
l.push("/");
|
||||
|
||||
// env variable
|
||||
if (n.starts_with("$")) {
|
||||
l.push(env::tget_var(n[1..]))!;
|
||||
String? e = env::tget_var(n[1..]);
|
||||
if (catch e) {
|
||||
// var is not in regular environment, check extra_env
|
||||
bool in_extra = false;
|
||||
foreach_r (j: extra_env) {
|
||||
if (j.starts_with(n[1..])) {
|
||||
l.push(j.strip_suffix(n[1..])[1..]);
|
||||
in_extra = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!in_extra) {
|
||||
return NOT_FOUND~;
|
||||
}
|
||||
} else {
|
||||
l.push(e);
|
||||
}
|
||||
} else {
|
||||
l.push(n);
|
||||
}
|
||||
@ -44,13 +61,11 @@ fn Path? String.to_expanded_path(&str, Allocator allocator)
|
||||
}
|
||||
p = x;
|
||||
}
|
||||
l.reverse();
|
||||
String path;
|
||||
path = string::tjoin(l.array_view(), path);
|
||||
|
||||
Path path = path::temp("")!;
|
||||
foreach_r (idx, s: l) {
|
||||
path = path.tappend(s)!;
|
||||
}
|
||||
|
||||
return path::new(allocator, path.str_view(), path.env);
|
||||
return path::new(allocator, path);
|
||||
};
|
||||
}
|
||||
|
||||
@ -69,7 +84,7 @@ fn StrList? get_qemu_cmdline(Allocator allocator, Object* conf)
|
||||
cmd.push(conf.get_string("qemu"))!!;
|
||||
// then the drive
|
||||
cmd.push("-drive");
|
||||
cmd.push(string::format(allocator, "file=%s", disk_path.str_view()));
|
||||
cmd.push(string::format(allocator, "file=%s", (String)disk_path));
|
||||
// memory
|
||||
cmd.push("-m");
|
||||
cmd.push(conf.get_string("memory"))!!;
|
||||
@ -78,7 +93,7 @@ fn StrList? get_qemu_cmdline(Allocator allocator, Object* conf)
|
||||
cmd.push(conf.get_string("processors") ?? "1");
|
||||
// then all the parameters
|
||||
Object* parameters = conf.get("parameters")!!;
|
||||
for (usz i = 0; i < parameters.get_len(); i++) {
|
||||
for (sz i = 0; i < parameters.get_len(); i++) {
|
||||
Object* p = parameters.get_at(i);
|
||||
if (p.is_string()) {
|
||||
cmd.push(string::format(allocator, "-%s", p.s));
|
||||
@ -100,7 +115,7 @@ fn ConfFList? get_config_list(Allocator allocator)
|
||||
// find the right config directory
|
||||
Path conf_dir = env::get_config_dir(tmem).append(tmem, "simple-qemu-manager")!;
|
||||
|
||||
if (!file::exists(conf_dir.str_view()) || !file::is_dir(conf_dir.str_view())) {
|
||||
if (!file::exists((String)conf_dir) || !file::is_dir((String)conf_dir)) {
|
||||
path::mkdir(conf_dir, recursive:true)!;
|
||||
return l;
|
||||
}
|
||||
@ -109,14 +124,13 @@ fn ConfFList? get_config_list(Allocator allocator)
|
||||
PathList pl = path::ls(tmem, conf_dir)!;
|
||||
foreach (fname : pl) @pool() {
|
||||
if ((fname.extension() ?? "") != "json") continue;
|
||||
Path fpath = conf_dir.append(tmem, fname.str_view())!;
|
||||
Path fpath = conf_dir.append(tmem, (String)fname)!;
|
||||
|
||||
File cf = file::open_path(fpath, "r")!;
|
||||
defer (void)cf.close();
|
||||
char[] cf = file::load_temp(fpath)!;
|
||||
|
||||
Object* c = json::parse(tmem, &cf)!;
|
||||
Object* c = json::parse(tmem, (String)cf)!;
|
||||
ConfigFile e = {
|
||||
.path = path::new(allocator, fpath.str_view(), fpath.env)!,
|
||||
.path = path::new(allocator, (String)fpath)!,
|
||||
.name = string::format(allocator, "%s", c.get_string("name"))!,
|
||||
};
|
||||
l.push(e);
|
||||
|
||||
11
src/main.c3
11
src/main.c3
@ -8,7 +8,7 @@ import std::time;
|
||||
import conf;
|
||||
import vm;
|
||||
import ugui;
|
||||
import ugui::sdl::ren;
|
||||
import ugui::sdl3::ren;
|
||||
|
||||
|
||||
const char[*] VS_PATH = "resources/shaders/compiled/ugui.vert.spv";
|
||||
@ -77,7 +77,7 @@ fn int main(String[] args)
|
||||
|
||||
if (ui.check_key_combo(ugui::KMOD_CTRL, "q")) quit = true;
|
||||
|
||||
static usz which_vm = 0;
|
||||
static sz which_vm = 0;
|
||||
ui.@div(ugui::@grow(), ugui::@grow()) {
|
||||
ui.@div(ugui::@fit((short)(ui.width*0.4)), ugui::@grow(), COLUMN, scroll_x: false, scroll_y: true, resize: {.right = true}) {
|
||||
foreach (idx, &vm : vm_list) {
|
||||
@ -100,7 +100,7 @@ fn int main(String[] args)
|
||||
// TODO: implement a "selectable div" to display the information of the right vm
|
||||
VirtualMachineDesc* vm = &vm_list[which_vm];
|
||||
ui.text(string::tformat("Name: %s", vm.name))!!;
|
||||
ui.text(string::tformat("Disk: %s (%s)", vm.disk_path.str_view(), bytes_to_human_readable(tmem, file::get_size(vm.disk_path.str_view()))))!!;
|
||||
ui.text(string::tformat("Disk: %s (%s)", (String)vm.disk_path, bytes_to_human_readable(tmem, file::get_size((String)vm.disk_path))))!!;
|
||||
ui.text(string::tformat("Runner: %s", vm.config.get_string("qemu")))!!;
|
||||
ui.text(string::tformat("Memory: %s", vm.config.get_string("memory")))!!;
|
||||
ui.text(string::tformat("Processors: %s", vm.config.get_string("processors")))!!;
|
||||
@ -126,8 +126,8 @@ fn int main(String[] args)
|
||||
}
|
||||
|
||||
|
||||
fn String bytes_to_human_readable(Allocator allocator, usz bytes, int dp = 1) {
|
||||
static usz thresh = 1024;
|
||||
fn String bytes_to_human_readable(Allocator allocator, sz bytes, int dp = 1) {
|
||||
static sz thresh = 1024;
|
||||
static String[] units = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"};
|
||||
|
||||
double b = bytes;
|
||||
@ -138,4 +138,3 @@ fn String bytes_to_human_readable(Allocator allocator, usz bytes, int dp = 1) {
|
||||
|
||||
return string::format(allocator, "%.*f %s", dp, b, units[u]);
|
||||
}
|
||||
|
||||
|
||||
21
src/vm.c3
21
src/vm.c3
@ -9,12 +9,13 @@ import conf;
|
||||
|
||||
|
||||
struct VirtualMachineDesc {
|
||||
Allocator allocator;
|
||||
Path config_path;
|
||||
Object* config;
|
||||
String name;
|
||||
StrList cmdline;
|
||||
Path disk_path;
|
||||
SubProcess process;
|
||||
Process process;
|
||||
}
|
||||
|
||||
|
||||
@ -24,12 +25,12 @@ alias VMList = list::List{VirtualMachineDesc};
|
||||
fn VirtualMachineDesc? new_from_path(Allocator allocator, Path path)
|
||||
{
|
||||
VirtualMachineDesc desc;
|
||||
desc.config_path = path::new(allocator, path.str_view(), path.env)!;
|
||||
desc.allocator = allocator;
|
||||
desc.config_path = path::new(allocator, (String)path)!;
|
||||
|
||||
File file = file::open_path(path, "r")!;
|
||||
defer (void)file.close();
|
||||
char[] file = file::load_temp(path)!;
|
||||
|
||||
desc.config = json::parse(allocator, &file)!;
|
||||
desc.config = json::parse(allocator, (String)file)!;
|
||||
desc.name = desc.config.get_string("name")!;
|
||||
desc.disk_path = desc.config.get_string("disk").to_expanded_path(allocator)!;
|
||||
|
||||
@ -42,10 +43,10 @@ fn VirtualMachineDesc? new_from_path(Allocator allocator, Path path)
|
||||
<* @param[&in] desc *>
|
||||
fn bool VirtualMachineDesc.is_initialized(&desc)
|
||||
{
|
||||
return desc.config_path.str_view() != ""
|
||||
return (String)desc.config_path != ""
|
||||
&& desc.config != null
|
||||
&& desc.name != ""
|
||||
&& desc.disk_path.str_view() != ""
|
||||
&& (String)desc.disk_path != ""
|
||||
&& desc.cmdline.len() != 0;
|
||||
}
|
||||
|
||||
@ -55,10 +56,10 @@ fn void VirtualMachineDesc.free(&desc)
|
||||
{
|
||||
if (!desc.is_initialized()) return;
|
||||
(void)desc.stop();
|
||||
desc.config_path.free();
|
||||
desc.config_path.free(desc.allocator);
|
||||
desc.config.free();
|
||||
// desc.name.free() name is just a string view into desc.config
|
||||
desc.disk_path.free();
|
||||
desc.disk_path.free(desc.allocator);
|
||||
desc.cmdline.free();
|
||||
|
||||
*desc = {};
|
||||
@ -71,7 +72,7 @@ fn void? VirtualMachineDesc.start(&desc)
|
||||
if (!desc.is_initialized()) return;
|
||||
if ((desc.process.is_running() ?? false)) return;
|
||||
|
||||
desc.process = process::create(desc.cmdline.array_view(), {.inherit_stdio=true, .inherit_environment=true})!;
|
||||
desc.process = process::spawn(desc.cmdline.array_view(), INHERIT_STDIO|INHERIT_ENV)!;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user