summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFire_Head <Fire-Head@users.noreply.github.com>2020-04-23 10:50:06 +0200
committerGitHub <noreply@github.com>2020-04-23 10:50:06 +0200
commitff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2 (patch)
treed461c5aca74e9679ec87d1e3d70a5e674a57ee21
parentfix #ifdef (diff)
parentMerge pull request #482 from withmorten/master (diff)
downloadre3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.gz
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.bz2
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.lz
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.xz
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.zst
re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.zip
-rw-r--r--milessdk/include/mss.h4883
-rw-r--r--milessdk/lib/mss32.libbin246322 -> 15316 bytes
-rw-r--r--src/animation/CutsceneMgr.cpp3
-rw-r--r--src/control/Script.cpp1
-rw-r--r--src/core/CdStream.cpp2
-rw-r--r--src/core/Game.cpp2
-rw-r--r--src/core/Timer.cpp2
-rw-r--r--src/core/re3.cpp2
-rw-r--r--src/rw/TexRead.cpp3
-rw-r--r--src/save/GenericGameStorage.cpp3
-rw-r--r--src/save/PCSave.cpp9
-rw-r--r--src/skel/crossplatform.cpp81
-rw-r--r--src/skel/crossplatform.h65
-rw-r--r--src/skel/events.cpp6
-rw-r--r--src/skel/win/win.cpp4
-rw-r--r--src/skel/win/win.h11
16 files changed, 267 insertions, 4810 deletions
diff --git a/milessdk/include/mss.h b/milessdk/include/mss.h
index fbc91c73..38371eb9 100644
--- a/milessdk/include/mss.h
+++ b/milessdk/include/mss.h
@@ -1,4805 +1,116 @@
-//############################################################################
-//## ##
-//## Miles Sound System ##
-//## ##
-//## MSS.H: Miles Sound System main header file ##
-//## ##
-//## Version 1.00 of 15-Feb-95: Initial, derived from AIL.H V3.02 ##
-//## 1.01 of 19-Jun-95: Added various functions for V3.03 release ##
-//## 1.02 of 22-Nov-95: C++ typedef problem fixed, declspecs added ##
-//## 1.03 of 15-Feb-96: Changes for 16 bit callbacks and multiple ##
-//## 16 bit DLL loads (JKR) ##
-//## 1.04 of 2-Nov-97: Changes made to handle DLS in future ##
-//## versions ##
-//## 1.05 of 1-Jan-98: Massive changes for version 4.0 ##
-//## 1.06 of 17-Sep-98: Massive changes for version 5.0 ##
-//## 1.07 of 2-Feb-99: Changes for new input API ##
-//## 1.08 of 8-Feb-99: Changes for new filter helper functions ##
-//## ##
-//## Author: John Miles ##
-//## ##
-//############################################################################
-//## ##
-//## Contact RAD Game Tools at 425-893-4300 for technical support. ##
-//## ##
-//############################################################################
+#pragma once
-#ifndef MSS_VERSION
+// fake mss.h header for use with re3, to make using mss32.dll possible
+// gta3 uses miles 6.1a
+// check https://github.com/withmorten/re3mss for more info
-#define MSS_VERSION "6.1a"
-#define MSS_MAJOR_VERSION 6
-#define MSS_MINOR_VERSION 1
-#define MSS_SUB_VERSION 1
-#define MSS_VERSION_DATE "06-Mar-01"
+#include <stdint.h>
-#define MSS_COPYRIGHT "Copyright (C) 1991-2001, RAD Game Tools, Inc."
-
-#endif
-
-#ifndef MSS_H
-#define MSS_H
-
-// IS_DOS for DOS
-// IS_WINDOWS for Windows or Win32s
-// IS_WIN32 for Win32s
-// IS_WIN16 for Windows
-// IS_32 for 32-bit DOS or Win32s
-// IS_16 for 16-bit Windows
-// IS_LE for little endian (PCs)
-// IS_BE for big endian (Macs)
-// IS_X86 for Intel
-// IS_MAC for Mac
-// IS_PPC for PPC Mac
-// IS_68K for 68K Mac
-
-
-#ifdef IS_DOS
-#undef IS_DOS
-#endif
-
-#ifdef IS_WINDOWS
-#undef IS_WINDOWS
-#endif
-
-#ifdef IS_WIN32
-#undef IS_WIN32
-#endif
-
-#ifdef IS_WIN16
-#undef IS_WIN16
-#endif
-
-#ifdef IS_32
-#undef IS_32
-#endif
-
-#ifdef IS_16
-#undef IS_16
-#endif
-
-#ifdef IS_LE
-#undef IS_LE
-#endif
-
-#ifdef IS_BE
-#undef IS_BE
-#endif
-
-#ifdef IS_X86
-#undef IS_X86
-#endif
-
-#ifdef IS_MAC
-#undef IS_MAC
-#endif
-
-#ifdef IS_PPC
-#undef IS_PPC
-#endif
-
-#ifdef IS_68K
-#undef IS_68K
-#endif
-
-#ifdef __DOS__
- #define IS_DOS
- #define IS_32
- #define IS_LE
- #define IS_X86
-#else
- #ifdef _WIN32
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #define IS_LE
- #define IS_X86
- #else
- #ifdef WIN32
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #define IS_LE
- #define IS_X86
- #else
- #ifdef __NT__
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #define IS_LE
- #define IS_X86
- #else
- #ifdef __WIN32__
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #define IS_LE
- #define IS_X86
- #else
- #ifdef _WINDOWS
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #ifdef _WINDLL
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #ifdef WINDOWS
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #ifdef __WINDOWS__
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #ifdef _Windows
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #if defined(macintosh) || defined(__powerc) || defined(powerc) || defined(__POWERPC__) || defined(__MC68K__)
- #define IS_MAC
- #define IS_32
- #define IS_BE
- #if defined(__powerc) || defined(powerc) || defined(__POWERPC__)
- #define IS_PPC
- #else
- #if defined(__MC68K__)
- #define IS_68K
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
-#endif
-
-#if (!defined(IS_LE) && !defined(IS_BE))
- #error MSS.H did not detect your platform. Define __DOS__, _WINDOWS, WIN32, or macintosh.
-#endif
-
-
-#if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH
- #pragma pack(push,1)
-#else
- #pragma pack(1)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef IS_DOS
-
-#define AILCALLBACK __pascal
-#define AILEXPORT cdecl
-#define DXDEC extern
-#define DXDEF
-#define AILCALL cdecl
-#define FAR
-#define HIWORD(ptr) (((U32)ptr)>>16)
-#define LOWORD(ptr) ((U16)((U32)ptr))
-
-#define FOURCC U32
-
-#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
-
-#define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
-
-#define AILLIBCALLBACK __pascal
-
-#define MSS_MAIN_DEF
-
-#define MSS_REDIST_DIR_NAME "DOS"
-
-#define MSS_DIR_SEP "\\"
-#define MSS_DIR_UP ".." MSS_DIR_SEP
-#define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
-
-#else
-
-#ifdef IS_WINDOWS
-
-#define AILLIBCALLBACK WINAPI
-
-#ifndef WIN32_LEAN_AND_MEAN
-#define WIN32_LEAN_AND_MEAN
-#endif
-
-#ifndef WIN32_EXTRA_LEAN
-#define WIN32_EXTRA_LEAN
-#endif
-
-#ifndef STRICT
-#define STRICT
-#endif
-
-#include <windows.h>
-#include <mmsystem.h>
-
-#define MSS_MAIN_DEF __cdecl
-
-//
-// If compiling MSS DLL, use __declspec(dllexport) for both
-// declarations and definitions
-//
-// If compiling MSS16 library or application, use "extern" in declarations
-// and nothing in definitions
-//
-
-#ifdef IS_WIN32
-
- #define AILEXPORT WINAPI
-
- #ifdef BUILD_MSS
- #define DXDEC __declspec(dllexport)
- #define DXDEF __declspec(dllexport)
- #else
-
- #if 1 /*def __BORLANDC__*/
- #define DXDEC extern
- #define DXDEF
- #else
- #define DXDEC __declspec(dllimport)
- #endif
-
- #endif
-
- #define MSSDLLNAME "MSS32.DLL"
- #define MSS_REDIST_DIR_NAME "WIN32"
-
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
-
-#else
-
- #define AILEXPORT __export WINAPI
-
- #define DXDEC extern
- #define DXDEF
-
- #define MSSDLLNAME "MSS16.DLL"
- #define MSS_REDIST_DIR_NAME "WIN16"
-
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
-
-#endif
-
-#define AILCALL WINAPI
-#define AILCALLBACK AILEXPORT
-
-typedef LPVOID AILLPDIRECTSOUND;
-typedef LPVOID AILLPDIRECTSOUNDBUFFER;
-
-#else
-
-#ifdef IS_MAC
-
-#include <string.h>
-#include <Files.h>
-#include <Sound.h>
-#include <Resources.h> // needed for GetResource, ReleaseResource
-
-#define FAR
-
-#define AILLIBCALLBACK //pascal
-#define AILCALL //pascal
-#define AILEXPORT //pascal
-#define AILCALLBACK //pascal
-
-#ifdef BUILD_MSS
- #define DXDEC __declspec(export)
- #define DXDEF
-#else
- #define DXDEC extern
- #define DXDEF
-#endif
-
-#define MSS_REDIST_DIR_NAME "MAC"
-
-#define MSS_DIR_SEP ":"
-#define MSS_DIR_UP ":" MSS_DIR_SEP
-#define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_SEP
-
-#define HIWORD(ptr) (((U32)ptr)>>16)
-#define LOWORD(ptr) ((U16)((U32)ptr))
-
-#define FOURCC U32
-
-#ifndef MAKEFOURCC
-#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
-#endif
-
-#define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
-
-#define MSS_MAIN_DEF
-
-#endif
-
-#endif
-
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-//
-// Misc. constant definitions
-//
-
-#define MAX_DRVRS 16 // Max. # of simultaneous drivers
-#define MAX_TIMERS 16 // Max. # of simultaneous timers
-#define MAX_NOTES 32 // Max # of notes "on"
-#define FOR_NEST 4 // # of nested XMIDI FOR loops
-#define NUM_CHANS 16 // # of possible MIDI channels
-#define MAX_W_VOICES 16 // Max virtual wave synth voice cnt
-#define MAX_W_ENTRIES 512 // 512 wave library entries max.
-#ifdef IS_MAC
-#define MAX_INSTR 150 // Max # of instruments 128 + 32
-#endif
-
-#define MIN_CHAN ( 1-1) // Min channel recognized (0-based)
-#define MAX_CHAN (16-1) // Max channel recognized
-#define MIN_LOCK_CHAN ( 2-1) // Min channel available for locking
-#define MAX_LOCK_CHAN ( 9-1) // Max channel available for locking
-#define PERCUSS_CHAN (10-1) // Percussion channel (no locking)
-
-#define AIL_MAX_FILE_HEADER_SIZE 4096 // AIL_set_named_sample_file() requires at least 4K
- // of data or the entire file image, whichever is less,
- // to determine sample format
-#define DIG_F_16BITS_MASK 1
-#define DIG_F_STEREO_MASK 2
-#define DIG_F_ADPCM_MASK 4
-
-#define DIG_F_MONO_8 0 // PCM data formats
-#define DIG_F_MONO_16 (DIG_F_16BITS_MASK)
-#define DIG_F_STEREO_8 (DIG_F_STEREO_MASK)
-#define DIG_F_STEREO_16 (DIG_F_STEREO_MASK|DIG_F_16BITS_MASK)
-#define DIG_F_ADPCM_MONO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK)
-#define DIG_F_ADPCM_STEREO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_STEREO_MASK)
-#define DIG_F_USING_ASI 16
-
-#define DIG_PCM_SIGN 0x0001 // (obsolete)
-#define DIG_PCM_ORDER 0x0002
-
-#define DIG_PCM_POLARITY 0x0004 // PCM flags used by driver hardware
-#define DIG_PCM_SPLIT 0x0008
-#define DIG_BUFFER_SERVICE 0x0010
-#define DIG_DUAL_DMA 0x0020
-#define DIG_RECORDING_SUPPORTED 0x8000
-
-#define WAVE_FORMAT_PCM 1
-#define WAVE_FORMAT_IMA_ADPCM 0x0011
-
-#ifdef IS_DOS
-
-#define AIL3DIG 0 // .DIG driver
-#define AIL3MDI 1 // .MDI driver
-
-#define DIG_DETECT_8_BIT_ONLY 0x0001 // Detect 8-bit DMA only
-#define DIG_DETECT_16_BIT_ONLY 0x0002 // Detect 16-bit DMA only
-#define DIG_DETECT_8_AND_16_BITS 0x0003 // Detect both 8- and 16-bit DMA
-
-#define DRV_INIT 0x300 // Functions common to .MDI and .DIG
-#define DRV_GET_INFO 0x301 // drivers
-#define DRV_SERVE 0x302
-#define DRV_PARSE_ENV 0x303
-#define DRV_VERIFY_IO 0x304
-#define DRV_INIT_DEV 0x305
-#define DRV_SHUTDOWN_DEV 0x306
-
-#define DIG_HW_VOLUME 0x400 // .DIG driver functions
-#define DIG_START_P_CMD 0x401
-#define DIG_STOP_P_REQ 0x402
-#define DIG_START_R_CMD 0x403
-#define DIG_STOP_R_REQ 0x404
-#define DIG_VSE 0x405
-
-#define MDI_HW_VOLUME 0x500 // .MDI driver functions
-#define MDI_INIT_INS_MGR 0x501
-#define MDI_MIDI_XMIT 0x502
-#define MDI_INSTALL_T_SET 0x503
-#define MDI_GET_T_STATUS 0x504
-#define MDI_PROT_UNPROT_T 0x505
-#define MDI_VSE 0x506
-
-#else
-
-//
-// Pass to AIL_midiOutOpen for NULL MIDI driver
-//
-
-#define MIDI_NULL_DRIVER ((U32)(S32)-2)
-
-#endif
-
-
-//
-// Non-specific XMIDI/MIDI controllers and event types
-//
-
-#define SYSEX_BYTE 105
-#define PB_RANGE 106
-#define CHAN_MUTE 107
-#define CALLBACK_PFX 108
-#define SEQ_BRANCH 109
-#define CHAN_LOCK 110
-#define CHAN_PROTECT 111
-#define VOICE_PROTECT 112
-#define TIMBRE_PROTECT 113
-#define PATCH_BANK_SEL 114
-#define INDIRECT_C_PFX 115
-#define FOR_LOOP 116
-#define NEXT_LOOP 117
-#define CLEAR_BEAT_BAR 118
-#define CALLBACK_TRIG 119
-#define SEQ_INDEX 120
-
-#define GM_BANK_MSB 0
-#define MODULATION 1
-#define DATA_MSB 6
-#define PART_VOLUME 7
-#define PANPOT 10
-#define EXPRESSION 11
-#define GM_BANK_LSB 32
-#define DATA_LSB 38
-#define SUSTAIN 64
-#define REVERB 91
-#define CHORUS 93
-#define RPN_LSB 100
-#define RPN_MSB 101
-#define RESET_ALL_CTRLS 121
-#define ALL_NOTES_OFF 123
-
-#define EV_NOTE_OFF 0x80
-#define EV_NOTE_ON 0x90
-#define EV_POLY_PRESS 0xa0
-#define EV_CONTROL 0xb0
-#define EV_PROGRAM 0xc0
-#define EV_CHAN_PRESS 0xd0
-#define EV_PITCH 0xe0
-#define EV_SYSEX 0xf0
-#define EV_ESC 0xf7
-#define EV_META 0xff
-
-#define META_EOT 0x2f
-#define META_TEMPO 0x51
-#define META_TIME_SIG 0x58
-
-//
-// SAMPLE.system_data[] usage
-//
-
-#define SSD_EOD_CALLBACK 0 // Application end-of-data callback if not NULL
-#define VOC_BLK_PTR 1 // Pointer to current block
-#define VOC_REP_BLK 2 // Pointer to beginning of repeat loop block
-#define VOC_N_REPS 3 // # of iterations left in repeat loop
-#define VOC_MARKER 4 // Marker to search for, or -1 if all
-#define VOC_MARKER_FOUND 5 // Desired marker found if 1, else 0
-#define SSD_RELEASE 6 // Release sample handle upon termination if >0
-#ifdef IS_WINDOWS
-#define SSD_EOD_CB_WIN32S 7 // Application end-of-data callback is in Win32s
-#else
-#define SSD_TEMP 7 // Temporary storage location for general use
-#endif
-
-//
-// Timer status values
-//
-
-#define AILT_FREE 0 // Timer handle is free for allocation
-#define AILT_STOPPED 1 // Timer is stopped
-#define AILT_RUNNING 2 // Timer is running
-
-//
-// SAMPLE.status flag values
-//
-
-#define SMP_FREE 0x0001 // Sample is available for allocation
-
-#define SMP_DONE 0x0002 // Sample has finished playing, or has
- // never been started
-
-#define SMP_PLAYING 0x0004 // Sample is playing
-
-#define SMP_STOPPED 0x0008 // Sample has been stopped
-
-#define SMP_PLAYINGBUTRELEASED 0x0010 // Sample is playing, but digital handle
- // has been temporarily released
-
-
-
-//
-// SEQUENCE.status flag values
-//
-
-#define SEQ_FREE 0x0001 // Sequence is available for allocation
-
-#define SEQ_DONE 0x0002 // Sequence has finished playing, or has
- // never been started
-
-#define SEQ_PLAYING 0x0004 // Sequence is playing
-
-#define SEQ_STOPPED 0x0008 // Sequence has been stopped
-
-#define SEQ_PLAYINGBUTRELEASED 0x0010 // Sequence is playing, but MIDI handle
- // has been temporarily released
-
-#ifdef IS_DOS
-
-//
-// MIDI driver types
-//
-
-#define MDIDRVRTYPE_GM 0 // General MIDI driver (Roland-compatible)
-#define MDIDRVRTYPE_FM_2 1 // 2-operator FM MIDI driver (OPL2)
-#define MDIDRVRTYPE_FM_4 2 // 4-operator FM MIDI driver (OPL3)
-#define MDIDRVRTYPE_SPKR 3 // Tandy or PC speaker "beep" driver
-
-//
-// .INI installation result codes
-//
-
-#define AIL_INIT_SUCCESS 0 // Driver installed successfully
-#define AIL_NO_INI_FILE 1 // No MDI.INI or DIG.INI file exists
-#define AIL_INIT_FAILURE 2 // Driver could not be initialized
-
-#ifdef __BORLANDC__
-
- #ifndef REALPTR
- #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff) \
- - AIL_sel_base(_DS)))
- #endif
-
-#else
-
- #ifndef REALPTR
- #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff)))
- #endif
-
-#endif
-
-#else
-
-#ifdef IS_WINDOWS
-
-//
-// AIL_set_direct_buffer_control() command values
-//
-
-#define AILDS_RELINQUISH 0 // App returns control of secondary buffer
-#define AILDS_SEIZE 1 // App takes control of secondary buffer
-#define AILDS_SEIZE_LOOP 2 // App wishes to loop the secondary buffer
-
-#endif
-
-#endif
-
-//
-// General type definitions for portability
-//
-
-#ifndef C8
-#define C8 char
-#endif
-
-#ifndef U8
-#define U8 unsigned char
-#endif
-
-#ifndef S8
-#define S8 signed char
-#endif
-
-#ifndef U16
-#define U16 unsigned short
-#endif
-
-#ifndef S16
-#define S16 signed short
-#endif
-
-#ifndef U32
-#define U32 unsigned long
-#endif
-
-#ifndef S32
-#define S32 signed long
-#endif
-
-#ifndef F32
-#define F32 float
-#endif
-
-#ifndef F64
-#define F64 double
-#endif
-
-
-#ifndef REALFAR
-#define REALFAR unsigned long
-#endif
-
-#ifndef FILE_ERRS
-#define FILE_ERRS
-
-#define AIL_NO_ERROR 0
-#define AIL_IO_ERROR 1
-#define AIL_OUT_OF_MEMORY 2
-#define AIL_FILE_NOT_FOUND 3
-#define AIL_CANT_WRITE_FILE 4
-#define AIL_CANT_READ_FILE 5
-#define AIL_DISK_FULL 6
-
-#endif
-
-#define MIN_VAL 0
-#define NOM_VAL 1
-#define MAX_VAL 2
-
-#ifndef YES
-#define YES 1
-#endif
-
-#ifndef NO
-#define NO 0
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-//
-// Preference names and default values
-//
-
-#define DIG_RESAMPLING_TOLERANCE 0
-#define DEFAULT_DRT 131 // Resampling triggered at +/- 0.2%
-
-#define DIG_MIXER_CHANNELS 1
-#define DEFAULT_DMC 64 // 64 allocatable SAMPLE structures
-
-#define DIG_DEFAULT_VOLUME 2
-#define DEFAULT_DDV 127 // Default sample volume = 127 (0-127)
-
-#define MDI_SERVICE_RATE 3
-#define DEFAULT_MSR 120 // XMIDI sequencer timing = 120 Hz
-
-#define MDI_SEQUENCES 4
-#define DEFAULT_MS 8 // 8 sequence handles/driver
-
-#define MDI_DEFAULT_VOLUME 5
-#define DEFAULT_MDV 127 // Default sequence volume = 127 (0-127)
-
-#define MDI_QUANT_ADVANCE 6
-#define DEFAULT_MQA 1 // Beat/bar count +1 interval
-
-#define MDI_ALLOW_LOOP_BRANCHING 7
-#define DEFAULT_ALB NO // Branches cancel XMIDI FOR loops
-
-#define MDI_DEFAULT_BEND_RANGE 8
-#define DEFAULT_MDBR 2 // Default pitch-bend range = 2
-
-#ifdef IS_X86
-
-#define MDI_DOUBLE_NOTE_OFF 9
-#define DEFAULT_MDNO NO // For stuck notes on SB daughterboards
-
-#endif
-
-#define DIG_ENABLE_RESAMPLE_FILTER 31 // Enable resampling filter by
-#define DEFAULT_DERF YES // default
-
-#define DIG_DECODE_BUFFER_SIZE 32 // 2K decode buffer size by default
-#define DEFAULT_DDBS 2048
-
-#if defined(IS_WINDOWS) || defined(IS_MAC)
-
-#define MDI_SYSEX_BUFFER_SIZE 10
-#define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
-
-#define DIG_OUTPUT_BUFFER_SIZE 11
-#define DEFAULT_DOBS 49152 // 48K output buffer size
-
-#define AIL_MM_PERIOD 12
-#define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
-
-#endif
-
-#ifdef IS_WINDOWS
-
-#define DIG_DS_FRAGMENT_SIZE 34
-#define DEFAULT_DDFS 8 // Use 8 millisecond buffer fragments with DirectSound if MSS mixer in use
-
-#define DIG_DS_FRAGMENT_CNT 35
-#define DEFAULT_DDFC 96 // Use 96 buffer fragments with DirectSound if MSS mixer in use
-
-#define DIG_DS_MIX_FRAGMENT_CNT 42
-#define DEFAULT_DDMFC 8 // Mix ahead 8 buffer fragments
-
-#define DIG_DS_USE_PRIMARY 36
-#define DEFAULT_DDUP NO // Mix into secondary DirectSound buffer by default
-
-#define DIG_DS_DSBCAPS_CTRL3D 37
-#define DEFAULT_DDDC NO // Do not use DSBCAPS_CTRL3D by default
-
-#define DIG_DS_CREATION_HANDLER 38
-#define DEFAULT_DDCH NULL // Use DirectSoundCreate() by default
-
-#define AIL_TIMERS 13
-#define DEFAULT_AT 16 // 16 allocatable HTIMER handles
-
-#define DIG_MAX_CHAIN_ELEMENT_SIZE 14
-#define DEFAULT_MCES 8192 // max of 8192 bytes/waveOut buffer
-
-#define DIG_MIN_CHAIN_ELEMENT_TIME 45
-#define DEFAULT_MCET 100 // 100 milliseconds buffers
-
-#define DIG_USE_WAVEOUT 15
-#define DEFAULT_DUW NO // Use DirectSound by default
-
-#define DIG_DS_SECONDARY_SIZE 16
-#define DEFAULT_DDSS (32*1024L) // Must be 2^n -- use 32K by default
-
-#define DIG_DS_SAMPLE_CEILING 17
-#define DEFAULT_DDSC 44100 // Allow up to 44 kHz samples
-
-#define AIL_LOCK_PROTECTION 18
-#define DEFAULT_ALP NO // Don't suspend foreground thread by default
-
-#define AIL_WIN32S_CALLBACK_SIZE 19
-#define DEFAULT_WCS 4096 // Size of callback data in bytes
-
-#define AIL_MUTEX_PROTECTION 44
-#define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
-
-#else
-
-#ifdef IS_DOS
-
-#define DIG_SERVICE_RATE 10
-#define DEFAULT_DSR 200 // DMA buffer-polling rate = 200 Hz
-
-#define DIG_HARDWARE_SAMPLE_RATE 11
-#define DEFAULT_DHSR NOM_VAL // Use nominal sample rate by default
-
-#define DIG_DMA_RESERVE 12
-#define DEFAULT_DDR 32768 // Reserve 32K real-mode mem for DMA
-
-#define DIG_LATENCY 13
-#define DEFAULT_DL 100 // Half-buffer size in ms = 100
-
-#define DIG_USE_STEREO 14
-#define DEFAULT_DUS NO // Use mono output only
-
-#define DIG_USE_16_BITS 15
-#define DEFAULT_DU16 NO // Use 8-bit output by default
-
-#define DIG_ALLOW_16_BIT_DMA 16
-#define DEFAULT_DA16DMA YES // OK to use 16-bit DMA if necessary
-
-#define DIG_SS_LOCK 17
-#define DEFAULT_DSL NO // Don't disable IRQs while mixing
-
-#define AIL_SCAN_FOR_HARDWARE 18
-#define DEFAULT_ASH YES // Scan for I/O settings if necessary
-
-#define AIL_ALLOW_VDM_EXECUTION 19
-#define DEFAULT_AVE YES // Allow Windows "DOS box" execution
-
-#endif
-
-#endif
-
-// ----------------------------------
-// DLS Preference names and default values
-// Unless otherwise specified, values must be established
-// BEFORE calling DLSMSSOpen()!
-// ----------------------------------
-
-#define DLS_TIMEBASE 20
-#define DEFAULT_DTB 120 // 120 intervals/second by default
-
-#define DLS_VOICE_LIMIT 21
-#define DEFAULT_DVL 24 // 24 voices supported
-
-#define DLS_BANK_SELECT_ALIAS 22
-#define DEFAULT_DBSA NO // Do not treat controller 114 as bank
-
-#define DLS_STREAM_BOOTSTRAP 23 // Don't submit first stream buffer
-#define DEFAULT_DSB YES // until at least 2 available
-
-#define DLS_VOLUME_BOOST 24
-#define DEFAULT_DVB 0 // Boost final volume by 0 dB
-
-#define DLS_ENABLE_FILTERING 25 // Filtering = on by default
-#define DEFAULT_DEF YES // (may be changed at any time)
-
-#ifdef IS_X86
-
-#define AIL_ENABLE_MMX_SUPPORT 27 // Enable MMX support if present
-#define DEFAULT_AEMS YES // (may be changed at any time)
-
-#endif
-
-#define DLS_GM_PASSTHROUGH 28 // Pass unrecognized traffic on to
-#define DEFAULT_DGP YES // default GM driver layer
- // (may be changed at any time)
-
-#define DLS_ADPCM_TO_ASI_THRESHOLD 39 // Size in samples to switch to ASI
-#define DEFAULT_DATAT 32768
-
-//
-// Add'l platform-independent prefs
-//
-
-#define DIG_REVERB_BUFFER_SIZE 40
-#define DEFAULT_DRBS 0 // No reverb support by default
-
-#define DIG_INPUT_LATENCY 41 // Use >= 250-millisecond input buffers if
-#define DEFAULT_DIL 250 // explicit size request cannot be satisfied
-
-#ifdef IS_WINDOWS
-
-#define DIG_USE_WAVEIN 43
-#define DEFAULT_DUWI YES // Use waveIn for input by default
-
-#endif
-
-#define N_PREFS 46 // # of preference types
-
-typedef struct _AILSOUNDINFO {
- S32 format;
- void const FAR* data_ptr;
- U32 data_len;
- U32 rate;
- S32 bits;
- S32 channels;
- U32 samples;
- U32 block_size;
- void const FAR* initial_ptr;
-} AILSOUNDINFO;
-
-
-// for multi-processor machines
-
-#ifdef IS_WIN32
-
-#ifdef BUILD_MSS
-
- #define MSSLockedIncrement(var) _asm { lock inc [var] }
- #define MSSLockedDecrement(var) _asm { lock dec [var] }
-
- static void __MSSLockedIncrementAddr(void * addr)
- {
- _asm
- {
- mov eax,[addr]
- lock inc dword ptr [eax]
- }
- }
-
- static void __MSSLockedDecrementAddr(void * addr)
- {
- _asm {
- mov eax,[addr]
- lock dec dword ptr [eax]
- }
- }
-
- #define MSSLockedIncrementPtr(var) __MSSLockedIncrementAddr(&(var))
- #define MSSLockedDecrementPtr(var) __MSSLockedDecrementAddr(&(var))
-
-#else
-
- #define MSSLockedIncrement(var) (++var)
- #define MSSLockedDecrement(var) (--var)
-
- #define MSSLockedIncrementPtr(var) (++var)
- #define MSSLockedDecrementPtr(var) (--var)
-
-#endif
-
-#else
- #define MSSLockedIncrement(var) (++var)
- #define MSSLockedDecrement(var) (--var)
-
- #define MSSLockedIncrementPtr(var) (++var)
- #define MSSLockedDecrementPtr(var) (--var)
-#endif
-
-#ifndef RIB_H // RIB.H contents included if RIB.H not already included
-
-// #include "rib.h"
-
-#define RIB_H
-#define ARY_CNT(x) (sizeof((x)) / sizeof((x)[0]))
-
-// ----------------------------------
-// RIB data types
-// ----------------------------------
-
-typedef S32 RIBRESULT;
-
-#define RIB_NOERR 0 // Success -- no error
-#define RIB_NOT_ALL_AVAILABLE 1 // Some requested functions/attribs not available
-#define RIB_NOT_FOUND 2 // Resource not found
-#define RIB_OUT_OF_MEM 3 // Out of system RAM
-
-//
-// Handle to interface provider
-//
+typedef char C8;
+typedef uint8_t U8;
+typedef int8_t S8;
+typedef int16_t S16;
+typedef uint16_t U16;
+typedef int32_t S32;
+typedef uint32_t U32;
+typedef float F32;
+typedef double F64;
+typedef void *HSTREAM;
typedef U32 HPROVIDER;
-
-//
-// Handle representing token used to obtain attribute or preference
-// data from RIB provider
-//
-
-typedef U32 HATTRIB;
-
-//
-// Handle representing an enumerated interface entry
-//
-// RIB_enumerate_interface() returns 1 if valid next entry found, else
-// 0 if end of list reached
-//
-
-typedef U32 HINTENUM;
-#define HINTENUM_FIRST 0
-
-//
-// Handle representing an enumerated provider entry
-//
-// RIB_enumerate_providers() returns 1 if valid next entry found, else
-// 0 if end of list reached
-//
+typedef void *H3DPOBJECT;
+typedef H3DPOBJECT H3DSAMPLE;
+typedef void *HSAMPLE;
+typedef void *HDIGDRIVER;
typedef U32 HPROENUM;
#define HPROENUM_FIRST 0
-//
-// Data types for RIB attributes and preferences
-//
-
-typedef enum
-{
- RIB_NONE = 0, // No type
- RIB_CUSTOM, // Used for pointers to application-specific structures
- RIB_DEC, // Used for 32-bit integer values to be reported in decimal
- RIB_HEX, // Used for 32-bit integer values to be reported in hex
- RIB_FLOAT, // Used for 32-bit single-precision FP values
- RIB_PERCENT, // Used for 32-bit single-precision FP values to be reported as percentages
- RIB_BOOL, // Used for Boolean-constrained integer values to be reported as TRUE or FALSE
- RIB_STRING // Used for pointers to null-terminated ASCII strings
-}
-RIB_DATA_SUBTYPE;
-
-//
-// RIB_ENTRY_TYPE structure, used to register an interface or request one
-//
-
-typedef enum
-{
- RIB_FUNCTION = 0,
- RIB_ATTRIBUTE, // Attribute: read-only data type used for status/info communication
- RIB_PREFERENCE // Preference: read/write data type used to control behavior
-}
-RIB_ENTRY_TYPE;
-
-//
-// RIB_INTERFACE_ENTRY, used to represent a function or data entry in an
-// interface
-//
-
-typedef struct
-{
- RIB_ENTRY_TYPE type; // See list above
- C8 FAR *entry_name; // Name of desired function or attribute
- U32 token; // Function pointer or attribute token
- RIB_DATA_SUBTYPE subtype; // Data (attrib or preference) subtype
-}
-RIB_INTERFACE_ENTRY;
-
-//
-// Standard RAD Interface Broker provider identification attributes
-//
-
-#define PROVIDER_NAME (-100) // RIB_STRING name of decoder
-#define PROVIDER_VERSION (-101) // RIB_HEX BCD version number
-
-//
-// Standard function to obtain provider attributes (see PROVIDER_ defines
-// above)
-//
-// Each provider of a searchable interface must export this function
-//
-
-typedef U32 (AILCALL FAR *PROVIDER_QUERY_ATTRIBUTE) (HATTRIB index);
-
-//
-// Macros to simplify interface registrations/requests for functions,
-// attributes, and preferences
-//
-
-#define FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE }
-#define REG_FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE }
-
-#define AT(entry_name,ID) { RIB_ATTRIBUTE, (entry_name), (U32) &(ID), RIB_NONE }
-#define REG_AT(entry_name,ID,subtype) { RIB_ATTRIBUTE, (entry_name), (U32) (ID), subtype }
-
-#define PR(entry_name,ID) { RIB_PREFERENCE, (entry_name), (U32) &(ID), RIB_NONE }
-#define REG_PR(entry_name,ID,subtype) { RIB_PREFERENCE, (entry_name), (U32) (ID), subtype }
-
-#define RIB_register(x,y,z) RIB_register_interface (HPROVIDER(x), y, ARY_CNT(z), z)
-#define RIB_unregister(x,y,z) RIB_unregister_interface(HPROVIDER(x), y, ARY_CNT(z), z)
-#define RIB_unregister_all(x) RIB_unregister_interface(HPROVIDER(x), NULL, 0, NULL)
-#define RIB_free_libraries() RIB_free_provider_library(HPROVIDER(NULL));
-#define RIB_request(x,y,z) RIB_request_interface (x, y, ARY_CNT(z), z)
-
-// ----------------------------------
-// Standard RIB API prototypes
-// ----------------------------------
-
-DXDEC HPROVIDER AILCALL RIB_alloc_provider_handle (U32 module);
-DXDEC void AILCALL RIB_free_provider_handle (HPROVIDER provider);
-
-DXDEC HPROVIDER AILCALL RIB_load_provider_library (C8 const FAR *filename);
-DXDEC void AILCALL RIB_free_provider_library (HPROVIDER provider);
-
-DXDEC HPROVIDER AILCALL RIB_provider_library_handle (void);
-
-DXDEC RIBRESULT AILCALL RIB_register_interface (HPROVIDER provider,
- C8 const FAR *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const FAR *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_unregister_interface (HPROVIDER provider,
- C8 const FAR *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const FAR *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_request_interface (HPROVIDER provider,
- C8 const FAR *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY FAR *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_request_interface_entry (HPROVIDER provider,
- C8 const FAR *interface_name,
- RIB_ENTRY_TYPE entry_type,
- C8 const FAR *entry_name,
- U32 FAR *token);
-
-DXDEC S32 AILCALL RIB_enumerate_interface (HPROVIDER provider,
- C8 FAR *interface_name,
- RIB_ENTRY_TYPE type,
- HINTENUM FAR *next,
- RIB_INTERFACE_ENTRY FAR *dest);
-
-DXDEC S32 AILCALL RIB_enumerate_providers (C8 FAR *interface_name,
- HPROENUM FAR *next,
- HPROVIDER FAR *dest);
-
-DXDEC C8 FAR * AILCALL RIB_type_string (U32 data,
- RIB_DATA_SUBTYPE subtype);
-
-DXDEC HPROVIDER AILCALL RIB_find_file_provider (C8 const FAR *interface_name,
- C8 const FAR *attribute_name,
- C8 const FAR *file_suffix);
-
-DXDEC HPROVIDER AILCALL RIB_find_provider (C8 const FAR *interface_name,
- C8 const FAR *attribute_name,
- C8 const FAR *attribute_value);
-
-DXDEC HPROVIDER AILCALL RIB_find_files_provider (C8 const FAR *interface_name,
- C8 const FAR *attribute_name_1,
- C8 const FAR *file_suffix_1,
- C8 const FAR *attribute_name_2,
- C8 const FAR *file_suffix_2);
-
-DXDEC HPROVIDER AILCALL RIB_find_file_dec_provider (C8 const FAR *interface_name,
- C8 const FAR *attribute_name_1,
- U32 attribute_value_1,
- C8 const FAR *attribute_name_2,
- C8 const FAR *file_suffix_2);
-
-DXDEC S32 AILCALL RIB_load_application_providers
- (C8 const FAR *filespec);
-
-DXDEC void AILCALL RIB_set_provider_user_data (HPROVIDER provider,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL RIB_provider_user_data (HPROVIDER provider,
- U32 index);
-
-DXDEC void AILCALL RIB_set_provider_system_data
- (HPROVIDER provider,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL RIB_provider_system_data (HPROVIDER provider,
- U32 index);
-
-DXDEC C8 FAR * AILCALL RIB_error (void);
-
-#endif
-
-#ifndef MSS_ASI_VERSION // MSSASI.H contents included if MSSASI.H not already included
-
-// #include "mssasi.h"
-
-#define AIL_ASI_VERSION 1
-#define AIL_ASI_REVISION 0
-
-//
-// Handle to stream being managed by ASI codec
-//
-
-typedef S32 HASISTREAM;
-
-//
-// ASI result codes
-//
-
-typedef S32 ASIRESULT;
-
-#define ASI_NOERR 0 // Success -- no error
-#define ASI_NOT_ENABLED 1 // ASI not enabled
-#define ASI_ALREADY_STARTED 2 // ASI already started
-#define ASI_INVALID_PARAM 3 // Invalid parameters used
-#define ASI_INTERNAL_ERR 4 // Internal error in ASI driver
-#define ASI_OUT_OF_MEM 5 // Out of system RAM
-#define ASI_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
-#define ASI_NOT_FOUND 7 // ASI supported device not found
-#define ASI_NOT_INIT 8 // ASI not initialized
-#define ASI_CLOSE_ERR 9 // ASI not closed correctly
-
-// ----------------------------------
-// Application-provided ASI callbacks
-// ----------------------------------
-
-//
-// AILASIFETCHCB: Called by ASI to obtain data from stream source
-//
-// offset normally will be either 0 at the first call made by the codec
-// or -1 to specify a continuous stream, except when ASI_stream_seek()
-// is called to restart the stream codec at a new stream offset. In this
-// case, the application must execute the seek operation on the ASI codec's
-// behalf.
-//
-// In response to this callback, the application should read the requested
-// data and copy it to the specified destination buffer, returning the number
-// of bytes copied (which can be less than bytes_requested if the end of
-// the stream is reached).
-//
-
-typedef S32 (AILCALLBACK FAR * AILASIFETCHCB) (U32 user, // User value passed to ASI_open_stream()
- void FAR *dest, // Location to which stream data should be copied by app
- S32 bytes_requested, // # of bytes requested by ASI codec
- S32 offset); // If not -1, application should seek to this point in stream
-
-//############################################################################
-//## ##
-//## Interface "ASI codec" ##
-//## ##
-//############################################################################
-
-//
-// Initialize ASI stream codec
-//
-// No other ASI functions may be called outside an ASI_startup() /
-// ASI_shutdown() pair, except for the standard RIB function
-// PROVIDER_query_attribute(). All provider attributes must be accessible
-// without starting up the codec.
-//
-
-typedef ASIRESULT (AILCALL FAR *ASI_STARTUP)(void);
-
-//
-// Shut down ASI codec
-//
-
-typedef ASIRESULT (AILCALL FAR * ASI_SHUTDOWN)(void);
-
-//
-// Return codec error message, or NULL if no errors have occurred since
-// last call
-//
-// The ASI error text state is global to all streams
-//
-
-typedef C8 FAR * (AILCALL FAR * ASI_ERROR)(void);
-
-//############################################################################
-//## ##
-//## Interface "ASI stream" ##
-//## ##
-//############################################################################
-
-//
-// Open a stream, returning handle to stream
-//
-
-typedef HASISTREAM (AILCALL FAR *ASI_STREAM_OPEN) (U32 user, // User value passed to fetch callback
- AILASIFETCHCB fetch_CB, // Source data fetch handler
- U32 total_size); // Total size for %-done calculations (0=unknown)
-
-//
-// Translate data in stream, returning # of bytes actually decoded or encoded
-//
-// Any number of bytes may be requested. Requesting more data than is
-// available in the codec's internal buffer will cause the AILASIFETCHCB
-// handler to be called to fetch more data from the stream.
-//
-
-typedef S32 (AILCALL FAR *ASI_STREAM_PROCESS) (HASISTREAM stream, // Handle of stream
- void FAR *buffer, // Destination for processed data
- S32 buffer_size); // # of bytes to return in buffer
-
-//
-// Restart stream decoding process at new offset
-//
-// Relevant for decoders only
-//
-// Seek destination is given as offset in bytes from beginning of stream
-//
-// At next ASI_stream_process() call, decoder will seek to the closest possible
-// point in the stream which occurs at or after the specified position
-//
-// This function has no effect for decoders which do not support random
-// seeks on a given stream type
-//
-// Warning: some decoders may need to implement seeking by reparsing
-// the entire stream up to the specified offset, through multiple calls
-// to the data-fetch callback. This operation may be extremely
-// time-consuming on large files or slow network connections.
-//
-// A stream_offset value of -1 may be used to inform the decoder that the
-// application has changed the input stream offset on its own, e.g. for a
-// double-buffering application where the ASI decoder is not accessing the
-// stream directly. ASI decoders should respond to this by flushing all
-// internal buffers and resynchronizing themselves to the data stream.
-//
-
-typedef ASIRESULT (AILCALL FAR *ASI_STREAM_SEEK) (HASISTREAM stream,
- S32 stream_offset);
-
-//
-// Retrieve an ASI stream attribute or preference value by index
-//
-
-typedef S32 (AILCALL FAR *ASI_STREAM_ATTRIBUTE) (HASISTREAM stream,
- HATTRIB attrib);
-
-//
-// Set an ASI stream preference value by index
-//
-
-typedef S32 (AILCALL FAR *ASI_STREAM_SET_PREFERENCE) (HASISTREAM stream,
- HATTRIB preference,
- void const FAR * value);
-
-//
-// Close stream, freeing handle and all internally-allocated resources
-//
-
-typedef ASIRESULT (AILCALL FAR *ASI_STREAM_CLOSE) (HASISTREAM stream);
-
-#endif
-
-//############################################################################
-//## ##
-//## Interface "MSS 3D audio services" ##
-//## ##
-//############################################################################
-
-//
-// 3D positioning services
-//
-
-
-typedef struct h3DPOBJECT
-{
- U32 junk;
-} h3DPOBJECT;
-
-typedef h3DPOBJECT FAR * H3DPOBJECT;
-typedef H3DPOBJECT H3DSAMPLE;
-
-//
-// M3D result codes
-//
-
typedef S32 M3DRESULT;
-#define M3D_NOERR 0 // Success -- no error
-#define M3D_NOT_ENABLED 1 // M3D not enabled
-#define M3D_ALREADY_STARTED 2 // M3D already started
-#define M3D_INVALID_PARAM 3 // Invalid parameters used
-#define M3D_INTERNAL_ERR 4 // Internal error in M3D driver
-#define M3D_OUT_OF_MEM 5 // Out of system RAM
-#define M3D_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
-#define M3D_NOT_FOUND 7 // M3D supported device not found
-#define M3D_NOT_INIT 8 // M3D not initialized
-#define M3D_CLOSE_ERR 9 // M3D not closed correctly
-
-
-typedef void (AILCALLBACK FAR* AIL3DSAMPLECB) (H3DSAMPLE sample);
-
-typedef M3DRESULT (AILCALL FAR *M3D_STARTUP)(void);
-
-typedef M3DRESULT (AILCALL FAR *M3D_SHUTDOWN)(void);
-
-typedef C8 FAR * (AILCALL FAR *M3D_ERROR)(void);
-
-typedef S32 (AILCALL FAR *M3D_SET_PROVIDER_PREFERENCE)(HATTRIB preference,
- void const FAR * value);
-
-typedef M3DRESULT (AILCALL FAR * M3D_ACTIVATE)(S32 enable);
-
-typedef H3DSAMPLE (AILCALL FAR * M3D_ALLOCATE_3D_SAMPLE_HANDLE)(void);
-
-
-typedef void (AILCALL FAR * M3D_RELEASE_3D_SAMPLE_HANDLE)(H3DSAMPLE samp);
-
-
-typedef void (AILCALL FAR * M3D_START_3D_SAMPLE)(H3DSAMPLE samp);
-
-
-typedef void (AILCALL FAR * M3D_STOP_3D_SAMPLE)(H3DSAMPLE samp);
-
-
-typedef void (AILCALL FAR * M3D_RESUME_3D_SAMPLE)(H3DSAMPLE samp);
-
-typedef void (AILCALL FAR * M3D_END_3D_SAMPLE)(H3DSAMPLE samp);
-
-typedef S32 (AILCALL FAR * M3D_SET_3D_SAMPLE_DATA)(H3DSAMPLE samp,
- AILSOUNDINFO const FAR *info);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_VOLUME)(H3DSAMPLE samp,
- S32 volume);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp,
- S32 playback_rate);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OFFSET)(H3DSAMPLE samp,
- U32 offset);
-
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp,
- U32 loops);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_BLOCK)(H3DSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_STATUS)(H3DSAMPLE samp);
-
-typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_ATTRIBUTE)(H3DSAMPLE samp, HATTRIB index);
-
-typedef S32 (AILCALL FAR * M3D_3D_SET_SAMPLE_PREFERENCE)(H3DSAMPLE samp, HATTRIB preference, void const FAR * value);
-
-typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_VOLUME)(H3DSAMPLE samp);
-
-typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp);
-
-typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_OFFSET)(H3DSAMPLE samp);
-
-typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LENGTH)(H3DSAMPLE samp);
-
-typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp,
- F32 max_dist,
- F32 min_dist);
-
-
-typedef void (AILCALL FAR * M3D_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp,
- F32 FAR * max_dist,
- F32 FAR * min_dist);
-
-typedef S32 (AILCALL FAR * M3D_ACTIVE_3D_SAMPLE_COUNT)(void);
-
-typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_LISTENER)(void);
-
-typedef void (AILCALL FAR * M3D_3D_CLOSE_LISTENER)(H3DPOBJECT listener);
-
-typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_OBJECT)(void);
-
-typedef void (AILCALL FAR * M3D_3D_CLOSE_OBJECT)(H3DPOBJECT obj);
-
-typedef void (AILCALL FAR * M3D_SET_3D_POSITION)(H3DPOBJECT obj,
- F32 X,
- F32 Y,
- F32 Z);
-
-typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY)(H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
-
-typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY_VECTOR)(H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
-
-typedef void (AILCALL FAR * M3D_SET_3D_ORIENTATION)(H3DPOBJECT obj,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
-
-typedef void (AILCALL FAR * M3D_3D_POSITION)(H3DPOBJECT obj,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
-
-typedef void (AILCALL FAR * M3D_3D_VELOCITY)(H3DPOBJECT obj,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
-
-typedef void (AILCALL FAR * M3D_3D_ORIENTATION)(H3DPOBJECT obj,
- F32 FAR *X_face,
- F32 FAR *Y_face,
- F32 FAR *Z_face,
- F32 FAR *X_up,
- F32 FAR *Y_up,
- F32 FAR *Z_up);
-
-typedef void (AILCALL FAR * M3D_3D_UPDATE_POSITION)(H3DPOBJECT obj,
- F32 dt_milliseconds);
-
-typedef void (AILCALL FAR * M3D_3D_AUTO_UPDATE_POSITION)(H3DPOBJECT obj,
- S32 enable);
-
-typedef S32 (AILCALL FAR * M3D_3D_ROOM_TYPE)(void);
-typedef void (AILCALL FAR * M3D_SET_3D_ROOM_TYPE)(S32 EAX_room_type);
-typedef S32 (AILCALL FAR * M3D_3D_SPEAKER_TYPE)(void);
-typedef void (AILCALL FAR * M3D_SET_3D_SPEAKER_TYPE)(S32 speaker_type);
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OBSTRUCTION)(H3DSAMPLE samp, F32 obstruction);
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OCCLUSION)(H3DSAMPLE samp, F32 occlusion);
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_EFFECTS_LEVEL)(H3DSAMPLE samp, F32 effects_level);
-typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_OBSTRUCTION)(H3DSAMPLE samp);
-typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_OCCLUSION)(H3DSAMPLE samp);
-typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_EFFECTS_LEVEL)(H3DSAMPLE samp);
-
-typedef AIL3DSAMPLECB (AILCALL FAR * M3D_SET_3D_EOS)(H3DSAMPLE client,H3DSAMPLE samp,AIL3DSAMPLECB cb);
-
-typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_CONE)(H3DSAMPLE samp, F32 inner_angle, F32 outer_angle, S32 outer_volume);
-typedef void (AILCALL FAR * M3D_3D_SAMPLE_CONE)(H3DSAMPLE samp, F32 FAR* inner_angle, F32 FAR* outer_angle, S32 FAR* outer_volume);
-
-//############################################################################
-//## ##
-//## Interface "MSS mixer services" ##
-//## ##
-//############################################################################
-
-//
-// Operation flags used by mixer module
-//
-
-#define M_DEST_STEREO 1 // Set to enable stereo mixer output
-#define M_SRC_16 2 // Set to enable mixing of 16-bit samples
-#define M_FILTER 4 // Set to enable filtering when resampling
-#define M_SRC_STEREO 8 // Set to enable mixing of stereo input samples
-#define M_VOL_SCALING 16 // Set to enable volume scalars other than 2047
-#define M_RESAMPLE 32 // Set to enable playback ratios other than 65536
-#define M_ORDER 64 // Set to reverse L/R stereo order for sample
-
-#ifdef IS_32
-
-//
-// Initialize mixer
-//
-// No other mixer functions may be called outside a MIXER_startup() /
-// MIXER_shutdown() pair, except for the standard RIB function
-// PROVIDER_query_attribute(). All provider attributes must be accessible
-// without starting up the module.
-//
-
-typedef void (AILCALL FAR *MIXER_STARTUP)(void);
-
-//
-// Shut down mixer
-//
-
-typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void);
-
-//
-// Flush mixer buffer
-//
-
-typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest,
- S32 len,
- S32 FAR *reverb_buffer,
- S32 reverb_level
-#ifdef IS_X86
- ,U32 MMX_available
-#endif
- );
-
-//
-// Perform audio mixing operation
-//
-
-typedef void (AILCALL FAR *MIXER_MERGE) (void const FAR * FAR *src,
- U32 FAR *src_fract,
- void const FAR *src_end,
- S32 FAR * FAR *dest,
- void FAR *dest_end,
- S32 FAR *left_val,
- S32 FAR *right_val,
- S32 playback_ratio,
- S32 scale_left,
- S32 scale_right,
- U32 operation
-#ifdef IS_X86
- ,U32 MMX_available
-#endif
- );
-
-//
-// Translate mixer buffer contents to final output format
-//
-
-#ifdef IS_MAC
-
-typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation,
- U32 big_endian_output);
-#else
-
-typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation,
- U32 MMX_available);
-#endif
-#else
-
-//
-// Initialize mixer
-//
-// No other mixer functions may be called outside a MIXER_startup() /
-// MIXER_shutdown() pair, except for the standard RIB function
-// PROVIDER_query_attribute(). All provider attributes must be accessible
-// without starting up the module.
-//
-
-typedef void (AILCALL FAR *MIXER_STARTUP)(void);
-
-//
-// Shut down mixer
-//
-
-typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void);
-
-//
-// Flush mixer buffer
-//
-
-typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest,
- S32 len,
- S32 FAR *reverb_buffer,
- S32 reverb_level,
- U32 MMX_available);
-
-//
-// Perform audio mixing operation
-//
-
-typedef void (AILCALL FAR *MIXER_MERGE) (U32 src_sel,
- U32 dest_sel,
- U32 FAR *src_fract,
- U32 FAR *src_offset,
- U32 FAR *dest_offset,
- U32 src_end_offset,
- U32 dest_end_offset,
- S32 FAR *left_val,
- S32 FAR *right_val,
- S32 playback_ratio,
- S32 scale_both,
- U32 operation);
-
-//
-// Translate mixer buffer contents to final output format
-//
-
-typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation,
- U32 MMX_available);
-#endif
-
-//
-// Type definitions
-//
-
-struct _DIG_DRIVER;
-
-struct _MDI_DRIVER;
-
-typedef struct _DIG_DRIVER FAR * HDIGDRIVER; // Handle to digital driver
-
-typedef struct _MDI_DRIVER FAR * HMDIDRIVER; // Handle to XMIDI driver
-
-typedef struct _SAMPLE FAR * HSAMPLE; // Handle to sample
-
-typedef struct _SEQUENCE FAR * HSEQUENCE; // Handle to sequence
-
-typedef S32 HTIMER; // Handle to timer
-
-
-#ifdef IS_DOS
-
-//
-// Type definitions
-//
-
-typedef struct // I/O parameters structure
-{
- S16 IO;
- S16 IRQ;
- S16 DMA_8_bit;
- S16 DMA_16_bit;
- S32 IO_reserved[4];
-}
-IO_PARMS;
-
-typedef struct // Standard MSS 3.X VDI driver header
-{
- S8 ID[8]; // "AIL3xxx" ID string, followed by ^Z
-
- U32 driver_version;
-
- REALFAR common_IO_configurations;
- U16 num_IO_configurations;
-
- REALFAR environment_string;
-
- IO_PARMS IO;
-
- S16 service_rate;
-
- U16 busy;
-
- U16 driver_num; // Driver number
-
- U16 this_ISR; // Offset of INT 66H dispatcher
- REALFAR prev_ISR; // Pointer to previous INT 66H ISR
-
- S8 scratch[128]; // Shared scratch workspace
-
- S8 dev_name[80]; // Device name (VDI version >= 1.12 only)
-}
-VDI_HDR;
-
-typedef struct
-{
- U16 minimum_physical_sample_rate;
- U16 nominal_physical_sample_rate;
- U16 maximum_physical_sample_rate;
-
- U16 minimum_DMA_half_buffer_size;
- U16 maximum_DMA_half_buffer_size;
-
- U32 flags;
-}
-DIG_MODE;
-
-typedef struct
-{
- U8 format_supported[16];
- DIG_MODE format_data[16];
-}
-DIG_DDT;
-
-typedef struct
-{
- REALFAR DMA_buffer_A;
- REALFAR DMA_buffer_B;
- S16 active_buffer;
-}
-DIG_DST;
-
-typedef struct
-{
- REALFAR library_environment;
- REALFAR GTL_suffix;
-
- U16 num_voices;
-
- U16 max_melodic_channel;
- U16 min_melodic_channel;
- U16 percussion_channel;
-}
-MDI_DDT;
-
-typedef struct
-{
- S8 library_directory[128];
- S8 GTL_filename[128];
-
- S8 MIDI_data[512];
-}
-MDI_DST;
-
-typedef struct // Initialization file structure
-{
- char device_name[128]; // Device name
- char driver_name[128]; // Driver filename
- IO_PARMS IO; // I/O parameters for driver
-}
-AIL_INI;
-
-typedef struct // Handle to driver
-{
- REALFAR seg; // Seg:off pointer to driver (off=0)
- U32 sel; // Selector for driver (off=0)
- void *buf; // Protected-mode pointer to driver
- U32 size; // Size of driver image
- VDI_HDR *VHDR; // Pointer to driver header (same as buf)
- S32 type; // AIL3DIG or AIL3MDI (see below)
-
- S32 initialized; // 1 if hardware successfully init'd, else 0
-
- S32 PM_ISR; // -1 if no PM ISR hooked, else IRQ #
-
- HTIMER server; // DRV_SERVE periodic timer, if requested
-
- // Vector to high-level destructor, if any
-
- void (AILCALL *destructor)(HDIGDRIVER);
-
- // High-level descriptor (DIG_ or MDI_DRIVER)
- void *descriptor;
-}
-AIL_DRIVER;
-
-typedef struct // VDI interface register structure
-{
- S16 AX;
- S16 BX;
- S16 CX;
- S16 DX;
- S16 SI;
- S16 DI;
-}
-VDI_CALL;
-
-#endif
-
-//
-// Function pointer types
-//
-
-typedef void (AILCALLBACK FAR* AILINCB) (void const FAR *data, S32 len, U32 user_data);
-
-typedef void (AILCALLBACK FAR* AILTIMERCB) (U32 user);
-
-typedef void (AILCALLBACK FAR* AILSAMPLECB) (HSAMPLE sample);
-
-typedef S32 (AILCALLBACK FAR* AILEVENTCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 status,S32 data_1,S32 data_2);
-
-typedef S32 (AILCALLBACK FAR* AILTIMBRECB) (HMDIDRIVER hmi,S32 bank,S32 patch);
-
-typedef S32 (AILCALLBACK FAR* AILPREFIXCB) (HSEQUENCE seq,S32 log,S32 data);
-
-typedef void (AILCALLBACK FAR* AILTRIGGERCB) (HSEQUENCE seq,S32 log,S32 data);
-
-typedef void (AILCALLBACK FAR* AILBEATCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 beat,S32 measure);
-
-typedef void (AILCALLBACK FAR* AILSEQUENCECB) (HSEQUENCE seq);
-
-//
-// Handle to sample and driver being managed by pipeline filter
-//
-
-typedef S32 HSAMPLESTATE;
-typedef S32 HDRIVERSTATE;
-
-//
-// Digital pipeline stages
-//
-// These are the points at which external modules may be installed into
-// a given HSAMPLE or HDIGDRIVER's processing pipeline
-//
-
-typedef enum
-{
- DP_ASI_DECODER=0, // Must be "ASI codec stream" provider
- DP_FILTER, // Must be "MSS pipeline filter" provider
- DP_MERGE, // Must be "MSS mixer" provider
- N_SAMPLE_STAGES, // Placeholder for end of list (= # of valid stages)
- SAMPLE_ALL_STAGES // Used to signify all pipeline stages, for shutdown
-}
-SAMPLESTAGE;
-
-typedef enum
-{
- DP_FLUSH = 0, // Must be "MSS mixer" provider
- DP_DEFAULT_FILTER, // Must be "MSS pipeline filter" provider (sets the default)
- DP_DEFAULT_MERGE, // Must be "MSS mixer" provider (sets the default)
- DP_COPY, // Must be "MSS mixer" provider
- N_DIGDRV_STAGES, // Placeholder for end of list (= # of valid stages)
- DIGDRV_ALL_STAGES // Used to signify all pipeline stages, for shutdown
-}
-DIGDRVSTAGE;
-
-typedef struct
- {
- ASI_STREAM_OPEN ASI_stream_open;
- ASI_STREAM_PROCESS ASI_stream_process;
- ASI_STREAM_SEEK ASI_stream_seek;
- ASI_STREAM_CLOSE ASI_stream_close;
- ASI_STREAM_ATTRIBUTE ASI_stream_attribute;
- ASI_STREAM_SET_PREFERENCE ASI_stream_set_preference;
-
- HATTRIB INPUT_BIT_RATE;
- HATTRIB INPUT_SAMPLE_RATE;
- HATTRIB INPUT_BITS;
- HATTRIB INPUT_CHANNELS;
- HATTRIB OUTPUT_BIT_RATE;
- HATTRIB OUTPUT_SAMPLE_RATE;
- HATTRIB OUTPUT_BITS;
- HATTRIB OUTPUT_CHANNELS;
- HATTRIB POSITION;
- HATTRIB PERCENT_DONE;
- HATTRIB MIN_INPUT_BLOCK_SIZE;
- HATTRIB RAW_RATE;
- HATTRIB RAW_BITS;
- HATTRIB RAW_CHANNELS;
- HATTRIB REQUESTED_RATE;
- HATTRIB REQUESTED_BITS;
- HATTRIB REQUESTED_CHANS;
-
- HASISTREAM stream;
- }
-ASISTAGE;
-
-typedef struct
- {
- MIXER_FLUSH MSS_mixer_flush;
- MIXER_MERGE MSS_mixer_merge;
- MIXER_COPY MSS_mixer_copy;
- }
-MIXSTAGE;
-
-typedef struct
- {
- struct _FLTPROVIDER FAR *provider;
- HSAMPLESTATE sample_state;
- }
-FLTSTAGE;
-
-typedef struct
-{
- S32 active; // Pass-through if 0, active if 1
- HPROVIDER provider;
-
- union
- {
- ASISTAGE ASI;
- MIXSTAGE MIX;
- FLTSTAGE FLT;
- }
- TYPE;
-}
-DPINFO;
-
-//
-// Other data types
-//
-
-typedef struct _AIL_INPUT_INFO // Input descriptor type
-{
- U32 device_ID; // DS LPGUID or wave device ID
- U32 hardware_format; // e.g., DIG_F_STEREO_16
- U32 hardware_rate; // e.g., 22050
- AILINCB callback; // Callback function to receive incoming data
- S32 buffer_size; // Maximum # of bytes to be passed to callback (-1 to use DIG_INPUT_LATENCY)
- U32 user_data; // this is a user defined value
-}
-AIL_INPUT_INFO;
-
-typedef struct _AILTIMER // Timer instance
-{
- U32 status;
- AILTIMERCB callback;
- U32 user;
-
- S32 elapsed;
- S32 value;
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
- S32 IsWin32s; // Is this a Win32s callback
-} AILTIMERSTR;
-
-typedef struct _ADPCMDATATAG
-{
- U32 blocksize;
- U32 extrasamples;
- U32 blockleft;
- U32 step;
- U32 savesrc;
- U32 sample;
- U32 destend;
- U32 srcend;
- U32 samplesL;
- U32 samplesR;
- U16 moresamples[16];
-} ADPCMDATA;
-
-typedef struct _SAMPLE // Sample instance
-{
- char tag[4]; // HSAM
-
- HDIGDRIVER driver; // Driver for playback
-
- U32 status; // SMP_ flags: _FREE, _DONE, _PLAYING
-
- void const FAR *start[2]; // Sample buffer address (W)
- U32 len [2]; // Sample buffer size in bytes (W)
- U32 pos [2]; // Index to next byte (R/W)
- U32 done [2]; // Nonzero if buffer with len=0 sent by app
- S32 reset_ASI [2]; // Reset the ASI decoder at the end of the buffer
-
- U32 src_fract; // Fractional part of source address
- S32 left_val; // Mixer source value from end of last buffer
- S32 right_val; // Mixer source value from end of last buffer
-
- S32 current_buffer; // Buffer # active (0/1)
- S32 last_buffer; // Last active buffer (for double-buffering)
- S32 starved; // Buffer stream has run out of data
-
- S32 loop_count; // # of cycles-1 (1=one-shot, 0=indefinite)
- S32 loop_start; // Starting offset of loop block (0=SOF)
- S32 loop_end; // End offset of loop block (-1=EOF)
-
- S32 format; // DIG_F format (8/16 bits, mono/stereo)
- U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo only)
-
- S32 playback_rate; // Playback rate in hertz
-
- S32 volume; // Sample volume 0-127
- S32 pan; // Mono panpot/stereo balance (0=L ... 127=R)
-
- S32 left_scale; // Left/mono volume scalar 0-2047
- S32 right_scale; // Right volume scalar 0-2047
-
- S32 service_type; // 1 if single-buffered; 2 if streamed
-
- AILSAMPLECB SOB; // Start-of-block callback function
- AILSAMPLECB EOB; // End-of-buffer callback function
- AILSAMPLECB EOS; // End-of-sample callback function
-
- S32 user_data [8]; // Miscellaneous user data
- S32 system_data[8]; // Miscellaneous system data
-
- ADPCMDATA adpcm;
-
-#ifdef IS_WINDOWS
-
- S32 SOB_IsWin32s; // Is this a Win32s callback
- S32 EOB_IsWin32s; // Is this a Win32s callback
- S32 EOS_IsWin32s; // Is this a Win32s callback
-
- //
- // DirectSound-specific data
- //
-
- S32 secondary_buffer; // Secondary buffer index
-
- S32 service_interval; // Service sample every n ms
- S32 service_tick; // Current service countdown value
- S32 buffer_segment_size; // Buffer segment size to fill
-
- S32 prev_segment; // Previous segment # (0...n)
- S32 prev_cursor; // Previous play cursor location
-
- S32 bytes_remaining; // # of bytes left to play (if not -1)
-
- S32 direct_control; // 1 if app controls buffer, 0 if MSS
-
-#endif
-
- S32 doeob; // Flags to trigger callbacks
- S32 dosob;
- S32 doeos;
-
- //
- // Sample pipeline stages
- //
-
- DPINFO pipeline[N_SAMPLE_STAGES];
-
- //
- // Reverb parms
- //
-
- F32 reverb_level; // Level [0.0, 1.0]
- F32 reverb_reflect_time; // Reflect time in milliseconds
- F32 reverb_decay_time; // Decay time [0.1, 20.0]
- S32 base_scale; // Original 12-bit volume scalar
-}
-SAMPLE;
-
-#if defined(IS_WINDOWS) || defined(IS_MAC)
+#define M3D_NOERR 0
-DXDEC U32 AILCALL AIL_get_timer_highest_delay (void);
+enum { ENVIRONMENT_CAVE = 8 };
-DXDEC void AILCALL AIL_serve(void);
+#define AIL_3D_2_SPEAKER 0
+#define AIL_3D_HEADPHONE 1
+#define AIL_3D_4_SPEAKER 3
-#ifdef IS_MAC
+#define DIG_MIXER_CHANNELS 1
-typedef void * LPSTR;
+#define DIG_F_MONO_16 1
+#define DIG_PCM_SIGN 1
-#define WHDR_DONE 0
+#define SMP_PLAYING 4
-typedef struct _WAVEIN
+typedef struct _AILSOUNDINFO
{
- long temp;
-} * HWAVEIN;
-
-typedef struct _WAVEHDR
-{
- S32 dwFlags;
- S32 dwBytesRecorded;
- S32 dwUser;
- S32 temp;
- void * lpData;
- S32 dwBufferLength;
- S32 longdwLoops;
- S32 dwLoops;
- void * lpNext;
- U32 * reserved;
-
-} WAVEHDR, * LPWAVEHDR;
-
-#endif
-
-typedef struct _DIG_INPUT_DRIVER FAR *HDIGINPUT; // Handle to digital input driver
-
-typedef struct _DIG_INPUT_DRIVER // Handle to digital input driver
-{
- C8 tag[4]; // HDIN
-
- HTIMER background_timer; // Background timer handle
-
- AIL_INPUT_INFO info; // Input device descriptor
-
- S32 input_enabled; // 1 if enabled, 0 if not
-
-#ifndef IS_MAC
-
- U32 callback_user; // Callback user value
-
- //
- // Provider-independent data
- //
-
- U32 DMA_size; // Size of each DMA sub-buffer in bytes
- void FAR *DMA[2]; // Simulated DMA buffers
-
- U8 silence; // Silence value for current format (0 or 128)
-
- S32 device_active; // 1 if buffers submittable, 0 if not
-
- //
- // waveOut-specific data
- //
-
- HWAVEIN hWaveIn; // Handle to wave input device
- volatile WAVEHDR wavehdr[2]; // Handles to wave headers
-
-#else
- Boolean timer_started;
- Boolean locked;
- Boolean enter_lock;
- U32 saved_period;
-
- void* my_vars;
-
- //
- // Input related
- //
-
- U32 input_buffer_size;
- char * input_buffers[2];
-
- //
- // Mix related
- //
-
- char * build_buffer;
- U32 build_buffer_size;
-
- //
- // Output related
- //
- struct
- {
- S8 * buffer;
- S8 * buffer_end;
-
- U32 size;
- S8 * right_margine;
- S8 * current_head;
- S8 * current_tail;
- } output_buffer;
-
- S32 mix_operation;
- S32 playback_ratio;
- U32 src_fract;
- S8 * current_head;
- S32 left_val;
- S32 right_val;
-
- U32 stored_sample_size;
- U32 stored_number_of_channels;
-
- U32 last_rw_delta;
- U32 period;
-
-#endif
-}
-DIG_INPUT_DRIVER;
-
-#endif
-
-typedef struct _DIG_DRIVER // Handle to digital audio driver
-{
- char tag[4]; // HDIG
-
- HTIMER backgroundtimer; // Background timer handle
-
- S32 quiet; // # of consecutive quiet sample periods
-
- S32 n_active_samples; // # of samples being processed
-
- S32 master_volume; // Master sample volume 0-127
-
- S32 DMA_rate; // Hardware sample rate
- S32 hw_format; // DIG_F code in use
- U32 hw_mode_flags; // DIG_PCM_ flags for mode in use
-
- S32 channels_per_sample; // # of channels per sample (1 or 2)
- S32 bytes_per_channel; // # of bytes per channel (1 or 2)
- S32 channels_per_buffer; // # of channels per half-buffer
- S32 samples_per_buffer; // # of samples per half-buffer
-
- S32 playing; // Playback active if non-zero
-
-#ifdef IS_MAC
- U32 n_samples_allocated;
- U32 n_samples_used;
- U32 n_samples_played;
- SAMPLE *samples; // Pointer to SAMPLEs
-
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- U32 reset_works; // TRUE if OK to do waveOutReset
- U32 request_reset; // If nonzero, do waveOutReset ASAP
- S32 released; // has the sound manager been released?
-
- ExtSoundHeader sound_header;
- SndChannelPtr sound_channel;
- SndCallBackUPP global_callback;
- Ptr buffers[2];
- Boolean loaded[2];
- U32 work_buffer;
- U32 play_buffer;
- U32 load_pos;
- U32 load_size;
- Boolean load;
- U32 start_time;
- void* background_processor;
-
-#else
- HSAMPLE samples; // Pointer to list of SAMPLEs
-#endif
-
- S32 n_samples; // # of SAMPLEs
-
- S32 build_size; // # of bytes in build buffer
- S32 FAR *build_buffer; // Build buffer (4 * samples_per_buffer)
-
- S32 system_data[8]; // Miscellaneous system data
-
- S32 buffer_size; // Size of each output buffer
-
-#ifdef IS_WINDOWS
-
- //
- // waveOut-specific interface data
- //
-
- HWAVEOUT hWaveOut; // Wave output driver
-
- U32 reset_works; // TRUE if OK to do waveOutReset
- U32 request_reset; // If nonzero, do waveOutReset ASAP
-
- LPWAVEHDR first; // Pointer to first WAVEHDR in chain
- S32 n_buffers; // # of output WAVEHDRs in chain
-
- LPWAVEHDR volatile FAR *return_list; // Circular list of returned WAVEHDRs
- S32 volatile return_head; // Head of WAVEHDR list (insertion point)
- S32 volatile return_tail; // Tail of WAVEHDR list (retrieval point)
-
-
- U32 deviceid; // id from waveout open
- PCMWAVEFORMAT wformat; // format from waveout open
-
- //
- // DirectSound-specific interface data
- //
-
- U32 guid; // The guid id of the ds driver
- AILLPDIRECTSOUND pDS; // DirectSound output driver (don't
- // use with Smacker directly anymore!)
-
- U32 ds_priority; // priority opened with
-
- S32 emulated_ds; // is ds emulated or not?
- AILLPDIRECTSOUNDBUFFER lppdsb; // primary buffer or null
-
- U32 dsHwnd; // HWND used with DirectSound
-
- AILLPDIRECTSOUNDBUFFER FAR * lpbufflist; // List of pointers to secondary buffers
- HSAMPLE FAR *samp_list; // HSAMPLE associated with each buffer
- S32 FAR *sec_format; // DIG_F_ format for secondary buffer
- S32 max_buffs; // Max. allowable # of secondary buffers
-
- //
- // Misc. data
- //
-
- S32 released; // has the sound manager been released?
-
- U32 foreground_timer; // Foreground timer handle
-
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
-
- //
- // Vars for waveOut emulation
- //
-
- S32 DS_initialized;
-
- AILLPDIRECTSOUNDBUFFER DS_sec_buff; // Secondary buffer (or NULL if none)
- AILLPDIRECTSOUNDBUFFER DS_out_buff; // Output buffer (may be sec or prim)
- S32 DS_buffer_size; // Size of entire output buffer
-
- S32 DS_frag_cnt; // Total fragment count and size, and
- S32 DS_frag_size; // last fragment occupied by play cursor
- S32 DS_last_frag;
- S32 DS_last_write;
- S32 DS_last_timer;
- S32 DS_skip_time;
-
- S32 DS_use_default_format; // 1 to force use of default DS primary buffer format
-
-#else
-
- #ifdef IS_DOS
-
- // must be first in the DOS section
- void *DMA[2]; // Protected-mode pointers to half-buffers
- // (note that DMA[0] may != DMA_buf)
-
-
- REALFAR DMA_seg; // Seg:off pointer to DMA buffers (off=0)
- U32 DMA_sel; // Selector for DMA buffers (off=0)
- void *DMA_buf; // Protected-mode pointer to DMA buffers
-
- S16 *buffer_flag; // Protected-mode pointer to buffer flag
- S32 last_buffer; // Last active buffer flag value in driver
-
- AIL_DRIVER *drvr; // Base driver descriptor
-
- DIG_DDT *DDT; // Protected-mode pointer to DDT
- DIG_DST *DST; // Protected-mode pointer to DST
-
- #endif
-
-#endif
-
-#ifdef IS_X86
- S32 use_MMX; // Use MMX with this driver if TRUE
-#endif
-
- void FAR *decode_buffer; // Buffer used by optional ASI pipeline decoder
- S32 decode_buffer_size; // # of bytes in decode buffer
-
- U32 us_count;
- U32 ms_count;
- U32 last_ms_polled;
- U32 last_percent;
-
- //
- // Digital driver pipeline stages
- //
-
- DPINFO pipeline[N_DIGDRV_STAGES];
-
- //
- // Reverb buffer
- //
-
- S32 FAR *reverb_buffer;
- S32 reverb_buffer_size;
- S32 reverb_buffer_position;
-
-#ifdef IS_WINDOWS
- S32 no_wom_done; // don't process WOM_DONEs on this driver
- U32 wom_done_buffers;
-#endif
-}
-DIG_DRIVER;
-
-typedef struct // MIDI status log structure
- {
- S32 program [NUM_CHANS]; // Program Change
- S32 pitch_l [NUM_CHANS]; // Pitch Bend LSB
- S32 pitch_h [NUM_CHANS]; // Pitch Bend MSB
-
- S32 c_lock [NUM_CHANS]; // Channel Lock
- S32 c_prot [NUM_CHANS]; // Channel Lock Protection
- S32 c_mute [NUM_CHANS]; // Channel Mute
- S32 c_v_prot [NUM_CHANS]; // Voice Protection
- S32 bank [NUM_CHANS]; // Patch Bank Select
- S32 gm_bank_l [NUM_CHANS]; // GM Bank Select
- S32 gm_bank_m [NUM_CHANS]; // GM Bank Select
- S32 indirect [NUM_CHANS]; // ICA indirect controller value
- S32 callback [NUM_CHANS]; // Callback Trigger
-
- S32 mod [NUM_CHANS]; // Modulation
- S32 vol [NUM_CHANS]; // Volume
- S32 pan [NUM_CHANS]; // Panpot
- S32 exp [NUM_CHANS]; // Expression
- S32 sus [NUM_CHANS]; // Sustain
- S32 reverb [NUM_CHANS]; // Reverb
- S32 chorus [NUM_CHANS]; // Chorus
-
- S32 bend_range[NUM_CHANS]; // Bender Range (data MSB, RPN 0 assumed)
-
- S32 RPN_L [NUM_CHANS]; // RPN # LSB
- S32 RPN_M [NUM_CHANS]; // RPN # MSB
- }
-CTRL_LOG;
-
-typedef struct _SEQUENCE // XMIDI sequence state table
-{
- char tag[4]; // HSEQ
-
- HMDIDRIVER driver; // Driver for playback
-
- U32 status; // SEQ_ flags
-
- void const FAR *TIMB; // XMIDI IFF chunk pointers
- void const FAR *RBRN;
- void const FAR *EVNT;
-
- U8 const FAR *EVNT_ptr; // Current event pointer
-
- U8 FAR *ICA; // Indirect Controller Array
-
- AILPREFIXCB prefix_callback; // XMIDI Callback Prefix handler
- AILTRIGGERCB trigger_callback; // XMIDI Callback Trigger handler
- AILBEATCB beat_callback; // XMIDI beat/bar change handler
- AILSEQUENCECB EOS; // End-of-sequence callback function
-
- S32 loop_count; // 0=one-shot, -1=indefinite, ...
-
- S32 interval_count; // # of intervals until next event
- S32 interval_num; // # of intervals since start
-
- S32 volume; // Sequence volume 0-127
- S32 volume_target; // Target sequence volume 0-127
- S32 volume_accum; // Accumulated volume period
- S32 volume_period; // Period for volume stepping
-
- S32 tempo_percent; // Relative tempo percentage 0-100
- S32 tempo_target; // Target tempo 0-100
- S32 tempo_accum; // Accumulated tempo period
- S32 tempo_period; // Period for tempo stepping
- S32 tempo_error; // Error counter for tempo DDA
-
- S32 beat_count; // Sequence playback position
- S32 measure_count;
-
- S32 time_numerator; // Sequence timing data
- S32 time_fraction;
- S32 beat_fraction;
- S32 time_per_beat;
-
- void const FAR *FOR_ptrs[FOR_NEST]; // Loop stack
- S32 FOR_loop_count [FOR_NEST];
-
- S32 chan_map [NUM_CHANS]; // Physical channel map for sequence
-
- CTRL_LOG shadow; // Controller values for sequence
-
- S32 note_count; // # of notes "on"
-
- S32 note_chan [MAX_NOTES]; // Channel for queued note (-1=free)
- S32 note_num [MAX_NOTES]; // Note # for queued note
- S32 note_time [MAX_NOTES]; // Remaining duration in intervals
-
- S32 user_data [8]; // Miscellaneous user data
- S32 system_data[8]; // Miscellaneous system data
-
-#ifdef IS_WINDOWS
- S32 PREFIX_IsWin32s; // Is this a Win32s callback
- S32 TRIGGER_IsWin32s; // Is this a Win32s callback
- S32 BEAT_IsWin32s; // Is this a Win32s callback
- S32 EOS_IsWin32s; // Is this a Win32s callback
-#endif
-} SEQUENCE;
-
-#ifdef IS_MAC
-
-struct MIDIHDR;
-struct MIDIOUT;
-typedef struct MIDIOUT* HMIDIOUT;
-
-#endif
-
-typedef struct _MDI_DRIVER // Handle to XMIDI driver
-{
- char tag[4]; // HMDI
-
- HTIMER timer; // XMIDI quantization timer
- S32 interval_time; // XMIDI quantization timer interval in uS
-
- S32 disable; // > 0 to disable XMIDI service
-
- HSEQUENCE sequences; // Pointer to list of SEQUENCEs
- S32 n_sequences; // # of SEQUENCEs
-
- S32 lock [NUM_CHANS]; // 1 if locked, 2 if protected, else 0
- HSEQUENCE locker[NUM_CHANS]; // HSEQUENCE which locked channel
- HSEQUENCE owner [NUM_CHANS]; // HSEQUENCE which owned locked channel
- HSEQUENCE user [NUM_CHANS]; // Last sequence to use channel
- S32 state [NUM_CHANS]; // Lock state prior to being locked
-
- S32 notes [NUM_CHANS]; // # of active notes in channel
-
- AILEVENTCB event_trap; // MIDI event trap callback function
- AILTIMBRECB timbre_trap; // Timbre request callback function
-
- S32 master_volume; // Master XMIDI note volume 0-127
-
- S32 system_data[8]; // Miscellaneous system data
-
-#if defined(IS_WINDOWS) || defined(IS_MAC)
-
- S32 released; // has the hmidiout handle been released
- U32 deviceid; // ID of the MIDI device
- U8 FAR *sysdata; // SysEx buffer
-
-#endif
-
-#ifdef IS_WINDOWS
-
- S32 EVENT_IsWin32s; // Is this a Win32s callback
- S32 TIMBRE_IsWin32s; // Is this a Win32s callback
-
- MIDIHDR FAR *mhdr; // SysEx header
-
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- S32 callingCT; // Calling EXE's task number (16 bit only)
- S32 callingDS; // Calling EXE's DS (used in 16 bit only)
-
- HMIDIOUT hMidiOut; // MIDI output driver
-
-#else
-
- #ifdef IS_DOS
-
- S32 message_count; // MIDI message count
- S32 offset; // MIDI buffer offset
-
- AIL_DRIVER *drvr; // Base driver descriptor
-
- MDI_DDT *DDT; // Protected-mode pointer to DDT
- MDI_DST *DST; // Protected-mode pointer to DST
- #else
- #ifdef IS_MAC
- struct MIDIHDR FAR *mhdr; // SysEx header
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- HMIDIOUT hMidiOut; // MIDI output driver
- U32 last_us_time;
- long period_counter;
- long current_period_sum;
- #endif
- #endif
-
-#endif
-
-}
-MDI_DRIVER;
-
-typedef struct // XMIDI TIMB IFF chunk
- {
- S8 name[4];
-
- U8 msb;
- U8 lsb;
- U8 lsb2;
- U8 lsb3;
-
- U16 n_entries;
-
- U16 timbre[1];
- }
-TIMB_chunk;
-
-typedef struct // XMIDI RBRN IFF entry
- {
- S16 bnum;
- U32 offset;
- }
-RBRN_entry;
-
-typedef struct // Wave library entry
-{
- S32 bank; // XMIDI bank, MIDI patch for sample
- S32 patch;
-
- S32 root_key; // Root MIDI note # for sample (or -1)
-
- U32 file_offset; // Offset of wave data from start-of-file
- U32 size; // Size of wave sample in bytes
-
- S32 format; // DIG_F format (8/16 bits, mono/stereo)
- U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo)
- S32 playback_rate; // Playback rate in hertz
-}
-WAVE_ENTRY;
-
-typedef struct // Virtual "wave synthesizer" descriptor
-{
- HMDIDRIVER mdi; // MIDI driver for use with synthesizer
- HDIGDRIVER dig; // Digital driver for use with synthesizer
-
- WAVE_ENTRY FAR *library; // Pointer to wave library
-
- AILEVENTCB prev_event_fn; // Previous MIDI event trap function
- AILTIMBRECB prev_timb_fn; // Previous timbre request trap function
-
- CTRL_LOG controls; // MIDI controller states
-
- WAVE_ENTRY FAR *wave [NUM_CHANS];// Pointer to WAVE_ENTRY for each channel
-
- HSAMPLE S [MAX_W_VOICES]; // List of HSAMPLE voices
- S32 n_voices; // Actual # of voices allocated to synth
-
- S32 chan [MAX_W_VOICES]; // MIDI channel for each voice, or -1
- S32 note [MAX_W_VOICES]; // MIDI note number for voice
- S32 root [MAX_W_VOICES]; // MIDI root note for voice
- S32 rate [MAX_W_VOICES]; // Playback rate for voice
- S32 vel [MAX_W_VOICES]; // MIDI note velocity for voice
- U32 time [MAX_W_VOICES]; // Timestamp for voice
-
- U32 event; // Event counter for LRU timestamps
-}
-WAVE_SYNTH;
-
-typedef WAVE_SYNTH FAR * HWAVESYNTH;// Handle to virtual wave synthesizer
-
-//
-// Handle to thread which called AIL_startup()
-//
-// This thread is suspended by MSS callback threads, to simulate DOS-style
-// interrupt handler behavior
-//
-
-#ifdef IS_WIN32
-
-extern HANDLE hAppThread;
-
-#endif
-
-//
-// Background flag for timers
-//
-
-extern volatile S32 AIL_bkgnd_flag;
-
-//
-// Global preference array
-//
-
-extern S32 AIL_preference [N_PREFS];
-
-//
-// DIG_DRIVER list
-//
-
-extern HDIGDRIVER DIG_first;
-
-//
-// MDI_DRIVER list
-//
-
-extern HMDIDRIVER MDI_first;
-
-//
-// Miscellaneous system services
-//
-
-#define FILE_READ_WITH_SIZE ((void FAR*)(S32)-1)
-
-#ifndef NO_OLD_SYS_FUNCTIONS
-
-#define MEM_alloc_lock AIL_mem_alloc_lock
-#define MEM_free_lock AIL_mem_free_lock
-#define FILE_error AIL_file_error
-#define FILE_size AIL_file_size
-#define FILE_read AIL_file_read
-#define FILE_write AIL_file_write
-
-#ifdef IS_DOS
-
-#define MEM_alloc AIL_mem_alloc
-#define MEM_free AIL_mem_free
-#define MEM_use_malloc AIL_mem_use_malloc
-#define MEM_use_free AIL_mem_use_free
-#define MEM_alloc_DOS AIL_mem_alloc_DOS
-#define MEM_free_DOS AIL_mem_free_DOS
-#define VMM_lock_range AIL_vmm_lock_range
-#define VMM_unlock_range AIL_vmm_unlock_range
-#define VMM_lock AIL_vmm_lock
-#define VMM_unlock AIL_vmm_unlock
-
-#endif
-
-#endif
-
-extern S32 AILCALLBACK DP_ASI_DECODER_callback(U32 user,
- void FAR *dest,
- S32 bytes_requested,
- S32 offset);
-
-DXDEC void FAR * AILCALL AIL_mem_alloc_lock(U32 size);
-DXDEC void AILCALL AIL_mem_free_lock (void FAR *ptr);
-
-DXDEC S32 AILCALL AIL_file_error (void);
-
-DXDEC S32 AILCALL AIL_file_size (char const FAR *filename);
-
-DXDEC void FAR * AILCALL AIL_file_read (char const FAR *filename,
- void FAR *dest);
-
-DXDEC S32 AILCALL AIL_file_write (char const FAR *filename,
- void const FAR *buf,
- U32 len);
-
-DXDEC S32 AILCALL AIL_WAV_file_write
- (char const FAR *filename,
- void const FAR *buf,
- U32 len,
- S32 rate,
- S32 format);
-
-DXDEC S32 AILCALL AIL_file_append (char const FAR *filename,
- void const FAR *buf, U32 len);
-
-#ifdef IS_MAC
-
-
-DXDEC S32 AILCALL AIL_file_fss_size(FSSpec const FAR *filename);
-
-DXDEC void FAR * AILCALL AIL_file_fss_read(FSSpec const FAR *filename,
- void FAR *dest);
-
-DXDEC S32 AILCALL AIL_file_fss_write(FSSpec const FAR *filename,
- void const FAR *buf,
- U32 len);
-
-DXDEC S32 AILCALL AIL_file_fss_attrib_write
- (FSSpec const FAR *filename,
- void const FAR *buf,
- U32 len,
- U32 type,
- U32 creator );
-
-DXDEC S32 AILCALL AIL_WAV_file_fss_write
- (FSSpec const FAR *filename,
- void const FAR *buf,
- U32 len,
- S32 rate,
- S32 format);
-
-DXDEC void * AILCALL AIL_mem_use_malloc(void * AILCALLBACK (*fn)(U32));
-DXDEC void * AILCALL AIL_mem_use_free (void AILCALLBACK (*fn)(void *));
-
-#endif
-
-#ifdef IS_DOS
-
-extern void * AILCALLBACK (*AIL_mem_alloc) (U32);
-extern void AILCALLBACK (*AIL_mem_free) (void *);
-
-void * cdecl AIL_mem_use_malloc(void * AILCALLBACK (*fn)(U32));
-void * cdecl AIL_mem_use_free (void AILCALLBACK (*fn)(void *));
-
-//
-// Other memory-management functions
-//
-
-DXDEC S32 AILCALL AIL_mem_alloc_DOS (U32 n_paras,
- void **protected_ptr,
- U32 *segment_far_ptr,
- U32 *selector);
-
-DXDEC void AILCALL AIL_mem_free_DOS (void *protected_ptr,
- U32 segment_far_ptr,
- U32 selector);
-
-DXDEC S32 AILCALL AIL_vmm_lock_range (void *p1, void *p2);
-DXDEC S32 AILCALL AIL_vmm_unlock_range (void *p1, void *p2);
-
-DXDEC S32 AILCALL AIL_vmm_lock (void *start, U32 size);
-DXDEC S32 AILCALL AIL_vmm_unlock (void *start, U32 size);
-
-DXDEC U32 AILCALL AIL_sel_base (U32 sel);
-
-DXDEC void AILCALL AIL_sel_set_limit (U32 sel,
- U32 limit);
-//
-// Last IO_PARMS structure used to attempt device detection
-//
-
-extern IO_PARMS AIL_last_IO_attempt;
-
-//
-// Low-level support services
-//
-
-DXDEC REALFAR AILCALL AIL_get_real_vect (U32 vectnum);
-
-DXDEC void AILCALL AIL_set_real_vect (U32 vectnum,
- REALFAR real_ptr);
-
-DXDEC void AILCALL AIL_set_USE16_ISR (S32 IRQ,
- REALFAR real_base,
- U32 ISR_offset);
-
-DXDEC void AILCALL AIL_restore_USE16_ISR (S32 IRQ);
-
-DXDEC U32 AILCALL AIL_disable_interrupts (void);
-DXDEC void AILCALL AIL_restore_interrupts (U32 FD_register);
-
-DXDEC void AILCALL AIL_switch_stack (void *stack,
- U32 size,
- U32 *SS,
- void **ESP,
- void **EBP);
-
-DXDEC void AILCALL AIL_restore_stack (U32 SS,
- void *ESP,
- void *EBP);
-
-DXDEC S32 AILCALL AIL_call_driver (AIL_DRIVER *drvr,
- S32 fn,
- VDI_CALL *in,
- VDI_CALL *out);
-
-DXDEC S32 AILCALL AIL_read_INI (AIL_INI *INI,
- char *filename);
-
-DXDEC U32 AILCALL AIL_interrupt_divisor (void);
-
-#endif
-
-
-#ifdef __WATCOMC__
-
-void MSSBreakPoint();
-#pragma aux MSSBreakPoint = "int 3";
-
-#else
-
-#define MSSBreakPoint() __asm {int 3}
-
-#endif
-
-
-//
-// High-level support services
-//
-
-#ifdef IS_MAC
-
-#if !defined(max)
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#if !defined(min)
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-#endif
-
-#ifdef IS_DOS
-
-#ifdef IS_WATCOM
-
-#if !defined(max) // Watcom stdlib.h doesn't define these for C++
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#if !defined(min)
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-#endif
-
-#ifdef __SW_3R
-extern S32 AILCALL AIL_startup_reg (void);
-#define AIL_startup AIL_startup_reg
-#else
-extern S32 AILCALL AIL_startup_stack (void);
-#define AIL_startup AIL_startup_stack
-#endif
-
-#define AIL_quick_startup(ud,um,opr,opb,ops) AIL_quick_startup_with_start(&AIL_startup,ud,um,opr,opb,ops)
-
-#define AIL_get_preference(number) (AIL_preference[number])
-
-#else
-
-DXDEC S32 AILCALL AIL_startup (void);
-
-DXDEC S32 AILCALL AIL_get_preference (U32 number);
-
-#endif
-
-DXDEC void AILCALL AIL_shutdown (void);
-
-DXDEC S32 AILCALL AIL_set_preference (U32 number,
- S32 value);
-
-DXDEC char FAR *AILCALL AIL_last_error (void);
-
-DXDEC void AILCALL AIL_set_error (char const FAR * error_msg);
-
-//
-// Low-level support services
-//
-
-DXDEC void
-#ifndef IS_MAC
-__cdecl
-#endif
-AIL_debug_printf (C8 const FAR *fmt, ...);
-
-#ifdef IS_X86
-
-DXDEC U32 AILCALL AIL_MMX_available (void);
-
-#endif
-
-DXDEC void AILCALL AIL_lock (void);
-DXDEC void AILCALL AIL_unlock (void);
-
-#ifdef IS_WIN32
-
-DXDEC void AILCALL AIL_lock_mutex (void);
-DXDEC void AILCALL AIL_unlock_mutex (void);
-
-#endif
-
-DXDEC void AILCALL AIL_delay (S32 intervals);
-
-DXDEC S32 AILCALL AIL_background (void);
-
-//
-// Process services
-//
-
-DXDEC HTIMER AILCALL AIL_register_timer (AILTIMERCB fn);
-
-DXDEC U32 AILCALL AIL_set_timer_user (HTIMER timer,
- U32 user);
-
-DXDEC void AILCALL AIL_set_timer_period (HTIMER timer,
- U32 microseconds);
-
-DXDEC void AILCALL AIL_set_timer_frequency (HTIMER timer,
- U32 hertz);
-
-DXDEC void AILCALL AIL_set_timer_divisor (HTIMER timer,
- U32 PIT_divisor);
-
-DXDEC void AILCALL AIL_start_timer (HTIMER timer);
-DXDEC void AILCALL AIL_start_all_timers (void);
-
-DXDEC void AILCALL AIL_stop_timer (HTIMER timer);
-DXDEC void AILCALL AIL_stop_all_timers (void);
-
-DXDEC void AILCALL AIL_release_timer_handle (HTIMER timer);
-DXDEC void AILCALL AIL_release_all_timers (void);
-
-#ifdef IS_WIN32
-
-#ifndef BUILD_MSS
-
-// static function that handles shutdown
-int __cdecl MSS_auto_cleanup(void);
-
-#ifdef _MSC_VER
-// on MSVC, automatically register a cleanup function
-//ODCODENOTE Remove
-//#define AIL_startup() (MSS_auto_cleanup(),AIL_startup())
-#endif
-
-#endif
-
-DXDEC HWND AILCALL AIL_HWND (void);
-
-#else
- #ifdef IS_MAC
- DXDEC ProcessSerialNumber AIL_Process(void);
- #endif
-#endif
-
-//
-// high-level digital services
-//
-
-DXDEC HDIGDRIVER AILCALL AIL_open_digital_driver( U32 frequency,
- S32 bits,
- S32 channel,
- U32 flags );
-
-#define AIL_OPEN_DIGITAL_FORCE_PREFERENCE 1
-
-DXDEC void AILCALL AIL_close_digital_driver( HDIGDRIVER dig );
-
-#ifdef IS_WINDOWS
-
-#define AIL_MSS_version(str,len) \
-{ \
- HINSTANCE l=LoadLibrary(MSSDLLNAME); \
- if ((U32)l<=32) \
- *(str)=0; \
- else { \
- LoadString(l,1,str,len); \
- FreeLibrary(l); \
- } \
-}
-
-DXDEC S32 AILCALL AIL_waveOutOpen (HDIGDRIVER FAR *drvr,
- LPHWAVEOUT FAR *lphWaveOut,
- S32 wDeviceID,
- LPWAVEFORMAT lpFormat);
-
-DXDEC void AILCALL AIL_waveOutClose (HDIGDRIVER drvr);
-
-DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
-
-DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
-
-#else
-
-#ifdef IS_MAC
-
-typedef struct MSS_VersionType_
-{
- Str255 version_name;
-} MSS_VersionType;
-
-#define AIL_MSS_version(str,len) \
-{ \
- long _res = OpenResFile("\pMiles Shared Library"); \
- if (_res==-1) \
- { \
- str[0]=0; \
- } \
- else \
- { \
- Handle _H; \
- short _Err; \
- long _cur= CurResFile(); \
- UseResFile(_res); \
- _H = GetResource('vers', 2); \
- _Err = ResError(); \
- if((_Err != noErr) || (_H==0)) \
- { \
- str[0]=0; \
- UseResFile(_cur); \
- CloseResFile(_res); \
- } \
- else \
- { \
- if (GetHandleSize(_H)==0) \
- { \
- str[0]=0; \
- UseResFile(_cur); \
- CloseResFile(_res); \
- } \
- else \
- { \
- MSS_VersionType * _vt = (MSS_VersionType*)*_H; \
- if ((U32)_vt->version_name[6]>4) \
- _vt->version_name[6]-=4; \
- else \
- _vt->version_name[6]=0; \
- if (((U32)len) <= ((U32)_vt->version_name[6])) \
- _vt->version_name[6] = (U8)len-1; \
- memcpy( str, _vt->version_name+11, _vt->version_name[6] ); \
- str[_vt->version_name[6]]=0; \
- UseResFile(_cur); \
- CloseResFile(_res); \
- } \
- ReleaseResource(_H); \
- } \
- } \
-}
-
-DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
-
-DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
-
-#else
-
-//
-// DOS installation services
-//
-
-DXDEC IO_PARMS * AILCALL AIL_get_IO_environment (AIL_DRIVER *drvr);
-
-DXDEC AIL_DRIVER* AILCALL AIL_install_driver (U8 const *driver_image,
- U32 n_bytes);
-
-DXDEC void AILCALL AIL_uninstall_driver (AIL_DRIVER *drvr);
-
-DXDEC S32 AILCALL AIL_install_DIG_INI (HDIGDRIVER *dig);
-
-DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_file
- (char const *filename,
- IO_PARMS *IO);
-
-DXDEC void AILCALL AIL_uninstall_DIG_driver (HDIGDRIVER dig);
-
-
-DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_image
- (void const *driver_image,
- U32 size,
- IO_PARMS *IO);
-#endif
-#endif
-
-DXDEC char FAR* AILCALL AIL_set_redist_directory(char const FAR*dir);
-
-DXDEC S32 AILCALL AIL_digital_CPU_percent (HDIGDRIVER dig);
-
-DXDEC S32 AILCALL AIL_digital_latency (HDIGDRIVER dig);
-
-DXDEC HSAMPLE AILCALL AIL_allocate_sample_handle
- (HDIGDRIVER dig);
-
-DXDEC HSAMPLE AILCALL AIL_allocate_file_sample (HDIGDRIVER dig,
- void const FAR *file_image,
- S32 block);
-
-DXDEC void AILCALL AIL_release_sample_handle (HSAMPLE S);
-
-DXDEC void AILCALL AIL_init_sample (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_set_sample_file (HSAMPLE S,
- void const FAR *file_image,
- S32 block);
-
-DXDEC S32 AILCALL AIL_set_named_sample_file (HSAMPLE S,
- C8 const FAR *file_type_suffix,
- void const FAR *file_image,
- S32 file_size,
- S32 block);
-
-DXDEC HPROVIDER AILCALL AIL_set_sample_processor (HSAMPLE S,
- SAMPLESTAGE pipeline_stage,
- HPROVIDER provider);
-
-DXDEC HPROVIDER AILCALL AIL_set_digital_driver_processor
- (HDIGDRIVER dig,
- DIGDRVSTAGE pipeline_stage,
- HPROVIDER provider);
-
-DXDEC void AILCALL AIL_set_sample_adpcm_block_size
- (HSAMPLE S,
- U32 blocksize);
-
-DXDEC void AILCALL AIL_set_sample_address (HSAMPLE S,
- void const FAR *start,
- U32 len);
-
-DXDEC void AILCALL AIL_set_sample_type (HSAMPLE S,
- S32 format,
- U32 flags);
-
-DXDEC void AILCALL AIL_start_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_stop_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_resume_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_end_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_set_sample_playback_rate
- (HSAMPLE S,
- S32 playback_rate);
-
-DXDEC void AILCALL AIL_set_sample_volume (HSAMPLE S,
- S32 volume);
-
-DXDEC void AILCALL AIL_set_sample_pan (HSAMPLE S,
- S32 pan);
-
-DXDEC void AILCALL AIL_set_sample_loop_count (HSAMPLE S,
- S32 loop_count);
-
-DXDEC void AILCALL AIL_set_sample_loop_block (HSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-DXDEC U32 AILCALL AIL_sample_status (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_playback_rate (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_volume (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_pan (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_loop_count (HSAMPLE S);
-
-DXDEC void AILCALL AIL_set_digital_master_volume
- (HDIGDRIVER dig,
- S32 master_volume);
-
-DXDEC S32 AILCALL AIL_digital_master_volume (HDIGDRIVER dig);
-
-DXDEC void AILCALL AIL_set_sample_reverb(HSAMPLE S,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
-
-DXDEC void AILCALL AIL_sample_reverb (HSAMPLE S,
- F32 FAR *reverb_level,
- F32 FAR *reverb_reflect_time,
- F32 FAR *reverb_decay_time);
-
-//
-// low-level digital services
-//
-
-DXDEC S32 AILCALL AIL_minimum_sample_buffer_size(HDIGDRIVER dig,
- S32 playback_rate,
- S32 format);
-
-DXDEC S32 AILCALL AIL_sample_buffer_ready (HSAMPLE S);
-
-DXDEC void AILCALL AIL_load_sample_buffer (HSAMPLE S,
- U32 buff_num,
- void const FAR *buffer,
- U32 len);
-
-DXDEC void AILCALL AIL_request_EOB_ASI_reset (HSAMPLE S,
- U32 buff_num);
-
-DXDEC S32 AILCALL AIL_sample_buffer_info (HSAMPLE S, //)
- U32 FAR *pos0,
- U32 FAR *len0,
- U32 FAR *pos1,
- U32 FAR *len1);
-
-DXDEC U32 AILCALL AIL_sample_granularity (HSAMPLE S);
-
-DXDEC void AILCALL AIL_set_sample_position (HSAMPLE S,
- U32 pos);
-
-DXDEC U32 AILCALL AIL_sample_position (HSAMPLE S);
-
-DXDEC AILSAMPLECB AILCALL AIL_register_SOB_callback
- (HSAMPLE S,
- AILSAMPLECB SOB);
-
-DXDEC AILSAMPLECB AILCALL AIL_register_EOB_callback
- (HSAMPLE S,
- AILSAMPLECB EOB);
-
-DXDEC AILSAMPLECB AILCALL AIL_register_EOS_callback
- (HSAMPLE S,
- AILSAMPLECB EOS);
-
-DXDEC AILSAMPLECB AILCALL AIL_register_EOF_callback
- (HSAMPLE S,
- AILSAMPLECB EOFILE);
-
-DXDEC void AILCALL AIL_set_sample_user_data (HSAMPLE S,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL AIL_sample_user_data (HSAMPLE S,
- U32 index);
-
-DXDEC S32 AILCALL AIL_active_sample_count (HDIGDRIVER dig);
-
-DXDEC void AILCALL AIL_digital_configuration (HDIGDRIVER dig,
- S32 FAR *rate,
- S32 FAR *format,
- char FAR *string);
-#ifdef IS_WIN32
-
-DXDEC S32 AILCALL AIL_set_direct_buffer_control (HSAMPLE S,
- U32 command);
-
-DXDEC void AILCALL AIL_get_DirectSound_info (HSAMPLE S,
- AILLPDIRECTSOUND *lplpDS,
- AILLPDIRECTSOUNDBUFFER *lplpDSB);
-
-DXDEC S32 AILCALL AIL_set_DirectSound_HWND(HDIGDRIVER dig, HWND wnd);
-
-#endif
-
-DXDEC void AILCALL AIL_set_sample_ms_position (HSAMPLE S, //)
- S32 milliseconds);
-
-DXDEC void AILCALL AIL_sample_ms_position (HSAMPLE S, //)
- S32 FAR * total_milliseconds,
- S32 FAR * current_milliseconds);
-
-
-//
-// Digital input services
-//
-
-#if defined(IS_WINDOWS) || defined (IS_MAC)
-
-DXDEC HDIGINPUT AILCALL AIL_open_input (AIL_INPUT_INFO FAR *info);
-
-DXDEC void AILCALL AIL_close_input (HDIGINPUT dig);
-
-DXDEC AIL_INPUT_INFO FAR *
- AILCALL AIL_get_input_info (HDIGINPUT dig);
-
-DXDEC S32 AILCALL AIL_set_input_state (HDIGINPUT dig,
- S32 enable);
-#endif
-
-
-//
-// High-level XMIDI services
-//
-
-DXDEC HMDIDRIVER AILCALL AIL_open_XMIDI_driver( U32 flags );
-
-#define AIL_OPEN_XMIDI_NULL_DRIVER 1
-
-DXDEC void AILCALL AIL_close_XMIDI_driver( HMDIDRIVER mdi );
-
-#ifdef IS_MAC
-
-DXDEC S32 AILCALL AIL_MIDI_handle_release
- (HMDIDRIVER mdi);
-
-DXDEC S32 AILCALL AIL_MIDI_handle_reacquire
- (HMDIDRIVER mdi);
-
-#else
-
-#ifdef IS_WINDOWS
-
-DXDEC S32 AILCALL AIL_midiOutOpen(HMDIDRIVER FAR *drvr,
- LPHMIDIOUT FAR *lphMidiOut,
- S32 dwDeviceID);
-
-DXDEC void AILCALL AIL_midiOutClose (HMDIDRIVER mdi);
-
-DXDEC S32 AILCALL AIL_MIDI_handle_release
- (HMDIDRIVER mdi);
-
-DXDEC S32 AILCALL AIL_MIDI_handle_reacquire
- (HMDIDRIVER mdi);
-
-#else
-
-#ifdef IS_DOS
-
-DXDEC S32 AILCALL AIL_install_MDI_INI (HMDIDRIVER *mdi);
-
-DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_file
- (char const *filename,
- IO_PARMS *IO);
-
-DXDEC void AILCALL AIL_uninstall_MDI_driver (HMDIDRIVER mdi);
-
-
-DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_image
- (void const *driver_image,
- U32 size,
- IO_PARMS *IO);
-
-DXDEC S32 AILCALL AIL_MDI_driver_type (HMDIDRIVER mdi);
-
-DXDEC void AILCALL AIL_set_GTL_filename_prefix (char const*prefix);
-
-DXDEC S32 AILCALL AIL_timbre_status (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
-
-DXDEC S32 AILCALL AIL_install_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
-
-DXDEC void AILCALL AIL_protect_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
-
-DXDEC void AILCALL AIL_unprotect_timbre (HMDIDRIVER mdi,
- S32 bank,
- S32 patch);
-
-#endif
-
-#endif
-
-#endif
-
-DXDEC HSEQUENCE AILCALL AIL_allocate_sequence_handle
- (HMDIDRIVER mdi);
-
-DXDEC void AILCALL AIL_release_sequence_handle
- (HSEQUENCE S);
-
-DXDEC S32 AILCALL AIL_init_sequence (HSEQUENCE S,
- void const FAR *start,
- S32 sequence_num);
-
-DXDEC void AILCALL AIL_start_sequence (HSEQUENCE S);
-
-DXDEC void AILCALL AIL_stop_sequence (HSEQUENCE S);
-
-DXDEC void AILCALL AIL_resume_sequence (HSEQUENCE S);
-
-DXDEC void AILCALL AIL_end_sequence (HSEQUENCE S);
-
-DXDEC void AILCALL AIL_set_sequence_tempo (HSEQUENCE S,
- S32 tempo,
- S32 milliseconds);
-
-DXDEC void AILCALL AIL_set_sequence_volume (HSEQUENCE S,
- S32 volume,
- S32 milliseconds);
-
-DXDEC void AILCALL AIL_set_sequence_loop_count
- (HSEQUENCE S,
- S32 loop_count);
-
-DXDEC U32 AILCALL AIL_sequence_status (HSEQUENCE S);
-
-DXDEC S32 AILCALL AIL_sequence_tempo (HSEQUENCE S);
-
-DXDEC S32 AILCALL AIL_sequence_volume (HSEQUENCE S);
-
-DXDEC S32 AILCALL AIL_sequence_loop_count (HSEQUENCE S);
-
-DXDEC void AILCALL AIL_set_XMIDI_master_volume
- (HMDIDRIVER mdi,
- S32 master_volume);
-
-DXDEC S32 AILCALL AIL_XMIDI_master_volume (HMDIDRIVER mdi);
-
-
-//
-// Low-level XMIDI services
-//
-
-DXDEC S32 AILCALL AIL_active_sequence_count (HMDIDRIVER mdi);
-
-DXDEC S32 AILCALL AIL_controller_value (HSEQUENCE S,
- S32 channel,
- S32 controller_num);
-
-DXDEC S32 AILCALL AIL_channel_notes (HSEQUENCE S,
- S32 channel);
-
-DXDEC void AILCALL AIL_sequence_position (HSEQUENCE S,
- S32 FAR *beat,
- S32 FAR *measure);
-
-DXDEC void AILCALL AIL_branch_index (HSEQUENCE S,
- U32 marker);
-
-DXDEC AILPREFIXCB AILCALL AIL_register_prefix_callback
- (HSEQUENCE S,
- AILPREFIXCB callback);
-
-DXDEC AILTRIGGERCB AILCALL AIL_register_trigger_callback
- (HSEQUENCE S,
- AILTRIGGERCB callback);
-
-DXDEC AILSEQUENCECB AILCALL AIL_register_sequence_callback
- (HSEQUENCE S,
- AILSEQUENCECB callback);
-
-DXDEC AILBEATCB AILCALL AIL_register_beat_callback (HSEQUENCE S,
- AILBEATCB callback);
-
-DXDEC AILEVENTCB AILCALL AIL_register_event_callback (HMDIDRIVER mdi,
- AILEVENTCB callback);
-
-DXDEC AILTIMBRECB AILCALL AIL_register_timbre_callback
- (HMDIDRIVER mdi,
- AILTIMBRECB callback);
-
-DXDEC void AILCALL AIL_set_sequence_user_data (HSEQUENCE S,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL AIL_sequence_user_data (HSEQUENCE S,
- U32 index);
-
-DXDEC void AILCALL AIL_register_ICA_array (HSEQUENCE S,
- U8 FAR *array);
-
-DXDEC S32 AILCALL AIL_lock_channel (HMDIDRIVER mdi);
-
-DXDEC void AILCALL AIL_release_channel (HMDIDRIVER mdi,
- S32 channel);
-
-DXDEC void AILCALL AIL_map_sequence_channel (HSEQUENCE S,
- S32 seq_channel,
- S32 new_channel);
-
-DXDEC S32 AILCALL AIL_true_sequence_channel (HSEQUENCE S,
- S32 seq_channel);
-
-DXDEC void AILCALL AIL_send_channel_voice_message
- (HMDIDRIVER mdi,
- HSEQUENCE S,
- S32 status,
- S32 data_1,
- S32 data_2);
-
-DXDEC void AILCALL AIL_send_sysex_message (HMDIDRIVER mdi,
- void const FAR *buffer);
-
-DXDEC HWAVESYNTH
- AILCALL AIL_create_wave_synthesizer (HDIGDRIVER dig,
- HMDIDRIVER mdi,
- void const FAR *wave_lib,
- S32 polyphony);
-
-DXDEC void AILCALL AIL_destroy_wave_synthesizer (HWAVESYNTH W);
-
-DXDEC void AILCALL AIL_set_sequence_ms_position (HSEQUENCE S, //)
- S32 milliseconds);
-
-DXDEC void AILCALL AIL_sequence_ms_position(HSEQUENCE S, //)
- S32 FAR *total_milliseconds,
- S32 FAR *current_milliseconds);
-
-
-
-//
-// red book functions
-//
-
-#ifdef IS_DOS
-typedef struct _REDBOOKTRACKINFO {
- U32 tracks;
- U32 trackstarts[100];
-} REDBOOKTRACKINFO;
-#endif
-
-typedef struct _REDBOOK {
- U32 DeviceID;
- U32 paused;
- U32 pausedsec;
- U32 lastendsec;
-#ifdef IS_DOS
- U32 readcontents;
- REDBOOKTRACKINFO info;
-#endif
-#ifdef IS_MAC
- short vDRefNum;
-#endif
-} REDBOOK;
-
-typedef struct _REDBOOK FAR* HREDBOOK;
-
-#define REDBOOK_ERROR 0
-#define REDBOOK_PLAYING 1
-#define REDBOOK_PAUSED 2
-#define REDBOOK_STOPPED 3
-
-
-DXDEC HREDBOOK AILCALL AIL_redbook_open(U32 which);
-
-#ifdef IS_MAC
-DXDEC HREDBOOK AILCALL AIL_redbook_open_volume(char const * drive);
-#else
-DXDEC HREDBOOK AILCALL AIL_redbook_open_drive(S32 drive);
-#endif
-
-DXDEC void AILCALL AIL_redbook_close(HREDBOOK hand);
-
-DXDEC void AILCALL AIL_redbook_eject(HREDBOOK hand);
-
-DXDEC void AILCALL AIL_redbook_retract(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_status(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_tracks(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_track(HREDBOOK hand);
-
-DXDEC void AILCALL AIL_redbook_track_info(HREDBOOK hand,U32 tracknum,
- U32 FAR* startmsec,U32 FAR* endmsec);
-
-DXDEC U32 AILCALL AIL_redbook_id(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_position(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_play(HREDBOOK hand,U32 startmsec, U32 endmsec);
-
-DXDEC U32 AILCALL AIL_redbook_stop(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_pause(HREDBOOK hand);
-
-DXDEC U32 AILCALL AIL_redbook_resume(HREDBOOK hand);
-
-DXDEC S32 AILCALL AIL_redbook_volume(HREDBOOK hand);
-
-DXDEC S32 AILCALL AIL_redbook_set_volume(HREDBOOK hand, S32 volume);
-
-#ifdef IS_WIN16
- #define AIL_ms_count timeGetTime
- DXDEC U32 AILCALL AIL_us_count(void);
-#else
- DXDEC U32 AILCALL AIL_ms_count(void);
- DXDEC U32 AILCALL AIL_us_count(void);
-#endif
-
-
-typedef struct _STREAM FAR* HSTREAM; // Handle to stream
-
-typedef void (AILCALLBACK FAR* AILSTREAMCB) (HSTREAM stream);
-
-typedef struct _STREAM {
-
- S32 block_oriented; // 1 if this is an ADPCM or ASI-compressed stream
- S32 using_ASI; // 1 if using ASI decoder to uncompress stream data
- ASISTAGE FAR *ASI; // handy pointer to our ASI coded
-
- HSAMPLE samp; // the sample handle
-
- U32 fileh; // the open file handle
-
- U8 FAR* bufs[3]; // the data buffers
- U32 bufsizes[3]; // the size of each buffer
- S32 reset_ASI[3]; // should we reset the ASI at the end of the buffer?
- S32 bufstart[3]; // offset of where this buffer started
- void FAR* asyncs[3];// async read structures
-
- S32 loadedbufstart[2]; // offset of where the loaded buffer started
- S32 loadedorder[2]; // order of the buffers as they were loaded
- S32 loadorder; // incremented as each buffer is loaded
-
- S32 bufsize; // size of each buffer
- S32 readsize; // size of each read block
-
- U32 buf1; // 0,1,2 (current buffer that we are reading into)
- S32 size1; // holds the current amount of data read
-
- U32 buf2; // 0,1,2 (the next buffer that we are reading into)
- S32 size2; // next buffer loaded up to
-
- U32 buf3; // 0,1,2 (the next buffer that we are reading into)
- S32 size3; // next buffer loaded up to
-
- U32 datarate; // datarate in bytes per second
- S32 filerate; // original datarate of the file
- S32 filetype; // file format type
- U32 fileflags; // file format flags (signed or unsigned)
- S32 totallen; // total length of the sound data
-
- S32 substart; // subblock loop start
- S32 sublen; // subblock loop len
- S32 subpadding; // amount to pad the final block
-
- U32 blocksize; // ADPCM block size
- S32 padding; // padding to be done
- S32 padded; // padding done
-
- S32 loadedsome; // have we done any loads?
-
- U32 startpos; // point that the sound data begins
- U32 totalread; // total bytes read from the disk
-
- U32 loopsleft; // how many loops are left
-
- U32 error; // read error has occurred
-
- S32 preload; // preload the file into the first buffer
- U32 preloadpos; // position to use in preload
- S32 noback; // no background processing
- S32 alldone; // alldone
- S32 primeamount; // amount to load after a seek
- S32 readatleast; // forced amount to read on next service
-
- S32 playcontrol; // control: 0=stopped, 1=started, |8=paused, |16=sample paused
-
- AILSTREAMCB callback; // end of stream callback
-
- S32 user_data[8]; // Miscellaneous user data
- void FAR* next; // pointer to next stream
-
-#if defined(IS_WINDOWS) || defined(IS_MAC)
- S32 autostreaming; // are we autostreaming this stream
-#endif
-
-#ifdef IS_WINDOWS
- S32 cb_IsWin32s; // Is the callback win32s?
-#endif
-
- S32 docallback; // set when it time to poll for a callback
-
-#ifdef IS_MAC
- IOParam stream_param;
- S32 donext;
- S32 donext1;
- U32 fillup;
- U32 session;
- U32 tamt;
- U32 buf;
- S32* size;
- S32* done;
- S32 done1;
- S32 done2;
- S32 done3;
- Boolean force_quit;
-#endif
-
-} MSTREAM_TYPE;
-
-
-DXDEC HSTREAM AILCALL AIL_open_stream(HDIGDRIVER dig, char const FAR * filename, S32 stream_mem);
-
-DXDEC void AILCALL AIL_close_stream(HSTREAM stream);
-
-DXDEC S32 AILCALL AIL_service_stream(HSTREAM stream, S32 fillup);
-
-DXDEC void AILCALL AIL_start_stream(HSTREAM stream);
-
-DXDEC void AILCALL AIL_pause_stream(HSTREAM stream, S32 onoff);
-
-DXDEC void AILCALL AIL_set_stream_volume(HSTREAM stream,S32 volume);
-
-DXDEC void AILCALL AIL_set_stream_pan(HSTREAM stream,S32 pan);
-
-DXDEC S32 AILCALL AIL_stream_volume(HSTREAM stream);
-
-DXDEC S32 AILCALL AIL_stream_pan(HSTREAM stream);
-
-DXDEC void AILCALL AIL_set_stream_playback_rate(HSTREAM stream, S32 rate);
-
-DXDEC S32 AILCALL AIL_stream_playback_rate(HSTREAM stream);
-
-DXDEC S32 AILCALL AIL_stream_loop_count(HSTREAM stream);
-
-DXDEC void AILCALL AIL_set_stream_loop_count(HSTREAM stream, S32 count);
-
-DXDEC void AILCALL AIL_set_stream_loop_block (HSTREAM S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-DXDEC S32 AILCALL AIL_stream_status(HSTREAM stream);
-
-DXDEC void AILCALL AIL_set_stream_position(HSTREAM stream,S32 offset);
-
-DXDEC S32 AILCALL AIL_stream_position(HSTREAM stream);
-
-DXDEC void AILCALL AIL_stream_info(HSTREAM stream, S32 FAR* datarate, S32 FAR* sndtype, S32 FAR* length, S32 FAR* memory);
-
-DXDEC AILSTREAMCB AILCALL AIL_register_stream_callback(HSTREAM stream, AILSTREAMCB callback);
-
-DXDEC void AILCALL AIL_auto_service_stream(HSTREAM stream, S32 onoff);
-
-DXDEC void AILCALL AIL_set_stream_user_data (HSTREAM S,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL AIL_stream_user_data (HSTREAM S,
- U32 index);
-
-DXDEC void AILCALL AIL_set_stream_ms_position (HSTREAM S,
- S32 milliseconds);
-
-DXDEC void AILCALL AIL_stream_ms_position (HSTREAM S, //)
- S32 FAR * total_milliseconds,
- S32 FAR * current_milliseconds);
-
-DXDEC void AILCALL AIL_set_stream_reverb(HSTREAM S,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
-
-DXDEC void AILCALL AIL_stream_reverb (HSTREAM S,
- F32 FAR *reverb_level,
- F32 FAR *reverb_reflect_time,
- F32 FAR *reverb_decay_time);
-
-DXDEC HPROVIDER AILCALL AIL_set_stream_processor (HSTREAM S,
- SAMPLESTAGE pipeline_stage,
- HPROVIDER provider);
-
-#ifdef IS_MAC
-typedef struct MSS_FILE
-{
- S32 file_type; // 0 = char*, 1 = FSSpec*
- void const FAR* file;
-} MSS_FILE;
-#else
-typedef char MSS_FILE;
-#endif
-
-typedef U32 (AILCALLBACK FAR*AIL_file_open_callback) (MSS_FILE const FAR* Filename,
- U32 FAR* FileHandle);
-
-typedef void (AILCALLBACK FAR*AIL_file_close_callback) (U32 FileHandle);
-
-#define AIL_FILE_SEEK_BEGIN 0
-#define AIL_FILE_SEEK_CURRENT 1
-#define AIL_FILE_SEEK_END 2
-
-typedef S32 (AILCALLBACK FAR*AIL_file_seek_callback) (U32 FileHandle,
- S32 Offset,
- U32 Type);
-
-typedef U32 (AILCALLBACK FAR*AIL_file_read_callback) (U32 FileHandle,
- void FAR* Buffer,
- U32 Bytes);
-
-DXDEC void AILCALL AIL_set_file_callbacks (AIL_file_open_callback opencb,
- AIL_file_close_callback closecb,
- AIL_file_seek_callback seekcb,
- AIL_file_read_callback readcb);
-
-#ifdef IS_32
-
-typedef void FAR* (AILCALLBACK FAR*AIL_file_async_read_callback) (U32 FileHandle,
- void FAR* Buffer,
- U32 Bytes);
-
-typedef S32 (AILCALLBACK FAR*AIL_file_async_status_callback) (void FAR* async,
- S32 wait,
- U32 FAR* BytesRead);
-
-DXDEC void AILCALL AIL_set_file_async_callbacks (AIL_file_open_callback opencb,
- AIL_file_close_callback closecb,
- AIL_file_seek_callback seekcb,
- AIL_file_async_read_callback areadcb,
- AIL_file_async_status_callback statuscb);
-
-#endif
-
-//
-// High-level DLS functions
-//
-
-typedef struct _DLSFILEID {
- S32 id;
- struct _DLSFILEID FAR* next;
-} DLSFILEID;
-
-typedef struct _DLSFILEID FAR* HDLSFILEID;
-
-typedef struct _DLSDEVICE {
- void FAR* pGetPref;
- void FAR* pSetPref;
- void FAR* pMSSOpen;
- void FAR* pOpen;
- void FAR* pClose;
- void FAR* pLoadFile;
- void FAR* pLoadMem;
- void FAR* pUnloadFile;
- void FAR* pUnloadAll;
- void FAR* pGetInfo;
- void FAR* pCompact;
- void FAR* pSetAttr;
- S32 DLSHandle;
- U32 format;
- U32 buffer_size;
- void FAR* buffer[2];
- HSAMPLE sample;
- HMDIDRIVER mdi;
- HDIGDRIVER dig;
- HDLSFILEID first;
-#ifdef IS_WINDOWS
- HMODULE lib;
-#else
- #ifdef IS_DOS
- char FAR* DOSname;
- #endif
-#endif
-} DLSDEVICE;
-
-typedef struct _DLSDEVICE FAR* HDLSDEVICE;
-
-typedef struct _AILDLSINFO {
- char Description[128];
- S32 MaxDLSMemory;
- S32 CurrentDLSMemory;
- S32 LargestSize;
- S32 GMAvailable;
- S32 GMBankSize;
-} AILDLSINFO;
-
-#ifdef IS_DOS
-
-typedef struct _AILDOSDLS {
- char FAR* description;
- void FAR* pDLSOpen;
- void FAR* pMSSOpen;
- void FAR* pOpen;
- void FAR* pClose;
- void FAR* pLoadFile;
- void FAR* pLoadMem;
- void FAR* pUnloadFile;
- void FAR* pUnloadAll;
- void FAR* pGetInfo;
- void FAR* pCompact;
- void FAR* pSetAttr;
-} AILDOSDLS;
-
-#endif
-
-
-DXDEC HDLSDEVICE AILCALL AIL_DLS_open(HMDIDRIVER mdi, HDIGDRIVER dig,
-#if defined(IS_WINDOWS) || defined(IS_MAC)
- char const FAR * libname,
-#else
- AILDOSDLS const FAR * dosdls,
-#endif
- U32 flags, U32 rate, S32 bits, S32 channels);
-
-//
-// Parameters for the dwFlag used in DLSClose() and flags in AIL_DLS_close
-//
-
-#define RETAIN_DLS_COLLECTION 0x00000001
-#define RETURN_TO_BOOTUP_STATE 0x00000002
-#define RETURN_TO_GM_ONLY_STATE 0x00000004
-#define DLS_COMPACT_MEMORY 0x00000008
-
-DXDEC void AILCALL AIL_DLS_close(HDLSDEVICE dls, U32 flags);
-
-DXDEC HDLSFILEID AILCALL AIL_DLS_load_file(HDLSDEVICE dls, char const FAR* filename, U32 flags);
-
-DXDEC HDLSFILEID AILCALL AIL_DLS_load_memory(HDLSDEVICE dls, void const FAR* memfile, U32 flags);
-
-//
-// other parameters for AIL_DLS_unload
-//
-
-#define AIL_DLS_UNLOAD_MINE 0
-#define AIL_DLS_UNLOAD_ALL ((HDLSFILEID)(U32)(S32)-1)
-
-DXDEC void AILCALL AIL_DLS_unload(HDLSDEVICE dls, HDLSFILEID dlsid);
-
-DXDEC void AILCALL AIL_DLS_compact(HDLSDEVICE dls);
-
-DXDEC void AILCALL AIL_DLS_get_info(HDLSDEVICE dls, AILDLSINFO FAR* info, S32 FAR* PercentCPU);
-
-DXDEC void AILCALL AIL_DLS_set_reverb(HDLSDEVICE dls,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
-
-DXDEC void AILCALL AIL_DLS_get_reverb(HDLSDEVICE dls,
- F32 FAR* reverb_level,
- F32 FAR* reverb_reflect_time,
- F32 FAR* reverb_decay_time);
-
-DXDEC HPROVIDER AILCALL AIL_set_DLS_processor (HDLSDEVICE dev,
- SAMPLESTAGE pipeline_stage,
- HPROVIDER provider);
-
-
-//
-// Quick-integration service functions and data types
-//
-
-typedef struct
-{
- U32 const FAR *data;
- S32 size;
- S32 type;
- void FAR *handle;
- S32 status;
- void FAR* next;
- S32 speed;
- S32 volume;
- S32 extravol;
- F32 rlevel;
- F32 rrtime;
- F32 rdtime;
- HDLSFILEID dlsid;
- void FAR* dlsmem;
- void FAR* dlsmemunc;
- S32 milliseconds;
- S32 length;
- S32 userdata;
-}
-AUDIO_TYPE;
-
-
-#define QSTAT_DONE 1 // Data has finished playing
-#define QSTAT_LOADED 2 // Data has been loaded, but not yet played
-#define QSTAT_PLAYING 3 // Data is currently playing
-
-typedef AUDIO_TYPE FAR * HAUDIO; // Generic handle to any audio data type
-
-#define AIL_QUICK_USE_WAVEOUT 2
-#define AIL_QUICK_MIDI_AND_DLS 2
-#define AIL_QUICK_DLS_ONLY 3
-#define AIL_QUICK_MIDI_AND_VORTEX_DLS 4
-#define AIL_QUICK_MIDI_AND_SONICVIBES_DLS 5
-
-DXDEC S32 AILCALL
-#if defined(IS_WINDOWS) || defined(IS_MAC)
- AIL_quick_startup (
-#else
- AIL_quick_startup_with_start(void* startup,
-#endif
- S32 use_digital,
- S32 use_MIDI,
- U32 output_rate,
- S32 output_bits,
- S32 output_channels);
-
-DXDEC void AILCALL AIL_quick_shutdown (void);
-
-DXDEC void AILCALL AIL_quick_handles (HDIGDRIVER FAR* pdig,
- HMDIDRIVER FAR* pmdi,
- HDLSDEVICE FAR* pdls );
-
-DXDEC HAUDIO AILCALL AIL_quick_load (char const FAR *filename);
-
-#ifdef IS_MAC
-DXDEC HAUDIO AILCALL AIL_quick_fss_load (FSSpec const FAR *filename);
-#endif
-
-DXDEC HAUDIO AILCALL AIL_quick_load_mem (void const FAR *mem,
- U32 size);
-
-DXDEC HAUDIO AILCALL AIL_quick_copy (HAUDIO audio);
-
-DXDEC void AILCALL AIL_quick_unload (HAUDIO audio);
-
-DXDEC S32 AILCALL AIL_quick_play (HAUDIO audio,
- U32 loop_count);
-
-DXDEC void AILCALL AIL_quick_halt (HAUDIO audio);
-
-DXDEC S32 AILCALL AIL_quick_status (HAUDIO audio);
-
-DXDEC HAUDIO AILCALL AIL_quick_load_and_play (char const FAR *filename,
- U32 loop_count,
- S32 wait_request);
-
-#ifdef IS_MAC
-DXDEC HAUDIO AILCALL AIL_quick_fss_load_and_play (FSSpec const FAR *filename,
- U32 loop_count,
- S32 wait_request);
-#endif
-
-DXDEC void AILCALL AIL_quick_set_speed (HAUDIO audio, S32 speed);
-
-DXDEC void AILCALL AIL_quick_set_volume (HAUDIO audio, S32 volume, S32 extravol);
-
-DXDEC void AILCALL AIL_quick_set_reverb (HAUDIO audio,
- F32 reverb_level,
- F32 reverb_reflect_time,
- F32 reverb_decay_time);
-
-DXDEC void AILCALL AIL_quick_set_ms_position(HAUDIO audio,S32 milliseconds);
-
-DXDEC S32 AILCALL AIL_quick_ms_position(HAUDIO audio);
-
-DXDEC S32 AILCALL AIL_quick_ms_length(HAUDIO audio);
-
-
-#define AIL_QUICK_XMIDI_TYPE 1
-#define AIL_QUICK_DIGITAL_TYPE 2
-#define AIL_QUICK_DLS_XMIDI_TYPE 3
-#define AIL_QUICK_MPEG_DIGITAL_TYPE 4
-
-DXDEC S32 AILCALL AIL_quick_type(HAUDIO audio);
-
-//
-// used for AIL_process
-//
-
-typedef struct _AILMIXINFO {
- AILSOUNDINFO Info;
- ADPCMDATA mss_adpcm;
- U32 src_fract;
- S32 left_val;
- S32 right_val;
-} AILMIXINFO;
-
-
-
-DXDEC S32 AILCALL AIL_WAV_info(void const FAR* data, AILSOUNDINFO FAR* info);
-
-DXDEC S32 AILCALL AIL_size_processed_digital_audio(
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO const FAR* src);
-
-DXDEC S32 AILCALL AIL_process_digital_audio(
- void FAR *dest_buffer,
- S32 dest_buffer_size,
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO FAR* src);
-
-#define AIL_LENGTHY_INIT 0
-#define AIL_LENGTHY_SET_PREFERENCE 1
-#define AIL_LENGTHY_UPDATE 2
-#define AIL_LENGTHY_DONE 3
-
-typedef S32 (AILCALLBACK FAR* AILLENGTHYCB)(U32 state,U32 user);
-
-typedef S32 (AILCALLBACK FAR* AILCODECSETPREF)(char const FAR* preference,U32 value);
-
-DXDEC S32 AILCALL AIL_compress_ASI(AILSOUNDINFO const FAR * info, //)
- char const FAR* filename_ext,
- void FAR* FAR* outdata,
- U32 FAR* outsize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_decompress_ASI(void const FAR* indata, //)
- U32 insize,
- char const FAR* filename_ext,
- void FAR* FAR* wav,
- U32 FAR* wavsize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_compress_ADPCM(AILSOUNDINFO const FAR * info,
- void FAR* FAR* outdata, U32 FAR* outsize);
-
-DXDEC S32 AILCALL AIL_decompress_ADPCM(AILSOUNDINFO const FAR * info,
- void FAR* FAR* outdata, U32 FAR* outsize);
-
-DXDEC S32 AILCALL AIL_compress_DLS(void const FAR* dls,
- char const FAR* compression_extension,
- void FAR* FAR* mls, U32 FAR* mlssize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_merge_DLS_with_XMI(void const FAR* xmi, void const FAR* dls,
- void FAR* FAR* mss, U32 FAR* msssize);
-
-DXDEC S32 AILCALL AIL_extract_DLS( void const FAR *source_image, //)
- U32 source_size,
- void FAR * FAR *XMI_output_data,
- U32 FAR *XMI_output_size,
- void FAR * FAR *DLS_output_data,
- U32 FAR *DLS_output_size,
- AILLENGTHYCB callback);
-
-#define AILFILTERDLS_USINGLIST 1
-
-DXDEC S32 AILCALL AIL_filter_DLS_with_XMI(void const FAR* xmi, void const FAR* dls,
- void FAR* FAR* dlsout, U32 FAR* dlssize,
- S32 flags, AILLENGTHYCB callback);
-
-#define AILMIDITOXMI_USINGLIST 1
-#define AILMIDITOXMI_TOLERANT 2
-
-DXDEC S32 AILCALL AIL_MIDI_to_XMI (void const FAR* MIDI,
- U32 MIDI_size,
- void FAR* FAR*XMIDI,
- U32 FAR* XMIDI_size,
- S32 flags);
-
-#define AILMIDILIST_ROLANDSYSEX 1
-#define AILMIDILIST_ROLANDUN 2
-#define AILMIDILIST_ROLANDAB 4
-
-DXDEC S32 AILCALL AIL_list_MIDI (void const FAR* MIDI,
- U32 MIDI_size,
- char FAR* FAR* lst,
- U32 FAR* lst_size,
- S32 flags);
-#define AILDLSLIST_ARTICULATION 1
-#define AILDLSLIST_DUMP_WAVS 2
-
-DXDEC S32 AILCALL AIL_list_DLS (void const FAR* DLS,
- char FAR* FAR* lst,
- U32 FAR* lst_size,
- S32 flags,
- C8 FAR* title);
-
-#define AILFILETYPE_UNKNOWN 0
-#define AILFILETYPE_PCM_WAV 1
-#define AILFILETYPE_ADPCM_WAV 2
-#define AILFILETYPE_OTHER_WAV 3
-#define AILFILETYPE_VOC 4
-#define AILFILETYPE_MIDI 5
-#define AILFILETYPE_XMIDI 6
-#define AILFILETYPE_XMIDI_DLS 7
-#define AILFILETYPE_XMIDI_MLS 8
-#define AILFILETYPE_DLS 9
-#define AILFILETYPE_MLS 10
-#define AILFILETYPE_MPEG_L1_AUDIO 11
-#define AILFILETYPE_MPEG_L2_AUDIO 12
-#define AILFILETYPE_MPEG_L3_AUDIO 13
-#define AILFILETYPE_OTHER_ASI_WAV 14
-
-
-DXDEC S32 AILCALL AIL_file_type(void const FAR* data, U32 size);
-
-DXDEC S32 AILCALL AIL_find_DLS (void const FAR* data, U32 size,
- void FAR* FAR* xmi, U32 FAR* xmisize,
- void FAR* FAR* dls, U32 FAR* dlssize);
-
-#if defined(IS_WIN32) || defined(IS_MAC)
-
-//
-// Auxiliary 2D interface calls
-//
-
-DXDEC HDIGDRIVER AILCALL AIL_primary_digital_driver (HDIGDRIVER new_primary);
-
-//
-// Filter result codes
-//
-
-typedef S32 FLTRESULT;
-
-#define FLT_NOERR 0 // Success -- no error
-#define FLT_NOT_ENABLED 1 // FLT not enabled
-#define FLT_ALREADY_STARTED 2 // FLT already started
-#define FLT_INVALID_PARAM 3 // Invalid parameters used
-#define FLT_INTERNAL_ERR 4 // Internal error in FLT driver
-#define FLT_OUT_OF_MEM 5 // Out of system RAM
-#define FLT_ERR_NOT_IMPLEMENTED 6 // Feature not implemented
-#define FLT_NOT_FOUND 7 // FLT supported device not found
-#define FLT_NOT_INIT 8 // FLT not initialized
-#define FLT_CLOSE_ERR 9 // FLT not closed correctly
-
-//############################################################################
-//## ##
-//## Interface "MSS pipeline filter" ##
-//## ##
-//############################################################################
-
-typedef FLTRESULT (AILCALL FAR *FLT_STARTUP)(void);
-
-typedef FLTRESULT (AILCALL FAR *FLT_SHUTDOWN)(void);
-
-typedef C8 FAR * (AILCALL FAR *FLT_ERROR)(void);
-
-typedef S32 (AILCALL FAR *FLT_SET_PROVIDER_PREFERENCE)(HATTRIB preference,
- void const FAR* value);
-
-typedef HDRIVERSTATE (AILCALL FAR *FLT_OPEN_DRIVER) (HDIGDRIVER dig,
- S32 FAR *build_buffer,
- S32 build_buffer_size);
-
-typedef FLTRESULT (AILCALL FAR *FLT_CLOSE_DRIVER) (HDRIVERSTATE state);
-
-typedef void (AILCALL FAR *FLT_PREMIX_PROCESS) (HDRIVERSTATE driver
-#ifdef IS_MAC
- ,U32 buffer_size
-#endif
-);
-
-typedef void (AILCALL FAR *FLT_POSTMIX_PROCESS) (HDRIVERSTATE driver
-#ifdef IS_MAC
- ,U32 buffer_size
-#endif
-);
-
-//############################################################################
-//## ##
-//## Interface "Pipeline filter sample services" ##
-//## ##
-//############################################################################
-
-typedef HSAMPLESTATE (AILCALL FAR * FLTSMP_OPEN_SAMPLE) (HDRIVERSTATE driver,
- HSAMPLE S);
-
-typedef FLTRESULT (AILCALL FAR * FLTSMP_CLOSE_SAMPLE) (HSAMPLESTATE state);
-
-typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_PROCESS) (HSAMPLESTATE state,
- void const FAR * FAR *orig_src,
- U32 FAR * orig_src_fract,
- void FAR * orig_src_end,
- S32 FAR * FAR *build_dest,
- void FAR * build_dest_end,
- S32 FAR * left_val,
- S32 FAR * right_val,
- S32 playback_ratio,
- S32 left_scale,
- S32 right_scale,
- S32 base_scale,
- MIXSTAGE FAR * mixer_provider,
- U32 mixer_operation);
-
-typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_ATTRIBUTE) (HSAMPLESTATE state,
- HATTRIB attribute);
-
-typedef S32 (AILCALL FAR * FLTSMP_SET_SAMPLE_PREFERENCE) (HSAMPLESTATE state,
- HATTRIB preference,
- void const FAR* value);
-
-//
-// Pipeline filter calls
-//
-
-DXDEC S32 AILCALL AIL_enumerate_filters (HPROENUM FAR *next,
- HPROVIDER FAR *dest,
- C8 FAR * FAR *name);
-
-DXDEC HDRIVERSTATE
- AILCALL AIL_open_filter (HPROVIDER lib,
- HDIGDRIVER dig);
-
-DXDEC void AILCALL AIL_close_filter (HDRIVERSTATE filter);
-
-DXDEC S32 AILCALL AIL_enumerate_filter_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
-
-DXDEC void AILCALL AIL_filter_attribute (HPROVIDER lib,
- C8 const FAR* name,
- void FAR * val);
-
-DXDEC void AILCALL AIL_set_filter_preference
- (HPROVIDER lib,
- C8 const FAR* name,
- void const FAR* val);
-
-DXDEC S32 AILCALL AIL_enumerate_filter_sample_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
-
-DXDEC void AILCALL AIL_filter_sample_attribute
- (HSAMPLE S,
- C8 const FAR* name,
- void FAR * val);
-
-DXDEC void AILCALL AIL_filter_stream_attribute
- (HSTREAM S,
- C8 const FAR* name,
- void FAR* val);
-
-DXDEC void AILCALL AIL_filter_DLS_attribute
- (HDLSDEVICE dls,
- C8 const FAR* name,
- void FAR * val);
-
-DXDEC void AILCALL AIL_set_filter_sample_preference
- (HSAMPLE S,
- C8 const FAR * name,
- void const FAR * val);
-
-DXDEC void AILCALL AIL_set_filter_stream_preference
- (HSTREAM S,
- C8 const FAR * name,
- void const FAR * val);
-
-DXDEC void AILCALL AIL_set_filter_DLS_preference
- (HDLSDEVICE dls,
- C8 const FAR * name,
- void const FAR * val);
-
-typedef struct _FLTPROVIDER
-{
- PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute;
-
- FLT_STARTUP startup;
- FLT_ERROR error;
- FLT_SHUTDOWN shutdown;
- FLT_SET_PROVIDER_PREFERENCE set_provider_preference;
- FLT_OPEN_DRIVER open_driver;
- FLT_CLOSE_DRIVER close_driver;
- FLT_PREMIX_PROCESS premix_process;
- FLT_POSTMIX_PROCESS postmix_process;
-
- FLTSMP_OPEN_SAMPLE open_sample;
- FLTSMP_CLOSE_SAMPLE close_sample;
- FLTSMP_SAMPLE_PROCESS sample_process;
- FLTSMP_SAMPLE_ATTRIBUTE sample_attribute;
- FLTSMP_SET_SAMPLE_PREFERENCE set_sample_preference;
-
- HDIGDRIVER dig;
- HPROVIDER provider;
- HDRIVERSTATE driver_state;
-
- struct _FLTPROVIDER FAR *next;
-}
-FLTPROVIDER;
-
-//
-// 3D provider calls
-//
-
-DXDEC S32 AILCALL AIL_enumerate_3D_providers (HPROENUM FAR *next,
- HPROVIDER FAR *dest,
- C8 FAR * FAR *name);
-
-DXDEC M3DRESULT AILCALL AIL_open_3D_provider (HPROVIDER lib);
-
-DXDEC void AILCALL AIL_close_3D_provider (HPROVIDER lib);
-
-DXDEC S32 AILCALL AIL_enumerate_3D_provider_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
-
-DXDEC void AILCALL AIL_3D_provider_attribute (HPROVIDER lib,
- C8 const FAR* name,
- void FAR * val);
-
-DXDEC void AILCALL AIL_set_3D_provider_preference(HPROVIDER lib,
- C8 const FAR* name,
- void const FAR* val);
-
-struct H3D
-{
- H3DPOBJECT actual;
- HPROVIDER owner;
- S32 user_data[8];
-};
-
-typedef struct _M3DPROVIDER
-{
- PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute;
- M3D_STARTUP startup;
- M3D_ERROR error;
- M3D_SHUTDOWN shutdown;
- M3D_SET_PROVIDER_PREFERENCE set_provider_preference;
- M3D_ACTIVATE activate;
- M3D_ALLOCATE_3D_SAMPLE_HANDLE allocate_3D_sample_handle;
- M3D_RELEASE_3D_SAMPLE_HANDLE release_3D_sample_handle;
- M3D_START_3D_SAMPLE start_3D_sample;
- M3D_STOP_3D_SAMPLE stop_3D_sample;
- M3D_RESUME_3D_SAMPLE resume_3D_sample;
- M3D_END_3D_SAMPLE end_3D_sample;
- M3D_SET_3D_SAMPLE_DATA set_3D_sample_data;
- M3D_SET_3D_SAMPLE_VOLUME set_3D_sample_volume;
- M3D_SET_3D_SAMPLE_PLAYBACK_RATE set_3D_sample_playback_rate;
- M3D_SET_3D_SAMPLE_OFFSET set_3D_sample_offset;
- M3D_SET_3D_SAMPLE_LOOP_COUNT set_3D_sample_loop_count;
- M3D_SET_3D_SAMPLE_LOOP_BLOCK set_3D_sample_loop_block;
- M3D_3D_SAMPLE_STATUS sample_status;
- M3D_3D_SAMPLE_VOLUME sample_volume;
- M3D_3D_SAMPLE_PLAYBACK_RATE sample_playback_rate;
- M3D_3D_SAMPLE_OFFSET sample_offset;
- M3D_3D_SAMPLE_LENGTH sample_length;
- M3D_3D_SAMPLE_LOOP_COUNT sample_loop_count;
- M3D_SET_3D_SAMPLE_DISTANCES set_3D_sample_distances;
- M3D_3D_SAMPLE_DISTANCES sample_distances;
- M3D_ACTIVE_3D_SAMPLE_COUNT active_3D_sample_count;
- M3D_3D_OPEN_LISTENER open_listener;
- M3D_3D_CLOSE_LISTENER close_listener;
- M3D_3D_OPEN_OBJECT open_object;
- M3D_3D_CLOSE_OBJECT close_object;
- M3D_SET_3D_POSITION set_3D_position;
- M3D_SET_3D_VELOCITY set_3D_velocity;
- M3D_SET_3D_VELOCITY_VECTOR set_3D_velocity_vector;
- M3D_SET_3D_ORIENTATION set_3D_orientation;
- M3D_3D_POSITION position;
- M3D_3D_VELOCITY velocity;
- M3D_3D_ORIENTATION orientation;
- M3D_3D_UPDATE_POSITION update_position;
- M3D_3D_AUTO_UPDATE_POSITION auto_update_position;
- M3D_3D_SAMPLE_ATTRIBUTE sample_query_attribute;
- M3D_3D_SET_SAMPLE_PREFERENCE set_sample_preference;
- M3D_3D_ROOM_TYPE room_type;
- M3D_SET_3D_ROOM_TYPE set_3D_room_type;
- M3D_3D_SPEAKER_TYPE speaker_type;
- M3D_SET_3D_SPEAKER_TYPE set_3D_speaker_type;
- M3D_SET_3D_SAMPLE_OBSTRUCTION set_3D_sample_obstruction;
- M3D_SET_3D_SAMPLE_OCCLUSION set_3D_sample_occlusion;
- M3D_SET_3D_SAMPLE_CONE set_3D_sample_cone;
- M3D_SET_3D_SAMPLE_EFFECTS_LEVEL set_3D_sample_effects_level;
- M3D_3D_SAMPLE_OBSTRUCTION sample_obstruction;
- M3D_3D_SAMPLE_OCCLUSION sample_occlusion;
- M3D_3D_SAMPLE_CONE sample_cone;
- M3D_3D_SAMPLE_EFFECTS_LEVEL sample_effects_level;
- M3D_SET_3D_EOS set_3D_EOS;
-} M3DPROVIDER;
-
-//
-// Sample calls
-//
-
-DXDEC H3DSAMPLE AILCALL AIL_allocate_3D_sample_handle
- (HPROVIDER lib);
-
-
-DXDEC void AILCALL AIL_release_3D_sample_handle
- (H3DSAMPLE S);
-
-
-DXDEC void AILCALL AIL_start_3D_sample (H3DSAMPLE S);
-
-
-DXDEC void AILCALL AIL_stop_3D_sample (H3DSAMPLE S);
-
-
-DXDEC void AILCALL AIL_resume_3D_sample (H3DSAMPLE S);
-
-DXDEC void AILCALL AIL_end_3D_sample (H3DSAMPLE S);
-
-DXDEC S32 AILCALL AIL_set_3D_sample_file (H3DSAMPLE S,
- void const FAR*file_image);
-
-DXDEC S32 AILCALL AIL_set_3D_sample_info (H3DSAMPLE S,
- AILSOUNDINFO const FAR*info);
-
-DXDEC void AILCALL AIL_set_3D_sample_volume (H3DSAMPLE S,
- S32 volume);
-
-DXDEC void AILCALL AIL_set_3D_sample_offset (H3DSAMPLE S,
- U32 offset);
-
-DXDEC void AILCALL AIL_set_3D_sample_playback_rate
- (H3DSAMPLE S,
- S32 playback_rate);
-
-DXDEC void AILCALL AIL_set_3D_sample_loop_count(H3DSAMPLE S,
- U32 loops);
-
-DXDEC void AILCALL AIL_set_3D_sample_loop_block(H3DSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-DXDEC U32 AILCALL AIL_3D_sample_status (H3DSAMPLE S);
-
-DXDEC S32 AILCALL AIL_3D_sample_volume (H3DSAMPLE S);
-
-DXDEC U32 AILCALL AIL_3D_sample_offset (H3DSAMPLE S);
-
-DXDEC S32 AILCALL AIL_3D_sample_playback_rate (H3DSAMPLE S);
-
-DXDEC U32 AILCALL AIL_3D_sample_length (H3DSAMPLE S);
-
-DXDEC U32 AILCALL AIL_3D_sample_loop_count (H3DSAMPLE S);
-
-
-DXDEC S32 AILCALL AIL_3D_room_type (HPROVIDER lib);
-
-DXDEC void AILCALL AIL_set_3D_room_type (HPROVIDER lib,
- S32 room_type);
-
-#define AIL_3D_2_SPEAKER 0
-#define AIL_3D_HEADPHONE 1
-#define AIL_3D_SURROUND 2
-#define AIL_3D_4_SPEAKER 3
-
-
-DXDEC S32 AILCALL AIL_3D_speaker_type (HPROVIDER lib);
-
-DXDEC void AILCALL AIL_set_3D_speaker_type (HPROVIDER lib,
- S32 speaker_type);
-
-
-//
-// Changed the definition of distances to only be max and min, vs. front
-// min/max and back min/max. Only RSX supported the concept of different
-// front and distances, so we changed the API to make it more orthogonal
-// to most of the 3D providers. Sorry in advance.
-//
-
-DXDEC void AILCALL AIL_set_3D_sample_distances (H3DSAMPLE S,
- F32 max_dist,
- F32 min_dist);
-
-
-DXDEC void AILCALL AIL_3D_sample_distances (H3DSAMPLE S,
- F32 FAR * max_dist,
- F32 FAR * min_dist);
-
-DXDEC S32 AILCALL AIL_active_3D_sample_count (HPROVIDER lib);
-
-DXDEC S32 AILCALL AIL_enumerate_3D_sample_attributes
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
-
-DXDEC void AILCALL AIL_3D_sample_attribute (H3DSAMPLE samp,
- C8 const FAR* name,
- void FAR * val);
-
-
-DXDEC void AILCALL AIL_set_3D_sample_preference (H3DSAMPLE samp,
- C8 const FAR* name,
- void const FAR* val);
-
-DXDEC void AILCALL AIL_set_3D_sample_obstruction (H3DSAMPLE S,
- F32 obstruction);
-
-DXDEC void AILCALL AIL_set_3D_sample_occlusion (H3DSAMPLE S,
- F32 occlusion);
-
-DXDEC void AILCALL AIL_set_3D_sample_cone (H3DSAMPLE S,
- F32 inner_angle,
- F32 outer_angle,
- S32 outer_volume);
-
-DXDEC void AILCALL AIL_set_3D_sample_effects_level
- (H3DSAMPLE S,
- F32 effects_level);
-
-DXDEC F32 AILCALL AIL_3D_sample_obstruction (H3DSAMPLE S);
-
-DXDEC F32 AILCALL AIL_3D_sample_occlusion (H3DSAMPLE S);
-
-DXDEC void AILCALL AIL_3D_sample_cone (H3DSAMPLE S,
- F32 FAR* inner_angle,
- F32 FAR* outer_angle,
- S32 FAR* outer_volume);
-
-DXDEC F32 AILCALL AIL_3D_sample_effects_level (H3DSAMPLE S);
-
-
-DXDEC AIL3DSAMPLECB AILCALL AIL_register_3D_EOS_callback
- (H3DSAMPLE S,
- AIL3DSAMPLECB EOS);
-
-
-//
-// Positioning-object allocation calls
-//
-
-DXDEC H3DPOBJECT AILCALL AIL_open_3D_listener (HPROVIDER lib);
-
-DXDEC void AILCALL AIL_close_3D_listener (H3DPOBJECT listener);
-
-DXDEC H3DPOBJECT AILCALL AIL_open_3D_object (HPROVIDER lib);
-
-DXDEC void AILCALL AIL_close_3D_object (H3DPOBJECT obj);
-
-//
-// 3D object calls
-//
-
-DXDEC void AILCALL AIL_set_3D_position (H3DPOBJECT obj,
- F32 X,
- F32 Y,
- F32 Z);
-
-DXDEC void AILCALL AIL_set_3D_velocity (H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
-
-DXDEC void AILCALL AIL_set_3D_velocity_vector (H3DPOBJECT obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
-
-DXDEC void AILCALL AIL_set_3D_orientation (H3DPOBJECT obj,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
-
-DXDEC void AILCALL AIL_3D_position (H3DPOBJECT obj,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
-
-DXDEC void AILCALL AIL_3D_velocity (H3DPOBJECT obj,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
-
-DXDEC void AILCALL AIL_3D_orientation (H3DPOBJECT obj,
- F32 FAR *X_face,
- F32 FAR *Y_face,
- F32 FAR *Z_face,
- F32 FAR *X_up,
- F32 FAR *Y_up,
- F32 FAR *Z_up);
-
-DXDEC void AILCALL AIL_update_3D_position (H3DPOBJECT obj,
- F32 dt_milliseconds);
-
-DXDEC void AILCALL AIL_auto_update_3D_position (H3DPOBJECT obj,
- S32 enable);
-
-DXDEC void AILCALL AIL_set_3D_user_data (H3DPOBJECT obj,
- U32 index,
- S32 value);
-
-DXDEC S32 AILCALL AIL_3D_user_data (H3DPOBJECT obj,
- U32 index);
-
-// Obsolete 3D function names:
-#define AIL_set_3D_object_user_data AIL_set_3D_user_data
-#define AIL_3D_object_user_data AIL_3D_user_data
-#define AIL_3D_open_listener AIL_open_3D_listener
-#define AIL_3D_close_listener AIL_close_3D_listener
-#define AIL_3D_open_object AIL_open_3D_object
-#define AIL_3D_close_object AIL_close_3D_object
-
-//
-// RAD room types - currently the same as EAX
-//
-
-enum
-{
- ENVIRONMENT_GENERIC, // factory default
- ENVIRONMENT_PADDEDCELL,
- ENVIRONMENT_ROOM, // standard environments
- ENVIRONMENT_BATHROOM,
- ENVIRONMENT_LIVINGROOM,
- ENVIRONMENT_STONEROOM,
- ENVIRONMENT_AUDITORIUM,
- ENVIRONMENT_CONCERTHALL,
- ENVIRONMENT_CAVE,
- ENVIRONMENT_ARENA,
- ENVIRONMENT_HANGAR,
- ENVIRONMENT_CARPETEDHALLWAY,
- ENVIRONMENT_HALLWAY,
- ENVIRONMENT_STONECORRIDOR,
- ENVIRONMENT_ALLEY,
- ENVIRONMENT_FOREST,
- ENVIRONMENT_CITY,
- ENVIRONMENT_MOUNTAINS,
- ENVIRONMENT_QUARRY,
- ENVIRONMENT_PLAIN,
- ENVIRONMENT_PARKINGLOT,
- ENVIRONMENT_SEWERPIPE,
- ENVIRONMENT_UNDERWATER,
- ENVIRONMENT_DRUGGED,
- ENVIRONMENT_DIZZY,
- ENVIRONMENT_PSYCHOTIC,
-
- ENVIRONMENT_COUNT // total number of environments
-};
-
-//
-// enumerated values for EAX
-//
-
-#ifndef EAX_H_INCLUDED
-
-enum
-{
- EAX_ENVIRONMENT_GENERIC, // factory default
- EAX_ENVIRONMENT_PADDEDCELL,
- EAX_ENVIRONMENT_ROOM, // standard environments
- EAX_ENVIRONMENT_BATHROOM,
- EAX_ENVIRONMENT_LIVINGROOM,
- EAX_ENVIRONMENT_STONEROOM,
- EAX_ENVIRONMENT_AUDITORIUM,
- EAX_ENVIRONMENT_CONCERTHALL,
- EAX_ENVIRONMENT_CAVE,
- EAX_ENVIRONMENT_ARENA,
- EAX_ENVIRONMENT_HANGAR,
- EAX_ENVIRONMENT_CARPETEDHALLWAY,
- EAX_ENVIRONMENT_HALLWAY,
- EAX_ENVIRONMENT_STONECORRIDOR,
- EAX_ENVIRONMENT_ALLEY,
- EAX_ENVIRONMENT_FOREST,
- EAX_ENVIRONMENT_CITY,
- EAX_ENVIRONMENT_MOUNTAINS,
- EAX_ENVIRONMENT_QUARRY,
- EAX_ENVIRONMENT_PLAIN,
- EAX_ENVIRONMENT_PARKINGLOT,
- EAX_ENVIRONMENT_SEWERPIPE,
- EAX_ENVIRONMENT_UNDERWATER,
- EAX_ENVIRONMENT_DRUGGED,
- EAX_ENVIRONMENT_DIZZY,
- EAX_ENVIRONMENT_PSYCHOTIC,
-
- EAX_ENVIRONMENT_COUNT // total number of environments
-};
-
-#define EAX_REVERBMIX_USEDISTANCE (-1.0F)
-
-#endif
-
-#else
-
-typedef struct _FLTPROVIDER
-{
- U32 junk;
-} FLTPROVIDER;
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH
- #pragma pack(pop)
-#else
- #pragma pack()
-#endif
-
+ S32 format;
+ void const *data_ptr;
+ U32 data_len;
+ U32 rate;
+ S32 bits;
+ S32 channels;
+ U32 samples;
+ U32 block_size;
+ void const *initial_ptr;
+} AILSOUNDINFO;
-#endif
+#define DLLEXPORT extern "C" __declspec(dllexport)
+
+DLLEXPORT S32 WINAPI AIL_enumerate_3D_providers(HPROENUM *next, HPROVIDER *dest, C8 **name);
+DLLEXPORT void WINAPI AIL_release_3D_sample_handle(H3DSAMPLE S);
+DLLEXPORT void WINAPI AIL_close_3D_provider(HPROVIDER lib);
+DLLEXPORT void WINAPI AIL_set_3D_provider_preference(HPROVIDER lib, C8 const *name, void const *val);
+DLLEXPORT M3DRESULT WINAPI AIL_open_3D_provider(HPROVIDER lib);
+DLLEXPORT C8 *WINAPI AIL_last_error(void);
+DLLEXPORT S32 WINAPI AIL_3D_room_type(HPROVIDER lib);
+DLLEXPORT void WINAPI AIL_set_3D_room_type(HPROVIDER lib, S32 room_type);
+DLLEXPORT void WINAPI AIL_3D_provider_attribute(HPROVIDER lib, C8 const *name, void *val);
+DLLEXPORT H3DSAMPLE WINAPI AIL_allocate_3D_sample_handle(HPROVIDER lib);
+DLLEXPORT void WINAPI AIL_set_3D_sample_effects_level(H3DSAMPLE S, F32 effects_level);
+DLLEXPORT void WINAPI AIL_set_3D_speaker_type(HPROVIDER lib, S32 speaker_type);
+DLLEXPORT HSTREAM WINAPI AIL_open_stream(HDIGDRIVER dig, C8 const *filename, S32 stream_mem);
+DLLEXPORT void WINAPI AIL_stream_ms_position(HSTREAM S, S32 *total_milliseconds, S32 *current_milliseconds);
+DLLEXPORT void WINAPI AIL_close_stream(HSTREAM stream);
+DLLEXPORT S32 WINAPI AIL_digital_handle_release(HDIGDRIVER drvr);
+DLLEXPORT S32 WINAPI AIL_digital_handle_reacquire(HDIGDRIVER drvr);
+DLLEXPORT C8 *WINAPI AIL_set_redist_directory(C8 const *dir);
+DLLEXPORT S32 WINAPI AIL_startup(void);
+DLLEXPORT S32 WINAPI AIL_set_preference(U32 number, S32 value);
+DLLEXPORT HDIGDRIVER WINAPI AIL_open_digital_driver(U32 frequency, S32 bits, S32 channel, U32 flags);
+DLLEXPORT void *WINAPI AIL_mem_alloc_lock(U32 size);
+DLLEXPORT HSAMPLE WINAPI AIL_allocate_sample_handle(HDIGDRIVER dig);
+DLLEXPORT void WINAPI AIL_init_sample(HSAMPLE S);
+DLLEXPORT void WINAPI AIL_set_sample_type(HSAMPLE S, S32 format, U32 flags);
+DLLEXPORT void WINAPI AIL_pause_stream(HSTREAM stream, S32 onoff);
+DLLEXPORT void WINAPI AIL_release_sample_handle(HSAMPLE S);
+DLLEXPORT void WINAPI AIL_mem_free_lock(void *ptr);
+DLLEXPORT void WINAPI AIL_close_digital_driver(HDIGDRIVER dig);
+DLLEXPORT void WINAPI AIL_shutdown(void);
+DLLEXPORT void WINAPI AIL_set_3D_sample_volume(H3DSAMPLE S, S32 volume);
+DLLEXPORT void WINAPI AIL_set_sample_volume(HSAMPLE S, S32 volume);
+DLLEXPORT void WINAPI AIL_set_sample_address(HSAMPLE S, void const *start, U32 len);
+DLLEXPORT S32 WINAPI AIL_set_3D_sample_info(H3DSAMPLE S, AILSOUNDINFO const *info);
+DLLEXPORT void WINAPI AIL_set_3D_position(H3DPOBJECT obj, F32 X, F32 Y, F32 Z);
+DLLEXPORT void WINAPI AIL_set_3D_sample_distances(H3DSAMPLE S, F32 max_dist, F32 min_dist);
+DLLEXPORT void WINAPI AIL_set_sample_pan(HSAMPLE S, S32 pan);
+DLLEXPORT void WINAPI AIL_set_sample_playback_rate(HSAMPLE S, S32 playback_rate);
+DLLEXPORT void WINAPI AIL_set_3D_sample_playback_rate(H3DSAMPLE S, S32 playback_rate);
+DLLEXPORT void WINAPI AIL_set_sample_loop_block(HSAMPLE S, S32 loop_start_offset, S32 loop_end_offset);
+DLLEXPORT void WINAPI AIL_set_3D_sample_loop_block(H3DSAMPLE S, S32 loop_start_offset, S32 loop_end_offset);
+DLLEXPORT void WINAPI AIL_set_sample_loop_count(HSAMPLE S, S32 loop_count);
+DLLEXPORT void WINAPI AIL_set_3D_sample_loop_count(H3DSAMPLE S, S32 loops);
+DLLEXPORT U32 WINAPI AIL_sample_status(HSAMPLE S);
+DLLEXPORT U32 WINAPI AIL_3D_sample_status(H3DSAMPLE S);
+DLLEXPORT void WINAPI AIL_start_sample(HSAMPLE S);
+DLLEXPORT void WINAPI AIL_start_3D_sample(H3DSAMPLE S);
+DLLEXPORT void WINAPI AIL_end_sample(HSAMPLE S);
+DLLEXPORT void WINAPI AIL_end_3D_sample(H3DSAMPLE S);
+DLLEXPORT void WINAPI AIL_set_stream_loop_count(HSTREAM stream, S32 count);
+DLLEXPORT S32 WINAPI AIL_service_stream(HSTREAM stream, S32 fillup);
+DLLEXPORT void WINAPI AIL_start_stream(HSTREAM stream);
+DLLEXPORT void WINAPI AIL_set_stream_ms_position(HSTREAM S, S32 milliseconds);
+DLLEXPORT void WINAPI AIL_set_stream_volume(HSTREAM stream, S32 volume);
+DLLEXPORT void WINAPI AIL_set_stream_pan(HSTREAM stream, S32 pan);
+DLLEXPORT S32 WINAPI AIL_stream_status(HSTREAM stream);
diff --git a/milessdk/lib/mss32.lib b/milessdk/lib/mss32.lib
index 031fd1bd..f97091c7 100644
--- a/milessdk/lib/mss32.lib
+++ b/milessdk/lib/mss32.lib
Binary files differ
diff --git a/src/animation/CutsceneMgr.cpp b/src/animation/CutsceneMgr.cpp
index 6d9b9755..334fe471 100644
--- a/src/animation/CutsceneMgr.cpp
+++ b/src/animation/CutsceneMgr.cpp
@@ -1,4 +1,3 @@
-#define WITHWINDOWS // just for VK_SPACE
#include "common.h"
#include "General.h"
@@ -416,7 +415,7 @@ CCutsceneMgr::Update(void)
|| (CGame::playingIntro && CPad::GetPad(0)->GetStartJustDown())
|| CPad::GetPad(0)->GetLeftMouseJustDown()
|| CPad::GetPad(0)->GetEnterJustDown()
- || CPad::GetPad(0)->GetCharJustDown(VK_SPACE))
+ || CPad::GetPad(0)->GetCharJustDown(' '))
FinishCutscene();
}
}
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index ca676f52..073cb661 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -1,7 +1,6 @@
#define WITHWINDOWS // for our script loading hack
#include "common.h"
-
#include "Script.h"
#include "ScriptCommands.h"
diff --git a/src/core/CdStream.cpp b/src/core/CdStream.cpp
index 1ab1c8b0..ea79fb9a 100644
--- a/src/core/CdStream.cpp
+++ b/src/core/CdStream.cpp
@@ -1,4 +1,4 @@
-#include <windows.h>
+#define WITHWINDOWS
#include "common.h"
#include "CdStream.h"
diff --git a/src/core/Game.cpp b/src/core/Game.cpp
index 6f3eee29..bfe6eee3 100644
--- a/src/core/Game.cpp
+++ b/src/core/Game.cpp
@@ -1,7 +1,5 @@
#pragma warning( push )
#pragma warning( disable : 4005)
-#define DIRECTINPUT_VERSION 0x0800
-#include <dinput.h>
#pragma warning( pop )
#include "common.h"
#include "win.h"
diff --git a/src/core/Timer.cpp b/src/core/Timer.cpp
index 8f8570d7..aca7c1dc 100644
--- a/src/core/Timer.cpp
+++ b/src/core/Timer.cpp
@@ -1,4 +1,4 @@
-#include <windows.h>
+#define WITHWINDOWS
#include "common.h"
#include "DMAudio.h"
diff --git a/src/core/re3.cpp b/src/core/re3.cpp
index 3c2bc31f..4cec5773 100644
--- a/src/core/re3.cpp
+++ b/src/core/re3.cpp
@@ -1,6 +1,6 @@
#include <direct.h>
#include <csignal>
-#include <windows.h>
+#define WITHWINDOWS
#include "common.h"
#include "patcher.h"
#include "Renderer.h"
diff --git a/src/rw/TexRead.cpp b/src/rw/TexRead.cpp
index 258d520d..d1ff3dc0 100644
--- a/src/rw/TexRead.cpp
+++ b/src/rw/TexRead.cpp
@@ -1,9 +1,6 @@
#pragma warning( push )
#pragma warning( disable : 4005)
-#define DIRECTINPUT_VERSION 0x0800
-#include <dinput.h>
#pragma warning( pop )
-#define WITHWINDOWS
#include "common.h"
#include "win.h"
diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp
index 5e483dc7..29f666df 100644
--- a/src/save/GenericGameStorage.cpp
+++ b/src/save/GenericGameStorage.cpp
@@ -1,5 +1,6 @@
-#define WITHWINDOWS
#include "common.h"
+#define USEALTERNATIVEWINFUNCS
+#include "crossplatform.h"
#include "main.h"
#include "AudioScriptObject.h"
diff --git a/src/save/PCSave.cpp b/src/save/PCSave.cpp
index 46185850..6f1b1b45 100644
--- a/src/save/PCSave.cpp
+++ b/src/save/PCSave.cpp
@@ -1,5 +1,6 @@
-#define WITHWINDOWS
#include "common.h"
+#define USEALTERNATIVEWINFUNCS
+#include "crossplatform.h"
#include "FileMgr.h"
#include "GenericGameStorage.h"
@@ -94,7 +95,7 @@ C_PcSave::PopulateSlotInfo()
struct {
int size;
wchar FileName[24];
- _SYSTEMTIME SaveDateTime;
+ SYSTEMTIME SaveDateTime;
} header;
sprintf(savename, "%s%i%s", DefaultPCSaveFileName, i + 1, ".b");
int file = CFileMgr::OpenFile(savename, "rb");
@@ -110,8 +111,8 @@ C_PcSave::PopulateSlotInfo()
}
if (Slots[i + 1] == SLOT_OK) {
if (CheckDataNotCorrupt(i, savename)) {
- _SYSTEMTIME st;
- memcpy(&st, &header.SaveDateTime, sizeof(_SYSTEMTIME));
+ SYSTEMTIME st;
+ memcpy(&st, &header.SaveDateTime, sizeof(SYSTEMTIME));
const char *month;
switch (st.wMonth)
{
diff --git a/src/skel/crossplatform.cpp b/src/skel/crossplatform.cpp
new file mode 100644
index 00000000..f9464bb6
--- /dev/null
+++ b/src/skel/crossplatform.cpp
@@ -0,0 +1,81 @@
+#include "common.h"
+#define USEALTERNATIVEWINFUNCS
+#include "crossplatform.h"
+
+// For internal use
+// wMilliseconds is not needed
+void tmToSystemTime(const tm *tm, SYSTEMTIME *out) {
+ out->wYear = tm->tm_year + 1900;
+ out->wMonth = tm->tm_mon + 1;
+ out->wDayOfWeek = tm->tm_wday;
+ out->wDay = tm->tm_mday;
+ out->wHour = tm->tm_hour;
+ out->wMinute = tm->tm_min;
+ out->wSecond = tm->tm_sec;
+}
+
+void GetLocalTime_CP(SYSTEMTIME *out) {
+ time_t timestamp = time(nil);
+ tm *localTm = localtime(&timestamp);
+ tmToSystemTime(localTm, out);
+}
+
+#if !defined _WIN32 || defined __MINGW32__
+HANDLE FindFirstFile(const char* pathname, WIN32_FIND_DATA* firstfile) {
+ char newpathname[32];
+ strncpy(newpathname, pathname, 32);
+ char* path = strtok(newpathname, "\\*");
+ strncpy(firstfile->folder, path, sizeof(firstfile->folder));
+
+ // Both w/ extension and w/o extension is ok
+ if (strlen(path) + 2 != strlen(pathname))
+ strncpy(firstfile->extension, strtok(NULL, "\\*"), sizeof(firstfile->extension));
+ else
+ strncpy(firstfile->extension, "", sizeof(firstfile->extension));
+
+ HANDLE d;
+ if ((d = opendir(path)) == NULL || !FindNextFile(d, firstfile))
+ return NULL;
+
+ return d;
+}
+
+bool FindNextFile(HANDLE d, WIN32_FIND_DATA* finddata) {
+ dirent *file;
+ static struct stat fileStats;
+ static char path[PATH_MAX], relativepath[NAME_MAX + sizeof(finddata->folder) + 1];
+ int extensionLen = strlen(finddata->extension);
+ while ((file = readdir(d)) != NULL) {
+
+ // We only want "DT_REG"ular Files, but reportedly some FS and OSes gives DT_UNKNOWN as type.
+ if ((file->d_type == DT_UNKNOWN || file->d_type == DT_REG) &&
+ (extensionLen == 0 || strncmp(&file->d_name[strlen(file->d_name) - extensionLen], finddata->extension, extensionLen) == 0)) {
+
+ sprintf(relativepath, "%s/%s", finddata->folder, file->d_name);
+ realpath(relativepath, path);
+ stat(path, &fileStats);
+ strncpy(finddata->cFileName, file->d_name, sizeof(finddata->cFileName));
+ finddata->ftLastWriteTime = fileStats.st_mtime;
+ return true;
+ }
+ }
+ return false;
+}
+
+void GetDateFormat(int unused1, int unused2, SYSTEMTIME* in, int unused3, char* out, int size) {
+ tm linuxTime;
+ linuxTime.tm_year = in->wYear - 1900;
+ linuxTime.tm_mon = in->wMonth - 1;
+ linuxTime.tm_wday = in->wDayOfWeek;
+ linuxTime.tm_mday = in->wDay;
+ linuxTime.tm_hour = in->wHour;
+ linuxTime.tm_min = in->wMinute;
+ linuxTime.tm_sec = in->wSecond;
+ strftime(out, size, nl_langinfo(D_FMT), &linuxTime);
+}
+
+void FileTimeToSystemTime(time_t* writeTime, SYSTEMTIME* out) {
+ tm *ptm = gmtime(writeTime);
+ tmToSystemTime(ptm, out);
+}
+#endif \ No newline at end of file
diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h
new file mode 100644
index 00000000..1b3ad7d6
--- /dev/null
+++ b/src/skel/crossplatform.h
@@ -0,0 +1,65 @@
+#include <time.h>
+
+#ifndef MAX_PATH
+ #if !defined _WIN32 || defined __MINGW32__
+ #define MAX_PATH PATH_MAX
+ #else
+ #define MAX_PATH 260
+ #endif
+#endif
+
+// Mostly wrappers around Windows functions
+
+// TODO: Remove USEALTERNATIVEWINFUNCS and don't use it anywhere when re3 becomes fully cross-platform, this is for testing
+// Codes compatible with Windows and Linux
+#if defined USEALTERNATIVEWINFUNCS || !defined _WIN32 || defined __MINGW32__
+#define DeleteFile unlink
+
+// Needed for save games
+struct SYSTEMTIME {
+ uint16 wYear;
+ uint16 wMonth;
+ uint16 wDayOfWeek;
+ uint16 wDay;
+ uint16 wHour;
+ uint16 wMinute;
+ uint16 wSecond;
+ uint16 wMilliseconds;
+};
+
+#define GetLocalTime GetLocalTime_CP
+#else
+#include <Windows.h>
+#endif
+
+void GetLocalTime_CP(SYSTEMTIME* out);
+
+
+// Only runs on GNU/POSIX/etc.
+#if !defined _WIN32 || defined __MINGW32__
+#define OutputDebugString(s) re3_debug("[DBG-2]: " s "\n")
+
+#include <iostream>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <langinfo.h>
+
+typedef DIR* HANDLE;
+#define INVALID_HANDLE_VALUE NULL
+#define FindClose closedir
+#define LOCALE_USER_DEFAULT 0
+#define DATE_SHORTDATE 0
+
+struct WIN32_FIND_DATA {
+ char extension[32]; // for searching
+ char folder[32]; // for searching
+ char cFileName[256]; // because tSkinInfo has it 256
+ time_t ftLastWriteTime;
+};
+
+HANDLE FindFirstFile(char*, WIN32_FIND_DATA*);
+bool FindNextFile(HANDLE, WIN32_FIND_DATA*);
+void FileTimeToSystemTime(time_t*, SYSTEMTIME*);
+void GetDateFormat(int, int, SYSTEMTIME*, int, char*, int);
+#endif \ No newline at end of file
diff --git a/src/skel/events.cpp b/src/skel/events.cpp
index 5d16d5b0..7116833d 100644
--- a/src/skel/events.cpp
+++ b/src/skel/events.cpp
@@ -2,18 +2,12 @@
#include "skeleton.h"
#include "events.h"
-//#include "main.h"
- #define DIRECTINPUT_VERSION 0x0800
- #include <dinput.h>
#include "common.h"
#include "Pad.h"
#include "ControllerConfig.h"
#include "Frontend.h"
#include "Camera.h"
-
-
-
/*
*****************************************************************************
*/
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index a534e903..d13d3c52 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -1986,7 +1986,7 @@ WinMain(HINSTANCE instance,
++gGameState;
else if ( CPad::GetPad(0)->GetEnterJustDown() )
++gGameState;
- else if ( CPad::GetPad(0)->GetCharJustDown(VK_SPACE) )
+ else if ( CPad::GetPad(0)->GetCharJustDown(' ') )
++gGameState;
else if ( CPad::GetPad(0)->GetAltJustDown() )
++gGameState;
@@ -2022,7 +2022,7 @@ WinMain(HINSTANCE instance,
++gGameState;
else if ( CPad::GetPad(0)->GetEnterJustDown() )
++gGameState;
- else if ( CPad::GetPad(0)->GetCharJustDown(VK_SPACE) )
+ else if ( CPad::GetPad(0)->GetCharJustDown(' ') )
++gGameState;
else if ( CPad::GetPad(0)->GetAltJustDown() )
++gGameState;
diff --git a/src/skel/win/win.h b/src/skel/win/win.h
index ca16c4a0..d6326294 100644
--- a/src/skel/win/win.h
+++ b/src/skel/win/win.h
@@ -5,6 +5,11 @@
#define RSREGSETBREAKALLOC(_name) /* No op */
#endif /* (!defined(RSREGSETBREAKALLOC)) */
+#ifndef _INC_WINDOWS
+#define _X86_
+#include <windef.h>
+#endif
+
enum eGameState
{
GS_START_UP = 0,
@@ -17,7 +22,9 @@ enum eGameState
GS_FRONTEND,
GS_INIT_PLAYING_GAME,
GS_PLAYING_GAME,
+#ifndef MASTER
GS_ANIMVIEWER,
+#endif
};
enum eWinVersion
@@ -33,6 +40,7 @@ extern DWORD _dwOperatingSystemVersion;
extern RwUInt32 gGameState;
+#ifdef __DINPUT_INCLUDED__
/* platform specfic global data */
typedef struct
{
@@ -86,6 +94,7 @@ public:
};
extern CJoySticks AllValidWinJoys;
+#endif
#ifdef __cplusplus
extern "C"
@@ -97,6 +106,7 @@ MainWndProc(HWND window, UINT message, WPARAM wParam, LPARAM lParam);
RwBool IsForegroundApp();
+#ifdef __DINPUT_INCLUDED__
HRESULT _InputInitialise();
HRESULT _InputInitialiseMouse();
HRESULT CapturePad(RwInt32 padID);
@@ -110,6 +120,7 @@ BOOL _InputTranslateKey(RsKeyCodes *rs, UINT flag, UINT key);
void _InputTranslateShiftKeyUpDown(RsKeyCodes *rs);;
BOOL _InputTranslateShiftKey(RsKeyCodes *rs, UINT key, BOOLEAN bDown);
BOOL _InputIsExtended(INT flag);
+#endif
void InitialiseLanguage();
RwBool _psSetVideoMode(RwInt32 subSystem, RwInt32 videoMode);