sdl_stdinc.odin 5.6 KB

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