Allegro.Mod 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. MODULE Allegro;
  2. (* Copyright 2019-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. systemAutodetect* = 0;
  18. systemNone* = 1; (*!FIXME*)
  19. gfxText* = -1;
  20. gfxAutodetect* = 0;
  21. gfxAutodetectFullscreen* = 1;
  22. gfxAutodetectWindowed* = 2;
  23. gfxSafe* = 3;(*!FIXME*)
  24. gfxNone* = 4;(*!FIXME*)
  25. (* Mouse Callback Flags *)
  26. mouseFlagMove* = 0;
  27. mouseFlagLeftDown* = 1;
  28. mouseFlagLeftUp* = 2;
  29. mouseFlagRightDown* = 3;
  30. mouseFlagRightUp* = 4;
  31. mouseFlagMiddleDown* = 5;
  32. mouseFlagMiddleUp* = 6;
  33. mouseFlagMoveZ* = 7;
  34. (* Color Conversion *)
  35. colorconvKeepTrans* = 4000000H;
  36. (* Draw Sprite Modes *)
  37. drawSpriteNormal* = 0;
  38. drawSpriteLit* = 1;
  39. drawSpriteTrans* = 2;
  40. (* Draw Sprite Flips *)
  41. drawSpriteNoFlip* = 0;
  42. drawSpriteHFlip* = 1;
  43. drawSpriteVFlip* = 2;
  44. drawSpriteVHFlip* = 3;
  45. TYPE
  46. INT8* = SYSTEM.INT8;
  47. INT16* = SYSTEM.INT16;
  48. Bitmap* = RECORD
  49. w*, h*, clip*, cl*, cr*, ct*, cb*: INTEGER;
  50. vtable*, writeBank*, readBank*, dat*: SYSTEM.ADDRESS;
  51. id*: INTEGER;
  52. extra*: SYSTEM.ADDRESS;
  53. xOfs*, yOfs*, seg*: INTEGER;
  54. line*: ARRAY 4000 OF SYSTEM.ADDRESS (*!FIXME*)
  55. END;
  56. PBitmap* = POINTER TO Bitmap;
  57. GfxDriver* = RECORD
  58. id*: INTEGER;
  59. name*, desc*, asciiName*: SYSTEM.ADDRESS;
  60. methods*: ARRAY 23 OF SYSTEM.ADDRESS;
  61. w*, h*, linear*: INTEGER;
  62. bankSize*, bankGran*, vidMem*, vidPhysBase*, windowed*: INTEGER
  63. END;
  64. PGfxDriver* = POINTER TO GfxDriver;
  65. Rgb* = RECORD r, g, b: CHAR END;
  66. PRgb* = POINTER TO Rgb;
  67. CloseButtonCb* = PROCEDURE;
  68. UKeyCb* = PROCEDURE(key: INTEGER; VAR scancode: INTEGER): INTEGER;
  69. ULowKeyCb* = PROCEDURE(scancode: INTEGER);
  70. MouseCb* = PROCEDURE(flags: SET(*int really*));
  71. TimerCb* = PROCEDURE;
  72. PROCEDURE -AAIncludeAllegroh0* '#include "Allegro.h0"';
  73. (* VAR *)
  74. PROCEDURE -screen*(): PBitmap
  75. "((void *)screen)";
  76. (* VAR *)
  77. PROCEDURE -gfxDriver*(): PGfxDriver
  78. "((void *)gfx_driver)";
  79. PROCEDURE -InstallAllegro*
  80. (systemId: INTEGER;
  81. errnoPtr: SYSTEM.ADDRESS;
  82. atexitPtr: SYSTEM.ADDRESS): INTEGER
  83. "install_allegro(systemId, &errno, &atexit)";
  84. PROCEDURE -Exit*
  85. "allegro_exit()";
  86. PROCEDURE -SetCloseButtonCallback*(cb: CloseButtonCb)
  87. "set_close_button_callback(cb)";
  88. PROCEDURE -SetColorDepth*(depth: INTEGER)
  89. "set_color_depth(depth)";
  90. PROCEDURE -SetGfxMode*
  91. (card, w, h, vw, vh: INTEGER): INTEGER
  92. "set_gfx_mode(card, w, h, vw, vh)";
  93. PROCEDURE -InstallKeyboard*(): INTEGER
  94. "install_keyboard()";
  95. PROCEDURE -InstallMouse*(): INTEGER
  96. "install_mouse()";
  97. PROCEDURE -InstallTimer*(): INTEGER
  98. "install_timer()";
  99. PROCEDURE -SetWindowTitle*(name: ARRAY OF CHAR)
  100. "set_window_title(name)";
  101. PROCEDURE -GetDesktopResolution*(VAR w, h: INTEGER): INTEGER
  102. "get_desktop_resolution(w, h)";
  103. PROCEDURE -Rest*(time: INTEGER)
  104. "rest(time)";
  105. PROCEDURE -USleep*(time: INTEGER) (*Can be removed if Rest is used*)
  106. "usleep(time)";
  107. PROCEDURE -VSync*
  108. "vsync()";
  109. PROCEDURE -GetKeyShifts*(VAR ks: SET)
  110. "*ks = key_shifts";
  111. PROCEDURE -KeyPressed*(): INTEGER
  112. "keypressed()";
  113. PROCEDURE -ReadKey*(): INTEGER
  114. "readkey()";
  115. PROCEDURE -UReadKey*(VAR scancode: INTEGER): INTEGER
  116. "ureadkey(scancode)";
  117. PROCEDURE -SetKeyboardUCallback*(cb: UKeyCb)
  118. "keyboard_ucallback = cb";
  119. PROCEDURE -SetKeyboardLowlevelCallback*(cb: ULowKeyCb)
  120. "keyboard_lowlevel_callback = cb";
  121. PROCEDURE -MakeCol32*(r, g, b: INTEGER): INTEGER
  122. "makecol32(r, g, b)";
  123. PROCEDURE -MakeACol32*(r, g, b, a: INTEGER): INTEGER
  124. "makeacol32(r, g, b, a)";
  125. PROCEDURE -GetPixel32*(bmp: PBitmap; x, y: INTEGER): INTEGER
  126. "_getpixel32((BITMAP *)bmp, x, y)";
  127. PROCEDURE -PutPixel32*(bmp: PBitmap; x, y, color: INTEGER)
  128. "_putpixel32((BITMAP *)bmp, x, y, color)";
  129. PROCEDURE -Line*(bmp: PBitmap; x1, y1, x2, y2, color: INTEGER)
  130. "line((BITMAP *)bmp, x1, y1, x2, y2, color)";
  131. PROCEDURE -FastLine*(bmp: PBitmap; x1, y1, x2, y2, color: INTEGER)
  132. "fastline((BITMAP *)bmp, x1, y1, x2, y2, color)";
  133. PROCEDURE -HLine*(bmp: PBitmap; x1, y, x2, color: INTEGER)
  134. "hline((BITMAP *)bmp, x1, y, x2, color)";
  135. PROCEDURE -VLine*(bmp: PBitmap; x, y1, y2, color: INTEGER)
  136. "vline((BITMAP *)bmp, x, y1, y2, color)";
  137. PROCEDURE -Rect*(bmp: PBitmap; x1, y1, x2, y2, color: INTEGER)
  138. "rect((BITMAP *)bmp, x1, y1, x2, y2, color)";
  139. PROCEDURE -RectFill*(bmp: PBitmap; x1, y1, x2, y2, color: INTEGER)
  140. "rectfill((BITMAP *)bmp, x1, y1, x2, y2, color)";
  141. PROCEDURE -ClearBitmap*(bmp: PBitmap)
  142. "clear_bitmap((BITMAP *)bmp)";
  143. PROCEDURE -ClearToColor*(bmp: PBitmap; color: INTEGER)
  144. "clear_to_color((BITMAP *)bmp, color)";
  145. PROCEDURE -Circle*(bmp: PBitmap; x, y, r, color: INTEGER)
  146. "circle((BITMAP *)bmp, x, y, r, color)";
  147. PROCEDURE -CircleFill*(bmp: PBitmap; x, y, r, color: INTEGER)
  148. "circlefill((BITMAP *)bmp, x, y, r, color)";
  149. PROCEDURE -Ellipse*(bmp: PBitmap; x, y, rx, ry, color: INTEGER)
  150. "ellipse((BITMAP *)bmp, x, y, rx, ry, color)";
  151. PROCEDURE -EllipseFill*(bmp: PBitmap; x, y, rx, ry, color: INTEGER)
  152. "ellipsefill((BITMAP *)bmp, x, y, rx, ry, color)";
  153. PROCEDURE -FloodFill*(bmp: PBitmap; x, y, color: INTEGER)
  154. "floodfill((BITMAP *)bmp, x, y, color)";
  155. PROCEDURE -GetR32*(color: INTEGER): INTEGER
  156. "getr32(color)";
  157. PROCEDURE -GetG32*(color: INTEGER): INTEGER
  158. "getg32(color)";
  159. PROCEDURE -GetB32*(color: INTEGER): INTEGER
  160. "getb32(color)";
  161. PROCEDURE -GetA32*(color: INTEGER): INTEGER
  162. "geta32(color)";
  163. (* Bitmaps *)
  164. PROCEDURE -CreateBitmap*(w, h: INTEGER): PBitmap
  165. "(Allegro_Bitmap *)create_bitmap(w, h)";
  166. PROCEDURE -CreateBitmapEx*(depth, w, h: INTEGER): PBitmap
  167. "(Allegro_Bitmap *)create_bitmap_ex(depth, w, h)";
  168. PROCEDURE -CreateSubBitmap*(parent: PBitmap; x, y, w, h: INTEGER): PBitmap
  169. "(Allegro_Bitmap *)create_sub_bitmap((BITMAP *)parent, x, y, w, h)";
  170. PROCEDURE -DestroyBitmap*(bmp: PBitmap)
  171. "destroy_bitmap((BITMAP *)bmp)";
  172. PROCEDURE -AcquireBitmap*(bmp: PBitmap)
  173. "acquire_bitmap((BITMAP *)bmp)";
  174. PROCEDURE -ReleaseBitmap*(bmp: PBitmap)
  175. "release_bitmap((BITMAP *)bmp)";
  176. PROCEDURE -LoadBitmap*(filename: ARRAY OF CHAR; pal: PRgb): PBitmap
  177. "(Allegro_Bitmap *)load_bitmap(filename, pal)";
  178. PROCEDURE -LoadPngInit*
  179. "loadpng_init()";
  180. (* Mouse *)
  181. PROCEDURE -MouseOnScreen*(): INTEGER
  182. "mouse_on_screen()";
  183. PROCEDURE -SetMouseCallback*(cb: MouseCb)
  184. "mouse_callback = (void *)cb";
  185. PROCEDURE -GetMouseX*(VAR x: INTEGER)
  186. "*x = mouse_x";
  187. PROCEDURE -GetMouseY*(VAR y: INTEGER)
  188. "*y = mouse_y";
  189. PROCEDURE -GetMouseZ*(VAR z: INTEGER)
  190. "*z = mouse_z";
  191. PROCEDURE -GetMouseW*(VAR w: INTEGER)
  192. "*w = mouse_w";
  193. PROCEDURE -GetMouseB*(VAR b: SET(*int*))
  194. "*b = mouse_b";
  195. PROCEDURE -GetMousePos*(VAR pos: INTEGER)
  196. "*pos = mouse_pos";
  197. (* Blitting *)
  198. PROCEDURE -Blit*(src, dest: PBitmap; sx, sy, dx, dy, w, h: INTEGER)
  199. "blit((BITMAP *)src, (BITMAP *)dest, sx, sy, dx, dy, w, h)";
  200. PROCEDURE -StretchBlit*
  201. (src, dest: PBitmap; sx, sy, sw, sh, dx, dy, dw, dh: INTEGER)
  202. "stretch_blit((BITMAP *)src, (BITMAP *)dest, sx, sy, sw, sh, dx, dy, dw, dh)";
  203. PROCEDURE -MaskedBlit*
  204. (src, dest: PBitmap; sx, sy, dx, dy, w, h: INTEGER)
  205. "masked_blit((BITMAP *)src, (BITMAP *)dest, sx, sy, dx, dy, w, h)";
  206. PROCEDURE -MaskedStretchBlit*
  207. (src, dest: PBitmap; sx, sy, sw, sh, dx, dy, dw, dh: INTEGER)
  208. "masked_stretch_blit((BITMAP *)src, (BITMAP *)dest, sx, sy, sw, sh, dx, dy, dw, dh)";
  209. PROCEDURE -DrawSprite*
  210. (bmp, sprite: PBitmap; x, y: INTEGER)
  211. "draw_sprite((BITMAP *)bmp, (BITMAP *)sprite, x, y)";
  212. PROCEDURE -DrawSpriteEx*
  213. (bmp, sprite: PBitmap; x, y, mode, flip: INTEGER)
  214. "draw_sprite_ex((BITMAP *)bmp, (BITMAP *)sprite, x, y, mode, flip)";
  215. PROCEDURE -DrawSpriteVFlip*
  216. (bmp, sprite: PBitmap; x, y: INTEGER)
  217. "draw_sprite_v_flip((BITMAP *)bmp, (BITMAP *)sprite, x, y)";
  218. PROCEDURE -DrawSpriteHFlip*
  219. (bmp, sprite: PBitmap; x, y: INTEGER)
  220. "draw_sprite_h_flip((BITMAP *)bmp, (BITMAP *)sprite, x, y)";
  221. PROCEDURE -DrawSpriteVHFlip*
  222. (bmp, sprite: PBitmap; x, y: INTEGER)
  223. "draw_sprite_vh_flip((BITMAP *)bmp, (BITMAP *)sprite, x, y)";
  224. PROCEDURE -DrawTransSprite*
  225. (bmp, sprite: PBitmap; x, y: INTEGER)
  226. "draw_trans_sprite((BITMAP *)bmp, (BITMAP *)sprite, x, y)";
  227. PROCEDURE -DrawCharacterEx*
  228. (bmp, sprite: PBitmap; x, y, color, bg: INTEGER)
  229. "draw_character_ex((BITMAP *)bmp, (BITMAP *)sprite, x, y, color, bg)";
  230. PROCEDURE -DrawLitSprite*
  231. (bmp, sprite: PBitmap; x, y, color: INTEGER)
  232. "draw_lit_sprite((BITMAP *)bmp, (BITMAP *)sprite, x, y, color)";
  233. PROCEDURE -DrawGouraudSprite*
  234. (bmp, sprite: PBitmap; x, y, c1, c2, c3, c4: INTEGER)
  235. "draw_gouraud_sprite((BITMAP *)bmp, (BITMAP *)sprite, x, y, c1, c2, c3, c4)";
  236. PROCEDURE -SetColorConversion*(mode: INTEGER)
  237. "set_color_conversion(mode)";
  238. PROCEDURE -SetAlphaBlender*
  239. "set_alpha_blender()";
  240. PROCEDURE -SetColorBlender*(r, g, b, a: INTEGER)
  241. "set_color_blender(r, g, b, a)";
  242. PROCEDURE -SetHueBlender*(r, g, b, a: INTEGER)
  243. "set_hue_blender(r, g, b, a)";
  244. PROCEDURE -SetLuminanceBlender*(r, g, b, a: INTEGER)
  245. "set_luminance_blender(r, g, b, a)";
  246. PROCEDURE -SetTransBlender*(r, g, b, a: INTEGER)
  247. "set_trans_blender(r, g, b, a)";
  248. (* Timer *)
  249. PROCEDURE -InstallInt*
  250. (cb: TimerCb; speed: INTEGER)
  251. "install_int((void *)cb, speed)";
  252. (* Atomic *)
  253. PROCEDURE -AtomicZero*()
  254. "_al_atomic_int = 0";
  255. PROCEDURE -AtomicInc*()
  256. "_al_atomic_int++";
  257. PROCEDURE -AtomicDec*()
  258. "_al_atomic_int--";
  259. PROCEDURE -GetAtomic*(): INTEGER
  260. "_al_atomic_int";
  261. END Allegro.