From 8c453ecc2230cca06b3a55669e15d6556764c9df Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 30 Jan 2025 11:58:28 +0000 Subject: [PATCH] Add sdl3_iostream.odin --- vendor/sdl3/sdl3_iostream.odin | 107 +++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 vendor/sdl3/sdl3_iostream.odin diff --git a/vendor/sdl3/sdl3_iostream.odin b/vendor/sdl3/sdl3_iostream.odin new file mode 100644 index 000000000..6f7756bdd --- /dev/null +++ b/vendor/sdl3/sdl3_iostream.odin @@ -0,0 +1,107 @@ +package sdl3 + +import "core:c" + +IOStatus :: enum c.int { + READY, /**< Everything is ready (no errors and not EOF). */ + ERROR, /**< Read or write I/O error */ + EOF, /**< End of file */ + NOT_READY, /**< Non blocking I/O, not ready */ + READONLY, /**< Tried to write a read-only buffer */ + WRITEONLY, /**< Tried to read a write-only buffer */ +} + +IOWhence :: enum c.int { + SEEK_SET, /**< Seek from the beginning of data */ + SEEK_CUR, /**< Seek relative to current read point */ + SEEK_END, /**< Seek relative to the end of data */ +} + +IO_SEEK_SET :: IOWhence.SEEK_SET +IO_SEEK_CUR :: IOWhence.SEEK_CUR +IO_SEEK_END :: IOWhence.SEEK_END + +IOStreamInterface :: struct { + version: Uint32, + size: proc "c" (userdata: rawptr) -> Sint64, + seek: proc "c" (userdata: rawptr, offset: Sint64, whence: IOWhence) -> Sint64, + read: proc "c" (userdata: rawptr, ptr: rawptr, size: uint, status: ^IOStatus) -> uint, + write: proc "c" (userdata: rawptr, ptr: rawptr, size: uint, status: ^IOStatus) -> uint, + flush: proc "c" (userdata: rawptr, status: ^IOStatus) -> bool, + close: proc "c" (userdata: rawptr) -> bool, +} + +#assert( + (size_of(IOStreamInterface) == 28 && size_of(rawptr) == 4) || + (size_of(IOStreamInterface) == 56 && size_of(rawptr) == 8) +) + +IOStream :: struct {} + +PROP_IOSTREAM_WINDOWS_HANDLE_POINTER :: "SDL.iostream.windows.handle" +PROP_IOSTREAM_STDIO_FILE_POINTER :: "SDL.iostream.stdio.file" +PROP_IOSTREAM_FILE_DESCRIPTOR_NUMBER :: "SDL.iostream.file_descriptor" +PROP_IOSTREAM_ANDROID_AASSET_POINTER :: "SDL.iostream.android.aasset" +PROP_IOSTREAM_MEMORY_POINTER :: "SDL.iostream.memory.base" +PROP_IOSTREAM_MEMORY_SIZE_NUMBER :: "SDL.iostream.memory.size" +PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER :: "SDL.iostream.dynamic.memory" +PROP_IOSTREAM_DYNAMIC_CHUNKSIZE_NUMBER :: "SDL.iostream.dynamic.chunksize" + +@(default_calling_convention="c", link_prefix="SDL_") +foreign lib { + @(require_results) IOFromFile :: proc(file: cstring, mode: cstring) -> ^IOStream --- + @(require_results) IOFromMem :: proc(mem: rawptr, size: uint) -> ^IOStream --- + @(require_results) IOFromConstMem :: proc(mem: rawptr, size: uint) -> ^IOStream --- + @(require_results) IOFromDynamicMem :: proc() -> ^IOStream --- + + @(require_results) OpenIO :: proc(iface: ^IOStreamInterface, userdata: rawptr) -> ^IOStream --- + CloseIO :: proc(ctx: ^IOStream) -> bool --- + + @(require_results) GetIOProperties :: proc(ctx: ^IOStream) -> PropertiesID --- + @(require_results) GetIOStatus :: proc(ctx: ^IOStream) -> IOStatus --- + @(require_results) GetIOSize :: proc(ctx: ^IOStream) -> Sint64 --- + SeekIO :: proc(ctx: ^IOStream, offset: Sint64, whence: IOWhence) -> Sint64 --- + TellIO :: proc(ctx: ^IOStream) -> Sint64 --- + ReadIO :: proc(ctx: ^IOStream, ptr: rawptr, size: uint) -> uint --- + WriteIO :: proc(ctx: ^IOStream, ptr: rawptr, size: uint) -> uint --- + IOprintf :: proc(ctx: ^IOStream, fmt: cstring, #c_vararg args: ..any) -> uint --- + IOvprintf :: proc(ctx: ^IOStream, fmt: cstring, ap: c.va_list) -> uint --- + FlushIO :: proc(ctx: ^IOStream) -> bool --- + + @(require_results) + LoadFile_IO :: proc(src: ^IOStream, datasize: ^uint, closeio: bool) -> rawptr --- + @(require_results) + LoadFile :: proc(file: cstring, datasize: ^uint) -> rawptr --- + SaveFile_IO :: proc(src: ^IOStream, data: rawptr, datasize: uint, closeio: bool) -> bool --- + SaveFile :: proc(file: cstring, data: rawptr, datasize: uint) -> bool --- + + ReadU8 :: proc(src: ^IOStream, value: ^Uint8) -> bool --- + ReadS8 :: proc(src: ^IOStream, value: ^Sint8) -> bool --- + ReadU16LE :: proc(src: ^IOStream, value: ^Uint16) -> bool --- + ReadS16LE :: proc(src: ^IOStream, value: ^Sint16) -> bool --- + ReadU16BE :: proc(src: ^IOStream, value: ^Uint16) -> bool --- + ReadS16BE :: proc(src: ^IOStream, value: ^Sint16) -> bool --- + ReadU32LE :: proc(src: ^IOStream, value: ^Uint32) -> bool --- + ReadS32LE :: proc(src: ^IOStream, value: ^Sint32) -> bool --- + ReadU32BE :: proc(src: ^IOStream, value: ^Uint32) -> bool --- + ReadS32BE :: proc(src: ^IOStream, value: ^Sint32) -> bool --- + ReadU64LE :: proc(src: ^IOStream, value: ^Uint64) -> bool --- + ReadS64LE :: proc(src: ^IOStream, value: ^Sint64) -> bool --- + ReadU64BE :: proc(src: ^IOStream, value: ^Uint64) -> bool --- + ReadS64BE :: proc(src: ^IOStream, value: ^Sint64) -> bool --- + + WriteU8 :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS8 :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU16LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS16LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU16BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS16BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU32LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS32LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU32BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS32BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU64LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS64LE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteU64BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- + WriteS64BE :: proc(dst: ^IOStream, value: IOStream) -> bool --- +} \ No newline at end of file