SDL2.Mod 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. MODULE SDL2;
  2. (* Copyright 2017-2020 Arthur Yefimov
  3. This file is part of Free Oberon.
  4. Free Oberon is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. Free Oberon is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with Foobar. If not, see <http://www.gnu.org/licenses/>.
  14. *)
  15. IMPORT SYSTEM;
  16. CONST
  17. (* SDL_Init Flags *)
  18. initTimer* = 0;
  19. initAudio* = 4;
  20. initVideo* = 5;
  21. initJoystick* = 9;
  22. initHaptic* = 12;
  23. initGameController* = 13;
  24. initEvents* = 14;
  25. initEverything* = {initTimer, initAudio, initVideo, initJoystick,
  26. initHaptic, initGameController, initEvents};
  27. (* SDL_CreateWindow Flags *)
  28. windowFullscreen* = 0;
  29. windowOpenGL* = 1;
  30. windowShown* = 2;
  31. windowHidden* = 3;
  32. windowBorderless* = 4;
  33. windowResizable* = 5;
  34. windowMinimized* = 6;
  35. windowMaximized* = 7;
  36. windowInputGrabbed* = 8;
  37. windowInputFocus* = 9;
  38. windowMouseFocus* = 10;
  39. windowFullscreenDesktop* = {windowFullscreen, 12};
  40. windowForeign* = 11;
  41. windowAllowHighDPI* = 13;
  42. (* Window Position *)
  43. windowPosUndefined* = 1FFF0000H;
  44. (* Event Types *)
  45. firstEvent* = 0;
  46. quit* = 100H;
  47. windowEvent* = 200H;
  48. keyDown* = 300H;
  49. keyUp* = 301H;
  50. textEditing* = 302H;
  51. textInput* = 303H;
  52. mouseMotion* = 400H;
  53. mouseButtonDown* = 401H;
  54. mouseButtonUp* = 402H;
  55. mouseWheel* = 403H;
  56. userEvent* = 8000H;
  57. lastEvent* = 0FFFFH;
  58. (* Key Mods *)
  59. kmodLShift* = 0;
  60. kmodRShift* = 1;
  61. kmodLCtrl* = 6;
  62. kmodRCtrl* = 7;
  63. kmodLAlt* = 8;
  64. kmodRAlt* = 9;
  65. kmodLGui* = 10;
  66. kmodRGui* = 11;
  67. kmodNum* = 12;
  68. kmodCaps* = 13;
  69. kmodMode* = 14;
  70. kmodReserved* = 15;
  71. kmodCtrl* = {kmodLCtrl, kmodRCtrl};
  72. kmodShift* = {kmodLShift, kmodRShift};
  73. kmodAlt* = {kmodLAlt, kmodRAlt};
  74. kmodGui* = {kmodLGui, kmodRGui};
  75. (* Hints (for SDL_Hint) *)
  76. hintFramebufferAcceleration* = 'SDL_FRAMEBUFFER_ACCELERATION';
  77. hintRenderDriver* = 'SDL_RENDER_DRIVER';
  78. hintRenderOpenglShaders* = 'SDL_RENDER_OPENGL_SHADERS';
  79. hintRenderDirect3dThreadsafe* = 'SDL_RENDER_DIRECT3D_THREAD_SAFE';
  80. hintRenderScaleQuality* = 'SDL_RENDER_SCALE_QUALITY';
  81. hintRenderVsync* = 'SDL_RENDER_VSYNC';
  82. hintVideoAllowScreensaver* = 'SDL_VIDEO_ALLOW_SCREENSAVER';
  83. hintVideoX11Xvidmode* = 'SDL_VIDEO_X11_XVIDMODE';
  84. hintVideoX11Xinerama* = 'SDL_VIDEO_X11_XINERAMA';
  85. hintVideoX11Xrandr* = 'SDL_VIDEO_X11_XRANDR';
  86. hintGrabKeyboard* = 'SDL_GRAB_KEYBOARD';
  87. hintMouseRelativeModeWarp* = 'SDL_MOUSE_RELATIVE_MODE_WARP';
  88. hintVideoMinimizeOnFocusLoss* = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
  89. hintIdleTimerDisabled* = 'SDL_IOSIDLETIMERDISABLED';
  90. hintOrientations* = 'SDL_IOSORIENTATIONS'; (* !FIXME add _ lol *)
  91. hintAccelerometerAsJoystick* = 'SDL_ACCELEROMETERASJOYSTICK';
  92. hintXinputEnabled* = 'SDL_XINPUTENABLED';
  93. hintGamecontrollerconfig* = 'SDL_GAMECONTROLLERCONFIG';
  94. hintJoystickAllowBgEvents* = 'SDL_JOYSTICKALLOWBACKGROUNDEVENTS';
  95. hintAllowTopmost* = 'SDL_ALLOWTOPMOST';
  96. hintTimerResolution* = 'SDL_TIMERRESOLUTION';
  97. hintVideoHighDpiDisabled* = 'SDL_VIDEO_HIGHDPIDISABLED';
  98. hintMacCtrlClickEmulateRClick* = 'SDL_MACCTRLCLICKEMULATERIGHTCLICK';
  99. hintVideoWinD3dCompiler* = 'SDL_VIDEO_WIND3DCOMPILER';
  100. hintVideoWindowSharePixelFormat* = 'SDL_VIDEO_WINDOWSHAREPIXELFORMAT';
  101. hintVideoMacFullscreenSpaces* = 'SDL_VIDEO_MACFULLSCREENSPACES';
  102. (* Renderer Flags *)
  103. rendererSoftware* = 0;
  104. rendererAccelerated* = 1;
  105. rendererPresentVsync* = 2;
  106. rendererTargetTexture* = 3;
  107. (* Flip Flags*)
  108. flipHorizontal* = 0;
  109. flipVertical* = 1;
  110. (* ImgInit Flags *)
  111. imgInitJpg* = 0;
  112. imgInitPng* = 1;
  113. imgInitTif* = 2;
  114. imgInitWebp* = 3;
  115. (* Blend Modes *)
  116. blendModeBlend* = 0;
  117. blendModeAdd* = 1;
  118. blendModeMod* = 2;
  119. (* Mouse Buttons *)
  120. buttonLeft* = 1;
  121. buttonMiddle* = 2;
  122. buttonRight* = 3;
  123. buttonWheelUp* = 4;
  124. buttonWheelDown* = 5;
  125. buttonX1* = 6;
  126. buttonX2* = 7;
  127. (* Text Editing and Input *)
  128. textEditingEventTextSize* = 32;
  129. textInputEventTextSize* = 32;
  130. (* PeepEvents actions *)
  131. addEvent* = 0;
  132. peekEvent* = 1;
  133. getEvent* = 2;
  134. TYPE
  135. INT8* = SYSTEM.INT8;
  136. INT16* = SYSTEM.INT16;
  137. Window* = SYSTEM.PTR;
  138. Renderer* = SYSTEM.PTR;
  139. WindowEvent* = POINTER [1] TO WindowEventDesc;
  140. WindowEventDesc* = RECORD
  141. type*: INTEGER;
  142. timestamp*: INTEGER;
  143. windowID*: INTEGER;
  144. event*: INT16;
  145. data1*: INTEGER;
  146. data2*: INTEGER;
  147. END;
  148. Keysym* = RECORD
  149. scancode*: INTEGER;
  150. sym*: INTEGER;
  151. mod*: SHORTINT;
  152. END;
  153. KeyboardEvent* = POINTER [1] TO KeyboardEventDesc;
  154. KeyboardEventDesc = RECORD
  155. type*: INTEGER;
  156. timestamp*: INTEGER;
  157. windowID*: INTEGER;
  158. state*: INT16;
  159. repeat*: INT16;
  160. keysym*: Keysym;
  161. padding1: ARRAY 100 OF CHAR
  162. END;
  163. MouseMotionEvent* = POINTER [1] TO MouseMotionEventDesc;
  164. MouseMotionEventDesc* = RECORD
  165. type*: INTEGER;
  166. timestamp*: INTEGER;
  167. windowID*: INTEGER;
  168. which*: INTEGER;
  169. state*: INTEGER;
  170. x*: INTEGER;
  171. y*: INTEGER;
  172. xRel*: INTEGER;
  173. yRel*: INTEGER;
  174. END;
  175. MouseButtonEvent* = POINTER [1] TO MouseButtonEventDesc;
  176. MouseButtonEventDesc* = RECORD
  177. type*: INTEGER;
  178. timestamp*: INTEGER;
  179. windowID*: INTEGER;
  180. which*: INTEGER;
  181. button*: INT8;
  182. state*: INT8;
  183. clicks*: INT8;
  184. padding1: INT8;
  185. x*: INTEGER;
  186. y*: INTEGER;
  187. END;
  188. MouseWheelEvent* = POINTER [1] TO MouseWheelEventDesc;
  189. MouseWheelEventDesc* = RECORD
  190. type*: INTEGER;
  191. timestamp*: INTEGER;
  192. windowID*: INTEGER;
  193. which*: INTEGER;
  194. x*: INTEGER;
  195. y*: INTEGER;
  196. direction*: INTEGER;
  197. END;
  198. TextEditingEvent* = POINTER [1] TO TextEditingEventDesc;
  199. TextEditingEventDesc* = RECORD
  200. type*: INTEGER;
  201. timestamp*: INTEGER;
  202. windowID*: INTEGER;
  203. text*: ARRAY textEditingEventTextSize OF CHAR;
  204. start*: INTEGER;
  205. length*: INTEGER;
  206. END;
  207. TextInputEvent* = POINTER [1] TO TextInputEventDesc;
  208. TextInputEventDesc* = RECORD
  209. type*: INTEGER;
  210. timestamp*: INTEGER;
  211. windowID*: INTEGER;
  212. text*: ARRAY textInputEventTextSize OF CHAR;
  213. END;
  214. Event* = RECORD
  215. type*: INTEGER;
  216. padding1: ARRAY 124 OF CHAR
  217. END;
  218. Rect* = RECORD
  219. x*, y*, w*, h*: INTEGER
  220. END;
  221. Palette* = POINTER [1] TO PaletteDesc;
  222. PaletteDesc* = RECORD
  223. nColors: INTEGER;
  224. colors: SYSTEM.PTR;
  225. version: INTEGER;
  226. refCount: INTEGER
  227. END;
  228. DisplayMode* = RECORD
  229. format*: INTEGER;
  230. w*, h*: INTEGER;
  231. refreshRate*: INTEGER;
  232. driverData: SYSTEM.PTR
  233. END;
  234. PixelFormat* = POINTER [1] TO PixelFormatDesc;
  235. PixelFormatDesc* = RECORD
  236. format*: INTEGER;
  237. palette*: Palette;
  238. bitsPerPixel*: INT16;
  239. bytesPerPixel*: INT16;
  240. rMask*: INTEGER;
  241. gMask*: INTEGER;
  242. aMask*: INTEGER;
  243. padding1: ARRAY 16 OF CHAR
  244. END;
  245. Surface* = POINTER [1] TO SurfaceDesc;
  246. SurfaceDesc* = RECORD
  247. flags: INTEGER;
  248. format*: PixelFormat;
  249. w*, h*, pitch*: INTEGER;
  250. pixels*: SYSTEM.PTR;
  251. userData*: SYSTEM.PTR;
  252. locked: INTEGER;
  253. lockData: SYSTEM.PTR;
  254. clipRect*: Rect;
  255. map: SYSTEM.PTR;
  256. refCount*: INTEGER
  257. END;
  258. Texture* = SYSTEM.PTR;
  259. KeyArray* = POINTER [1] TO ARRAY 1024 OF BOOLEAN;
  260. PROCEDURE -AAIncludeSDL2h0* '#include "SDL2.h0"';
  261. PROCEDURE -Init*(flags: SET): SHORTINT "SDL_Init(flags)";
  262. PROCEDURE -Quit* "SDL_Quit()";
  263. PROCEDURE -CreateWindow*(title: ARRAY OF CHAR; x, y, w, h: INTEGER;
  264. flags: SET): Window "(void *)SDL_CreateWindow(title, x, y, w, h, flags)";
  265. PROCEDURE -GetWindowSize*(window: Window; VAR w, h: INTEGER)
  266. "SDL_GetWindowSize(window, w, h)";
  267. PROCEDURE -SetWindowSize*(window: Window; w, h: INTEGER)
  268. "SDL_SetWindowSize(window, w, h)";
  269. PROCEDURE -DestroyWindow(win: SYSTEM.PTR) "SDL_DestroyWindow(win)";
  270. PROCEDURE -PollEvent*(VAR e: Event): INTEGER "SDL_PollEvent(e)";
  271. PROCEDURE -WaitEvent*(VAR e: Event): INTEGER "SDL_WaitEvent(e)";
  272. PROCEDURE -WaitEventTimeout*(VAR e: Event; timeout: INTEGER): INTEGER
  273. "SDL_WaitEventTimeout(e, timeout)";
  274. PROCEDURE -PumpEvents* "SDL_PumpEvents()";
  275. PROCEDURE -PeepEvents*(events: ARRAY OF Event; numevents, action,
  276. minType, maxType: INTEGER): INTEGER
  277. "SDL_PeepEvents(events, numevents, action, minType, maxType)";
  278. PROCEDURE -HasEvent*(type: INTEGER): INTEGER "SDL_HasEvent(type)";
  279. PROCEDURE -HasEvents*(minType, maxType: INTEGER): INTEGER
  280. "SDL_HasEvents(minType, maxType)";
  281. PROCEDURE -StartTextInput* "SDL_StartTextInput()";
  282. PROCEDURE -StopTextInput* "SDL_StopTextInput()";
  283. PROCEDURE -SetColorKey*(surface: Surface; flag: INTEGER; key: INTEGER)
  284. "SDL_SetColorKey(surface, flag, key)";
  285. PROCEDURE -MapRGB*(format: PixelFormat; r, g, b: SHORTINT): INTEGER
  286. "SDL_MapRGB(format, r, g, b)";
  287. PROCEDURE -RWFromFile*(fname, mode: ARRAY OF CHAR): SYSTEM.PTR
  288. "SDL_RWFromFile(fname, mode)";
  289. PROCEDURE -LoadBmpRW*(src: SYSTEM.PTR; freeSrc: INTEGER): Surface
  290. "(void *)SDL_LoadBMP_RW(src, freeSrc)";
  291. (* SDL Image Addon *)
  292. PROCEDURE -ImgInit*(flags: SET): SET "IMG_Init(flags)";
  293. PROCEDURE -ImgQuit* "IMG_Quit()";
  294. PROCEDURE -ImgLoad*(file: ARRAY OF CHAR): Surface
  295. "(void *)IMG_Load(file)";
  296. (* Renderer *)
  297. PROCEDURE -CreateRenderer*(win: Window; index: INTEGER;
  298. flags: SET): Renderer "(void *)SDL_CreateRenderer(win, index, flags)";
  299. PROCEDURE -SetRenderDrawColor*(renderer: Renderer; r, g, b, a: SHORTINT)
  300. "SDL_SetRenderDrawColor(renderer, r, g, b, a)";
  301. PROCEDURE -RenderClear*(renderer: Renderer) "SDL_RenderClear(renderer)";
  302. PROCEDURE -RenderPresent*(renderer: Renderer) "SDL_RenderPresent(renderer)";
  303. PROCEDURE -RenderDrawLine*(renderer: Renderer; x1, y1, x2, y2: INTEGER)
  304. "SDL_RenderDrawLine(renderer, x1, y1, x2, y2)";
  305. PROCEDURE -RenderDrawPoint*(renderer: Renderer; x, y: INTEGER)
  306. "SDL_RenderDrawPoint(renderer, x, y)";
  307. PROCEDURE -RenderDrawRect*(renderer: Renderer; VAR rect: Rect)
  308. "SDL_RenderDrawRect(renderer, rect)";
  309. PROCEDURE -RenderFillRect*(renderer: Renderer; VAR rect: Rect)
  310. "SDL_RenderFillRect(renderer, rect)";
  311. PROCEDURE -RenderSetLogicalSize*(renderer: Renderer; w, h: INTEGER)
  312. "SDL_RenderSetLogicalSize(renderer, w, h)";
  313. PROCEDURE -RenderCopy*(renderer: Renderer; texture: Texture;
  314. VAR srcRect, dstRect: Rect)
  315. "SDL_RenderCopy(renderer, texture, srcRect, dstRect)";
  316. PROCEDURE -RenderCopyNil*(renderer: Renderer; texture: Texture)
  317. "SDL_RenderCopy(renderer, texture, (void *)0, (void *)0)";
  318. (*PROCEDURE -RenderCopyEx*(renderer: Renderer; texture: Texture;
  319. VAR srcRect, dstRect: Rect; angle: REAL; center: Point; flip: SET)
  320. "SDL_RenderCopyEx(renderer, texture, srcRect, dstRect, angle, center, flip)";*)
  321. PROCEDURE -SetRenderDrawBlendMode*(renderer: Renderer; blendMode: SET)
  322. "SDL_SetRenderDrawBlendMode(renderer, blendMode)";
  323. PROCEDURE -DestroyRenderer(renderer: SYSTEM.PTR) "SDL_DestroyRenderer(renderer)";
  324. (* Misc *)
  325. PROCEDURE -Delay*(ms: INTEGER) "SDL_Delay(ms)";
  326. PROCEDURE -SetHint*(name: ARRAY OF CHAR; value: ARRAY OF CHAR)
  327. "SDL_SetHint(name, value)";
  328. PROCEDURE -ShowCursor*(toggle: SHORTINT) "SDL_ShowCursor(toggle)";
  329. PROCEDURE -GetError*(): SYSTEM.PTR "SDL_GetError()";
  330. PROCEDURE -SDLGetKeyboardState(VAR numKeys: INTEGER): SYSTEM.PTR
  331. "(void *)SDL_GetKeyboardState(numKeys)";
  332. PROCEDURE -GetDesktopDisplayMode*(displayIndex: INTEGER; VAR mode: DisplayMode)
  333. "SDL_GetDesktopDisplayMode(displayIndex, mode)";
  334. PROCEDURE -FillRect*(dst: Surface; VAR rect: Rect; color: INTEGER)
  335. "SDL_FillRect(dst, rect, color)";
  336. PROCEDURE -FillRectNil*(dst: Surface; color: INTEGER)
  337. "SDL_FillRect(dst, (void *)0, color)"; (* !FIXME *)
  338. PROCEDURE -LockSurface*(surface: Surface) "SDL_LockSurface(surface)";
  339. PROCEDURE -UnlockSurface*(surface: Surface) "SDL_UnlockSurface(surface)";
  340. PROCEDURE -FreeSurface*(surface: Surface) "SDL_FreeSurface(surface)";
  341. PROCEDURE -CreateRGBSurface*(flags, w, h, depth: INTEGER;
  342. rMask, gMask, bMask, aMask: LONGINT): Surface
  343. "(void *)SDL_CreateRGBSurface(flags, w, h, depth, rMask, gMask, bMask, aMask)";
  344. PROCEDURE -BlitSurface*(src: Surface; VAR srcRect: Rect;
  345. dst: Surface; VAR dstRect: Rect) "SDL_UpperBlit(src, srcRect, dst, dstRect)";
  346. PROCEDURE -BlitSurfaceNil*(src: Surface;
  347. dst: Surface; VAR dstRect: Rect) "SDL_UpperBlit(src, (void *)0, dst, dstRect)";
  348. PROCEDURE -BlitScaled*(src: Surface; VAR srcRect: Rect;
  349. dst: Surface; VAR dstRect: Rect) "SDL_UpperBlitScaled(src, srcRect, dst, dstRect)";
  350. PROCEDURE -ConvertSurface*(src: Surface; fmt: PixelFormat;
  351. flags: INTEGER): Surface "(void *)SDL_ConvertSurface(src, fmt, flags)";
  352. PROCEDURE -SetSurfaceColorMod*(surface: Surface; r, g, b: INTEGER)
  353. "SDL_SetSurfaceColorMod(surface, r, g, b)";
  354. PROCEDURE -GetKeyboardState*(VAR numKeys: INTEGER): KeyArray
  355. "SDL_GetKeyboardState(numKeys)";
  356. PROCEDURE -GetKeyboardStateNil*(): KeyArray "(void *)SDL_GetKeyboardState((void *)0)";
  357. PROCEDURE -GetMouseState*(VAR x, y: INTEGER): INTEGER "SDL_GetMouseState(x, y)";
  358. PROCEDURE -GetWindowFlags*(window: Window): SET "SDL_GetWindowFlags(window)";
  359. PROCEDURE -SetWindowTitle*(window: Window; title: ARRAY OF CHAR)
  360. "SDL_SetWindowTitle(window, title)";
  361. PROCEDURE -CreateTextureFromSurface*(renderer: Renderer; surface: Surface): Texture
  362. "(void *)SDL_CreateTextureFromSurface(renderer, surface)";
  363. PROCEDURE -DestroyTexture*(texture: Texture) "SDL_DestroyTexture(texture)";
  364. PROCEDURE -GetTicks*(): INTEGER "SDL_GetTicks()";
  365. PROCEDURE -SetWindowFullscreen*(win: Window; flags: SET): INTEGER
  366. "SDL_SetWindowFullscreen(win, flags)";
  367. PROCEDURE -SetSurfaceAlphaMod*(surface: Surface; alpha: CHAR): INTEGER
  368. "SDL_SetSurfaceAlphaMod(surface, alpha)";
  369. END SDL2.