diff --git a/justfile b/justfile index 15f5c3d..ca2aa4c 100644 --- a/justfile +++ b/justfile @@ -28,7 +28,7 @@ build: # # zig build -Dtarget=wasm32-emscripten run: - nixGL zig build run -- {{ justfile_directory() }}/life.sqlite3 + nixGL zig build run test: zig build test diff --git a/src/main.zig b/src/main.zig index 166c99d..6963fb9 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4,49 +4,8 @@ const c = @cImport({ @cInclude("sqlite3.h"); }); -const StateTag = enum { - unloaded, - loaded, -}; - -const State = union(StateTag) { - unloaded: void, - loaded: *c.sqlite3, -}; - -fn loadSqlite(path: [:0]const u8) State { - var db_opt: ?*c.sqlite3 = undefined; - - const result = c.sqlite3_open(path.ptr, &db_opt); - if (result != c.SQLITE_OK) { - std.debug.print("[SQLite] err {}: {s}\n", .{ result, c.sqlite3_errmsg(db_opt) }); - _ = c.sqlite3_close(db_opt); - return State{ .unloaded = {} }; - } - - if (db_opt) |db| { - std.debug.print("[SQLite] Success\n", .{}); - return State{ .loaded = db }; - } - - return State{ .unloaded = {} }; -} - pub fn main() !void { - var state = State{ .unloaded = {} }; - - var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - defer _ = gpa.deinit(); - const alloc = gpa.allocator(); - - const args = try std.process.argsAlloc(alloc); - defer std.process.argsFree(alloc, args); - - std.debug.print("Arguments: {s}\n", .{args}); - - if (args.len > 1) { - state = loadSqlite(args[1]); - } + const alloc = std.heap.page_allocator; const screen_width = 800; const screen_height = 450; @@ -57,6 +16,8 @@ pub fn main() !void { // const ext = ".sqlite3"; // @memcpy(file_dialog_state.filterExt[0..ext.len], ext); + var db: ?*c.sqlite3 = undefined; + while (!raylib.WindowShouldClose()) { // // Update @@ -70,7 +31,14 @@ pub fn main() !void { // slices -> C-string (null-terminated) const db_path = try std.fs.path.joinZ(alloc, &[_][]const u8{ dir, file }); defer alloc.free(db_path); - state = loadSqlite(db_path); + + const result = c.sqlite3_open(db_path.ptr, &db); + if (result != c.SQLITE_OK or db == null) { + std.debug.print("[SQLite] err {}: {s}\n", .{ result, c.sqlite3_errmsg(db) }); + _ = c.sqlite3_close(db); + } else { + std.debug.print("[SQLite] Success\n", .{}); + } } file_dialog_state.SelectFilePressed = false; } @@ -83,20 +51,14 @@ pub fn main() !void { defer raylib.EndDrawing(); raylib.ClearBackground(raylib.RAYWHITE); - switch (state) { - .unloaded => { - if (file_dialog_state.windowActive) raylib.GuiLock(); - defer raylib.GuiUnlock(); + { + if (file_dialog_state.windowActive) raylib.GuiLock(); + defer raylib.GuiUnlock(); - const button_size = 200; - if (raylib.GuiButton(.{ .x = (screen_width - button_size) / 2, .y = (screen_height - button_size) / 2, .width = 200, .height = 200 }, "Load db file") == 1) { - file_dialog_state.windowActive = true; - } - }, - - .loaded => |*db| { - _ = db; - }, + const button_size = 200; + if (raylib.GuiButton(.{ .x = (screen_width - button_size) / 2, .y = (screen_height - button_size) / 2, .width = 200, .height = 200 }, "Load db file") == 1) { + file_dialog_state.windowActive = true; + } } raylib.GuiWindowFileDialog(&file_dialog_state);