diff options
| author | hachem <im@hachem.wtf> | 2026-10-11 02:16:56 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-10-11 02:16:56 +0200 |
| commit | 59794d0b999e544a94230d9562bf2b99d2ed74c7 (patch) | |
| tree | a001db5b5ebb9453d6a0e96f56b36e6ec3ccdd51 /bridge | |
| parent | 88750ed7132c08bcfb24e878c893ef7185c3c0b0 (diff) | |
feat: actual real vfs, not a faked one lmao
Diffstat (limited to 'bridge')
| -rw-r--r-- | bridge/bridge.zig | 2 | ||||
| -rw-r--r-- | bridge/hosts.zig | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/bridge/bridge.zig b/bridge/bridge.zig index 0b56525..a7e0e58 100644 --- a/bridge/bridge.zig +++ b/bridge/bridge.zig @@ -21,8 +21,8 @@ const init_program = blk: { @embedFile("k_console") ++ "\n" ++ @embedFile("k_vmm") ++ "\n" ++ @embedFile("k_fs") ++ "\n" ++ - @embedFile("k_io") ++ "\n" ++ @embedFile("k_vfs") ++ "\n" ++ + @embedFile("k_io") ++ "\n" ++ @embedFile("k_seed") ++ "\n"; // gils shit diff --git a/bridge/hosts.zig b/bridge/hosts.zig index 7ce5650..caf8b0d 100644 --- a/bridge/hosts.zig +++ b/bridge/hosts.zig @@ -24,6 +24,14 @@ const scripts = [_]Script{ .{ .name = "tail", .src = @embedFile("k_gils_tail") }, }; +// /etc/ shit +const EtcFile = struct { name: []const u8, src: []const u8 }; +const etc_files = [_]EtcFile{ + .{ .name = "motd", .src = @embedFile("k_etc_motd") }, + .{ .name = "profile", .src = @embedFile("k_etc_profile") }, + .{ .name = "lung", .src = @embedFile("k_etc_lung") }, +}; + // the actual framebuffer, the data layout feels pretty self explanatory pub const Fb = struct { ptr: [*]u8, @@ -425,6 +433,25 @@ fn hostScriptSrc(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { } // pass shit to revo +fn hostEtcCount(_: []const revo.Value, _: *revo.VM) anyerror!HostResult { + return HostResult.data(Data.new.num(etc_files.len)); +} + +// pass shit to revo +fn hostEtcName(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { + const i = argInt(usize, args, 0) orelse return HostResult.other("etc_name: bad index"); + if (i >= etc_files.len) return HostResult.other("etc_name: out of range"); + return HostResult.data(try vm.ownValueString(etc_files[i].name)); +} + +// pass shit to revo +fn hostEtcSrc(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { + const i = argInt(usize, args, 0) orelse return HostResult.other("etc_src: bad index"); + if (i >= etc_files.len) return HostResult.other("etc_src: out of range"); + return HostResult.data(try vm.ownValueString(etc_files[i].src)); +} + +// pass shit to revo fn hostEvalScript(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { const sid = args[0].asString() orelse return HostResult.other("eval_script: not a string"); const src = vm.stringValue(sid); @@ -487,6 +514,9 @@ pub fn passShitToRevo(vm: *revo.VM) !void { try vm.registerGlobal("script_count", try vm.installHost("script_count", define(&[_]T{}, hostScriptCount))); try vm.registerGlobal("script_name", try vm.installHost("script_name", define(&[_]T{.number}, hostScriptName))); try vm.registerGlobal("script_src", try vm.installHost("script_src", define(&[_]T{.number}, hostScriptSrc))); + try vm.registerGlobal("etc_count", try vm.installHost("etc_count", define(&[_]T{}, hostEtcCount))); + try vm.registerGlobal("etc_name", try vm.installHost("etc_name", define(&[_]T{.number}, hostEtcName))); + try vm.registerGlobal("etc_src", try vm.installHost("etc_src", define(&[_]T{.number}, hostEtcSrc))); try vm.registerGlobal("alloc_contig", try vm.installHost("alloc_contig", define(&[_]T{.number}, hostAllocContig))); try vm.registerGlobal("blit_str", try vm.installHost("blit_str", define(&[_]T{ .number, .string }, hostBlitStr))); try vm.registerGlobal("phys_to_str", try vm.installHost("phys_to_str", define(&[_]T{ .number, .number }, hostPhysToStr))); |
