Default project loading
This commit is contained in:
parent
64735fe60e
commit
c3999f8ade
3 changed files with 109 additions and 41 deletions
38
project.odin
38
project.odin
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import "core:os"
|
||||
import "core:io"
|
||||
import "core:mem"
|
||||
|
||||
PROJECT_DATA_HEADER :: "WOWOWOW THIS IS HEADER WOWOWOW"
|
||||
PROJECT_DATA_VERSION :: 1
|
||||
|
|
@ -22,11 +23,48 @@ WriteProjectErrorType :: enum {
|
|||
|
||||
project_write :: proc(project: ^ProjectData, path: string) -> os.Error {
|
||||
f := os.open(path, {.Create, .Trunc, .Write}) or_return
|
||||
defer os.close(f)
|
||||
w := io.to_writer(os.to_stream(f))
|
||||
version: u32 = PROJECT_DATA_VERSION
|
||||
header := PROJECT_DATA_HEADER
|
||||
|
||||
io.write_full(w, transmute([]u8)header)
|
||||
io.write_ptr(w, &version, size_of(version))
|
||||
io.write_ptr(w, &project.matrix_count, size_of(project.matrix_count))
|
||||
io.write_ptr(w, raw_data(project.matrices), int(project.matrix_count) * 9 * size_of(f32))
|
||||
os.close(f)
|
||||
return nil
|
||||
}
|
||||
|
||||
ProjectReadError :: union {
|
||||
os.Error,
|
||||
io.Error,
|
||||
ProjectReadErrorType,
|
||||
}
|
||||
|
||||
ProjectReadErrorType :: enum {
|
||||
FailedReadingHeader,
|
||||
BadHeader,
|
||||
VersionNeedsUpgrade,
|
||||
}
|
||||
|
||||
project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError {
|
||||
f := os.open(path, {.Read}) or_return
|
||||
defer os.close(f)
|
||||
r := io.to_reader(os.to_stream(f))
|
||||
header := PROJECT_DATA_HEADER
|
||||
header_buffer: [len(PROJECT_DATA_HEADER)]byte
|
||||
if num, err := io.read_full(r, header_buffer[:]); err != nil {
|
||||
return ProjectReadErrorType.FailedReadingHeader
|
||||
}
|
||||
if mem.compare(transmute([]byte)header[:], header_buffer[:]) != 0 {
|
||||
return ProjectReadErrorType.BadHeader
|
||||
}
|
||||
version: u32
|
||||
_ = io.read_ptr(r, &version, size_of(u32)) or_return
|
||||
if version != PROJECT_DATA_VERSION {
|
||||
return ProjectReadErrorType.VersionNeedsUpgrade
|
||||
}
|
||||
project.version = version
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue