DEADSOFTWARE

ae5adb593452a0411cffba3bd404cf2bdac94f3f
[d2df-sdl.git] / src / lib / allegro4 / allegro.pas
1 {$LONGSTRINGS ON}
2 {$MACRO ON}
4 {$IF DEFINED(GO32V2)}
5 {$LINKLIB liballeg.a}
6 {$LINKLIB libc.a}
7 {$LINKLIB libgcc.a}
8 {$DEFINE LibraryLibAllegroDecl := cdecl}
9 {$DEFINE LibraryLibAllegroImp := cdecl; external}
10 {$DEFINE LibraryLibAllegroVar := cvar; external}
11 {$ELSEIF DEFINED(UNIX)}
12 {$LINKLIB liballeg.so}
13 {$DEFINE LibraryLibAllegroDecl := cdecl}
14 {$DEFINE LibraryLibAllegroImp := cdecl; external 'alleg'}
15 {$DEFINE LibraryLibAllegroVar := cvar; external 'alleg'}
16 {$ELSE}
17 {$ERROR unsupported platform!}
18 {$ENDIF}
20 unit allegro;
22 interface
24 uses ctypes;
26 const
27 {$IF DEFINED(GO32V2)}
28 ALLEGRO_VERSION = 4;
29 ALEGRO_SUB_VERSION = 2;
30 ALLEGRO_WIP_VERSION = 3;
31 ALLEGRO_VERSION_STR = '4.2.3';
32 {$ELSEIF DEFINED(UNIX)}
33 ALLEGRO_VERSION = 4;
34 ALEGRO_SUB_VERSION = 4;
35 ALLEGRO_WIP_VERSION = 2;
36 ALLEGRO_VERSION_STR = '4.4.2';
37 {$ELSE}
38 {$ERROR unsupported platform!}
39 {$ENDIF}
41 SYSTEM_AUTODETECT = 0;
42 SYSTEM_NONE = $4e4f4e45;
44 GFX_TEXT = -1;
45 GFX_AUTODETECT = 0;
46 GFX_AUTODETECT_FULLSCREEN = 1;
47 GFX_AUTODETECT_WINDOWED = 2;
48 GFX_SAFE = $53414645;
50 KEY_A = 1;
51 KEY_B = 2;
52 KEY_C = 3;
53 KEY_D = 4;
54 KEY_E = 5;
55 KEY_F = 6;
56 KEY_G = 7;
57 KEY_H = 8;
58 KEY_I = 9;
59 KEY_J = 10;
60 KEY_K = 11;
61 KEY_L = 12;
62 KEY_M = 13;
63 KEY_N = 14;
64 KEY_O = 15;
65 KEY_P = 16;
66 KEY_Q = 17;
67 KEY_R = 18;
68 KEY_S = 19;
69 KEY_T = 20;
70 KEY_U = 21;
71 KEY_V = 22;
72 KEY_W = 23;
73 KEY_X = 24;
74 KEY_Y = 25;
75 KEY_Z = 26;
76 KEY_0 = 27;
77 KEY_1 = 28;
78 KEY_2 = 29;
79 KEY_3 = 30;
80 KEY_4 = 31;
81 KEY_5 = 32;
82 KEY_6 = 33;
83 KEY_7 = 34;
84 KEY_8 = 35;
85 KEY_9 = 36;
86 KEY_0_PAD = 37;
87 KEY_1_PAD = 38;
88 KEY_2_PAD = 39;
89 KEY_3_PAD = 40;
90 KEY_4_PAD = 41;
91 KEY_5_PAD = 42;
92 KEY_6_PAD = 43;
93 KEY_7_PAD = 44;
94 KEY_8_PAD = 45;
95 KEY_9_PAD = 46;
96 KEY_F1 = 47;
97 KEY_F2 = 48;
98 KEY_F3 = 49;
99 KEY_F4 = 50;
100 KEY_F5 = 51;
101 KEY_F6 = 52;
102 KEY_F7 = 53;
103 KEY_F8 = 54;
104 KEY_F9 = 55;
105 KEY_F10 = 56;
106 KEY_F11 = 57;
107 KEY_F12 = 58;
108 KEY_ESC = 59;
109 KEY_TILDE = 60;
110 KEY_MINUS = 61;
111 KEY_EQUALS = 62;
112 KEY_BACKSPACE = 63;
113 KEY_TAB = 64;
114 KEY_OPENBRACE = 65;
115 KEY_CLOSEBRACE = 66;
116 KEY_ENTER = 67;
117 KEY_COLON = 68;
118 KEY_QUOTE = 69;
119 KEY_BACKSLASH = 70;
120 KEY_BACKSLASH2 = 71;
121 KEY_COMMA = 72;
122 KEY_STOP = 73;
123 KEY_SLASH = 74;
124 KEY_SPACE = 75;
125 KEY_INSERT = 76;
126 KEY_DEL = 77;
127 KEY_HOME = 78;
128 KEY_END = 79;
129 KEY_PGUP = 80;
130 KEY_PGDN = 81;
131 KEY_LEFT = 82;
132 KEY_RIGHT = 83;
133 KEY_UP = 84;
134 KEY_DOWN = 85;
135 KEY_SLASH_PAD = 86;
136 KEY_ASTERISK = 87;
137 KEY_MINUS_PAD = 88;
138 KEY_PLUS_PAD = 89;
139 KEY_DEL_PAD = 90;
140 KEY_ENTER_PAD = 91;
141 KEY_PRTSCR = 92;
142 KEY_PAUSE = 93;
143 KEY_ABNT_C1 = 94;
144 KEY_YEN = 95;
145 KEY_KANA = 96;
146 KEY_CONVERT = 97;
147 KEY_NOCONVERT = 98;
148 KEY_AT = 99;
149 KEY_CIRCUMFLEX = 100;
150 KEY_COLON2 = 101;
151 KEY_KANJI = 102;
152 KEY_EQUALS_PAD = 103;
153 KEY_BACKQUOTE = 104;
154 KEY_SEMICOLON = 105;
155 KEY_COMMAND = 106;
156 KEY_UNKNOWN1 = 107;
157 KEY_UNKNOWN2 = 108;
158 KEY_UNKNOWN3 = 109;
159 KEY_UNKNOWN4 = 110;
160 KEY_UNKNOWN5 = 111;
161 KEY_UNKNOWN6 = 112;
162 KEY_UNKNOWN7 = 113;
163 KEY_UNKNOWN8 = 114;
164 KEY_MODIFIERS = 115;
165 KEY_LSHIFT = 115;
166 KEY_RSHIFT = 116;
167 KEY_LCONTROL = 117;
168 KEY_RCONTROL = 118;
169 KEY_ALT = 119;
170 KEY_ALTGR = 120;
171 KEY_LWIN = 121;
172 KEY_RWIN = 122;
173 KEY_MENU = 123;
174 KEY_SCRLOCK = 124;
175 KEY_NUMLOCK = 125;
176 KEY_CAPSLOCK = 126;
177 KEY_MAX = 127;
179 KB_SHIFT_FLAG = $0001;
180 KB_CTRL_FLAG = $0002;
181 KB_ALT_FLAG = $0004;
182 KB_LWIN_FLAG = $0008;
183 KB_RWIN_FLAG = $0010;
184 KB_MENU_FLAG = $0020;
185 KB_COMMAND_FLAG = $0040;
186 KB_SCROLOCK_FLAG = $0100;
187 KB_NUMLOCK_FLAG = $0200;
188 KB_CAPSLOCK_FLAG = $0400;
189 KB_INALTSEQ_FLAG = $0800;
190 KB_ACCENT1_FLAG = $1000;
191 KB_ACCENT2_FLAG = $2000;
192 KB_ACCENT3_FLAG = $4000;
193 KB_ACCENT4_FLAG = $8000;
195 ALLEGRO_ERROR_SIZE = 256;
197 type
198 PBITMAP = ^BITMAP;
199 BITMAP = record
200 w, h: cint;
201 clip: cint;
202 cl, cr, ct, cb: cint;
203 vtable: Pointer; {PGFX_VTABLE}
204 write_bank: Pointer;
205 read_bank: Pointer;
206 dat: Pointer;
207 id: culong;
208 extra: Pointer;
209 x_ofs: cint;
210 y_ofs: cint;
211 seg: cint;
212 line: Pointer;
213 end;
215 PGFX_MODE = ^GFX_MODE;
216 GFX_MODE = record
217 width, height, bpp: cint;
218 end;
220 PGFX_MODE_LIST = ^GFX_MODE_LIST;
221 GFX_MODE_LIST = record
222 num_modes: cint;
223 mode: PGFX_MODE;
224 end;
226 KeyboardCallback = procedure (scancode: cint); LibraryLibAllegroDecl;
227 AtExitCallback = procedure; LibraryLibAllegroDecl;
228 AtExitFunction = function (func: AtExitCallback): cint; LibraryLibAllegroDecl;
230 var
231 allegro_id: array [0..ALLEGRO_ERROR_SIZE] of char; LibraryLibAllegroVar;
232 allegro_error: array [0..ALLEGRO_ERROR_SIZE] of char; LibraryLibAllegroVar;
233 keyboard_lowlevel_callback: KeyboardCallback; LibraryLibAllegroVar;
235 function get_desktop_resolution (width, height: Pcint): cint; LibraryLibAllegroImp;
236 function get_gfx_mode_list (card: cint): PGFX_MODE_LIST; LibraryLibAllegroImp;
237 procedure destroy_gfx_mode_list (gfx_mode_list: PGFX_MODE_LIST); LibraryLibAllegroImp;
238 function set_gfx_mode (card, w, h, v_w, v_h: cint): cint; LibraryLibAllegroImp;
239 procedure set_window_title (name: Pchar); LibraryLibAllegroImp;
240 function create_video_bitmap (width, height: cint): PBITMAP; LibraryLibAllegroImp;
241 procedure destroy_bitmap (bitmap: PBITMAP); LibraryLibAllegroImp;
242 function show_video_bitmap (bitmap: PBITMAP): cint; LibraryLibAllegroImp;
243 function poll_keyboard: cint; LibraryLibAllegroImp;
244 function install_keyboard: cint; LibraryLibAllegroImp;
245 procedure remove_keyboard; LibraryLibAllegroImp;
246 function _install_allegro_version_check (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction; version: cint): cint; LibraryLibAllegroImp;
248 function install_allegro (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction): cint; inline; (* macros *)
249 function allegro_init: cint; inline; (* macros *)
251 function install_timer: cint; LibraryLibAllegroImp;
252 procedure remove_timer; LibraryLibAllegroImp;
253 procedure set_keyboard_rate (delay, _repeat: cint); LibraryLibAllegroImp;
254 function makeacol (r, g, b, a: cint): cint; LibraryLibAllegroImp;
255 function makecol (r, g, b: cint): cint; LibraryLibAllegroImp;
256 procedure clear_to_color (source: PBITMAP; color: cint); LibraryLibAllegroImp;
257 procedure putpixel (bmp: PBITMAP; x, y, color: cint); LibraryLibAllegroImp;
258 procedure fastline (bmp: PBITMAP; x1, y_1, x2, y2, color: cint); LibraryLibAllegroImp;
259 procedure draw_sprite (bmp, sprite: PBITMAP; x, y: cint); LibraryLibAllegroImp;
260 procedure rect (bmp: PBITMAP; x1, y_1, x2, y2, color: cint); LibraryLibAllegroImp;
261 procedure rectfill (bmp: PBITMAP; x1, y_1, x2, y2, color: cint); LibraryLibAllegroImp;
262 function create_bitmap (width, height: cint): PBITMAP; LibraryLibAllegroImp;
263 function create_system_bitmap (width, height: cint): PBITMAP; LibraryLibAllegroImp;
264 procedure allegro_exit; LibraryLibAllegroImp;
266 // function _install_allegro (system_id: cint; errno_prt: Pcint; AtExitFunction): cint; LibraryLibAllegroImp;
268 implementation
270 function install_allegro (system_id: cint; errno_ptr: Pcint; atexit_ptr: AtExitFunction): cint; inline;
271 begin
272 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)
273 end;
275 function allegro_init: cint; inline;
276 begin
277 (* original macros sets atexit_ptr *)
278 (* original macros sets libc errno? *)
279 allegro_init := _install_allegro_version_check(SYSTEM_AUTODETECT, nil, nil, (ALLEGRO_VERSION shl 16) OR (ALEGRO_SUB_VERSION shl 8) OR ALLEGRO_WIP_VERSION)
280 end;
282 end.