-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathweb.zig
47 lines (39 loc) · 1.54 KB
/
web.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const std = @import("std");
fn writeLog(_: void, msg: []const u8) !usize {
jsLogWrite(msg.ptr, msg.len);
return msg.len;
}
pub fn log(
comptime message_level: std.log.Level,
comptime scope: @Type(.EnumLiteral),
comptime format: []const u8,
args: anytype,
) void {
const level_txt = switch (message_level) {
.err => "error",
.warn => "warning",
.info => "info",
.debug => "debug",
};
const prefix = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
const writer = std.io.Writer(void, error{}, writeLog){ .context = {} };
writer.print(level_txt ++ prefix ++ format ++ "\n", args) catch return;
jsLogFlush();
}
var sbuf: [4000]u8 = undefined; // FIXME
pub const LocalStorage = struct {
pub fn setString(key: []const u8, value: []const u8) void {
jsStorageSetString(@intFromPtr(key.ptr), key.len, @intFromPtr(value.ptr), value.len);
}
pub fn getString(key: []const u8) []const u8 {
const len = jsStorageGetString(@intFromPtr(key.ptr), key.len, @intFromPtr(&sbuf), sbuf.len);
return sbuf[0..len];
}
};
extern fn jsLogWrite(ptr: [*]const u8, len: usize) void;
extern fn jsLogFlush() void;
extern fn jsStorageSetString(key_ptr: usize, key_len: usize, value_ptr: usize, value_len: usize) void;
extern fn jsStorageGetString(key_ptr: usize, key_len: usize, value_ptr: usize, value_len: usize) usize;
pub extern fn hasLoadSnapshot() bool;
pub extern fn isKeyDown(key_code: c_uint) bool;
pub extern fn isButtonDown(button_index: c_uint) bool;