Working example
This commit is contained in:
76
sdl3/sdl3_storage.odin
Normal file
76
sdl3/sdl3_storage.odin
Normal file
@@ -0,0 +1,76 @@
|
||||
package sdl3
|
||||
|
||||
import "core:c"
|
||||
|
||||
StorageInterface :: struct {
|
||||
/* The version of this interface */
|
||||
version: Uint32,
|
||||
|
||||
/* Called when the storage is closed */
|
||||
close: proc "c" (userdata: rawptr) -> bool,
|
||||
|
||||
/* Optional, returns whether the storage is currently ready for access */
|
||||
ready: proc "c" (userdata: rawptr) -> bool,
|
||||
|
||||
/* Enumerate a directory, optional for write-only storage */
|
||||
enumerate: proc "c" (userdata: rawptr, path: cstring, callback: EnumerateDirectoryCallback, callback_userdata: rawptr) -> bool,
|
||||
|
||||
/* Get path information, optional for write-only storage */
|
||||
info: proc "c" (userdata: rawptr, path: cstring, info: ^PathInfo) -> bool,
|
||||
|
||||
/* Read a file from storage, optional for write-only storage */
|
||||
read_file: proc "c" (userdata: rawptr, path: cstring, destination: rawptr, length: Uint64) -> bool,
|
||||
|
||||
/* Write a file to storage, optional for read-only storage */
|
||||
write_file: proc "c" (userdata: rawptr, path: cstring, source: rawptr, length: Uint64) -> bool,
|
||||
|
||||
/* Create a directory, optional for read-only storage */
|
||||
mkdir: proc "c" (userdata: rawptr, path: cstring) -> bool,
|
||||
|
||||
/* Remove a file or empty directory, optional for read-only storage */
|
||||
remove: proc "c" (userdata: rawptr, path: cstring) -> bool,
|
||||
|
||||
/* Rename a path, optional for read-only storage */
|
||||
rename: proc "c" (userdata: rawptr, oldpath, newpath: cstring) -> bool,
|
||||
|
||||
/* Copy a file, optional for read-only storage */
|
||||
copy: proc "c" (userdata: rawptr, oldpath, newpath: cstring) -> bool,
|
||||
|
||||
/* Get the space remaining, optional for read-only storage */
|
||||
space_remaining: proc "c" (userdata: rawptr) -> Uint64,
|
||||
}
|
||||
|
||||
#assert(
|
||||
(size_of(StorageInterface) == 48 && size_of(rawptr) == 4) ||
|
||||
(size_of(StorageInterface) == 96 && size_of(rawptr) == 8),
|
||||
)
|
||||
|
||||
Storage :: struct {}
|
||||
|
||||
|
||||
@(default_calling_convention="c", link_prefix="SDL_", require_results)
|
||||
foreign lib {
|
||||
OpenTitleStorage :: proc(override: cstring, props: PropertiesID) -> ^Storage ---
|
||||
OpenUserStorage :: proc(org, app: cstring, props: PropertiesID) -> ^Storage ---
|
||||
OpenFileStorage :: proc(path: cstring) -> ^Storage ---
|
||||
OpenStorage :: proc(iface: ^StorageInterface, userdata: rawptr) -> ^Storage ---
|
||||
CloseStorage :: proc(storage: ^Storage) -> bool ---
|
||||
StorageReady :: proc(storage: ^Storage) -> bool ---
|
||||
GetStorageFileSize :: proc(storage: ^Storage, path: cstring, length: ^Uint64) -> bool ---
|
||||
|
||||
CreateStorageDirectory :: proc(storage: ^Storage, path: cstring) -> bool ---
|
||||
GetStorageSpaceRemaining :: proc(storage: ^Storage) -> Uint64 ---
|
||||
GlobStorageDirectory :: proc(storage: ^Storage, path: cstring, pattern: cstring, flags: GlobFlags, count: ^c.int) -> [^][^]c.char ---
|
||||
}
|
||||
|
||||
@(default_calling_convention="c", link_prefix="SDL_")
|
||||
foreign lib {
|
||||
ReadStorageFile :: proc(storage: ^Storage, path: cstring, destination: rawptr, length: Uint64) -> bool ---
|
||||
WriteStorageFile :: proc(storage: ^Storage, path: cstring, source: rawptr, length: Uint64) -> bool ---
|
||||
|
||||
EnumerateStorageDirectory :: proc(storage: ^Storage, path: cstring, callback: EnumerateDirectoryCallback, userdata: rawptr) -> bool ---
|
||||
RemoveStoragePath :: proc(storage: ^Storage, path: cstring) -> bool ---
|
||||
RenameStoragePath :: proc(storage: ^Storage, oldpath, newpath: cstring) -> bool ---
|
||||
CopyStorageFile :: proc(storage: ^Storage, oldpath, newpath: cstring) -> bool ---
|
||||
GetStoragePathInfo :: proc(storage: ^Storage, path: cstring, info: ^PathInfo) -> bool ---
|
||||
}
|
||||
Reference in New Issue
Block a user