123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- MODULE SDL2;
- (* Copyright 2017-2020 Arthur Yefimov
- This file is part of Free Oberon.
- Free Oberon is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- Free Oberon is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Foobar. If not, see <http://www.gnu.org/licenses/>.
- *)
- IMPORT SYSTEM;
- CONST
- (* SDL_Init Flags *)
- initTimer* = 0;
- initAudio* = 4;
- initVideo* = 5;
- initJoystick* = 9;
- initHaptic* = 12;
- initGameController* = 13;
- initEvents* = 14;
- initEverything* = {initTimer, initAudio, initVideo, initJoystick,
- initHaptic, initGameController, initEvents};
- (* SDL_CreateWindow Flags *)
- windowFullscreen* = 0;
- windowOpenGL* = 1;
- windowShown* = 2;
- windowHidden* = 3;
- windowBorderless* = 4;
- windowResizable* = 5;
- windowMinimized* = 6;
- windowMaximized* = 7;
- windowInputGrabbed* = 8;
- windowInputFocus* = 9;
- windowMouseFocus* = 10;
- windowFullscreenDesktop* = {windowFullscreen, 12};
- windowForeign* = 11;
- windowAllowHighDPI* = 13;
- (* Window Position *)
- windowPosUndefined* = 1FFF0000H;
- (* Event Types *)
- firstEvent* = 0;
- quit* = 100H;
- windowEvent* = 200H;
- keyDown* = 300H;
- keyUp* = 301H;
- textEditing* = 302H;
- textInput* = 303H;
- mouseMotion* = 400H;
- mouseButtonDown* = 401H;
- mouseButtonUp* = 402H;
- mouseWheel* = 403H;
- userEvent* = 8000H;
- lastEvent* = 0FFFFH;
- (* Key Mods *)
- kmodLShift* = 0;
- kmodRShift* = 1;
- kmodLCtrl* = 6;
- kmodRCtrl* = 7;
- kmodLAlt* = 8;
- kmodRAlt* = 9;
- kmodLGui* = 10;
- kmodRGui* = 11;
- kmodNum* = 12;
- kmodCaps* = 13;
- kmodMode* = 14;
- kmodReserved* = 15;
- kmodCtrl* = {kmodLCtrl, kmodRCtrl};
- kmodShift* = {kmodLShift, kmodRShift};
- kmodAlt* = {kmodLAlt, kmodRAlt};
- kmodGui* = {kmodLGui, kmodRGui};
- (* Hints (for SDL_Hint) *)
- hintFramebufferAcceleration* = 'SDL_FRAMEBUFFER_ACCELERATION';
- hintRenderDriver* = 'SDL_RENDER_DRIVER';
- hintRenderOpenglShaders* = 'SDL_RENDER_OPENGL_SHADERS';
- hintRenderDirect3dThreadsafe* = 'SDL_RENDER_DIRECT3D_THREAD_SAFE';
- hintRenderScaleQuality* = 'SDL_RENDER_SCALE_QUALITY';
- hintRenderVsync* = 'SDL_RENDER_VSYNC';
- hintVideoAllowScreensaver* = 'SDL_VIDEO_ALLOW_SCREENSAVER';
- hintVideoX11Xvidmode* = 'SDL_VIDEO_X11_XVIDMODE';
- hintVideoX11Xinerama* = 'SDL_VIDEO_X11_XINERAMA';
- hintVideoX11Xrandr* = 'SDL_VIDEO_X11_XRANDR';
- hintGrabKeyboard* = 'SDL_GRAB_KEYBOARD';
- hintMouseRelativeModeWarp* = 'SDL_MOUSE_RELATIVE_MODE_WARP';
- hintVideoMinimizeOnFocusLoss* = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
- hintIdleTimerDisabled* = 'SDL_IOSIDLETIMERDISABLED';
- hintOrientations* = 'SDL_IOSORIENTATIONS'; (* !FIXME add _ lol *)
- hintAccelerometerAsJoystick* = 'SDL_ACCELEROMETERASJOYSTICK';
- hintXinputEnabled* = 'SDL_XINPUTENABLED';
- hintGamecontrollerconfig* = 'SDL_GAMECONTROLLERCONFIG';
- hintJoystickAllowBgEvents* = 'SDL_JOYSTICKALLOWBACKGROUNDEVENTS';
- hintAllowTopmost* = 'SDL_ALLOWTOPMOST';
- hintTimerResolution* = 'SDL_TIMERRESOLUTION';
- hintVideoHighDpiDisabled* = 'SDL_VIDEO_HIGHDPIDISABLED';
- hintMacCtrlClickEmulateRClick* = 'SDL_MACCTRLCLICKEMULATERIGHTCLICK';
- hintVideoWinD3dCompiler* = 'SDL_VIDEO_WIND3DCOMPILER';
- hintVideoWindowSharePixelFormat* = 'SDL_VIDEO_WINDOWSHAREPIXELFORMAT';
- hintVideoMacFullscreenSpaces* = 'SDL_VIDEO_MACFULLSCREENSPACES';
- (* Renderer Flags *)
- rendererSoftware* = 0;
- rendererAccelerated* = 1;
- rendererPresentVsync* = 2;
- rendererTargetTexture* = 3;
- (* Flip Flags*)
- flipHorizontal* = 0;
- flipVertical* = 1;
- (* ImgInit Flags *)
- imgInitJpg* = 0;
- imgInitPng* = 1;
- imgInitTif* = 2;
- imgInitWebp* = 3;
- (* Blend Modes *)
- blendModeBlend* = 0;
- blendModeAdd* = 1;
- blendModeMod* = 2;
- (* Mouse Buttons *)
- buttonLeft* = 1;
- buttonMiddle* = 2;
- buttonRight* = 3;
- buttonWheelUp* = 4;
- buttonWheelDown* = 5;
- buttonX1* = 6;
- buttonX2* = 7;
- (* Text Editing and Input *)
- textEditingEventTextSize* = 32;
- textInputEventTextSize* = 32;
- (* PeepEvents actions *)
- addEvent* = 0;
- peekEvent* = 1;
- getEvent* = 2;
- TYPE
- INT8* = SYSTEM.INT8;
- INT16* = SYSTEM.INT16;
- Window* = SYSTEM.PTR;
- Renderer* = SYSTEM.PTR;
- WindowEvent* = POINTER [1] TO WindowEventDesc;
- WindowEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- event*: INT16;
- data1*: INTEGER;
- data2*: INTEGER;
- END;
- Keysym* = RECORD
- scancode*: INTEGER;
- sym*: INTEGER;
- mod*: SHORTINT;
- END;
- KeyboardEvent* = POINTER [1] TO KeyboardEventDesc;
- KeyboardEventDesc = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- state*: INT16;
- repeat*: INT16;
- keysym*: Keysym;
- padding1: ARRAY 100 OF CHAR
- END;
- MouseMotionEvent* = POINTER [1] TO MouseMotionEventDesc;
- MouseMotionEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- which*: INTEGER;
- state*: INTEGER;
- x*: INTEGER;
- y*: INTEGER;
- xRel*: INTEGER;
- yRel*: INTEGER;
- END;
- MouseButtonEvent* = POINTER [1] TO MouseButtonEventDesc;
- MouseButtonEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- which*: INTEGER;
- button*: INT8;
- state*: INT8;
- clicks*: INT8;
- padding1: INT8;
- x*: INTEGER;
- y*: INTEGER;
- END;
- MouseWheelEvent* = POINTER [1] TO MouseWheelEventDesc;
- MouseWheelEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- which*: INTEGER;
- x*: INTEGER;
- y*: INTEGER;
- direction*: INTEGER;
- END;
- TextEditingEvent* = POINTER [1] TO TextEditingEventDesc;
- TextEditingEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- text*: ARRAY textEditingEventTextSize OF CHAR;
- start*: INTEGER;
- length*: INTEGER;
- END;
- TextInputEvent* = POINTER [1] TO TextInputEventDesc;
- TextInputEventDesc* = RECORD
- type*: INTEGER;
- timestamp*: INTEGER;
- windowID*: INTEGER;
- text*: ARRAY textInputEventTextSize OF CHAR;
- END;
- Event* = RECORD
- type*: INTEGER;
- padding1: ARRAY 124 OF CHAR
- END;
- Rect* = RECORD
- x*, y*, w*, h*: INTEGER
- END;
- Palette* = POINTER [1] TO PaletteDesc;
- PaletteDesc* = RECORD
- nColors: INTEGER;
- colors: SYSTEM.PTR;
- version: INTEGER;
- refCount: INTEGER
- END;
- DisplayMode* = RECORD
- format*: INTEGER;
- w*, h*: INTEGER;
- refreshRate*: INTEGER;
- driverData: SYSTEM.PTR
- END;
- PixelFormat* = POINTER [1] TO PixelFormatDesc;
- PixelFormatDesc* = RECORD
- format*: INTEGER;
- palette*: Palette;
- bitsPerPixel*: INT16;
- bytesPerPixel*: INT16;
- rMask*: INTEGER;
- gMask*: INTEGER;
- aMask*: INTEGER;
- padding1: ARRAY 16 OF CHAR
- END;
- Surface* = POINTER [1] TO SurfaceDesc;
- SurfaceDesc* = RECORD
- flags: INTEGER;
- format*: PixelFormat;
- w*, h*, pitch*: INTEGER;
- pixels*: SYSTEM.PTR;
- userData*: SYSTEM.PTR;
- locked: INTEGER;
- lockData: SYSTEM.PTR;
- clipRect*: Rect;
- map: SYSTEM.PTR;
- refCount*: INTEGER
- END;
- Texture* = SYSTEM.PTR;
- KeyArray* = POINTER [1] TO ARRAY 1024 OF BOOLEAN;
- PROCEDURE -AAIncludeSDL2h0* '#include "SDL2.h0"';
- PROCEDURE -Init*(flags: SET): SHORTINT "SDL_Init(flags)";
- PROCEDURE -Quit* "SDL_Quit()";
- PROCEDURE -CreateWindow*(title: ARRAY OF CHAR; x, y, w, h: INTEGER;
- flags: SET): Window "(void *)SDL_CreateWindow(title, x, y, w, h, flags)";
- PROCEDURE -GetWindowSize*(window: Window; VAR w, h: INTEGER)
- "SDL_GetWindowSize(window, w, h)";
- PROCEDURE -SetWindowSize*(window: Window; w, h: INTEGER)
- "SDL_SetWindowSize(window, w, h)";
- PROCEDURE -DestroyWindow(win: SYSTEM.PTR) "SDL_DestroyWindow(win)";
- PROCEDURE -PollEvent*(VAR e: Event): INTEGER "SDL_PollEvent(e)";
- PROCEDURE -WaitEvent*(VAR e: Event): INTEGER "SDL_WaitEvent(e)";
- PROCEDURE -WaitEventTimeout*(VAR e: Event; timeout: INTEGER): INTEGER
- "SDL_WaitEventTimeout(e, timeout)";
- PROCEDURE -PumpEvents* "SDL_PumpEvents()";
- PROCEDURE -PeepEvents*(events: ARRAY OF Event; numevents, action,
- minType, maxType: INTEGER): INTEGER
- "SDL_PeepEvents(events, numevents, action, minType, maxType)";
- PROCEDURE -HasEvent*(type: INTEGER): INTEGER "SDL_HasEvent(type)";
- PROCEDURE -HasEvents*(minType, maxType: INTEGER): INTEGER
- "SDL_HasEvents(minType, maxType)";
- PROCEDURE -StartTextInput* "SDL_StartTextInput()";
- PROCEDURE -StopTextInput* "SDL_StopTextInput()";
- PROCEDURE -SetColorKey*(surface: Surface; flag: INTEGER; key: INTEGER)
- "SDL_SetColorKey(surface, flag, key)";
- PROCEDURE -MapRGB*(format: PixelFormat; r, g, b: SHORTINT): INTEGER
- "SDL_MapRGB(format, r, g, b)";
- PROCEDURE -RWFromFile*(fname, mode: ARRAY OF CHAR): SYSTEM.PTR
- "SDL_RWFromFile(fname, mode)";
- PROCEDURE -LoadBmpRW*(src: SYSTEM.PTR; freeSrc: INTEGER): Surface
- "(void *)SDL_LoadBMP_RW(src, freeSrc)";
- (* SDL Image Addon *)
- PROCEDURE -ImgInit*(flags: SET): SET "IMG_Init(flags)";
- PROCEDURE -ImgQuit* "IMG_Quit()";
- PROCEDURE -ImgLoad*(file: ARRAY OF CHAR): Surface
- "(void *)IMG_Load(file)";
- (* Renderer *)
- PROCEDURE -CreateRenderer*(win: Window; index: INTEGER;
- flags: SET): Renderer "(void *)SDL_CreateRenderer(win, index, flags)";
- PROCEDURE -SetRenderDrawColor*(renderer: Renderer; r, g, b, a: SHORTINT)
- "SDL_SetRenderDrawColor(renderer, r, g, b, a)";
- PROCEDURE -RenderClear*(renderer: Renderer) "SDL_RenderClear(renderer)";
- PROCEDURE -RenderPresent*(renderer: Renderer) "SDL_RenderPresent(renderer)";
- PROCEDURE -RenderDrawLine*(renderer: Renderer; x1, y1, x2, y2: INTEGER)
- "SDL_RenderDrawLine(renderer, x1, y1, x2, y2)";
- PROCEDURE -RenderDrawPoint*(renderer: Renderer; x, y: INTEGER)
- "SDL_RenderDrawPoint(renderer, x, y)";
- PROCEDURE -RenderDrawRect*(renderer: Renderer; VAR rect: Rect)
- "SDL_RenderDrawRect(renderer, rect)";
- PROCEDURE -RenderFillRect*(renderer: Renderer; VAR rect: Rect)
- "SDL_RenderFillRect(renderer, rect)";
- PROCEDURE -RenderSetLogicalSize*(renderer: Renderer; w, h: INTEGER)
- "SDL_RenderSetLogicalSize(renderer, w, h)";
- PROCEDURE -RenderCopy*(renderer: Renderer; texture: Texture;
- VAR srcRect, dstRect: Rect)
- "SDL_RenderCopy(renderer, texture, srcRect, dstRect)";
- PROCEDURE -RenderCopyNil*(renderer: Renderer; texture: Texture)
- "SDL_RenderCopy(renderer, texture, (void *)0, (void *)0)";
- (*PROCEDURE -RenderCopyEx*(renderer: Renderer; texture: Texture;
- VAR srcRect, dstRect: Rect; angle: REAL; center: Point; flip: SET)
- "SDL_RenderCopyEx(renderer, texture, srcRect, dstRect, angle, center, flip)";*)
- PROCEDURE -SetRenderDrawBlendMode*(renderer: Renderer; blendMode: SET)
- "SDL_SetRenderDrawBlendMode(renderer, blendMode)";
- PROCEDURE -DestroyRenderer(renderer: SYSTEM.PTR) "SDL_DestroyRenderer(renderer)";
- (* Misc *)
- PROCEDURE -Delay*(ms: INTEGER) "SDL_Delay(ms)";
- PROCEDURE -SetHint*(name: ARRAY OF CHAR; value: ARRAY OF CHAR)
- "SDL_SetHint(name, value)";
- PROCEDURE -ShowCursor*(toggle: SHORTINT) "SDL_ShowCursor(toggle)";
- PROCEDURE -GetError*(): SYSTEM.PTR "SDL_GetError()";
- PROCEDURE -SDLGetKeyboardState(VAR numKeys: INTEGER): SYSTEM.PTR
- "(void *)SDL_GetKeyboardState(numKeys)";
- PROCEDURE -GetDesktopDisplayMode*(displayIndex: INTEGER; VAR mode: DisplayMode)
- "SDL_GetDesktopDisplayMode(displayIndex, mode)";
- PROCEDURE -FillRect*(dst: Surface; VAR rect: Rect; color: INTEGER)
- "SDL_FillRect(dst, rect, color)";
- PROCEDURE -FillRectNil*(dst: Surface; color: INTEGER)
- "SDL_FillRect(dst, (void *)0, color)"; (* !FIXME *)
- PROCEDURE -LockSurface*(surface: Surface) "SDL_LockSurface(surface)";
- PROCEDURE -UnlockSurface*(surface: Surface) "SDL_UnlockSurface(surface)";
- PROCEDURE -FreeSurface*(surface: Surface) "SDL_FreeSurface(surface)";
- PROCEDURE -CreateRGBSurface*(flags, w, h, depth: INTEGER;
- rMask, gMask, bMask, aMask: LONGINT): Surface
- "(void *)SDL_CreateRGBSurface(flags, w, h, depth, rMask, gMask, bMask, aMask)";
- PROCEDURE -BlitSurface*(src: Surface; VAR srcRect: Rect;
- dst: Surface; VAR dstRect: Rect) "SDL_UpperBlit(src, srcRect, dst, dstRect)";
- PROCEDURE -BlitSurfaceNil*(src: Surface;
- dst: Surface; VAR dstRect: Rect) "SDL_UpperBlit(src, (void *)0, dst, dstRect)";
- PROCEDURE -BlitScaled*(src: Surface; VAR srcRect: Rect;
- dst: Surface; VAR dstRect: Rect) "SDL_UpperBlitScaled(src, srcRect, dst, dstRect)";
- PROCEDURE -ConvertSurface*(src: Surface; fmt: PixelFormat;
- flags: INTEGER): Surface "(void *)SDL_ConvertSurface(src, fmt, flags)";
- PROCEDURE -SetSurfaceColorMod*(surface: Surface; r, g, b: INTEGER)
- "SDL_SetSurfaceColorMod(surface, r, g, b)";
- PROCEDURE -GetKeyboardState*(VAR numKeys: INTEGER): KeyArray
- "SDL_GetKeyboardState(numKeys)";
- PROCEDURE -GetKeyboardStateNil*(): KeyArray "(void *)SDL_GetKeyboardState((void *)0)";
- PROCEDURE -GetMouseState*(VAR x, y: INTEGER): INTEGER "SDL_GetMouseState(x, y)";
- PROCEDURE -GetWindowFlags*(window: Window): SET "SDL_GetWindowFlags(window)";
- PROCEDURE -SetWindowTitle*(window: Window; title: ARRAY OF CHAR)
- "SDL_SetWindowTitle(window, title)";
- PROCEDURE -CreateTextureFromSurface*(renderer: Renderer; surface: Surface): Texture
- "(void *)SDL_CreateTextureFromSurface(renderer, surface)";
- PROCEDURE -DestroyTexture*(texture: Texture) "SDL_DestroyTexture(texture)";
- PROCEDURE -GetTicks*(): INTEGER "SDL_GetTicks()";
- PROCEDURE -SetWindowFullscreen*(win: Window; flags: SET): INTEGER
- "SDL_SetWindowFullscreen(win, flags)";
- PROCEDURE -SetSurfaceAlphaMod*(surface: Surface; alpha: CHAR): INTEGER
- "SDL_SetSurfaceAlphaMod(surface, alpha)";
- END SDL2.
|