8 {$DEFINE LibraryLibAllegroDecl := cdecl}
9 {$DEFINE LibraryLibAllegroImp := cdecl; external}
10 {$DEFINE LibraryLibAllegroVar := cvar; external}
11 {$ELSEIF DEFINED(WINDOWS)}
12 {$DEFINE LibraryLibAllegroDecl := cdecl}
13 {$DEFINE LibraryLibAllegroImp := cdecl; external 'alleg42.dll'}
14 {$DEFINE LibraryLibAllegroVar := external 'alleg42.dll'}
16 {$DEFINE LibraryLibAllegroDecl := cdecl}
17 {$DEFINE LibraryLibAllegroImp := cdecl; external 'alleg'}
18 {$DEFINE LibraryLibAllegroVar := cvar; external 'alleg'}
28 {$IF DEFINED(GO32V2) OR DEFINED(WINDOWS)}
30 ALEGRO_SUB_VERSION
= 2;
31 ALLEGRO_WIP_VERSION
= 3;
32 ALLEGRO_VERSION_STR
= '4.2.3';
35 ALEGRO_SUB_VERSION
= 4;
36 ALLEGRO_WIP_VERSION
= 2;
37 ALLEGRO_VERSION_STR
= '4.4.2';
40 SYSTEM_AUTODETECT
= 0;
41 SYSTEM_NONE
= $4e4f4e45;
45 GFX_AUTODETECT_FULLSCREEN
= 1;
46 GFX_AUTODETECT_WINDOWED
= 2;
51 DRAW_MODE_COPY_PATTERN
= 2;
52 DRAW_MODE_SOLID_PATTERN
= 3;
53 DRAW_MODE_MASKED_PATTERN
= 4;
155 KEY_CIRCUMFLEX
= 100;
158 KEY_EQUALS_PAD
= 103;
185 KB_SHIFT_FLAG
= $0001;
186 KB_CTRL_FLAG
= $0002;
188 KB_LWIN_FLAG
= $0008;
189 KB_RWIN_FLAG
= $0010;
190 KB_MENU_FLAG
= $0020;
191 KB_COMMAND_FLAG
= $0040;
192 KB_SCROLOCK_FLAG
= $0100;
193 KB_NUMLOCK_FLAG
= $0200;
194 KB_CAPSLOCK_FLAG
= $0400;
195 KB_INALTSEQ_FLAG
= $0800;
196 KB_ACCENT1_FLAG
= $1000;
197 KB_ACCENT2_FLAG
= $2000;
198 KB_ACCENT3_FLAG
= $4000;
199 KB_ACCENT4_FLAG
= $8000;
201 ALLEGRO_ERROR_SIZE
= 256;
209 cl
, cr
, ct
, cb
: cint
;
210 vtable
: Pointer; {PGFX_VTABLE}
222 PGFX_MODE
= ^GFX_MODE
;
224 width
, height
, bpp
: cint
;
227 PGFX_MODE_LIST
= ^GFX_MODE_LIST
;
228 GFX_MODE_LIST
= record
234 r
, g
, b
, filler
: cuchar
;
237 PALETTE
= array [0..PAL_SIZE
- 1] of RGB
;
241 data
: array [0..PAL_SIZE
- 1, 0..PAL_SIZE
- 1] of cuchar
;
243 PCOLOR_MAP_T
= ^COLOR_MAP_T
;
245 KeyboardCallback
= procedure (scancode
: cint
); LibraryLibAllegroDecl
;
246 AtExitCallback
= procedure; LibraryLibAllegroDecl
;
247 AtExitFunction
= function (func
: AtExitCallback
): cint
; LibraryLibAllegroDecl
;
248 TimerIntCallback
= procedure; LibraryLibAllegroDecl
;
249 QuitCallback
= procedure; LibraryLibAllegroDecl
;
250 CreateTableCallback
= procedure (pos
: cint
); LibraryLibAllegroDecl
;
253 allegro_id
: array [0..ALLEGRO_ERROR_SIZE
] of char; LibraryLibAllegroVar
;
254 allegro_error
: array [0..ALLEGRO_ERROR_SIZE
] of char; LibraryLibAllegroVar
;
255 keyboard_lowlevel_callback
: KeyboardCallback
; LibraryLibAllegroVar
;
256 screen
: PBITMAP
; LibraryLibAllegroVar
;
257 black_palette
: PALETTE
; LibraryLibAllegroVar
;
258 desktop_palette
: PALETTE
; LibraryLibAllegroVar
;
259 default_palette
: PALETTE
; LibraryLibAllegroVar
;
260 _current_palette
: PALETTE
; LibraryLibAllegroVar
;
261 key_shifts
: cint
; LibraryLibAllegroVar
;
262 color_map
: PCOLOR_MAP_T
; LibraryLibAllegroVar
;
264 function get_desktop_resolution (width
, height
: Pcint
): cint
; LibraryLibAllegroImp
;
265 function get_gfx_mode_list (card
: cint
): PGFX_MODE_LIST
; LibraryLibAllegroImp
;
266 procedure destroy_gfx_mode_list (gfx_mode_list
: PGFX_MODE_LIST
); LibraryLibAllegroImp
;
267 function set_gfx_mode (card
, w
, h
, v_w
, v_h
: cint
): cint
; LibraryLibAllegroImp
;
268 procedure set_window_title (name
: Pchar); LibraryLibAllegroImp
;
269 function create_video_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
270 procedure destroy_bitmap (bitmap
: PBITMAP
); LibraryLibAllegroImp
;
271 function show_video_bitmap (bitmap
: PBITMAP
): cint
; LibraryLibAllegroImp
;
272 function poll_keyboard
: cint
; LibraryLibAllegroImp
;
273 function install_keyboard
: cint
; LibraryLibAllegroImp
;
274 procedure remove_keyboard
; LibraryLibAllegroImp
;
275 function _install_allegro_version_check (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
; version
: cint
): cint
; LibraryLibAllegroImp
;
277 function install_timer
: cint
; LibraryLibAllegroImp
;
278 procedure remove_timer
; LibraryLibAllegroImp
;
279 procedure set_keyboard_rate (delay
, _repeat
: cint
); LibraryLibAllegroImp
;
280 function makeacol (r
, g
, b
, a
: cint
): cint
; LibraryLibAllegroImp
;
281 function makecol (r
, g
, b
: cint
): cint
; LibraryLibAllegroImp
;
282 procedure clear_to_color (source
: PBITMAP
; color
: cint
); LibraryLibAllegroImp
;
283 procedure putpixel (bmp
: PBITMAP
; x
, y
, color
: cint
); LibraryLibAllegroImp
;
284 function getpixel (bmp
: PBITMAP
; x
, y
: cint
): cint
; LibraryLibAllegroImp
;
285 procedure fastline (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
286 procedure draw_sprite (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
287 procedure draw_sprite_v_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
288 procedure draw_sprite_h_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
289 procedure draw_sprite_vh_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
290 procedure rect (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
291 procedure rectfill (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
292 function create_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
293 function create_system_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
294 procedure allegro_exit
; LibraryLibAllegroImp
;
296 procedure rest (time
: cuint
); LibraryLibAllegroImp
;
297 function install_int_ex (proc
: TimerIntCallback
; speed
: clong
): cint
; LibraryLibAllegroImp
;
298 procedure blit (source
, dest
: PBITMAP
; source_x
, source_y
, dest_x
, dest_y
, width
, height
: cint
); LibraryLibAllegroImp
;
299 procedure masked_blit (source
, dest
: PBITMAP
; source_x
, source_y
, dest_x
, dest_y
, width
, height
: cint
); LibraryLibAllegroImp
;
300 procedure set_clip_rect (bitmap
: PBITMAP
; x1
, y1
, x2
, y2
: cint
); LibraryLibAllegroImp
;
301 procedure get_clip_rect (bitmap
: PBITMAP
; var x1
, y1
, x2
, y2
: cint
); LibraryLibAllegroImp
;
303 procedure set_palette (const p
: PALETTE
); LibraryLibAllegroImp
;
304 procedure set_color_depth (depth
: cint
); LibraryLibAllegroImp
;
305 function set_close_button_callback (proc
: QuitCallback
): cint
; LibraryLibAllegroImp
;
307 // function _install_allegro (system_id: cint; errno_prt: Pcint; AtExitFunction): cint; LibraryLibAllegroImp;
309 procedure acquire_bitmap (bmp
: PBITMAP
); LibraryLibAllegroImp
;
310 procedure release_bitmap (bmp
: PBITMAP
); LibraryLibAllegroImp
;
311 procedure acquire_screen
; LibraryLibAllegroImp
;
312 procedure release_screen
; LibraryLibAllegroImp
;
314 procedure rotate_sprite (bmp
, sprite
: PBITMAP
; x
, y
: cint
; a
: cint32
); LibraryLibAllegroImp
;
315 procedure rotate_sprite_v_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
; a
: cint32
); LibraryLibAllegroImp
;
317 function scancode_to_ascii (scancode
: cint
): cint
; LibraryLibAllegroImp
;
318 function scancode_to_name (scancode
: cint
): PChar; LibraryLibAllegroImp
;
320 procedure drawing_mode (mode
: cint
; pattern
: PBITMAP
; x_anchor
, y_anchor
: cint
); LibraryLibAllegroImp
;
322 procedure set_trans_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
323 procedure set_alpha_blender
; LibraryLibAllegroImp
;
324 procedure set_write_alpha_blender
; LibraryLibAllegroImp
;
325 procedure set_add_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
326 procedure set_burn_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
327 procedure set_color_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
328 procedure set_difference_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
329 procedure set_dissolve_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
330 procedure set_dodge_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
331 procedure set_hue_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
332 procedure set_invert_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
333 procedure set_luminance_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
334 procedure set_multiply_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
335 procedure set_saturation_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
336 procedure set_screen_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
338 function getr (col
: cint
): cint
; LibraryLibAllegroImp
;
339 function getg (col
: cint
): cint
; LibraryLibAllegroImp
;
340 function getb (col
: cint
): cint
; LibraryLibAllegroImp
;
341 function geta (col
: cint
): cint
; LibraryLibAllegroImp
;
343 procedure create_light_table (table
: PCOLOR_MAP_T
; const pal
: PALETTE
; r
, g
, b
: cint
; callback
: CreateTableCallback
); LibraryLibAllegroImp
;
344 procedure create_trans_table (table
: PCOLOR_MAP_T
; const pal
: PALETTE
; r
, g
, b
: cint
; callback
: CreateTableCallback
); LibraryLibAllegroImp
;
347 function install_allegro (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
): cint
; inline;
348 function allegro_init
: cint
; inline;
350 function TIMERS_PER_SECOND
: clong
; inline;
351 function SECS_TO_TIMER (x
: clong
): clong
; inline;
352 function MSEC_TO_TIMER (x
: clong
): clong
; inline;
353 function BPS_TO_TIMER (x
: clong
): clong
; inline;
354 function BPM_TO_TIMER (x
: clong
): clong
; inline;
359 {$IF DEFINED(GO32V2)}
360 function atexit (func
: AtexitCallback
): cint
; cdecl; external;
361 {$ELSEIF DEFINED(WINDOWS)}
362 function atexit (func
: AtexitCallback
): cint
; cdecl; external 'msvcrt.dll';
364 function atexit (func
: AtexitCallback
): cint
; cdecl; external 'c';
367 function install_allegro (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
): cint
; inline;
369 install_allegro
:= _install_allegro_version_check(system_id
, errno_ptr
, atexit_ptr
, (ALLEGRO_VERSION
shl 16) OR (ALEGRO_SUB_VERSION
shl 8) OR ALLEGRO_WIP_VERSION
)
372 function allegro_init
: cint
; inline;
374 (* original macros sets libc errno? *)
375 allegro_init
:= _install_allegro_version_check(SYSTEM_AUTODETECT
, nil, @atexit
, (ALLEGRO_VERSION
shl 16) OR (ALEGRO_SUB_VERSION
shl 8) OR ALLEGRO_WIP_VERSION
)
378 function TIMERS_PER_SECOND
: clong
; inline;
380 TIMERS_PER_SECOND
:= 1193181
383 function SECS_TO_TIMER (x
: clong
): clong
; inline;
385 SECS_TO_TIMER
:= x
* TIMERS_PER_SECOND
388 function MSEC_TO_TIMER (x
: clong
): clong
; inline;
390 MSEC_TO_TIMER
:= x
* TIMERS_PER_SECOND
div 1000
393 function BPS_TO_TIMER (x
: clong
): clong
; inline;
395 BPS_TO_TIMER
:= TIMERS_PER_SECOND
div x
398 function BPM_TO_TIMER (x
: clong
): clong
; inline;
400 BPM_TO_TIMER
:= 60 * TIMERS_PER_SECOND
div x
404 function acquire_bitmap (bmp: PBITMAP); inline;
407 if bmp.vtable.acquire <> nil then
408 bmp.vtable.acquire(bmp)