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
233 PGFX_DRIVER_T
= ^GFX_DRIVER_T
;
234 GFX_DRIVER_T
= record
244 set_palette
: Pointer;
245 request_scroll
: Pointer;
246 poll_scroll
: Pointer;
247 enable_triple_buffer
: Pointer;
248 create_video_bitmap
: Pointer;
249 destroy_video_bitmap
: Pointer;
250 show_video_bitmap
: Pointer;
251 request_video_bitmap
: Pointer;
252 create_system_bitmap
: Pointer;
253 destroy_system_bitmap
: Pointer;
254 set_mouse_sprite
: Pointer;
258 drawing_mode
: Pointer;
259 save_video_state
: Pointer;
260 restore_video_state
: Pointer;
261 set_blender_mode
: Pointer;
262 fetch_mode_list
: function (): PGFX_MODE_LIST
; cdecl;
268 vid_phys_base
: clong
;
273 r
, g
, b
, filler
: cuchar
;
276 PALETTE
= array [0..PAL_SIZE
- 1] of RGB
;
280 data
: array [0..PAL_SIZE
- 1, 0..PAL_SIZE
- 1] of cuchar
;
282 PCOLOR_MAP_T
= ^COLOR_MAP_T
;
284 KeyboardCallback
= procedure (scancode
: cint
); LibraryLibAllegroDecl
;
285 AtExitCallback
= procedure; LibraryLibAllegroDecl
;
286 AtExitFunction
= function (func
: AtExitCallback
): cint
; LibraryLibAllegroDecl
;
287 TimerIntCallback
= procedure; LibraryLibAllegroDecl
;
288 QuitCallback
= procedure; LibraryLibAllegroDecl
;
289 CreateTableCallback
= procedure (pos
: cint
); LibraryLibAllegroDecl
;
292 allegro_id
: array [0..ALLEGRO_ERROR_SIZE
] of char; LibraryLibAllegroVar
;
293 allegro_error
: array [0..ALLEGRO_ERROR_SIZE
] of char; LibraryLibAllegroVar
;
294 keyboard_lowlevel_callback
: KeyboardCallback
; LibraryLibAllegroVar
;
295 screen
: PBITMAP
; LibraryLibAllegroVar
;
296 black_palette
: PALETTE
; LibraryLibAllegroVar
;
297 desktop_palette
: PALETTE
; LibraryLibAllegroVar
;
298 default_palette
: PALETTE
; LibraryLibAllegroVar
;
299 _current_palette
: PALETTE
; LibraryLibAllegroVar
;
300 key_shifts
: cint
; LibraryLibAllegroVar
;
301 color_map
: PCOLOR_MAP_T
; LibraryLibAllegroVar
;
302 gfx_driver
: PGFX_DRIVER_T
; LibraryLibAllegroVar
;
304 function get_desktop_resolution (width
, height
: Pcint
): cint
; LibraryLibAllegroImp
;
305 function get_gfx_mode_list (card
: cint
): PGFX_MODE_LIST
; LibraryLibAllegroImp
;
306 procedure destroy_gfx_mode_list (gfx_mode_list
: PGFX_MODE_LIST
); LibraryLibAllegroImp
;
307 function set_gfx_mode (card
, w
, h
, v_w
, v_h
: cint
): cint
; LibraryLibAllegroImp
;
308 procedure set_window_title (name
: Pchar); LibraryLibAllegroImp
;
309 function create_video_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
310 procedure destroy_bitmap (bitmap
: PBITMAP
); LibraryLibAllegroImp
;
311 function show_video_bitmap (bitmap
: PBITMAP
): cint
; LibraryLibAllegroImp
;
312 function poll_keyboard
: cint
; LibraryLibAllegroImp
;
313 function install_keyboard
: cint
; LibraryLibAllegroImp
;
314 procedure remove_keyboard
; LibraryLibAllegroImp
;
315 function _install_allegro_version_check (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
; version
: cint
): cint
; LibraryLibAllegroImp
;
317 function install_timer
: cint
; LibraryLibAllegroImp
;
318 procedure remove_timer
; LibraryLibAllegroImp
;
319 procedure set_keyboard_rate (delay
, _repeat
: cint
); LibraryLibAllegroImp
;
320 function makeacol (r
, g
, b
, a
: cint
): cint
; LibraryLibAllegroImp
;
321 function makecol (r
, g
, b
: cint
): cint
; LibraryLibAllegroImp
;
322 procedure clear_to_color (source
: PBITMAP
; color
: cint
); LibraryLibAllegroImp
;
323 procedure putpixel (bmp
: PBITMAP
; x
, y
, color
: cint
); LibraryLibAllegroImp
;
324 function getpixel (bmp
: PBITMAP
; x
, y
: cint
): cint
; LibraryLibAllegroImp
;
325 procedure fastline (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
326 procedure draw_sprite (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
327 procedure draw_sprite_v_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
328 procedure draw_sprite_h_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
329 procedure draw_sprite_vh_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
); LibraryLibAllegroImp
;
330 procedure rect (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
331 procedure rectfill (bmp
: PBITMAP
; x1
, y_1
, x2
, y2
, color
: cint
); LibraryLibAllegroImp
;
332 function create_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
333 function create_system_bitmap (width
, height
: cint
): PBITMAP
; LibraryLibAllegroImp
;
334 procedure allegro_exit
; LibraryLibAllegroImp
;
336 procedure rest (time
: cuint
); LibraryLibAllegroImp
;
337 function install_int_ex (proc
: TimerIntCallback
; speed
: clong
): cint
; LibraryLibAllegroImp
;
338 procedure blit (source
, dest
: PBITMAP
; source_x
, source_y
, dest_x
, dest_y
, width
, height
: cint
); LibraryLibAllegroImp
;
339 procedure masked_blit (source
, dest
: PBITMAP
; source_x
, source_y
, dest_x
, dest_y
, width
, height
: cint
); LibraryLibAllegroImp
;
340 procedure set_clip_rect (bitmap
: PBITMAP
; x1
, y1
, x2
, y2
: cint
); LibraryLibAllegroImp
;
341 procedure get_clip_rect (bitmap
: PBITMAP
; var x1
, y1
, x2
, y2
: cint
); LibraryLibAllegroImp
;
343 procedure set_palette (const p
: PALETTE
); LibraryLibAllegroImp
;
344 procedure set_color_depth (depth
: cint
); LibraryLibAllegroImp
;
345 function set_close_button_callback (proc
: QuitCallback
): cint
; LibraryLibAllegroImp
;
347 // function _install_allegro (system_id: cint; errno_prt: Pcint; AtExitFunction): cint; LibraryLibAllegroImp;
349 procedure acquire_bitmap (bmp
: PBITMAP
); LibraryLibAllegroImp
;
350 procedure release_bitmap (bmp
: PBITMAP
); LibraryLibAllegroImp
;
351 procedure acquire_screen
; LibraryLibAllegroImp
;
352 procedure release_screen
; LibraryLibAllegroImp
;
354 procedure rotate_sprite (bmp
, sprite
: PBITMAP
; x
, y
: cint
; a
: cint32
); LibraryLibAllegroImp
;
355 procedure rotate_sprite_v_flip (bmp
, sprite
: PBITMAP
; x
, y
: cint
; a
: cint32
); LibraryLibAllegroImp
;
357 function scancode_to_ascii (scancode
: cint
): cint
; LibraryLibAllegroImp
;
358 function scancode_to_name (scancode
: cint
): PChar; LibraryLibAllegroImp
;
360 procedure drawing_mode (mode
: cint
; pattern
: PBITMAP
; x_anchor
, y_anchor
: cint
); LibraryLibAllegroImp
;
362 procedure set_trans_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
363 procedure set_alpha_blender
; LibraryLibAllegroImp
;
364 procedure set_write_alpha_blender
; LibraryLibAllegroImp
;
365 procedure set_add_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
366 procedure set_burn_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
367 procedure set_color_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
368 procedure set_difference_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
369 procedure set_dissolve_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
370 procedure set_dodge_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
371 procedure set_hue_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
372 procedure set_invert_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
373 procedure set_luminance_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
374 procedure set_multiply_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
375 procedure set_saturation_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
376 procedure set_screen_blender (r
, g
, b
, a
: cint
); LibraryLibAllegroImp
;
378 function getr (col
: cint
): cint
; LibraryLibAllegroImp
;
379 function getg (col
: cint
): cint
; LibraryLibAllegroImp
;
380 function getb (col
: cint
): cint
; LibraryLibAllegroImp
;
381 function geta (col
: cint
): cint
; LibraryLibAllegroImp
;
383 procedure create_light_table (table
: PCOLOR_MAP_T
; const pal
: PALETTE
; r
, g
, b
: cint
; callback
: CreateTableCallback
); LibraryLibAllegroImp
;
384 procedure create_trans_table (table
: PCOLOR_MAP_T
; const pal
: PALETTE
; r
, g
, b
: cint
; callback
: CreateTableCallback
); LibraryLibAllegroImp
;
386 procedure vsync
; LibraryLibAllegroImp
;
387 function desktop_color_depth
: cint
; LibraryLibAllegroImp
;
390 function install_allegro (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
): cint
; inline;
391 function allegro_init
: cint
; inline;
393 function TIMERS_PER_SECOND
: clong
; inline;
394 function SECS_TO_TIMER (x
: clong
): clong
; inline;
395 function MSEC_TO_TIMER (x
: clong
): clong
; inline;
396 function BPS_TO_TIMER (x
: clong
): clong
; inline;
397 function BPM_TO_TIMER (x
: clong
): clong
; inline;
402 {$IF DEFINED(GO32V2)}
403 function atexit (func
: AtexitCallback
): cint
; cdecl; external;
404 {$ELSEIF DEFINED(WINDOWS)}
405 function atexit (func
: AtexitCallback
): cint
; cdecl; external 'msvcrt.dll';
407 function atexit (func
: AtexitCallback
): cint
; cdecl; external 'c';
410 function install_allegro (system_id
: cint
; errno_ptr
: Pcint
; atexit_ptr
: AtExitFunction
): cint
; inline;
412 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
)
415 function allegro_init
: cint
; inline;
417 (* original macros sets libc errno? *)
418 allegro_init
:= _install_allegro_version_check(SYSTEM_AUTODETECT
, nil, @atexit
, (ALLEGRO_VERSION
shl 16) OR (ALEGRO_SUB_VERSION
shl 8) OR ALLEGRO_WIP_VERSION
)
421 function TIMERS_PER_SECOND
: clong
; inline;
423 TIMERS_PER_SECOND
:= 1193181
426 function SECS_TO_TIMER (x
: clong
): clong
; inline;
428 SECS_TO_TIMER
:= x
* TIMERS_PER_SECOND
431 function MSEC_TO_TIMER (x
: clong
): clong
; inline;
433 MSEC_TO_TIMER
:= x
* TIMERS_PER_SECOND
div 1000
436 function BPS_TO_TIMER (x
: clong
): clong
; inline;
438 BPS_TO_TIMER
:= TIMERS_PER_SECOND
div x
441 function BPM_TO_TIMER (x
: clong
): clong
; inline;
443 BPM_TO_TIMER
:= 60 * TIMERS_PER_SECOND
div x
447 function acquire_bitmap (bmp: PBITMAP); inline;
450 if bmp.vtable.acquire <> nil then
451 bmp.vtable.acquire(bmp)