1 /* ______ ___ ___
2 * /\ _ \ /\_ \ /\_ \
3 * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___
4 * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\
5 * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \
6 * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
7 * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
8 * /\____/
9 * \_/__/
10 * By Shawn Hargreaves,
11 * 1 Salisbury Road,
12 * Market Drayton,
13 * Shropshire,
14 * England, TF9 1AJ.
15 *
16 * Some definitions for internal use by the library code.
17 * This should not be included by user programs.
18 *
19 * See readme.txt for copyright information.
20 */
21
22
23 #ifndef INTERNAL_H
24 #define INTERNAL_H
25
26 #include "allegro.h"
27
28 #ifdef DJGPP
29 #include "interndj.h"
30 #else
31 #include "internli.h"
32 #endif
33 #include <stdio.h>
34 #include <dos.h>
35
36 #define rest delay
37 #define PACKFILE FILE
38 #define pack_fopen fopen
39 #define pack_fputs fputs
40 #define pack_fread(x,y,z) fread(x,1,y,z)
41 #define pack_fclose fclose
42 #define pack_getc(f) fgetc(f)
43 #define pack_igetw(f) (fgetc(f) | (fgetc(f) << 8))
44 #define pack_igetl(f) (pack_igetw(f) | (pack_igetw(f) << 16))
45 #define pack_mgetw(f) ((fgetc(f) << 8) | fgetc(f))
46 #define pack_mgetl(f) ((pack_mgetw(f) << 16) | pack_mgetw(f))
47 #define pack_feof(f) feof(f)
48 #define file_exists(n,x,z) (file_size(n)!=-1)
49 #define F_READ "rb"
50 #define F_WRITE "wb"
51
52 char *pack_fgets(char *p, int max, PACKFILE *f);
53 long file_size(const char *n);
54 char *get_filename(const char *s);
55 char *get_extension(const char *s);
56
57 void put_backslash(char *n);
58
59
60 /* flag for how many times we have been initialised */
61 extern int _allegro_count;
62
63
64 /* some Allegro functions need a block of scratch memory */
65 extern void *_scratch_mem;
66 extern int _scratch_mem_size;
67
_grow_scratch_mem(int size)68 __INLINE__ void _grow_scratch_mem(int size)
69 {
70 if (size > _scratch_mem_size) {
71 size = (size+1023) & 0xFFFFFC00;
72 _scratch_mem = realloc(_scratch_mem, size);
73 _scratch_mem_size = size;
74 }
75 }
76
77
78 /* list of functions to call at program cleanup */
79 void _add_exit_func(void (*func)());
80 void _remove_exit_func(void (*func)());
81
82
83 /* various bits of mouse stuff */
84 void _set_mouse_range();
85 extern BITMAP *_mouse_screen;
86
87
88 /* various bits of timer stuff */
89 extern int _timer_use_retrace;
90 extern volatile int _retrace_hpp_value;
91
92
93 /* asm joystick polling routine */
94 int _poll_joystick(int *x, int *y, int *x2, int *y2, int poll_mask);
95
96
97 /* caches and tables for svga bank switching */
98 extern int _last_bank_1, _last_bank_2;
99 extern int *_gfx_bank;
100
101
102 /* bank switching routines */
103 void _stub_bank_switch();
104 void _stub_bank_switch_end();
105
106
107 /* stuff for setting up bitmaps */
108 typedef struct _GFX_MODE_INFO
109 {
110 int w, h;
111 int bpp;
112 int bios_num;
113 int bios_int;
114 int (*setter)(int w, int h, int bpp);
115 } _GFX_MODE_INFO;
116
117 void _check_gfx_virginity();
118 BITMAP *_gfx_mode_set_helper(int w, int h, int v_w, int v_h, int color_depth, GFX_DRIVER *driver, int (*detect)(), _GFX_MODE_INFO *mode_list, void (*set_width)(int w));
119 BITMAP *_make_bitmap(int w, int h, unsigned long addr, GFX_DRIVER *driver, int color_depth, int bpl);
120 void _sort_out_virtual_width(int *width, GFX_DRIVER *driver);
121
122 GFX_VTABLE *_get_vtable(int color_depth);
123
124 extern int _sub_bitmap_id_count;
125
126 #define BYTES_PER_PIXEL(bpp) (((int)(bpp) + 7) / 8)
127
128 int _color_load_depth(int depth);
129
130 BITMAP *_fixup_loaded_bitmap(BITMAP *bmp, PALETTE pal, int bpp);
131
132
133 /* truecolor pixel blending information */
134 extern BLENDER_MAP *_blender_map15;
135 extern BLENDER_MAP *_blender_map16;
136 extern BLENDER_MAP *_blender_map24;
137
138 extern int _blender_col_15;
139 extern int _blender_col_16;
140 extern int _blender_col_24;
141 extern int _blender_col_32;
142
143 extern int _blender_alpha;
144
145
146 /* VGA register access routines */
147 void _vga_vsync();
148 void _vga_set_pallete_range(PALLETE p, int from, int to, int vsync);
149
150 extern int _crtc;
151
152
153 /* _read_vga_register:
154 * Reads the contents of a VGA register.
155 */
_read_vga_register(int port,int index)156 __INLINE__ int _read_vga_register(int port, int index)
157 {
158 if (port==0x3C0)
159 inportb(_crtc+6);
160
161 outportb(port, index);
162 return inportb(port+1);
163 }
164
165
166 /* _write_vga_register:
167 * Writes a byte to a VGA register.
168 */
_write_vga_register(int port,int index,int v)169 __INLINE__ void _write_vga_register(int port, int index, int v)
170 {
171 if (port==0x3C0) {
172 inportb(_crtc+6);
173 outportb(port, index);
174 outportb(port, v);
175 }
176 else {
177 outportb(port, index);
178 outportb(port+1, v);
179 }
180 }
181
182
183 /* _alter_vga_register:
184 * Alters specific bits of a VGA register.
185 */
_alter_vga_register(int port,int index,int mask,int v)186 __INLINE__ void _alter_vga_register(int port, int index, int mask, int v)
187 {
188 int temp;
189 temp = _read_vga_register(port, index);
190 temp &= (~mask);
191 temp |= (v & mask);
192 _write_vga_register(port, index, temp);
193 }
194
195
196 /* _vsync_out_h:
197 * Waits until the VGA is not in either a vertical or horizontal retrace.
198 */
_vsync_out_h()199 __INLINE__ void _vsync_out_h()
200 {
201 do {
202 } while (inportb(0x3DA) & 1);
203 }
204
205
206 /* _vsync_out_v:
207 * Waits until the VGA is not in a vertical retrace.
208 */
_vsync_out_v()209 __INLINE__ void _vsync_out_v()
210 {
211 do {
212 } while (inportb(0x3DA) & 8);
213 }
214
215
216 /* _vsync_in:
217 * Waits until the VGA is in the vertical retrace period.
218 */
_vsync_in()219 __INLINE__ void _vsync_in()
220 {
221 if (_timer_use_retrace) {
222 int t = retrace_count;
223
224 do {
225 } while (t == retrace_count);
226 }
227 else {
228 do {
229 } while (!(inportb(0x3DA) & 8));
230 }
231 }
232
233
234 /* _write_hpp:
235 * Writes to the VGA pelpan register.
236 */
_write_hpp(int value)237 __INLINE__ void _write_hpp(int value)
238 {
239 if (_timer_use_retrace) {
240 _retrace_hpp_value = value;
241
242 do {
243 } while (_retrace_hpp_value == value);
244 }
245 else {
246 do {
247 } while (!(inportb(0x3DA) & 8));
248
249 _write_vga_register(0x3C0, 0x33, value);
250 }
251 }
252
253
254 int _test_vga_register(int port, int index, int mask);
255 int _test_register(int port, int mask);
256 void _set_vga_virtual_width(int old_width, int new_width);
257
258
259 /* current drawing mode */
260 extern int _drawing_mode;
261 extern BITMAP *_drawing_pattern;
262 extern int _drawing_x_anchor;
263 extern int _drawing_y_anchor;
264 extern unsigned int _drawing_x_mask;
265 extern unsigned int _drawing_y_mask;
266
267
268 /* graphics drawing routines */
269 void _normal_line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
270 void _normal_rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
271
272 int _linear_getpixel8(struct BITMAP *bmp, int x, int y);
273 void _linear_putpixel8(struct BITMAP *bmp, int x, int y, int color);
274 void _linear_vline8(struct BITMAP *bmp, int x, int y1, int y2, int color);
275 void _linear_hline8(struct BITMAP *bmp, int x1, int y, int x2, int color);
276 void _linear_draw_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
277 void _linear_draw_sprite_v_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
278 void _linear_draw_sprite_h_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
279 void _linear_draw_sprite_vh_flip8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
280 void _linear_draw_trans_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
281 void _linear_draw_lit_sprite8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
282 void _linear_draw_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
283 void _linear_draw_trans_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
284 void _linear_draw_lit_rle_sprite8(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
285 void _linear_draw_character8(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
286 void _linear_textout_fixed8(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
287 void _linear_blit8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
288 void _linear_blit_backward8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
289 void _linear_masked_blit8(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
290 void _linear_clear_to_color8(struct BITMAP *bitmap, int color);
291
292 #ifdef ALLEGRO_COLOR16
293
294 void _linear_putpixel15(struct BITMAP *bmp, int x, int y, int color);
295 void _linear_vline15(struct BITMAP *bmp, int x, int y1, int y2, int color);
296 void _linear_hline15(struct BITMAP *bmp, int x1, int y, int x2, int color);
297 void _linear_draw_trans_sprite15(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
298 void _linear_draw_lit_sprite15(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
299 void _linear_draw_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
300 void _linear_draw_trans_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
301 void _linear_draw_lit_rle_sprite15(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
302
303 int _linear_getpixel16(struct BITMAP *bmp, int x, int y);
304 void _linear_putpixel16(struct BITMAP *bmp, int x, int y, int color);
305 void _linear_vline16(struct BITMAP *bmp, int x, int y1, int y2, int color);
306 void _linear_hline16(struct BITMAP *bmp, int x1, int y, int x2, int color);
307 void _linear_draw_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
308 void _linear_draw_256_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
309 void _linear_draw_sprite_v_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
310 void _linear_draw_sprite_h_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
311 void _linear_draw_sprite_vh_flip16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
312 void _linear_draw_trans_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
313 void _linear_draw_lit_sprite16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
314 void _linear_draw_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
315 void _linear_draw_trans_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
316 void _linear_draw_lit_rle_sprite16(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
317 void _linear_draw_character16(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
318 void _linear_textout_fixed16(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
319 void _linear_blit16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
320 void _linear_blit_backward16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
321 void _linear_masked_blit16(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
322 void _linear_clear_to_color16(struct BITMAP *bitmap, int color);
323
324 #endif
325
326 #ifdef ALLEGRO_COLOR24
327
328 int _linear_getpixel24(struct BITMAP *bmp, int x, int y);
329 void _linear_putpixel24(struct BITMAP *bmp, int x, int y, int color);
330 void _linear_vline24(struct BITMAP *bmp, int x, int y1, int y2, int color);
331 void _linear_hline24(struct BITMAP *bmp, int x1, int y, int x2, int color);
332 void _linear_draw_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
333 void _linear_draw_256_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
334 void _linear_draw_sprite_v_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
335 void _linear_draw_sprite_h_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
336 void _linear_draw_sprite_vh_flip24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
337 void _linear_draw_trans_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
338 void _linear_draw_lit_sprite24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
339 void _linear_draw_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
340 void _linear_draw_trans_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
341 void _linear_draw_lit_rle_sprite24(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
342 void _linear_draw_character24(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
343 void _linear_textout_fixed24(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
344 void _linear_blit24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
345 void _linear_blit_backward24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
346 void _linear_masked_blit24(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
347 void _linear_clear_to_color24(struct BITMAP *bitmap, int color);
348
349 #endif
350
351 #ifdef ALLEGRO_COLOR32
352
353 int _linear_getpixel32(struct BITMAP *bmp, int x, int y);
354 void _linear_putpixel32(struct BITMAP *bmp, int x, int y, int color);
355 void _linear_vline32(struct BITMAP *bmp, int x, int y1, int y2, int color);
356 void _linear_hline32(struct BITMAP *bmp, int x1, int y, int x2, int color);
357 void _linear_draw_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
358 void _linear_draw_256_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
359 void _linear_draw_sprite_v_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
360 void _linear_draw_sprite_h_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
361 void _linear_draw_sprite_vh_flip32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
362 void _linear_draw_trans_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
363 void _linear_draw_lit_sprite32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
364 void _linear_draw_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
365 void _linear_draw_trans_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
366 void _linear_draw_lit_rle_sprite32(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
367 void _linear_draw_character32(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
368 void _linear_textout_fixed32(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
369 void _linear_blit32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
370 void _linear_blit_backward32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
371 void _linear_masked_blit32(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
372 void _linear_clear_to_color32(struct BITMAP *bitmap, int color);
373
374 #endif
375
376 int _x_getpixel(struct BITMAP *bmp, int x, int y);
377 void _x_putpixel(struct BITMAP *bmp, int x, int y, int color);
378 void _x_vline(struct BITMAP *bmp, int x, int y1, int y2, int color);
379 void _x_hline(struct BITMAP *bmp, int x1, int y, int x2, int color);
380 void _x_draw_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
381 void _x_draw_sprite_v_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
382 void _x_draw_sprite_h_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
383 void _x_draw_sprite_vh_flip(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
384 void _x_draw_trans_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y);
385 void _x_draw_lit_sprite(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
386 void _x_draw_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
387 void _x_draw_trans_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y);
388 void _x_draw_lit_rle_sprite(struct BITMAP *bmp, struct RLE_SPRITE *sprite, int x, int y, int color);
389 void _x_draw_character(struct BITMAP *bmp, struct BITMAP *sprite, int x, int y, int color);
390 void _x_textout_fixed(struct BITMAP *bmp, void *f, int h, unsigned char *str, int x, int y, int color);
391 void _x_blit_from_memory(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
392 void _x_blit_to_memory(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
393 void _x_blit(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
394 void _x_blit_forward(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
395 void _x_blit_backward(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
396 void _x_masked_blit(struct BITMAP *source, struct BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height);
397 void _x_clear_to_color(struct BITMAP *bitmap, int color);
398
399
400 /* asm helper for stretch_blit() */
401 void _do_stretch(BITMAP *source, BITMAP *dest, void *drawer, int sx, fixed sy, fixed syd, int dx, int dy, int dh, int color_depth);
402
403
404 /* information for polygon scanline fillers */
405 typedef struct POLYGON_SEGMENT
406 {
407 fixed u, v, du, dv; /* fixed point u/v coordinates */
408 fixed c, dc; /* single color gouraud shade values */
409 fixed r, g, b, dr, dg, db; /* RGB gouraud shade values */
410 float z, dz; /* polygon depth (1/z) */
411 float fu, fv, dfu, dfv; /* floating point u/v coordinates */
412 unsigned char *texture; /* the texture map */
413 int umask, vmask, vshift; /* texture map size information */
414 int seg; /* destination bitmap selector */
415 } POLYGON_SEGMENT;
416
417
418 /* polygon scanline filler functions */
419 void _poly_scanline_flat(unsigned long addr, int w, POLYGON_SEGMENT *info);
420 void _poly_scanline_gcol(unsigned long addr, int w, POLYGON_SEGMENT *info);
421 void _poly_scanline_grgb(unsigned long addr, int w, POLYGON_SEGMENT *info);
422 void _poly_scanline_atex(unsigned long addr, int w, POLYGON_SEGMENT *info);
423 void _poly_scanline_ptex(unsigned long addr, int w, POLYGON_SEGMENT *info);
424 void _poly_scanline_atex_mask(unsigned long addr, int w, POLYGON_SEGMENT *info);
425 void _poly_scanline_ptex_mask(unsigned long addr, int w, POLYGON_SEGMENT *info);
426 void _poly_scanline_atex_lit(unsigned long addr, int w, POLYGON_SEGMENT *info);
427 void _poly_scanline_ptex_lit(unsigned long addr, int w, POLYGON_SEGMENT *info);
428
429
430 /* sound lib stuff */
431 extern int _digi_volume;
432 extern int _midi_volume;
433 extern int _flip_pan;
434
435 extern int (*_midi_init)();
436 extern void (*_midi_exit)();
437
438 int _midi_allocate_voice(int min, int max);
439
440 extern volatile long _midi_tick;
441
442 int _digmid_find_patches(char *dir, char *file);
443
444 #define VIRTUAL_VOICES 256
445
446
447 typedef struct /* a virtual (as seen by the user) soundcard voice */
448 {
449 SAMPLE *sample; /* which sample are we playing? (NULL = free) */
450 int num; /* physical voice number (-1 = been killed off) */
451 int autokill; /* set to free the voice when the sample finishes */
452 long time; /* when we were started (for voice allocation) */
453 int priority; /* how important are we? */
454 } VOICE;
455
456 extern VOICE _voice[VIRTUAL_VOICES];
457
458
459 typedef struct /* a physical (as used by hardware) soundcard voice */
460 {
461 int num; /* the virtual voice currently using me (-1 = free) */
462 int playmode; /* are we looping? */
463 int vol; /* current volume (fixed point .12) */
464 int dvol; /* volume delta, for ramping */
465 int target_vol; /* target volume, for ramping */
466 int pan; /* current pan (fixed point .12) */
467 int dpan; /* pan delta, for sweeps */
468 int target_pan; /* target pan, for sweeps */
469 int freq; /* current frequency (fixed point .12) */
470 int dfreq; /* frequency delta, for sweeps */
471 int target_freq; /* target frequency, for sweeps */
472 } PHYS_VOICE;
473
474 extern PHYS_VOICE _phys_voice[DIGI_VOICES];
475
476
477 #define MIXER_DEF_SFX 8
478 #define MIXER_MAX_SFX 32
479
480 int _mixer_init(int bufsize, int freq, int stereo, int is16bit, int *voices);
481 void _mixer_exit();
482 void _mix_some_samples(unsigned long buf, unsigned short seg, int issigned);
483
484 void _mixer_init_voice(int voice, SAMPLE *sample);
485 void _mixer_release_voice(int voice);
486 void _mixer_start_voice(int voice);
487 void _mixer_stop_voice(int voice);
488 void _mixer_loop_voice(int voice, int loopmode);
489 int _mixer_get_position(int voice);
490 void _mixer_set_position(int voice, int position);
491 int _mixer_get_volume(int voice);
492 void _mixer_set_volume(int voice, int volume);
493 void _mixer_ramp_volume(int voice, int time, int endvol);
494 void _mixer_stop_volume_ramp(int voice);
495 int _mixer_get_frequency(int voice);
496 void _mixer_set_frequency(int voice, int frequency);
497 void _mixer_sweep_frequency(int voice, int time, int endfreq);
498 void _mixer_stop_frequency_sweep(int voice);
499 int _mixer_get_pan(int voice);
500 void _mixer_set_pan(int voice, int pan);
501 void _mixer_sweep_pan(int voice, int time, int endpan);
502 void _mixer_stop_pan_sweep(int voice);
503 void _mixer_set_echo(int voice, int strength, int delay);
504 void _mixer_set_tremolo(int voice, int rate, int depth);
505 void _mixer_set_vibrato(int voice, int rate, int depth);
506
507 /* dummy functions for the NoSound drivers */
508 int _dummy_detect();
509 int _dummy_init(int voices);
510 void _dummy_exit();
511 int _dummy_mixer_volume(int volume);
512 void _dummy_init_voice(int voice, SAMPLE *sample);
513 void _dummy_noop1(int p);
514 void _dummy_noop2(int p1, int p2);
515 void _dummy_noop3(int p1, int p2, int p3);
516 int _dummy_get_position(int voice);
517 int _dummy_get(int voice);
518 void _dummy_raw_midi(unsigned char data);
519 int _dummy_load_patches(char *patches, char *drums);
520 void _dummy_adjust_patches(char *patches, char *drums);
521 void _dummy_key_on(int inst, int note, int bend, int vol, int pan);
522
523
524 /* from djgpp's libc, needed to find which directory we were run from */
525 extern int __crt0_argc;
526 extern char **__crt0_argv;
527
528
529 #endif /* ifndef INTERNAL_H */
530