package main
import "core:fmt"
import "core:mem"
import "core:os"
DEFAULT_DB_PATH :: "~/.local/share/data-goblin/goblin.db"
run_app :: proc() -> bool {
if len(os.args) < 2 {
command_usage(os.args[:1])
return true
}
store: Storage
if err := storage_open(&store, "data.db"); err != nil {
fmt.eprintf("run_app: storage.open error -> %v\n", err)
return false
}
if err := storage_ensure_schema(&store); err != nil {
fmt.eprintf("run_app: storage.ensure_schema error -> %v\n", err)
return false
}
cmd := command_from_string(os.args[1])
cmd_data := Command_Data[cmd]
cmd_data.func(os.args[1:])
if err := storage_close(&store); err != nil {
fmt.eprintf("run_app: storage.close error -> %v\n", err)
return false
}
return true
}
main :: proc() {
when ODIN_DEBUG {
track: mem.Tracking_Allocator
mem.tracking_allocator_init(&track, context.allocator)
context.allocator = mem.tracking_allocator(&track)
defer {
for _, leak in track.allocation_map {
fmt.printf("%v leaked %m\n", leak.location, leak.size)
}
mem.tracking_allocator_destroy(&track)
}
}
if !run_app() {
fmt.eprintf("internal error\n")
}
free_all(context.temp_allocator)
fmt.printf("BYE\n")
}