Compare commits
2 commits
699fe2d48c
...
133b5a9559
Author | SHA1 | Date | |
---|---|---|---|
|
133b5a9559 | ||
|
f3911ead38 |
2
justfile
2
justfile
|
@ -28,7 +28,7 @@ build:
|
|||
# # zig build -Dtarget=wasm32-emscripten
|
||||
|
||||
run:
|
||||
nixGL zig build run
|
||||
nixGL zig build run -- {{ justfile_directory() }}/life.sqlite3
|
||||
|
||||
test:
|
||||
zig build test
|
||||
|
|
62
src/main.zig
62
src/main.zig
|
@ -4,8 +4,49 @@ 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 {
|
||||
const alloc = std.heap.page_allocator;
|
||||
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 screen_width = 800;
|
||||
const screen_height = 450;
|
||||
|
@ -16,8 +57,6 @@ 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
|
||||
|
@ -31,14 +70,7 @@ 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);
|
||||
|
||||
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", .{});
|
||||
}
|
||||
state = loadSqlite(db_path);
|
||||
}
|
||||
file_dialog_state.SelectFilePressed = false;
|
||||
}
|
||||
|
@ -51,7 +83,8 @@ pub fn main() !void {
|
|||
defer raylib.EndDrawing();
|
||||
raylib.ClearBackground(raylib.RAYWHITE);
|
||||
|
||||
{
|
||||
switch (state) {
|
||||
.unloaded => {
|
||||
if (file_dialog_state.windowActive) raylib.GuiLock();
|
||||
defer raylib.GuiUnlock();
|
||||
|
||||
|
@ -59,6 +92,11 @@ pub fn main() !void {
|
|||
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;
|
||||
},
|
||||
}
|
||||
|
||||
raylib.GuiWindowFileDialog(&file_dialog_state);
|
||||
|
|
Loading…
Reference in a new issue