_The VESA BIOS Extension/Audio Interface_ by Doug Cody [LISTING ONE] typedef struct { // housekeeping char wsname[4]; // name of the structure long wslength; // structure length char wsfuture[16]; // 16 bytes for future expansion // device driver functions long (pascal far *wsDeviceCheck ) (int, long ); int (pascal far *wsPCMInfo ) (int, long, int, int ); int (pascal far *wsPlayBlock ) (void far *, long ); int (pascal far *wsPlayCont ) (void far *, long, long); int (pascal far *wsRecordBlock ) (); int (pascal far *wsRecordCont ) (void far *, long, long); int (pascal far *wsPauseIO ) (); int (pascal far *wsResumeIO ) (); int (pascal far *wsStopIO ) (); void (pascal far *wsTimerTick ) (); int (pascal far *wsGetLastError) (); // callback filled in by the application void (pascal far *wsApplPSyncCB ) (int, void far *, long ); //play void (pascal far *wsApplRSyncCB ) (int, void far *, long ); //rec } WAVEService, far *fpWAVServ; [LISTING TWO] typedef struct { // housekeeping char msname[4]; // name of the structure long mslength; // structure length // runtime data int mspatches[16]; // patches loaded table bit field char msfuture[16]; // 16 bytes for future expansion // device driver functions long ( pascal far *msDeviceCheck ) (int, long ); int ( pascal far *msGlobalReset ) (); int ( pascal far *msMIDImsg ) (char far *, int ); int ( pascal far *msPollMIDI ) (int ); int ( pascal far *msPreLoadPatch) (int, int, void far *, long ); int ( pascal far *msUnloadPatch ) (int, int ); void ( pascal far *msTimerTick ) (); int ( pascal far *msGetLastError) (); // callbacks filled in by the application void ( pascal far *msApplFreeCB ) ( int, int, void far * ); void ( pascal far *msApplMIDIIn ) ( int, int, char ); } MIDIServ, far *fpMIDServ; [LISTING THREE] typedef struct { // housekeeping char vsname[4]; // name of the structure long vslength; // structure length char vsfuture[16]; // 16 bytes for future expansion long (pascal far *vsDeviceCheck ) (int , long ); void (pascal far *vsSetVolume ) (int , int , int ); long (pascal far *vsSetFieldVol ) (int , int , int ); int (pascal far *vsToneControl ) (int , int , int ); long (pascal far *vsFilterControl) (long ); void (pascal far *vsOutputPath ) (int ); void (pascal far *vsResetChannel ) (); int (pascal far *vsGetLastError ) (); } VolumeService, far *fpVolServ;