X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Flib%2Fallegro4%2Fallegro.pas;h=6f4456f765baee8527637e933cbbe9eac3cd8741;hp=0a1affef875346d773a0cdf9d01b6ad273800576;hb=be2f0e35ae7b7688559621e4b8cb2d9a75a43d23;hpb=ed750d2e31615702f9c230ef4aabe890ea55abab diff --git a/src/lib/allegro4/allegro.pas b/src/lib/allegro4/allegro.pas index 0a1affe..6f4456f 100644 --- a/src/lib/allegro4/allegro.pas +++ b/src/lib/allegro4/allegro.pas @@ -8,13 +8,14 @@ {$DEFINE LibraryLibAllegroDecl := cdecl} {$DEFINE LibraryLibAllegroImp := cdecl; external} {$DEFINE LibraryLibAllegroVar := cvar; external} -{$ELSEIF DEFINED(UNIX)} - {$LINKLIB liballeg.so} +{$ELSEIF DEFINED(WINDOWS)} + {$DEFINE LibraryLibAllegroDecl := cdecl} + {$DEFINE LibraryLibAllegroImp := cdecl; external 'alleg42.dll'} + {$DEFINE LibraryLibAllegroVar := external 'alleg42.dll'} +{$ELSE} {$DEFINE LibraryLibAllegroDecl := cdecl} {$DEFINE LibraryLibAllegroImp := cdecl; external 'alleg'} {$DEFINE LibraryLibAllegroVar := cvar; external 'alleg'} -{$ELSE} - {$ERROR unsupported platform!} {$ENDIF} unit allegro; @@ -24,18 +25,16 @@ interface uses ctypes; const -{$IF DEFINED(GO32V2)} +{$IF DEFINED(GO32V2) OR DEFINED(WINDOWS)} ALLEGRO_VERSION = 4; ALEGRO_SUB_VERSION = 2; ALLEGRO_WIP_VERSION = 3; ALLEGRO_VERSION_STR = '4.2.3'; -{$ELSEIF DEFINED(UNIX)} +{$ELSE} ALLEGRO_VERSION = 4; ALEGRO_SUB_VERSION = 4; ALLEGRO_WIP_VERSION = 2; ALLEGRO_VERSION_STR = '4.4.2'; -{$ELSE} - {$ERROR unsupported platform!} {$ENDIF} SYSTEM_AUTODETECT = 0; @@ -242,13 +241,13 @@ interface AtExitCallback = procedure; LibraryLibAllegroDecl; AtExitFunction = function (func: AtExitCallback): cint; LibraryLibAllegroDecl; TimerIntCallback = procedure; LibraryLibAllegroDecl; + QuitCallback = procedure; LibraryLibAllegroDecl; var allegro_id: array [0..ALLEGRO_ERROR_SIZE] of char; LibraryLibAllegroVar; allegro_error: array [0..ALLEGRO_ERROR_SIZE] of char; LibraryLibAllegroVar; keyboard_lowlevel_callback: KeyboardCallback; LibraryLibAllegroVar; screen: PBITMAP; LibraryLibAllegroVar; - black_palette: PALETTE; LibraryLibAllegroVar; desktop_palette: PALETTE; LibraryLibAllegroVar; default_palette: PALETTE; LibraryLibAllegroVar; @@ -267,9 +266,6 @@ interface procedure remove_keyboard; LibraryLibAllegroImp; function _install_allegro_version_check (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction; version: cint): cint; LibraryLibAllegroImp; - function install_allegro (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction): cint; inline; (* macros *) - function allegro_init: cint; inline; (* macros *) - function install_timer: cint; LibraryLibAllegroImp; procedure remove_timer; LibraryLibAllegroImp; procedure set_keyboard_rate (delay, _repeat: cint); LibraryLibAllegroImp; @@ -298,18 +294,42 @@ interface procedure set_palette (const p: PALETTE); LibraryLibAllegroImp; procedure set_color_depth (depth: cint); LibraryLibAllegroImp; + function set_close_button_callback (proc: QuitCallback): cint; LibraryLibAllegroImp; // function _install_allegro (system_id: cint; errno_prt: Pcint; AtExitFunction): cint; LibraryLibAllegroImp; (* MACRO *) + function install_allegro (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction): cint; inline; + function allegro_init: cint; inline; + function TIMERS_PER_SECOND: clong; inline; function SECS_TO_TIMER (x: clong): clong; inline; function MSEC_TO_TIMER (x: clong): clong; inline; function BPS_TO_TIMER (x: clong): clong; inline; function BPM_TO_TIMER (x: clong): clong; inline; +(* + function acquire_bitmap (bmp: PBITMAP); inline; + function release_bitmap (bmp: PBITMAP); inline; + function acquire_screen; inline; + function release_screen; inline; +*) + + procedure acquire_bitmap (bmp: PBITMAP); LibraryLibAllegroImp; + procedure release_bitmap (bmp: PBITMAP); LibraryLibAllegroImp; + procedure acquire_screen; LibraryLibAllegroImp; + procedure release_screen; LibraryLibAllegroImp; + implementation + {$IF DEFINED(GO32V2)} + function atexit (func: AtexitCallback): cint; cdecl; external; + {$ELSEIF DEFINED(WINDOWS)} + function atexit (func: AtexitCallback): cint; cdecl; external 'msvcrt.dll'; + {$ELSE} + function atexit (func: AtexitCallback): cint; cdecl; external 'c'; + {$ENDIF} + function install_allegro (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction): cint; inline; begin 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) @@ -317,13 +337,10 @@ implementation function allegro_init: cint; inline; begin - (* original macros sets atexit_ptr *) (* original macros sets libc errno? *) - allegro_init := _install_allegro_version_check(SYSTEM_AUTODETECT, nil, nil, (ALLEGRO_VERSION shl 16) OR (ALEGRO_SUB_VERSION shl 8) OR ALLEGRO_WIP_VERSION) + allegro_init := _install_allegro_version_check(SYSTEM_AUTODETECT, nil, @atexit, (ALLEGRO_VERSION shl 16) OR (ALEGRO_SUB_VERSION shl 8) OR ALLEGRO_WIP_VERSION) end; - - function TIMERS_PER_SECOND: clong; inline; begin TIMERS_PER_SECOND := 1193181 @@ -349,4 +366,13 @@ implementation BPM_TO_TIMER := 60 * TIMERS_PER_SECOND div x end; +(* + function acquire_bitmap (bmp: PBITMAP); inline; + begin + ASSERT(bmp <> nil); + if bmp.vtable.acquire <> nil then + bmp.vtable.acquire(bmp) + end; +*) + end.