sdl_stdinc.odin 5.5 KB

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