diff options
| author | hachem <im@hachem.wtf> | 2026-10-12 23:08:48 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-10-12 23:08:48 +0200 |
| commit | 6a5543bb8f1f535ca49737bcd7be0cafca3b2a08 (patch) | |
| tree | bb137b732a1d122aeace46c550733f4793d84601 /bridge | |
| parent | 59794d0b999e544a94230d9562bf2b99d2ed74c7 (diff) | |
Diffstat (limited to 'bridge')
| -rw-r--r-- | bridge/hosts.zig | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/bridge/hosts.zig b/bridge/hosts.zig index caf8b0d..5148ca8 100644 --- a/bridge/hosts.zig +++ b/bridge/hosts.zig @@ -8,31 +8,11 @@ const Data = convert.Data; const argInt = convert.argInt; const emit = serial.emit; -// gils shit -const Script = struct { name: []const u8, src: []const u8 }; -const scripts = [_]Script{ - .{ .name = "ls", .src = @embedFile("k_gils_ls") }, - .{ .name = "tree", .src = @embedFile("k_gils_tree") }, - .{ .name = "cat", .src = @embedFile("k_gils_cat") }, - .{ .name = "rm", .src = @embedFile("k_gils_rm") }, - .{ .name = "mkdir", .src = @embedFile("k_gils_mkdir") }, - .{ .name = "touch", .src = @embedFile("k_gils_touch") }, - .{ .name = "cp", .src = @embedFile("k_gils_cp") }, - .{ .name = "mv", .src = @embedFile("k_gils_mv") }, - .{ .name = "wc", .src = @embedFile("k_gils_wc") }, - .{ .name = "head", .src = @embedFile("k_gils_head") }, - .{ .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") }, -}; +const basset = @import("basset"); +const scripts = basset.gils; +const etc_files = basset.etc; +const include_files = basset.include; -// the actual framebuffer, the data layout feels pretty self explanatory pub const Fb = struct { ptr: [*]u8, width: usize, @@ -452,6 +432,25 @@ fn hostEtcSrc(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { } // pass shit to revo +fn hostIncCount(_: []const revo.Value, _: *revo.VM) anyerror!HostResult { + return HostResult.data(Data.new.num(include_files.len)); +} + +// pass shit to revo +fn hostIncName(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { + const i = argInt(usize, args, 0) orelse return HostResult.other("inc_name: bad index"); + if (i >= include_files.len) return HostResult.other("inc_name: out of range"); + return HostResult.data(try vm.ownValueString(include_files[i].name)); +} + +// pass shit to revo +fn hostIncSrc(args: []const revo.Value, vm: *revo.VM) anyerror!HostResult { + const i = argInt(usize, args, 0) orelse return HostResult.other("inc_src: bad index"); + if (i >= include_files.len) return HostResult.other("inc_src: out of range"); + return HostResult.data(try vm.ownValueString(include_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); @@ -517,6 +516,9 @@ pub fn passShitToRevo(vm: *revo.VM) !void { 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("inc_count", try vm.installHost("inc_count", define(&[_]T{}, hostIncCount))); + try vm.registerGlobal("inc_name", try vm.installHost("inc_name", define(&[_]T{.number}, hostIncName))); + try vm.registerGlobal("inc_src", try vm.installHost("inc_src", define(&[_]T{.number}, hostIncSrc))); 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))); |
