home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Game Programming Gurus
/
Tricks_of_the_Game_Programming_Gurus_SAMS_Publishing_1994.iso
/
digipak
/
theaudio
/
flat
/
midpak.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-31
|
8KB
|
142 lines
/*****************************************************************************/
/* MIDPAK.H C prototype header for flat-model MIDPAK interface layer */
/* MIDPAK.ASM. Because MIDPAK is a real-mode program all */
/* addresses passed must be in the first 1mb of address space. */
/* This is an absolute requirement because MIDPAK drivers */
/* are still all real-mode code! Include the header file to */
/* DOSCALLS.H and link to DOSCALLS.OBJ. This gives you basic */
/* memory management (low dos memory allocation) and pointer type */
/* conversion resources without being dependent on any particular */
/* compiler vendor's C link libraries. */
/* */
/* See MIDPKAPI.DOC for complete MIDPAK documentation. */
/* */
/* MIDPAK.ASM is the flat-model link layer to MIDPAK functions. */
/* written using Borland Assembler in IDEAL mode. Assumes */
/* a DPMI with a flat model address space where selectors */
/* DS and ES always point to flat address 0000000000000h! */
/* Written and tested with DOS4GW and Watcom C. Uses */
/* standard C calling convention. Getting this to work */
/* under any other DPMI is an excercise left for ths student. */
/* */
/* Warning!! The Watcom compiler passes 4 bytes on the stack */
/* to a cdecl external routine, even if the parameter is only */
/* a char. All of these assembly routines have been defined */
/* this way. If you are using a compiler that passes different */
/* size arguments to cdecl routines, you may want to double */
/* check for compatibilities sake. */
/* */
/* The protected mode MIDPAK interface did not require a rev to */
/* the MIDPAK drivers. However in porting the code I did discover*/
/* several instances where MIDPAK was not preserving the ES */
/* register. This is why the MIDPAK.ASM link layer always pushs */
/* and pops the es register at each call to MIDPAK, just to be */
/* safe in that regard. */
/* */
/* Written by John W. Ratcliff (c) 1994 */
/* Compuserve: 70253,3237 */
/* Genie: J.RATCLIFF3 */
/* BBS: 1-314-939-0200 */
/* Addresss: */
/* 747 Napa Lane */
/* St. Charles, MO 63304 */
/* */
/* A $500 per product license fee applies to all commercial software */
/* products distributed with ANY MIDPAK drivers. */
/* */
/* To pay a license, simply write a check for $500 payable to */
/* The Audio Solution, 747 Napa Lane, St. Charles, MO 63304 */
/* with a copy of your commerical product. You will receive a signed */
/* license agreement from The Audio Solution shortly thereafter. */
/* This license fee applies specifically to the inclusion with your */
/* distribution disk any of the MIDPAK drivers from The Audio Solution*/
/* These drivers are copyrighted works, created by me, to enhance the */
/* use of sound and music in DOS based commercial software. The */
/* license fees collected are used to maintain the drivers and keep */
/* the BBS running. There is a seperate license fee for the use */
/* and distribution of DIGPAK drivers. */
/* */
/* See accompaning documentation regarding license fees for DIGPAK */
/* distribution. You would be ill-advised to distribute a commercial */
/* product containing either DIGPAK and/or MIDPAK drivers without */
/* having paid the distribution license fee. Since your product would*/
/* contain unlicensed copyrighted software from The Audio Solution, */
/* your product could be required to be immediately removed from retail*/
/* distribution. I doubt this is going to be a problem. Clearly if */
/* your product is enhanced by the use of these drivers, your company */
/* can easily afford a nominal license fee of $500 in exchange for */
/* getting the use of several man-years of software engineering */
/* resources. */
/*****************************************************************************/
extern short cdecl CheckMidiIn(void); // Returns 1 if MIDPAK is installed, 0 if not.
extern short cdecl DigPakAvailable(void); // Returns 1 if DIGPAK is installed, 0 if not.
/****************************************************************************/
/* These flags are returned by the XMIDI registration call. */
/****************************************************************************/
#define FAILURE_TO_REGISTER 0 // Xmidi file registration failed.
#define REGISTERED_RESIDENT 1 // Resident driver holds midi file now.
// The application can throw away the memory
// if it wants to.
#define REGISTERED_APPLICATION 2 // Driver didn't have a big enough buffer
// area reserved to hold the audio data
// so the application is responsible for
// keeping the memory for this sequence
// while it is registered.
extern short cdecl PlaySequence(short seqnum); // Play a particular sequence number from
// the currently registered xmidi file.
#define NEXT_CALLBACK -1 // Activation on next callback.
extern short cdecl SegueSequence(short seqnum,short activate);
// Switch sequence to this sequence when next
// callback trigger event is hit with the
// event number equal to activate. If activate
// is set to -1 then the next event causes the
// segue to occur.
extern short cdecl RegisterXmidi(char *xmidi,long int size);
// Registers an extended midi file for playback.
// This call will register all sequences.
extern short cdecl MidiStop(void); // Stop playing current sequence.
extern long int cdecl ReportCallbackTrigger(void); // Low word is trigger count.
// High word is last event ID.
extern void cdecl ResetCallbackCounter(void); // Reset callback counter to zero.
extern void cdecl ResumePlaying(void); // Resume playing last sequence.
#define SEQ_STOPPED 0 // equates for SequenceStatus()
#define SEQ_PLAYING 1
#define SEQ_DONE 2
extern short cdecl SequenceStatus(void); // Report current sequence play status.
extern short cdecl RelativeVolume(short vol); // Report current volume.
extern void cdecl SetRelativeVolume(short vol,short time); // Set volume, over time period.
#define NOBUFFER 1 // No resident buffer available.
#define FILENOTFOUND 2 // The file was not found.
#define FILETOBIG 3 // The file exceeds the reserved buffer size.
#define REGISTRATIONERROR 4 // Error registering the XMI file.
extern short cdecl RegisterXmidiFile(char *fname); // Register by filename.
extern void cdecl PollMidPak(void); // Poll MidPak for music processing.
extern long int cdecl MidPakClock(void); // Return MIDPAK heartbeat count (120hz)
extern long int * cdecl MidPakClockAddress(void); // Return address of midpak clock.
extern short * cdecl TriggerCountAddress(void); // Report address of trigger count.
extern short * cdecl EventIDAddress(void); // Report address of event id.
extern short cdecl ReportSequenceNumber(void);
extern short cdecl InitMP(char *midpak,char *adv,char *ad); // Init MIDI driver.
extern void cdecl DeInitMP(char *midpak); // Unload a previously loaded sound driver.