sdl_stdinc.odin 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package sdl2
  2. import "core:c"
  3. import "core:intrinsics"
  4. import "core:runtime"
  5. _, _ :: intrinsics, runtime
  6. when ODIN_OS == "windows" { foreign import lib "SDL2.lib" }
  7. when ODIN_OS == "linux" { foreign import lib "system:SDL2" }
  8. when ODIN_OS == "darwin" { foreign import lib "system:SDL2" }
  9. when ODIN_OS == "freebsd" { foreign import lib "system:SDL2" }
  10. bool :: distinct b32
  11. #assert(size_of(bool) == size_of(c.int))
  12. FOURCC :: #force_inline proc "c" (A, B, C, D: u8) -> u32 {
  13. return u32(A) << 0 | u32(B) << 8 | u32(C) << 16 | u32(D) << 24
  14. }
  15. stack_alloc :: proc "c" ($T: typeid, #any_int count: int) -> ^T {
  16. return (^T)(intrinsics.alloca(size_of(T)*count))
  17. }
  18. stack_make :: proc "c" ($T: typeid/[]$E, #any_int count: int) -> T {
  19. ptr := (^T)(intrinsics.alloca(size_of(T)*count))
  20. return transmute(T)runtime.Raw_Slice{ptr, count}
  21. }
  22. stack_free :: proc "c" (ptr: rawptr) {}
  23. malloc_func :: proc "c" (size: c.size_t) -> rawptr
  24. calloc_func :: proc "c" (nmemb, size: c.size_t) -> rawptr
  25. realloc_func :: proc "c" (mem: rawptr, size: c.size_t) -> rawptr
  26. free_func :: proc "c" (mem: rawptr)
  27. @(default_calling_convention="c", link_prefix="SDL_")
  28. foreign lib {
  29. malloc :: proc(size: c.size_t) -> rawptr ---
  30. calloc :: proc(nmemb, size: c.size_t) -> rawptr ---
  31. realloc :: proc(mem: rawptr, size: c.size_t) -> rawptr ---
  32. free :: proc(mem: rawptr) ---
  33. GetMemoryFunctions :: proc(malloc_func: ^malloc_func,
  34. calloc_func: ^calloc_func,
  35. realloc_func: ^realloc_func,
  36. free_func: ^free_func) ---
  37. SetMemoryFunctions :: proc(malloc_func: malloc_func,
  38. calloc_func: calloc_func,
  39. realloc_func: realloc_func,
  40. free_func: free_func) -> c.int ---
  41. GetNumAllocations :: proc() -> c.int ---
  42. }
  43. @(default_calling_convention="c", link_prefix="SDL_")
  44. foreign lib {
  45. getenv :: proc(name: cstring) -> cstring ---
  46. setenv :: proc(name, value: cstring, overwrite: c.int) -> c.int ---
  47. }
  48. @(default_calling_convention="c", link_prefix="SDL_")
  49. foreign lib {
  50. isalpha :: proc(x: rune) -> bool ---
  51. isalnum :: proc(x: rune) -> bool ---
  52. isblank :: proc(x: rune) -> bool ---
  53. iscntrl :: proc(x: rune) -> bool ---
  54. isdigit :: proc(x: rune) -> bool ---
  55. isxdigit :: proc(x: rune) -> bool ---
  56. ispunct :: proc(x: rune) -> bool ---
  57. isspace :: proc(x: rune) -> bool ---
  58. isupper :: proc(x: rune) -> bool ---
  59. islower :: proc(x: rune) -> bool ---
  60. isprint :: proc(x: rune) -> bool ---
  61. isgraph :: proc(x: rune) -> bool ---
  62. toupper :: proc(x: rune) -> bool ---
  63. tolower :: proc(x: rune) -> bool ---
  64. crc32 :: proc(crc: u32, data: rawptr, len: c.size_t) -> u32 ---
  65. }
  66. M_PI :: 3.14159265358979323846264338327950288
  67. @(default_calling_convention="c", link_prefix="SDL_")
  68. foreign lib {
  69. acos :: proc(x: f64) -> f64 ---
  70. acosf :: proc(x: f32) -> f32 ---
  71. asin :: proc(x: f64) -> f64 ---
  72. asinf :: proc(x: f32) -> f32 ---
  73. atan :: proc(x: f64) -> f64 ---
  74. atanf :: proc(x: f32) -> f32 ---
  75. atan2 :: proc(x, y: f64) -> f64 ---
  76. atan2f :: proc(x, y: f32) -> f32 ---
  77. ceil :: proc(x: f64) -> f64 ---
  78. ceilf :: proc(x: f32) -> f32 ---
  79. copysign :: proc(x, y: f64) -> f64 ---
  80. copysignf :: proc(x, y: f32) -> f32 ---
  81. cos :: proc(x: f64) -> f64 ---
  82. cosf :: proc(x: f32) -> f32 ---
  83. exp :: proc(x: f64) -> f64 ---
  84. expf :: proc(x: f32) -> f32 ---
  85. fabs :: proc(x: f64) -> f64 ---
  86. fabsf :: proc(x: f32) -> f32 ---
  87. floor :: proc(x: f64) -> f64 ---
  88. floorf :: proc(x: f32) -> f32 ---
  89. trunc :: proc(x: f64) -> f64 ---
  90. truncf :: proc(x: f32) -> f32 ---
  91. fmod :: proc(x, y: f64) -> f64 ---
  92. fmodf :: proc(x, y: f32) -> f32 ---
  93. log :: proc(x: f64) -> f64 ---
  94. logf :: proc(x: f32) -> f32 ---
  95. log10 :: proc(x: f64) -> f64 ---
  96. log10f :: proc(x: f32) -> f32 ---
  97. pow :: proc(x, y: f64) -> f64 ---
  98. powf :: proc(x, y: f32) -> f32 ---
  99. round :: proc(x: f64) -> f64 ---
  100. roundf :: proc(x: f32) -> f32 ---
  101. lround :: proc(x: f64) -> c.long ---
  102. lroundf :: proc(x: f32) -> c.long ---
  103. scalbn :: proc(x: f64, n: c.int) -> f64 ---
  104. scalbnf :: proc(x: f32, n: c.int) -> f32 ---
  105. sin :: proc(x: f64) -> f64 ---
  106. sinf :: proc(x: f32) -> f32 ---
  107. sqrt :: proc(x: f64) -> f64 ---
  108. sqrtf :: proc(x: f32) -> f32 ---
  109. tan :: proc(x: f64) -> f64 ---
  110. tanf :: proc(x: f32) -> f32 ---
  111. }
  112. /* The SDL implementation of iconv() returns these error codes */
  113. ICONV_ERROR :: ~c.size_t(0) // (size_t)-1
  114. ICONV_E2BIG :: ~c.size_t(1) // (size_t)-2
  115. ICONV_EILSEQ :: ~c.size_t(2) // (size_t)-3
  116. ICONV_EINVAL :: ~c.size_t(3) // (size_t)-4
  117. /* SDL_iconv_* are now always real symbols/types, not macros or inlined. */
  118. iconv_t :: distinct rawptr
  119. @(default_calling_convention="c", link_prefix="SDL_")
  120. foreign lib {
  121. iconv_open :: proc(tocode, fromcode: cstring) -> iconv_t ---
  122. iconv_close :: proc(cd: iconv_t) -> c.int ---
  123. iconv :: proc(cd: iconv_t, inbuf: ^cstring, inbytesleft: ^c.size_t, outbuf: ^[^]u8, outbytesleft: ^c.size_t) -> c.size_t ---
  124. iconv_string :: proc(tocode, fromcode, inbuf: cstring, inbytesleft: c.size_t) -> [^]u8 ---
  125. }
  126. iconv_utf8_locale :: proc "c" (s: string) -> cstring {
  127. return cast(cstring)iconv_string("", "UTF-8", cstring(raw_data(s)), len(s)+1)
  128. }
  129. iconv_utf8_utf16 :: iconv_utf8_ucs2
  130. iconv_utf8_ucs2 :: proc "c" (s: string) -> [^]u16 {
  131. return cast([^]u16)iconv_string("UCS-2-INTERNAL", "UTF-8", cstring(raw_data(s)), len(s)+1)
  132. }
  133. #assert(size_of(rune) == size_of(c.int))
  134. iconv_utf8_utf32 :: iconv_utf8_ucs4
  135. iconv_utf8_ucs4 :: proc "c" (s: string) -> [^]rune {
  136. return cast([^]rune)iconv_string("UCS-4-INTERNAL", "UTF-8", cstring(raw_data(s)), len(s)+1)
  137. }