Annotation of src/sos.h, revision 1.1

1.1     ! root        1: /****************************************************************************
        !             2: 
        !             3:    File              : sos.h
        !             4: 
        !             5:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !             6:    Date              :
        !             7: 
        !             8:    Purpose           : Include Files For Zortech C++ Compiler
        !             9: 
        !            10:    Last Updated      :
        !            11: 
        !            12: ****************************************************************************
        !            13:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !            14:                                                        All Rights Reserved
        !            15: ****************************************************************************/
        !            16: 
        !            17: #ifndef  _SOS_DEFINED   
        !            18: #define  _SOS_DEFINED   
        !            19: 
        !            20: //
        !            21: // #include "sosdefs.h"
        !            22: //
        !            23: /****************************************************************************
        !            24: 
        !            25:    File              : sosdefs.h
        !            26: 
        !            27:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !            28:    Date              :
        !            29: 
        !            30:    Purpose           : Include Files For Zortech C++ Compiler
        !            31: 
        !            32:    Last Updated      :
        !            33: 
        !            34: ****************************************************************************
        !            35:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !            36:                                                        All Rights Reserved
        !            37: ****************************************************************************/
        !            38: 
        !            39: 
        !            40: #ifndef  _SOSDEFS_DEFINED
        !            41: #define  _SOSDEFS_DEFINED
        !            42: 
        !            43: #undef   _TRUE
        !            44: #undef   _FALSE
        !            45: #undef   _NULL
        !            46: enum  
        !            47:          { 
        !            48:                 _FALSE, 
        !            49:                 _TRUE 
        !            50:          };
        !            51: 
        !            52: #define  _NULL  0
        !            53: 
        !            54: #ifndef  VOID
        !            55: #define  VOID           void
        !            56: #endif
        !            57: typedef  int            BOOL;
        !            58: typedef  unsigned int   UINT;
        !            59: typedef  unsigned char  BYTE;
        !            60: typedef  unsigned       WORD;
        !            61: #ifndef  LONG
        !            62: typedef  signed long    LONG;
        !            63: #endif
        !            64: typedef  unsigned long  DWORD;
        !            65: 
        !            66: typedef  BYTE  *        PBYTE;
        !            67: typedef  char near *    PSTR;
        !            68: typedef  WORD  *        PWORD;
        !            69: typedef  LONG  *        PLONG;
        !            70: typedef  VOID  *        PVOID;
        !            71: 
        !            72: typedef  BYTE  far   *  LPBYTE;
        !            73: typedef  BYTE  far   *  LPSTR;
        !            74: typedef  WORD  far   *  LPWORD;
        !            75: typedef  LONG  far   *  LPLONG;
        !            76: typedef  VOID  far   *  LPVOID;
        !            77: 
        !            78: typedef  BYTE  huge  *  HPBYTE;
        !            79: typedef  BYTE  huge  *  HPSTR;
        !            80: typedef  WORD  huge  *  HPWORD;
        !            81: typedef  LONG  huge  *  HPLONG;
        !            82: typedef  VOID  huge  *  HPVOID;
        !            83: 
        !            84: typedef  unsigned       HANDLE;
        !            85: 
        !            86: #endif
        !            87: 
        !            88: 
        !            89: 
        !            90: #pragma pack(4)
        !            91:  
        !            92: // error definition for sound operating system  
        !            93: #define  _SOS_ERR          -1
        !            94: 
        !            95: // number of drivers allowed to be open at one time
        !            96: #define  _SOS_MAX_DRIVERS  5
        !            97: 
        !            98: // structure definition for the capabilities
        !            99: typedef struct _tagCAPABILITIES
        !           100: {
        !           101:    BYTE  szDeviceName[ 32 ];  // device name
        !           102:    WORD  wDeviceVersion;      // device version
        !           103:    WORD  wBitsPerSample;      // bits per sound sample
        !           104:    WORD  wChannels;           // stereo/mono sound card
        !           105:    WORD  wMinRate;            // minimum rate
        !           106:    WORD  wMaxRate;            // maximum rate
        !           107:    WORD  wMixerOnBoard;       // board contains mixer
        !           108:    WORD  wMixerFlags;         // mixer capabilities
        !           109:    WORD  wFlags;              // miscellaneous flags   
        !           110:    short far * lpPortList;         // list of usable ports
        !           111:    short far * lpDMAList;          // list of usable dma channels
        !           112:    short far * lpIRQList;          // list of usable irq channels
        !           113:    short far * lpRateList;         // list of usable rates, -1 if any in min to max
        !           114:    WORD  fBackground;         // foreground or background driver
        !           115:    WORD  wDeviceID;           // ID for the device
        !           116:    WORD  wTimerID;            // ID for the timer
        !           117:    
        !           118: } _SOS_CAPABILITIES; 
        !           119: 
        !           120: // far pointer to the device capabilities structure
        !           121: typedef _SOS_CAPABILITIES far *  LPSOSDEVICECAPS;
        !           122: 
        !           123: // flag types for driver
        !           124: #define  _FLAGS_SIGNED              0x8000
        !           125:   
        !           126: // devices that can be loaded
        !           127: #define  _SOUND_BLASTER_8_MONO      0xe000
        !           128: #define  _SOUND_BLASTER_8_ST        0xe001
        !           129: #define  _SBPRO_8_ST                _SOUND_BLASTER_8_ST
        !           130: #define  _SBPRO_8_MONO              0xe00f
        !           131: #define  _SOUND_MASTER_II_8_MONO    0xe002
        !           132: #define  _MV_PAS_8_MONO             0xe003
        !           133: #define  _MV_PAS_16_MONO            0xe004
        !           134: #define  _MV_PAS_8_ST               0xe005
        !           135: #define  _MV_PAS_16_ST              0xe006
        !           136: #define  _ADLIB_GOLD_8_ST           0xe007
        !           137: #define  _ADLIB_GOLD_16_ST          0xe008
        !           138: #define  _ADLIB_GOLD_8_MONO         0xe009
        !           139: #define  _ADLIB_GOLD_16_MONO        0xe00a
        !           140: #define  _MICROSOFT_8_MONO          0xe00b
        !           141: #define  _MICROSOFT_8_ST            0xe00c
        !           142: #define  _MICROSOFT_16_MONO         0xe00d
        !           143: #define  _MICROSOFT_16_ST           0xe00e
        !           144: #define  _SOUND_SOURCE_8_MONO_PC    0xe010
        !           145: #define  _SOUND_SOURCE_8_MONO_TANDY 0xe011
        !           146: #define  _GENERAL_PORT_8_MONO       0xe012
        !           147: #define  _GENERAL_PORT_8_MONO_R     0xe013
        !           148: #define  _SIERRA_8_MONO             0xe014
        !           149: #define  _SB16_8_MONO               0xe015
        !           150: #define  _SB16_8_ST                 0xe016
        !           151: #define  _SB16_16_MONO              0xe017
        !           152: #define  _SB16_16_ST                0xe018
        !           153: #define  _ESS_AUDIODRIVE_8_MONO     0xe019
        !           154: #define  _ESS_AUDIODRIVE_8_ST       0xe01a
        !           155: #define  _ESS_AUDIODRIVE_16_MONO    0xe01b
        !           156: #define  _ESS_AUDIODRIVE_16_ST      0xe01c
        !           157: #define  _SOUNDSCAPE_8_MONO         0xe01d
        !           158: #define  _SOUNDSCAPE_8_ST           0xe01e
        !           159: #define  _SOUNDSCAPE_16_MONO        0xe01f
        !           160: #define  _SOUNDSCAPE_16_ST          0xe020
        !           161: #define  _RAP10_8_MONO              0xe021
        !           162: #define  _RAP10_16_MONO             0xe022
        !           163: #define  _GUS_8_MONO                0xe023
        !           164: #define  _GUS_8_ST                  0xe024
        !           165: #define  _GUS_16_MONO               0xe025
        !           166: #define  _GUS_16_ST                 0xe026
        !           167: #define  _GUS_MAX_8_MONO            0xe027
        !           168: #define  _GUS_MAX_8_ST              0xe028
        !           169: #define  _GUS_MAX_16_MONO           0xe029
        !           170: #define  _GUS_MAX_16_ST             0xe02a
        !           171: #define  _WAVEJAMMER_8_MONO         0xe02b
        !           172: #define  _WAVEJAMMER_8_ST           0xe02c
        !           173: #define  _WAVEJAMMER_16_MONO        0xe02d
        !           174: #define  _WAVEJAMMER_16_ST          0xe02e
        !           175: #define  _TEMPOCS_8_MONO            0xe02f
        !           176: #define  _TEMPOCS_8_ST              0xe030
        !           177: #define  _TEMPOCS_16_MONO           0xe031
        !           178: #define  _TEMPOCS_16_ST             0xe032
        !           179: #define  _WAVEJAMMERCD_8_MONO       0xe033
        !           180: #define  _WAVEJAMMERCD_8_ST         0xe034
        !           181: #define  _WAVEJAMMERCD_16_MONO      0xe035
        !           182: #define  _WAVEJAMMERCD_16_ST        0xe036
        !           183: #define  _SOUND_BLASTER_8_MONO_R    0xe050
        !           184: #define  _MICROSOFT_8_MONO_R        0xe051
        !           185: #define  _SOUND_MASTER_II_8_MONO_R  0xe052
        !           186: #define  _ADLIB_GOLD_8_MONO_R       0xe053
        !           187: #define  _MV_PAS_8_MONO_R           0xe054
        !           188: #define  _RAP10_8_MONO_R            0xe058
        !           189: #define  _RAP10_16_MONO_R           0xe059
        !           190: #define  _SB16_8_MONO_R             0xe05a
        !           191: #define  _SB16_8_ST_R               0xe05b
        !           192: #define  _SB16_16_MONO_R            0xe05c
        !           193: #define  _SB16_16_ST_R              0xe05d
        !           194: #define  _MV_PAS_16_MONO_R          0xe060
        !           195: #define  _SOUNDSCAPE_8_MONO_R       0xe061
        !           196: #define  _SOUNDSCAPE_8_ST_R         0xe062
        !           197: #define  _SOUNDSCAPE_16_MONO_R      0xe063
        !           198: #define  _SOUNDSCAPE_16_ST_R        0xe064
        !           199: #define  _ESS_AUDIODRIVE_8_MONO_R   0xe065
        !           200: #define  _ESS_AUDIODRIVE_8_ST_R     0xe066
        !           201: #define  _ESS_AUDIODRIVE_16_MONO_R  0xe067
        !           202: #define  _ESS_AUDIODRIVE_16_ST_R    0xe068
        !           203: #define  _SPEECH_THING_8_MONO       0xe090
        !           204: #define  _YAMAHA_8_MONO             0xe106
        !           205: #define  _INT_SPEAKER_8_MONO        0xe107
        !           206: 
        !           207: // call indexes for the loadable drivers
        !           208: enum
        !           209: { 
        !           210:    _DRV_INIT,
        !           211:    _DRV_UNINIT,
        !           212:    _DRV_SETRATE,
        !           213:    _DRV_SETACTION,
        !           214:    _DRV_START,
        !           215:    _DRV_STOP,
        !           216:    _DRV_PAUSE,
        !           217:    _DRV_RESUME,
        !           218:    _DRV_CAPABILITIES,
        !           219:    _DRV_PLAY_FOREGROUND,
        !           220:    _DRV_GET_FILL_INFO, 
        !           221:    _DRV_GET_CALL_FUNCTIONS,
        !           222:    _DRV_SET_CALL_FUNCTIONS
        !           223: };
        !           224: 
        !           225: // fill info
        !           226: typedef  struct   _tagFillInfo
        !           227:                 {
        !           228: 
        !           229:                        LPSTR lpFillHandler;                   // pointer to fill handler
        !           230:                        LPWORD lpDMAFillCount;                 // pointer to dma count
        !           231:                        LPSTR lpSampleList;                    // pointer to sample list
        !           232:                        LPWORD lpDMAMasterVolume;              // pointer to dma count
        !           233: 
        !           234:                 } _SOS_FILL_INFO;
        !           235: 
        !           236: // caps info structure
        !           237: typedef  struct   _tagCapsInfo
        !           238:                 {
        !           239: 
        !           240:                        LPSTR    lpPortList;                   // pointer to port list
        !           241:                        LPSTR    lpDMAList;                    // pointer to DMA list
        !           242:                        LPSTR    lpIRQList;                    // pointer to IRQ list
        !           243:                        LPSTR    lpRateList;                   // pointer to rate list
        !           244: 
        !           245:                 } _SOS_CAPS_INFO;
        !           246: 
        !           247: // maximum number of available voice
        !           248: #define  _MAX_VOICES    32
        !           249: 
        !           250: // structure definition
        !           251: typedef  struct   _tagSAMPLE
        !           252: {
        !           253:    LPSTR    samplePtr;                 // pointer to data buffer
        !           254:    LPSTR    sampleData;                // pointer to active data
        !           255:    LPSTR    sampleLoopPtr;             // pointer for loop back
        !           256: 
        !           257:    WORD     sampleLength;              // length of sample
        !           258:    WORD     sampleIndex;               // index into sample
        !           259:    WORD     sampleLoopLength;          // length of loop
        !           260:    
        !           261:    WORD     sampleBytesLeft;           // bytes left to play in sample
        !           262: 
        !           263:    WORD     sampleLoopPoint;           // byte count for loop point
        !           264:    WORD     sampleLoopEndLength;       // length of remaining chunk
        !           265: 
        !           266:    short    sampleFlags;               // control sample
        !           267:    short    sampleVolume;              // volume control
        !           268:    short    sampleID;                  // sample ID
        !           269: 
        !           270:    short    sampleChannel;             // channel to play sample on
        !           271:    short    sampleLoopCount;           // loop count
        !           272:    short    sampleLastFill;            // last fill position
        !           273:    VOID ( far cdecl * sampleCallback )( WORD, WORD, WORD ); // callback function for sample
        !           274: 
        !           275:    WORD     samplePitchAdd;
        !           276:    short    samplePitchFraction;
        !           277: 
        !           278:    short    samplePort;                // port to use for non-dma digitized
        !           279: 
        !           280:    WORD     sampleTotalBytes;
        !           281:    WORD     sampleByteLength;
        !           282: 
        !           283:    short    samplePanLocation;
        !           284:    short    samplePanSpeed;
        !           285:    short    samplePanDirection;
        !           286:    short    samplePanStart;
        !           287:    short    samplePanEnd;
        !           288:    
        !           289:    short    sampleDelayBytes;
        !           290:    short    sampleDelayRepeat;
        !           291:    
        !           292:    WORD     sampleADPCMPredicted;
        !           293:    short    sampleADPCMIndex;
        !           294: 
        !           295:    short    sampleRootNoteMIDI;   
        !           296: 
        !           297:    WORD  sampleTemp1;   
        !           298:    
        !           299: } _SOS_SAMPLE;
        !           300: 
        !           301: // enumeration for left or right channel
        !           302: enum
        !           303: {
        !           304:    _LEFT_CHANNEL,
        !           305:    _RIGHT_CHANNEL,
        !           306:    _CENTER_CHANNEL,
        !           307:    _INTERLEAVED
        !           308: };
        !           309: 
        !           310: // enumeration for foreground and background
        !           311: enum
        !           312: { 
        !           313:    _FOREGROUND,
        !           314:    _BACKGROUND 
        !           315: };
        !           316: 
        !           317: // defines for the sample flags
        !           318: #define  _ACTIVE           0x8000
        !           319: #define  _LOOPING          0x4000
        !           320: #define  _FIRST_TIME       0x2000
        !           321: #define  _PENDING_RELEASE  0x1000
        !           322: #define  _CONTINUE_BLOCK   0x0800
        !           323: #define  _PITCH_SHIFT      0x0400
        !           324: #define  _PANNING          0x0200
        !           325: #define  _VOLUME           0x0100
        !           326: #define  _TRANSLATE16TO8   0x0080
        !           327: #define  _STAGE_LOOP       0x0040
        !           328: #define  _TRANSLATE8TO16   0x0020
        !           329: #define  _STEREOTOMONO     0x0010
        !           330: 
        !           331: // defines for the wParam flags 
        !           332: #define  _SINGLE_SAMPLE 0x01
        !           333: 
        !           334: #define  _SOS_DCAPS_AUTO_REINIT     0x01
        !           335: #define  _SOS_DCAPS_MPU_401         0x02
        !           336: #define  _SOS_DCAPS_OPL2            0x04
        !           337: #define  _SOS_DCAPS_OPL3            0x08
        !           338: #define  _SOS_DCAPS_OPL4            0x10
        !           339: #define  _SOS_DCAPS_WAVETABLE       0x20
        !           340: #define  _SOS_DCAPS_DL_SAMPLES      0x40
        !           341: #define  _SOS_DCAPS_FIFO_DEVICE     0x80
        !           342: #define  _SOS_DCAPS_ENV_NEEDED      0x100
        !           343: #define  _SOS_DCAPS_PSEUDO_DMA1     0x200
        !           344: #define  _SOS_DCAPS_SIGNED_DATA     0x8000
        !           345: 
        !           346: // file header structure
        !           347: typedef struct
        !           348: {
        !           349:    // name ID
        !           350:    BYTE  szName[ 32 ];
        !           351: 
        !           352:    // number of drivers in the file
        !           353:    WORD  wDrivers;
        !           354: 
        !           355:    // offset of first driver
        !           356:    WORD  lOffset;
        !           357: 
        !           358:    // size of the file
        !           359:    WORD  lFileSize;
        !           360: 
        !           361: } _FILEHEADER;
        !           362: 
        !           363: // driver header structure
        !           364: typedef struct
        !           365: {
        !           366:    // name ID
        !           367:    BYTE  szName[ 32 ];
        !           368: 
        !           369:    // offset of next driver
        !           370:    WORD  lNextDriver;
        !           371: 
        !           372:    // size of current driver
        !           373:    WORD  wSize;
        !           374: 
        !           375:    // id for the current device
        !           376:    WORD  wDeviceID;
        !           377: 
        !           378:    // id for the type of DOS extender
        !           379:    WORD  wExtenderType;
        !           380: 
        !           381: } _DRIVERHEADER;
        !           382: 
        !           383: // device hardware information
        !           384: typedef struct
        !           385: {
        !           386:    // port to be used
        !           387:    WORD  wPort;
        !           388: 
        !           389:    // irq to use
        !           390:    WORD  wIRQ;
        !           391: 
        !           392:    // dma channel to se
        !           393:    WORD  wDMA; 
        !           394:   
        !           395:    // extra parameter
        !           396:    WORD  wParam;
        !           397: 
        !           398: } _SOS_HARDWARE;
        !           399: 
        !           400: // structure definition for start sample
        !           401: typedef struct
        !           402: {
        !           403:    // pointer to sample
        !           404:    LPSTR lpSamplePtr;
        !           405: 
        !           406:    // size of the sample
        !           407:    WORD  dwSampleSize;
        !           408: 
        !           409:    // number of times to loop the sample -1 is infinite
        !           410:    WORD  wLoopCount;
        !           411: 
        !           412:    // channel to play sample on
        !           413:    WORD  wChannel;
        !           414: 
        !           415:    // volume to play sample at
        !           416:    WORD wVolume;
        !           417: 
        !           418:    // id for the sample
        !           419:    WORD  wSampleID;
        !           420: 
        !           421:    // far pointer to the callback function
        !           422:    VOID ( far cdecl *lpCallback )( WORD, WORD, WORD );
        !           423: 
        !           424:    // port to use if driver is a non-dma background driver
        !           425:    WORD  wSamplePort; 
        !           426: 
        !           427:    // flags field
        !           428:    WORD  wSampleFlags;
        !           429: 
        !           430:    // total length of sample including loops, etc..
        !           431:    WORD     dwSampleByteLength;
        !           432: 
        !           433:    // loop point for the sample
        !           434:    WORD  dwSampleLoopPoint;
        !           435:    WORD  dwSampleLoopLength;
        !           436: 
        !           437:    // pitch shifting components 
        !           438:    WORD     dwSamplePitchAdd;
        !           439:    WORD    wSamplePitchFraction;
        !           440: 
        !           441:    // pan components
        !           442:    WORD    wSamplePanLocation;
        !           443:    WORD    wSamplePanSpeed;
        !           444:    WORD    wSamplePanDirection;
        !           445:    WORD    wSamplePanStart;
        !           446:    WORD    wSamplePanEnd;
        !           447:    
        !           448:    // delay parts
        !           449:    WORD    wSampleDelayBytes;
        !           450:    WORD    wSampleDelayRepeat;
        !           451: 
        !           452:    // compression components   
        !           453:    WORD     dwSampleADPCMPredicted;
        !           454:    WORD    wSampleADPCMIndex;
        !           455: 
        !           456:    // root note for pitch shifting 
        !           457:    WORD    wSampleRootNoteMIDI;   
        !           458: 
        !           459:    // filler for future upgrades
        !           460:    WORD  dwSampleTemp1;   
        !           461:    WORD  dwSampleTemp2;   
        !           462:    WORD  dwSampleTemp3;   
        !           463: 
        !           464: } _SOS_START_SAMPLE;
        !           465: 
        !           466: // structure for initializing a driver
        !           467: typedef struct
        !           468: {  
        !           469:    WORD  wBufferSize;
        !           470:    LPSTR lpBuffer;
        !           471:    BOOL  wAllocateBuffer;
        !           472:    WORD  wSampleRate;
        !           473:    WORD  wParam;
        !           474:    LONG  dwParam;
        !           475:    VOID ( far *lpFillHandler )( VOID );
        !           476:    LPSTR lpDriverMemory;
        !           477:    LPSTR lpDriverMemoryCS;
        !           478:    LPSTR lpTimerMemory;
        !           479:    LPSTR lpTimerMemoryCS;
        !           480:    WORD  wTimerID;
        !           481:    WORD  wPhysical;
        !           482: 
        !           483: } _SOS_INIT_DRIVER;
        !           484: 
        !           485: // define for the timer types to use
        !           486: #define  _SOS_NORMAL_TIMER          0x00
        !           487: 
        !           488: // enumeration for the timer types
        !           489: enum
        !           490: {
        !           491:    _TIMER_8_MONO   =     0x1000,
        !           492:    _TIMER_8_ST,          
        !           493:    _TIMER_16_MONO,       
        !           494:    _TIMER_16_ST,         
        !           495:    _TIMER_8_MONO_ULAW,  
        !           496:    _TIMER_8_ST_ULAW,    
        !           497:    _TIMER_16_MONO_ULAW, 
        !           498:    _TIMER_16_ST_ULAW,   
        !           499:    _TIMER_8_MONO_REC,   
        !           500:    _TIMER_8_MONO_ULAW_REC,
        !           501:    _TIMER_UNDEFINED_1,      
        !           502:    _TIMER_UNDEFINED_2,
        !           503:    _TIMER_UNDEFINED_3,
        !           504:    _TIMER_UNDEFINED_4,
        !           505:    _TIMER_UNDEFINED_5,
        !           506:    _TIMER_UNDEFINED_6,
        !           507:    _TIMER_UNDEFINED_7,
        !           508:    _TIMER_UNDEFINED_8,
        !           509:    _TIMER_UNDEFINED_9,
        !           510:    _TIMER_UNDEFINED_A,
        !           511:    _TIMER_UNDEFINED_B,
        !           512:    _TIMER_UNDEFINED_C,
        !           513:    _TIMER_UNDEFINED_D,
        !           514:    _TIMER_UNDEFINED_E,
        !           515:    _TIMER_UNDEFINED_F,
        !           516:    _TIMER_UNDEFINED_10,
        !           517:    _TIMER_UNDEFINED_11,
        !           518:    _TIMER_UNDEFINED_12,
        !           519:    _TIMER_UNDEFINED_13,
        !           520:    _TIMER_UNDEFINED_14,
        !           521:    _TIMER_UNDEFINED_15,
        !           522:    _TIMER_UNDEFINED_16,
        !           523:    _TIMER_8_SOUND_SOURCE,
        !           524:    _TIMER_8_SOUND_SOURCE_TANDY,
        !           525:    _TIMER_8_GENERAL_PORT,
        !           526:    _TIMER_8_GENERAL_PORT_REC   
        !           527: };
        !           528: 
        !           529: // define for no slots available
        !           530: #define  _ERR_NO_SLOTS ( WORD )-1
        !           531: 
        !           532: // error codes for the system
        !           533: enum
        !           534: {
        !           535:    _ERR_NO_ERROR,
        !           536:    _ERR_DRIVER_NOT_LOADED,
        !           537:    _ERR_INVALID_POINTER,
        !           538:    _ERR_DETECT_INITIALIZED,
        !           539:    _ERR_FAIL_ON_FILE_OPEN,
        !           540:    _ERR_MEMORY_FAIL,
        !           541:    _ERR_INVALID_DRIVER_ID,
        !           542:    _ERR_NO_DRIVER_FOUND,
        !           543:    _ERR_DETECTION_FAILURE,
        !           544:    _ERR_DRIVER_LOADED,
        !           545:    _ERR_INVALID_HANDLE,
        !           546:    _ERR_NO_HANDLES,
        !           547:    _ERR_PAUSED,   
        !           548:    _ERR_NOT_PAUSED,
        !           549:    _ERR_INVALID_DATA,
        !           550:    _ERR_DRV_FILE_FAIL,
        !           551:    _ERR_INVALID_PORT,
        !           552:    _ERR_INVALID_IRQ,
        !           553:    _ERR_INVALID_DMA,
        !           554:    _ERR_INVALID_DMA_IRQ
        !           555: };   
        !           556: 
        !           557: // maximum number of timer events that can be registered 
        !           558: #define  _TIMER_MAX_EVENTS    0x10  
        !           559: 
        !           560: // flags for the debugging system
        !           561: #define  _SOS_DEBUG_NORMAL       0x0000
        !           562: #define  _SOS_DEBUG_NO_TIMER     0x0001
        !           563: #define  _SOS_TIMER_DPMI         0x0002
        !           564: 
        !           565: // define for types of DOS extenders
        !           566: #define  _SOS_RATIONAL           0x8000
        !           567: #define  _SOS_FLASHTECK          0x4000
        !           568: 
        !           569: // defines for the types of timers for different
        !           570: // dos extenders
        !           571: #define  _SOS_TIMER_NEAR         0x8000
        !           572: #define  _SOS_TIMER_FAR          0x4000
        !           573:  
        !           574: // values for callback information
        !           575: enum
        !           576: {
        !           577:    _SAMPLE_PROCESSED,
        !           578:    _SAMPLE_LOOPING,
        !           579:    _SAMPLE_DONE
        !           580: };
        !           581: 
        !           582: // define for special 18.2 callback rate to dos
        !           583: #define  _TIMER_DOS_RATE   0xff00
        !           584: 
        !           585: #pragma pack()
        !           586: 
        !           587: #pragma aux int_3 = "int 3"
        !           588:  
        !           589: #pragma pack( 1 ) 
        !           590: typedef struct
        !           591: {
        !           592:        unsigned       region_size;
        !           593:        unsigned       offset;
        !           594:        unsigned       segment;
        !           595:        unsigned short  number_available;
        !           596:        unsigned short number_used;
        !           597:        unsigned       page0;
        !           598: 
        !           599: } EVDS_STRUCT;
        !           600: 
        !           601: typedef struct 
        !           602: {
        !           603:        unsigned       region_size;
        !           604:        unsigned       offset;
        !           605:        unsigned short segment;
        !           606:        unsigned short  ID;
        !           607:        unsigned       physical;
        !           608: 
        !           609: } VDS_STRUCT;
        !           610: 
        !           611: #pragma pack() 
        !           612: 
        !           613: //
        !           614: // #include "sosdata.h"
        !           615: //
        !           616: /****************************************************************************
        !           617: 
        !           618:    File              : sosdata.h
        !           619: 
        !           620:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !           621:    Date              :
        !           622: 
        !           623:    Purpose           : Include Files For Zortech C++ Compiler
        !           624: 
        !           625:    Last Updated      :
        !           626: 
        !           627: ****************************************************************************
        !           628:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !           629:                                                        All Rights Reserved
        !           630: ****************************************************************************/
        !           631: 
        !           632: #ifndef  _SOS_DATA
        !           633: #define  _SOS_DATA
        !           634: 
        !           635: #include <stddef.h>
        !           636: 
        !           637: #pragma pack(4) 
        !           638: extern   WORD     _sosDIGIData_Start;
        !           639: extern   WORD     _sosDIGIData_End;
        !           640: extern   WORD     _wSOSDriverLinear[];
        !           641: extern   WORD     _wSOSTimerLinear[];
        !           642: extern   LPSTR    _lpSOSDriver[];
        !           643: extern   LPSTR    _lpSOSTimer[];
        !           644: extern   LPSTR    _lpSOSDriverCS[];
        !           645: extern   LPSTR    _lpSOSTimerCS[];
        !           646: extern   BOOL     _wSOSDriverLoaded[];
        !           647: extern   BOOL     _wSOSTimerLoaded[];
        !           648: extern   BOOL     _wSOSDriverInitialized[];
        !           649: extern   WORD     _wSOSOutputRate[];
        !           650: extern   WORD     _wSOSDMABuffersize[];
        !           651: extern   LONG     _dwSOSDMABufferPhysical[];
        !           652: extern   LPSTR    _lpSOSDMABuffer[];
        !           653: extern   BOOL     _wTimerUsed;
        !           654: extern   VOID ( far *_lpSOSFillHandler[] )( VOID );
        !           655: extern   WORD     _wSOSTimerType[];
        !           656: extern   WORD     _wSOSDriverType[];
        !           657: extern   _SOS_SAMPLE far * _lpSOSSampleList[][ _MAX_VOICES ];
        !           658: extern   LPWORD      _lpSOSDMAIrqCount[];
        !           659: extern   LPWORD      _lpSOSDMAFillCount[];
        !           660: extern   WORD        _wSOSTmrNextCount;
        !           661: extern   VOID ( interrupt far *_lpSOSOldTimer )( VOID );
        !           662: extern   WORD     _wSOSDriverID[];
        !           663: extern   _SOS_CAPABILITIES _sSOSDriverCaps[];
        !           664: extern   WORD        _wSOSDMAPortList[];
        !           665: extern   BYTE        _bSOSDMAChannel[];
        !           666: extern   _SOS_INIT_DRIVER     _sSOSDIGIInitDriver[];
        !           667: extern   BYTE  _pSOSDriverPath[];
        !           668: extern   BYTE  _pSOSTempDriverPath[];
        !           669: extern   BOOL  _wTIMERUsed;
        !           670: extern   WORD  _wTIMERValue;
        !           671: extern   VOID ( far * _lpTIMEREvents[] )( VOID );
        !           672: extern   WORD _wTIMEREventRate[];
        !           673: extern   WORD _dwTIMEREventFraction[];
        !           674: extern   WORD _dwTIMEREventFractionCurrent[];
        !           675: extern   BYTE  _bSOSMIDITimerSongHandler[];
        !           676: extern   BYTE  _bSOSMIDISongHandle;
        !           677: extern   WORD  _wSOSTimerMemHandle[];
        !           678: extern   WORD  _wSOSDriverMemHandle[];
        !           679: extern   WORD  _wSOSRealSeg[];
        !           680: 
        !           681: extern   _FILEHEADER    _sDETFileHeader;
        !           682: extern   _DRIVERHEADER  _sDETDriverHeader;
        !           683: extern   _FILEHEADER    sLOADFileHeader;
        !           684: extern   _DRIVERHEADER  sLOADDriverHeader;
        !           685: extern   BOOL           _wDETInitialized;
        !           686: extern   WORD           _wDETLinear;
        !           687: extern   LPSTR          _lpDETDriverBuffer;    
        !           688: extern   LPSTR          _lpDETDriverBufferCS;
        !           689: extern   WORD           _hDETFile;
        !           690: extern   DWORD          _dwDETDriverIndex;
        !           691: extern   WORD           _wDETDriverIndexCur;
        !           692: extern   WORD           _wDETMemHandle;
        !           693: extern   LPSOSDEVICECAPS _lpDETDeviceCaps;
        !           694: extern   _SOS_CAPABILITIES _sDETCaps;  
        !           695: extern   PSTR _pSOSErrorStrings[];
        !           696: extern   BOOL _wSOSBufferAllocated[];
        !           697: extern   BOOL _wSOSSystemInitialized;
        !           698: extern   VDS_STRUCT _sSOSVDSInfo;
        !           699: extern   _SOS_FILL_INFO _sSOSFillInfo;
        !           700: extern   WORD    _wSOSTimerEventIndex;
        !           701: extern   WORD  _wSOSTimerEntered;
        !           702: extern   WORD  _wSOSDriverSize[];
        !           703: extern   WORD  _wSOSTimerSize[];
        !           704: 
        !           705: #ifdef __cplusplus
        !           706: extern "C" {
        !           707: #endif
        !           708: extern   WORD  _sosDIGIData1_Start;
        !           709: extern   WORD  _sosDIGIData1_End;
        !           710: extern   WORD  _sosDIGIData2_Start;
        !           711: extern   WORD  _sosDIGIData2_End;
        !           712: extern   BYTE  _bTIMERInstalled;
        !           713: extern   BYTE  _bTIMERDPMI;
        !           714: extern   WORD  wDetectPort;
        !           715: extern   WORD  wDetectIRQ;
        !           716: extern   WORD  wDetectDMA;
        !           717: extern   WORD  wDetectParam;
        !           718: #ifdef __cplusplus
        !           719: }
        !           720: #endif 
        !           721: 
        !           722: #pragma pack()
        !           723: 
        !           724: #endif
        !           725: 
        !           726: 
        !           727: //
        !           728: // #include "sosfnct.h"
        !           729: //
        !           730: /****************************************************************************
        !           731: 
        !           732:    File              : sosfnct.h
        !           733: 
        !           734:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !           735:    Date              :
        !           736: 
        !           737:    Purpose           : Include Files For Zortech C++ Compiler
        !           738: 
        !           739:    Last Updated      :
        !           740: 
        !           741: ****************************************************************************
        !           742:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !           743:                                                        All Rights Reserved
        !           744: ****************************************************************************/
        !           745: 
        !           746: #ifndef  _SOS_FUNCTIONS
        !           747: #define  _SOS_FUNCTIONS
        !           748: 
        !           749: #pragma pack(4)
        !           750: 
        !           751: WORD sosDIGILockMemory          (  VOID  );
        !           752: WORD sosDIGIUnLockMemory        (  VOID  );
        !           753: WORD sosDIGIInitSystem           (  LPSTR, WORD  );
        !           754: WORD sosDIGIUnInitSystem         (  VOID  );
        !           755: WORD sosDIGIInitDriver           (  WORD, _SOS_HARDWARE far *,
        !           756:                                                                        _SOS_INIT_DRIVER far *, WORD far *   );
        !           757: WORD sosDIGIUnInitDriver         (  WORD, BOOL, BOOL  );
        !           758: WORD sosDIGILoadDriver          (  WORD, WORD, LPSTR far *, LPSTR far *, PSTR, PSTR, WORD * );
        !           759: WORD sosDIGIUnLoadDriver         (  WORD  );
        !           760: WORD sosDIGIGetDeviceCaps        (  WORD, LPSOSDEVICECAPS  );
        !           761: 
        !           762: #ifdef PHARLAP
        !           763: LPSTR sosDIGIAllocateBuffer      (  WORD , WORD *, WORD * );
        !           764: #else
        !           765: LPSTR sosDIGIAllocateBuffer      (  WORD , WORD *, WORD * );
        !           766: #endif
        !           767: 
        !           768: WORD sosDIGIStopSample           (  WORD, WORD  );
        !           769: WORD sosDIGISamplesPlaying       (  WORD  );
        !           770: BOOL sosDIGISampleDone           (  WORD, WORD  );
        !           771: BOOL sosDIGISampleFilling        (  WORD, WORD  );
        !           772: WORD sosDIGIStartSample          (  WORD, _SOS_START_SAMPLE far *  );
        !           773: WORD sosDIGIContinueSample       (  WORD, WORD, _SOS_START_SAMPLE far * );
        !           774: 
        !           775: 
        !           776: WORD  sosDIGIDetectInit          (  LPSTR  );
        !           777: WORD  sosDIGIDetectUnInit        (  VOID  );
        !           778: WORD  sosDIGIDetectFindHardware  (  WORD, _SOS_CAPABILITIES far *, WORD far * );
        !           779: WORD  sosDIGIDetectFindFirst     (  _SOS_CAPABILITIES far *, WORD far *  );
        !           780: WORD  sosDIGIDetectFindNext      (  _SOS_CAPABILITIES far *, WORD far *  );
        !           781: WORD  sosDIGIDetectGetSettings   (  _SOS_HARDWARE far *  );
        !           782: WORD  sosDIGIDetectGetCaps       (  WORD, _SOS_CAPABILITIES far *  );
        !           783: WORD  sosDIGIDetectVerifySettings(  _SOS_HARDWARE far *  );
        !           784: PSTR  sosGetErrorString          (  WORD  );
        !           785: 
        !           786: WORD  sosDIGILoadTimer           (  WORD , LPSTR far *, LPSTR far *, PSTR, PSTR, WORD * );
        !           787: WORD  sosDIGIUnLoadTimer         (  WORD  );
        !           788: 
        !           789: WORD  sosTIMERRegisterEvent      ( WORD wCallRate, VOID ( far * lpTimerEvent )( VOID ), WORD far *lpTimerHandle );
        !           790: WORD  sosTIMERInitSystem               (  WORD, WORD  );
        !           791: WORD  sosTIMERUnInitSystem             (  WORD  );
        !           792: WORD  sosTIMERSetRate                  (  WORD  );  
        !           793: WORD  sosTIMERRemoveEvent              (  WORD );
        !           794: WORD  sosTIMERAlterEventRate           (  WORD, WORD  );
        !           795: WORD  sosTIMERGetEventRate             (  WORD  );
        !           796: VOID far sosTIMEROldHandler            (  VOID  );
        !           797: VOID far sosTIMERHandler               (  VOID  );
        !           798: 
        !           799: // functions in soscntl.c
        !           800: WORD  sosDIGISetSampleVolume     ( WORD, WORD, WORD );
        !           801: WORD  sosDIGIGetSampleVolume     ( WORD, WORD );
        !           802: WORD  sosDIGISetChannel          ( WORD, WORD, WORD );
        !           803: WORD  sosDIGIGetChannel          ( WORD, WORD );
        !           804: WORD  sosDIGIGetBytesProcessed   ( WORD, WORD );
        !           805: WORD  sosDIGIGetLoopCount        ( WORD, WORD );
        !           806: WORD  sosDIGISetPanLocation      ( WORD, WORD, WORD );
        !           807: WORD  sosDIGIGetPanLocation      ( WORD, WORD );
        !           808: DWORD sosDIGISetPitch            ( WORD, WORD, DWORD );
        !           809: DWORD sosDIGIGetPitch            ( WORD, WORD );
        !           810: WORD  sosDIGIGetDMAPosition      ( WORD );
        !           811: WORD  sosDIGISetPanSpeed         ( WORD, WORD, WORD );
        !           812: WORD  sosDIGIGetPanSpeed         ( WORD, WORD );
        !           813: WORD  sosDIGIGetSampleID         ( WORD, WORD );
        !           814: WORD  sosDIGIGetSampleHandle     ( WORD, WORD );
        !           815: WORD  sosDIGISetMasterVolume     ( WORD, WORD );
        !           816: #ifdef PHARLAP
        !           817: VOID  sosFreeVDSPage          ( unsigned short, unsigned short, DWORD );
        !           818: WORD  sosAllocVDSPage         ( unsigned short *, unsigned short *, DWORD * );
        !           819: #else
        !           820: WORD  sosAllocVDSPage            ( LPSTR *, WORD *, WORD * );
        !           821: VOID  sosFreeVDSPage             ( WORD, WORD, LONG );
        !           822: #endif
        !           823: 
        !           824: #ifdef __cplusplus
        !           825: extern "C" {
        !           826: #endif
        !           827: 
        !           828: #ifdef PHARLAP
        !           829: extern   int   cdecl sosRealFree          ( int );
        !           830: extern   BOOL  cdecl  _sos_read( WORD, LPSTR, WORD, WORD * );
        !           831: extern   int   cdecl sosRealAlloc( int, int *, int * );
        !           832: extern   void  cdecl sosDRVFarMemCopy( LPSTR, LPSTR, WORD );
        !           833: extern   int   cdecl sosGetCS( VOID );
        !           834: extern   int   cdecl sosGetES( VOID );
        !           835: #else
        !           836: extern   int   cdecl sosRealAlloc         ( int, int *, int * );
        !           837: extern   int   cdecl sosRealFree          ( int );
        !           838: #endif
        !           839: 
        !           840: // sos driver functions
        !           841: extern   WORD  cdecl sosDRVLockMemory     ( DWORD, DWORD );
        !           842: extern   WORD  cdecl sosDRVUnLockMemory   ( DWORD, DWORD );
        !           843: extern   void  cdecl sosDRVGetCapsInfo    ( LPSTR, LPSTR, _SOS_CAPABILITIES far * );
        !           844: extern   void  cdecl sosDetDRVGetCapsInfo ( LPSTR, LPSTR, _SOS_CAPABILITIES far * );
        !           845: extern   void  cdecl sosDRVGetCapsPtr     ( LPSTR, LPSTR, _SOS_CAPABILITIES far * );
        !           846: extern   void  cdecl sosDRVInit           ( LPSTR, LPSTR, int, int, int, int, int, int );  
        !           847: extern   void  cdecl sosDRVStart          ( LPSTR, LPSTR, int, int );
        !           848: extern   void  cdecl sosDRVSetRate        ( LPSTR, LPSTR, int );
        !           849: extern   void  cdecl sosDRVSetAction      ( LPSTR, LPSTR );
        !           850: extern   void  cdecl sosDRVStop           ( LPSTR, LPSTR );
        !           851: extern   void  cdecl sosDRVUnInit         ( LPSTR, LPSTR );
        !           852: extern   void  cdecl sosDRVGetFillInfo    ( LPSTR, LPSTR, LPSTR, int, int, int, _SOS_FILL_INFO * );
        !           853: extern   void  cdecl sosFillSampleStructs ( PSTR, LPSTR );
        !           854: extern   WORD  cdecl sosDetDRVExist       ( LPSTR, LPSTR );
        !           855: extern   WORD  cdecl sosDetDRVGetSettings ( LPSTR, LPSTR );
        !           856: extern   WORD  cdecl sosDetDRVVerifySettings( LPSTR, WORD, WORD, WORD, LPSTR );
        !           857: extern   WORD  cdecl sosDIGIInitForWindows( WORD );
        !           858: extern   WORD  cdecl sosDIGIUnInitForWindows( WORD );
        !           859: extern   LPSTR cdecl sosAllocateFarMem      ( WORD, PSTR, WORD * );
        !           860: extern   LPSTR cdecl sosCreateAliasCS       ( LPSTR );
        !           861: extern   VOID  cdecl sosFreeSelector        ( LPSTR, DWORD );
        !           862: extern   LPSTR cdecl sosMAKEDOSPtr          ( PSTR );
        !           863: extern   VOID  cdecl sosDetDRVSetEnvString  ( DWORD, PSTR );
        !           864: extern   PSTR  cdecl sosDetDRVGetEnvString  ( DWORD );
        !           865: extern   VOID  cdecl sosDetDRVEnvStringInit ( LPSTR, LPSTR );
        !           866: extern   VOID  cdecl sosDRVSetupCallFunctions( LPSTR, LPSTR, LPSTR, LPSTR );
        !           867: extern   WORD  cdecl sosDRVGetFreeMemory     ( VOID );
        !           868: extern   WORD  cdecl sosDRVAllocVDSStruct    ( WORD, WORD *, WORD * );
        !           869: extern   WORD  cdecl sosDRVFreeVDSStruct     ( WORD, WORD );
        !           870: extern   WORD  cdecl sosDRVIsWindowsActive   ( VOID );
        !           871: extern   WORD  cdecl sosDRVVDSGetBuffer    ( WORD );
        !           872: extern   WORD  cdecl sosDRVVDSFreeBuffer   ( WORD );
        !           873: extern   WORD  cdecl getDS( VOID );
        !           874: extern   WORD  cdecl sosDRVMakeDMASelector   ( WORD );  
        !           875: extern   WORD  cdecl sosDRVFreeDMASelector   ( WORD );  
        !           876: 
        !           877: 
        !           878: extern   void  cdecl sosTIMERDRVInit( int wRate, void ( far * )( void ) );
        !           879: extern   void  cdecl sosTIMERDRVUnInit( void );
        !           880: extern   void  cdecl sosTIMERDRVHandler( void );
        !           881: extern   void  cdecl sosTIMERDRVFHandler( void );
        !           882: extern   void  cdecl sosTIMERDRVEnable( void );
        !           883: extern   void  cdecl sosTIMERDRVDisable( void );
        !           884: extern   void  cdecl sosTIMERDRVCallOld( void );
        !           885: extern   void  cdecl sosTIMERDRVSetRate( WORD );    
        !           886: extern   void  cdecl sosDIGITimer_Start( void );
        !           887: extern   void  cdecl sosDIGITimer_End( void );
        !           888: extern   void  cdecl sosDIGIDrv_Start( void );
        !           889: extern   void  cdecl sosDIGIDrv_End( void );
        !           890: #ifdef __cplusplus
        !           891: }
        !           892: #endif 
        !           893: 
        !           894: // external functions for handling system initialization and 
        !           895: // uninitialization
        !           896: WORD  sosEXDIGInitDriver               (  WORD, WORD, WORD, LPSTR,
        !           897:                                                                                  _SOS_HARDWARE far *, WORD *  );
        !           898: WORD  sosEXDIGIUnInitDriver            (  VOID  );
        !           899: 
        !           900: WORD  sosEXDETFindDriver               (  WORD, LPSTR, _SOS_HARDWARE far *,
        !           901:                                                                                  _SOS_CAPABILITIES far *  );
        !           902: 
        !           903: // memory locking prototypes
        !           904: VOID  sosDIGICaps_Start( VOID );
        !           905: VOID  sosDIGICaps_End( VOID );
        !           906: VOID  sosDIGIErr_Start( VOID );
        !           907: VOID  sosDIGIErr_End( VOID );
        !           908: VOID  sosDIGITmr_Start( VOID );
        !           909: VOID  sosDIGITmr_End( VOID );
        !           910: VOID  sosDIGIStart_Start( VOID );
        !           911: VOID  sosDIGIStart_End( VOID );
        !           912: VOID  sosDIGIPlyng_Start( VOID );
        !           913: VOID  sosDIGIPlyng_End( VOID );
        !           914: VOID  sosDIGIRate_Start( VOID );
        !           915: VOID  sosDIGIRate_End( VOID );
        !           916: VOID  sosDIGIDone_Start( VOID );
        !           917: VOID  sosDIGIDone_End( VOID );
        !           918: VOID  sosDIGIDetec_Start( VOID );
        !           919: VOID  sosDIGIDetec_End( VOID );
        !           920: VOID  sosDIGIInit_Start( VOID );
        !           921: VOID  sosDIGIInit_End( VOID );
        !           922: VOID  sosDIGILoad_Start( VOID );
        !           923: VOID  sosDIGILoad_End( VOID );
        !           924: VOID  sosDIGICntl_Start( VOID );
        !           925: VOID  sosDIGICntl_End( VOID );
        !           926: 
        !           927: #pragma pack()
        !           928: 
        !           929: #endif
        !           930: 
        !           931: 
        !           932: #endif
        !           933: 
        !           934: 
        !           935: 
        !           936: //
        !           937: // include sosm.h and its includes so just call
        !           938: // sos.h from teksnd.c
        !           939: //
        !           940: /****************************************************************************
        !           941: 
        !           942:    File              : sosm.h
        !           943: 
        !           944:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !           945:    Date              :
        !           946: 
        !           947:    Purpose           : Include Files For Zortech C++ Compiler
        !           948: 
        !           949:    Last Updated      :
        !           950: 
        !           951: ****************************************************************************
        !           952:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !           953:                                                        All Rights Reserved
        !           954: ****************************************************************************/
        !           955: 
        !           956: #ifndef  _SOS_MIDI_DEFINED   
        !           957: #define  _SOS_MIDI_DEFINED   
        !           958: 
        !           959: //
        !           960: //#include "sosdefs.h"
        !           961: //#include "sos.h"
        !           962: //
        !           963: 
        !           964: #pragma pack(4)
        !           965: 
        !           966: #define  _SOS_MIDI_ERR          -1
        !           967: 
        !           968: // number of drivers allowed to be open at one time
        !           969: #define  _SOS_MIDI_MAX_DRIVERS  5
        !           970: 
        !           971: // maximum number of allowed channels
        !           972: #define  _SOS_MIDI_MAX_CHANNELS    0x10
        !           973: 
        !           974: // structure definition for the capabilities
        !           975: typedef struct
        !           976: {
        !           977:    BYTE     szDeviceName[ 32 ];  // device name
        !           978:    WORD     wDeviceVersion;      // device version
        !           979:    WORD     wFlags;              // miscellaneous flags   
        !           980:    WORD     wProcessData;        // process data before sending to driver
        !           981:    short far *   lpPortList;          // list of usable ports
        !           982:    short far *   lpIRQList;           // list of usable irq channels
        !           983:    WORD     wDeviceID;           // ID for the device
        !           984:    
        !           985: } _SOS_MIDI_CAPABILITIES; 
        !           986: 
        !           987: #define  LPSOSMIDIDEVICECAPS  _SOS_MIDI_CAPABILITIES far *
        !           988: 
        !           989: // call indexes for the loadable drivers
        !           990: enum
        !           991: { 
        !           992:    _DRV_MIDI_GET_CAPS,
        !           993:    _DRV_MIDI_GET_CALL_TABLE,
        !           994:    _DRV_MIDI_SPECIAL1
        !           995: };
        !           996: 
        !           997: // file header for the driver
        !           998: typedef struct
        !           999: {
        !          1000:    // name ID
        !          1001:    BYTE  szName[ 32 ];
        !          1002: 
        !          1003:    // number of drivers in the file
        !          1004:    WORD  wDrivers;
        !          1005: 
        !          1006:    // offset of first driver
        !          1007:    WORD  lOffset;
        !          1008: 
        !          1009:    // size of the file
        !          1010:    WORD  lFileSize;
        !          1011: 
        !          1012: } _MIDIFILEHEADER;
        !          1013: 
        !          1014: // driver header structure
        !          1015: typedef struct
        !          1016: {
        !          1017:    // name ID
        !          1018:    BYTE  szName[ 32 ];
        !          1019: 
        !          1020:    // offset of next driver
        !          1021:    WORD  lNextDriver;
        !          1022: 
        !          1023:    // size of current driver
        !          1024:    WORD  wSize;
        !          1025: 
        !          1026:    // id for the current device
        !          1027:    WORD  wDeviceID;
        !          1028: 
        !          1029:    // id for the extender type
        !          1030:    WORD  wExtenderType;
        !          1031: 
        !          1032: } _MIDIDRIVERHEADER;
        !          1033: 
        !          1034: // device hardware information
        !          1035: typedef struct
        !          1036: {
        !          1037:    // port to be used
        !          1038:    WORD  wPort;
        !          1039: 
        !          1040:    // IRQ for the board
        !          1041:    WORD  wIRQ;
        !          1042: 
        !          1043:    // extra parameter
        !          1044:    WORD  wParam;
        !          1045: 
        !          1046: } _SOS_MIDI_HARDWARE;
        !          1047: 
        !          1048: // structure for initializing a digital driver 
        !          1049: typedef struct
        !          1050: {
        !          1051:    // ID for the digital driver
        !          1052:    WORD  wDriverID;
        !          1053: 
        !          1054:    // timer rate to use
        !          1055:    WORD  wTimerRate;
        !          1056: 
        !          1057:    // timer callback rate to use
        !          1058:    WORD  wTimerCallbackRate;
        !          1059: 
        !          1060:    // max voices for the driver to use
        !          1061:    WORD  wMaxVoices;
        !          1062: 
        !          1063:    // velocity sensing flag
        !          1064:    WORD  wVelocitySensing;
        !          1065: 
        !          1066:    // init driver info
        !          1067:    _SOS_INIT_DRIVER far * sDIGIDriverInfo;
        !          1068: 
        !          1069:    // hardware information
        !          1070:    _SOS_HARDWARE far *  sDIGIHardwareInfo;    
        !          1071: 
        !          1072: } _SOS_MIDI_DIGI_INIT_DRIVER;
        !          1073: 
        !          1074: // structure for initializing a driver
        !          1075: typedef struct
        !          1076: {  
        !          1077:    // type of driver to use if using a digital driver
        !          1078:    WORD        wDIGIDriverID;
        !          1079: 
        !          1080:    // pointer to driver memory
        !          1081:    VOID far * lpDriverMemory;
        !          1082:    VOID far * lpDriverMemoryCS;
        !          1083: 
        !          1084:    // pointer to digital driver initialization information
        !          1085:    _SOS_MIDI_DIGI_INIT_DRIVER far * sDIGIInitInfo;
        !          1086: 
        !          1087:    // miscellaneous WORD parameter for driver
        !          1088:    WORD  wParam;
        !          1089: 
        !          1090:    // miscellaneous DWORD parameter for driver
        !          1091:    DWORD dwParam;
        !          1092: 
        !          1093: } _SOS_MIDI_INIT_DRIVER;
        !          1094: 
        !          1095: // structure for starting a song
        !          1096: typedef struct
        !          1097: {  
        !          1098:    // pointer to song memory 
        !          1099:    BYTE _huge * lpSongData;
        !          1100: 
        !          1101:    // pointer to callback function for pertinent song information
        !          1102:    VOID ( far * lpSongCallback )( WORD );
        !          1103: 
        !          1104: } _SOS_MIDI_INIT_SONG;
        !          1105: 
        !          1106: // define to indicate that track mapping can be used
        !          1107: // from the midi file for the song
        !          1108: #define  _MIDI_MAP_TRACK   0xff
        !          1109:   
        !          1110: // MIDI channel to device mapping structure
        !          1111: typedef struct
        !          1112: {
        !          1113:    // track to device mapping information
        !          1114:    WORD wTrackDevice[ 32 ];
        !          1115:         
        !          1116: } _SOS_MIDI_TRACK_DEVICE;
        !          1117: 
        !          1118: // MIDI channel to device mapping structure
        !          1119: typedef struct
        !          1120: {
        !          1121:    // track to device mapping information
        !          1122:    WORD wTrackDevice[ 32 ][ 5 ];
        !          1123:         
        !          1124: } _SOS_MIDI_TRACK_DEVICE1;
        !          1125: 
        !          1126: // NEW
        !          1127: // header for the NDMF format MIDI file 
        !          1128: typedef struct
        !          1129: {
        !          1130:    // ID for the file
        !          1131:    BYTE  szFileID[ 32 ];
        !          1132: 
        !          1133:    WORD dwBranchOffset;
        !          1134:    WORD temp1;
        !          1135:    WORD temp2;
        !          1136:    WORD temp3;
        !          1137: 
        !          1138: //   // name of the instrument file to use with the song   
        !          1139: //   BYTE  szInstrumentFile[ 16 ];
        !          1140: 
        !          1141:    // number of tracks in the song
        !          1142:    WORD  wNDMFTracks;
        !          1143: 
        !          1144:    // ticks/quarter note song is used at
        !          1145:    WORD  wTicksQuarterNote;
        !          1146: 
        !          1147:    // tempo
        !          1148:    WORD  wTempo;
        !          1149: 
        !          1150:    // time for song to play at current tempo
        !          1151:    WORD  wTimeToPlay;
        !          1152: 
        !          1153:    // channel mapping priority information
        !          1154:    WORD  wChannelPriority[ _SOS_MIDI_MAX_CHANNELS ];
        !          1155: 
        !          1156:    // channel mapping information
        !          1157:    _SOS_MIDI_TRACK_DEVICE1 sTrackMap;
        !          1158: 
        !          1159:    // array of flags for which controllers to restore on a loop/branch
        !          1160:    BYTE  bCtrlRestore[ 128 ];
        !          1161: 
        !          1162:    // pointer to callback function for song to call with 
        !          1163:    // pertinent information
        !          1164:    VOID ( far * lpSongCallback )( WORD ); 
        !          1165: 
        !          1166: } _NDMF_FILE_HEADER;
        !          1167: // END
        !          1168: 
        !          1169: // header for the tracks in the NDMF format MIDI file
        !          1170: typedef struct
        !          1171: {
        !          1172:    // track number
        !          1173:    WORD  wTrackNumber;
        !          1174: 
        !          1175:    // length of the track
        !          1176:    WORD  wTrackLength;
        !          1177: 
        !          1178:    // channel used on the track
        !          1179:    WORD  wChannel;
        !          1180: 
        !          1181: } _NDMF_TRACK_HEADER;
        !          1182: 
        !          1183: // MIDI event structure
        !          1184: typedef struct
        !          1185: {
        !          1186:    // dummy name to access midi data from
        !          1187:    BYTE  bMidiData[ 256 ];
        !          1188: 
        !          1189: } _NDMF_MIDI_EVENT;
        !          1190: 
        !          1191: // maximum number of songs that can be played at any time
        !          1192: #define  _SOS_MIDI_MAX_SONGS     8
        !          1193: 
        !          1194: // maximum number of tracks that can be used
        !          1195: #define  _SOS_MIDI_MAX_TRACKS    32
        !          1196: 
        !          1197: // number of driver functions
        !          1198: #define  _SOS_MIDI_DRV_FUNCTIONS 12
        !          1199: 
        !          1200: // enumeration for all of the drv functions
        !          1201: enum
        !          1202: {
        !          1203:    _MIDI_DRV_SEND_DATA,
        !          1204:    _MIDI_DRV_INIT,
        !          1205:    _MIDI_DRV_UNINIT,
        !          1206:    _MIDI_DRV_RESET,
        !          1207:    _MIDI_DRV_SET_INST_DATA
        !          1208: };
        !          1209: 
        !          1210: // defines for the loadable driver ids
        !          1211: #define  _MIDI_SOUND_MASTER_II      0xa000
        !          1212: #define  _MIDI_MPU_401              0xa001
        !          1213: #define  _MIDI_FM                   0xa002
        !          1214: #define  _MIDI_OPL2                 0xa002
        !          1215: #define  _MIDI_CALLBACK             0xa003
        !          1216: #define  _MIDI_MT_32                0xa004
        !          1217: #define  _MIDI_DIGI                 0xa005  
        !          1218: #define  _MIDI_INTERNAL_SPEAKER     0xa006
        !          1219: #define  _MIDI_WAVE_TABLE_SYNTH     0xa007  
        !          1220: #define  _MIDI_AWE32                0xa008  
        !          1221: #define  _MIDI_OPL3                 0xa009  
        !          1222: #define  _MIDI_GUS                  0xa00a  
        !          1223: 
        !          1224: // structure for the hmi instrument file header
        !          1225: typedef struct
        !          1226: {
        !          1227:    // file id type
        !          1228:    BYTE  szFileID[ 32 ];
        !          1229: 
        !          1230:    // file version
        !          1231:    WORD  wFileVersion;
        !          1232: 
        !          1233:    // size of the file
        !          1234:    WORD dwFileSize;
        !          1235: 
        !          1236: } _HMI_INS_FILE_HEADER;
        !          1237: 
        !          1238: 
        !          1239: // define for identifying a drum instrument  
        !          1240: #define  _SOS_MIDI_DRUM_INS   ( short )0x8000
        !          1241: 
        !          1242: // maximum number of timer events that can be registered 
        !          1243: #define  _TIMER_MAX_EVENTS    0x10  
        !          1244: 
        !          1245: // structure for digital driver queue element
        !          1246: typedef struct _tagQueueElement
        !          1247: {
        !          1248:    // handle for the sample
        !          1249:    WORD  wSampleHandle;
        !          1250: 
        !          1251:    // id for the sample
        !          1252:    WORD  wSampleID;
        !          1253: 
        !          1254:    // velocity for the sample
        !          1255:    WORD  wVelocity;
        !          1256: 
        !          1257:    // channel for the sample
        !          1258:    WORD  wChannel;
        !          1259: 
        !          1260: } _DIGI_QUEUE_ELEMENT;
        !          1261: 
        !          1262: // maximum number of instruments that can be set in the 
        !          1263: // digital driver
        !          1264: #define  _MAX_INS    128
        !          1265: 
        !          1266: // define for the maximum number of times a channel can be stolen
        !          1267: #define  _SOS_MIDI_MAX_LEVELS    0x04
        !          1268: 
        !          1269: // structure for MIDI information to be stored on the local stack
        !          1270: // when a channel is stolen
        !          1271: typedef struct
        !          1272: {
        !          1273:    // used element
        !          1274:    BYTE  bUsed;
        !          1275: 
        !          1276:    // last pitch bend information sent
        !          1277:    BYTE  bPitchBend;
        !          1278: 
        !          1279:    // channel volume
        !          1280:    BYTE  bChannelVolume;
        !          1281: 
        !          1282:    // instrument information
        !          1283:    BYTE  bInstrument;
        !          1284: 
        !          1285:    // sustain pedal
        !          1286:    BYTE  bSustain;
        !          1287: 
        !          1288: } _SOS_MIDI_CHANNEL_DATA;
        !          1289:  
        !          1290: // flags for the debugging system
        !          1291: #define  _SOS_DEBUG_NORMAL       0x0000
        !          1292: #define  _SOS_DEBUG_NO_TIMER     0x0001
        !          1293: 
        !          1294: // ID for 32 bit MIDI file
        !          1295: #define  _SOS_MIDI_FILE_ID       "HMIMIDIP"  
        !          1296: 
        !          1297: // structure for branch location controller
        !          1298: typedef struct
        !          1299: {
        !          1300:    // offset from start of track data
        !          1301:    WORD     dwOffset;
        !          1302: 
        !          1303:    // branch ID number
        !          1304:    BYTE     bBranchID;
        !          1305: 
        !          1306:    // current instrument
        !          1307:    BYTE     bInstrument;
        !          1308: 
        !          1309:    // current loop count for temporary storage
        !          1310:    // so that a track can be looped without 
        !          1311:    // needing any data from the program
        !          1312:    BYTE     bLoopCount;
        !          1313: 
        !          1314:    // number of controller messages stored
        !          1315:    BYTE     bCtrlChangeCount;
        !          1316: 
        !          1317:    // offset of control change information from start of file
        !          1318:    WORD     lpCtrlChangeData;   
        !          1319:    WORD     lpCtrlChangeDataTemp;
        !          1320:    
        !          1321:    // reserved fields
        !          1322:    WORD     wReserved1;
        !          1323:    WORD     wReserved2;
        !          1324: 
        !          1325: } _SOS_BRANCH_POINT;
        !          1326: 
        !          1327: #define  _SOS_MIDI_FADE_IN          0x01  
        !          1328: #define  _SOS_MIDI_FADE_OUT         0x02  
        !          1329: #define  _SOS_MIDI_FADE_OUT_STOP    0x04  
        !          1330: 
        !          1331: // structure for digital drums to use to store midi information
        !          1332: typedef struct
        !          1333: {
        !          1334:    // current volume
        !          1335:    WORD  wVolume;
        !          1336: 
        !          1337:    // current pan position
        !          1338:    WORD  wPanPosition;
        !          1339: 
        !          1340:    // reserved
        !          1341:    DWORD dwReserved;
        !          1342:    
        !          1343: } _SOS_MIDI_DIGI_CHANNEL;
        !          1344: 
        !          1345: // instrument file header structure
        !          1346: typedef struct
        !          1347: {
        !          1348:    // file ID
        !          1349:    BYTE  szID[ 32 ];
        !          1350: 
        !          1351:    // file version
        !          1352:    WORD  wVersion;
        !          1353: 
        !          1354:    // instruments in file
        !          1355:    WORD  wInstruments;
        !          1356: 
        !          1357:    // list of pointers to start sample structures
        !          1358:    _SOS_START_SAMPLE far * lpStartSample[ _MAX_INS ];
        !          1359: 
        !          1360:    DWORD temp1;
        !          1361:    DWORD temp2;
        !          1362: 
        !          1363: } _WAVE_FILE_HEADER;
        !          1364: 
        !          1365: #pragma pack()
        !          1366: 
        !          1367: // define for the busy error returned from send data
        !          1368: #define  _ERR_DRIVER_BUSY  0xf000
        !          1369: 
        !          1370: // NEW
        !          1371: // defines for the looping branch controllers
        !          1372: #define  _SOS_SET_FLAG   103
        !          1373: #define  _SOS_RESET_FLAG 104
        !          1374: #define  _SOS_BRANCH1   108
        !          1375: #define  _SOS_BRANCH2   109
        !          1376: #define  _SOS_BRANCH3   110
        !          1377: #define  _SOS_BRANCH4   111
        !          1378: #define  _SOS_BRANCH5   112
        !          1379: #define  _SOS_BRANCH6   113
        !          1380: #define  _SOS_BRANCH7   114
        !          1381: #define  _SOS_BRANCH8   115
        !          1382: #define  _SOS_BRANCH9   116
        !          1383: #define  _SOS_BRANCH10  117
        !          1384: #define  _SOS_BRANCH11  118
        !          1385: #define  _SOS_BRANCH12  119
        !          1386: #define  _SOS_BRANCH13  120
        !          1387: #define  _SOS_BRANCH14  121
        !          1388: 
        !          1389: // define for the program change controller flag
        !          1390: #define  _SOS_PROGRAM_CHANGE_FLAG   108
        !          1391: 
        !          1392: // END
        !          1393: 
        !          1394: 
        !          1395: // 
        !          1396: // #include "sosmdata.h"
        !          1397: //
        !          1398: /****************************************************************************
        !          1399: 
        !          1400:    File              : sosmdata.h
        !          1401: 
        !          1402:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !          1403:    Date              :
        !          1404: 
        !          1405:    Purpose           : Include Files For Zortech C++ Compiler
        !          1406: 
        !          1407:    Last Updated      :
        !          1408: 
        !          1409: ****************************************************************************
        !          1410:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !          1411:                                                        All Rights Reserved
        !          1412: ****************************************************************************/
        !          1413: 
        !          1414: 
        !          1415: #ifndef  _SOS_MIDI_DATA
        !          1416: #define  _SOS_MIDI_DATA
        !          1417: 
        !          1418: // #include "sos.h"
        !          1419: 
        !          1420: #pragma pack(4)
        !          1421: 
        !          1422: extern   WORD     _wSOSMIDIDriverLinear[];
        !          1423: extern   LPSTR    _lpSOSMIDIDriver[];
        !          1424: extern   LPSTR    _lpSOSMIDIDriverCS[];
        !          1425: extern   WORD     _wSOSMIDIMemHandle[];
        !          1426: extern   BOOL     _wSOSMIDIDriverLoaded[];
        !          1427: extern   WORD     _wSOSMIDIDriverType[];
        !          1428: extern   WORD     _wSOSMIDIDriverID[];
        !          1429: extern   DWORD    _dwSOSMIDITrackDeltaCurrent[][_SOS_MIDI_MAX_TRACKS];
        !          1430: extern   WORD     _wSOSMIDIActiveTracks[];
        !          1431: extern   WORD     _wSOSMIDITotalTracks[];
        !          1432: extern   DWORD    _dwSOSMIDITrackDeltaTime[][_SOS_MIDI_MAX_TRACKS];
        !          1433: extern   WORD     _wSOSMIDISongPaused[];
        !          1434: extern   WORD     _wSOSMIDISongMuted[];
        !          1435: extern   BOOL     _wSOSMIDISongActive[];
        !          1436: extern   BYTE     _bSOSMIDIEventSize[];
        !          1437: extern   BYTE     _bSOSMIDIEventSizeControl[];
        !          1438: extern   _SOS_MIDI_CAPABILITIES far * _lpSOSMIDIDriverCaps[];
        !          1439: extern   _SOS_MIDI_TRACK_DEVICE far * _sSOSMIDITrackMap[];   
        !          1440: extern   _NDMF_MIDI_EVENT _huge *  _lpSOSMIDITrack[][_SOS_MIDI_MAX_TRACKS];
        !          1441: extern   WORD  ( cdecl far *_lpSOSMIDIDrvFunction[ _SOS_MIDI_MAX_DRIVERS ][ _SOS_MIDI_DRV_FUNCTIONS ] )( LPSTR, WORD, WORD );   
        !          1442: extern   _NDMF_FILE_HEADER far * _sSOSMIDISongHeader[];
        !          1443: extern   _SOS_INIT_DRIVER        _sSOSDIGIInitDriver[];
        !          1444: extern   WORD _wSOSMIDIEventHandle[];
        !          1445: extern   BYTE  _szSOSMIDIDrvFile[];
        !          1446: extern   _MIDIFILEHEADER    _sSOSMIDIDRVFileHeader;
        !          1447: extern   _MIDIDRIVERHEADER  _sSOSMIDIDRVDriverHeader;
        !          1448: extern   BOOL  _wSOSMIDISysInititalized;
        !          1449: extern   WORD ( cdecl far *_lpSOSMIDICBCKDrvFunctions[] )( LPSTR, WORD, WORD );
        !          1450: extern   VOID ( cdecl far *_lpSOSMIDICBCKFunctions )( LPSTR, WORD, WORD );
        !          1451: extern   WORD _wMIDIDIGISampleQueueHead[];
        !          1452: extern   WORD _wMIDIDIGISampleQueueTail[];
        !          1453: extern   WORD _wMIDIDIGIMaxSamples[];
        !          1454: extern   WORD _wMIDIDIGIUsedSamples[];
        !          1455: extern   _DIGI_QUEUE_ELEMENT _sMIDIDIGIQueue[][ _MAX_VOICES ];
        !          1456: 
        !          1457: 
        !          1458: extern   WORD ( cdecl far *_lpMIDIDIGIDrvFunctions[] )( LPSTR, WORD, WORD );
        !          1459: extern   _SOS_START_SAMPLE far * _sMIDIDIGIStartSample[][ _MAX_INS ];
        !          1460: extern   _HMI_INS_FILE_HEADER far * _sMIDIDIGIInsFileHeader[];
        !          1461: extern   WORD _wMIDIDIGIDriverHandle[];
        !          1462: extern   WORD _wMIDIDIGIDriverInitialized[];
        !          1463: extern   WORD _wMIDIDIGITimerEventHandle[];
        !          1464: extern   WORD _wMIDIDIGIDriverInitMIDI[];
        !          1465: extern   WORD _wMIDIDIGIVelocitySensing[];
        !          1466: extern   BYTE _szMIDIDIGIInsFileID[];
        !          1467: 
        !          1468: extern   BYTE  _bSOSMIDIMasterVolume;
        !          1469: extern   BYTE  _bSOSMIDIDeviceChannelVolume[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1470: extern   BYTE  _bSOSMIDIMT32SendData;
        !          1471: 
        !          1472: extern   LPSTR lpFake;
        !          1473: extern   WORD  wFake;
        !          1474: 
        !          1475: extern   _NDMF_TRACK_HEADER _huge *_lpSOSMIDITrackHeaders[][ _SOS_MIDI_MAX_TRACKS ];
        !          1476: extern   BYTE  _bSOSMIDIChannelRemap[][ _SOS_MIDI_MAX_SONGS ][ _SOS_MIDI_MAX_CHANNELS ];
        !          1477: extern   BYTE  _bSOSMIDIChannelPriority[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1478: extern   BYTE  _bSOSMIDIOwnerChannel[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1479: extern   BYTE  _bSOSMIDIOwnerSong[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1480: extern   _SOS_MIDI_CHANNEL_DATA _sSOSMIDIChannelData[][ _SOS_MIDI_MAX_CHANNELS ][ _SOS_MIDI_MAX_LEVELS ];
        !          1481: extern   BYTE  _bSOSMIDIChannelDataIndex[][ _SOS_MIDI_MAX_SONGS ][ _SOS_MIDI_MAX_CHANNELS ];
        !          1482: extern   BYTE  _bSOSMIDIData[];
        !          1483: extern   BYTE  _bSOSMIDIData1[];
        !          1484: extern   BYTE  _bSOSMIDIDeviceLowPriority[];
        !          1485: extern   WORD  _wSOSMIDIChannelStealing;
        !          1486: extern   BYTE  _bSOSMIDIDeviceChannelActive[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1487: extern   BYTE  _bSOSMIDIDeviceChannelAvailable[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1488: extern   BYTE  _bSOSMIDISongHandle;
        !          1489: extern   BYTE  _szMIDIMIDIFileID[];
        !          1490: extern   BYTE  _pSOSMIDIDriverPath[];
        !          1491: extern   BYTE  _pSOSMIDITempDriverPath[];
        !          1492: extern   WORD  sosMIDIData_Start;
        !          1493: extern   WORD  sosMIDIData_End;
        !          1494: extern   WORD  ( cdecl far *_lpSOSMIDIAWEDrvFunctions[5] )( LPSTR, WORD, WORD );
        !          1495: extern   WORD  _wSOSGravisTimerHandle;
        !          1496: extern   WORD  _wSOSMIDISongVolume[];
        !          1497: 
        !          1498: extern   _SOS_BRANCH_POINT far * _lpMIDIBranchData[][ _SOS_MIDI_MAX_TRACKS ];
        !          1499: extern   WORD ( far *_lpSOSMIDIBranchCallback[] )( WORD, BYTE, BYTE );
        !          1500: extern   WORD ( far *_lpSOSMIDILoopCallback[] )( WORD, BYTE, BYTE, BYTE );
        !          1501: extern   WORD ( far *_lpSOSMIDITriggerCallback[][ 127 ] )( WORD, BYTE, BYTE );
        !          1502: extern   BYTE _bSOSMIDIBranchOccurred;
        !          1503: 
        !          1504: extern   WORD  _wSOSMIDIVolumeFadeDirection[];
        !          1505: extern   DWORD _dwSOSMIDIVolumeFadeFraction[];
        !          1506: extern   DWORD _dwSOSMIDIVolumeFadeVolume[];
        !          1507: extern   WORD  _wSOSMIDIVolumeFadeTicks[];
        !          1508: extern   BYTE  _bSOSMIDIHandleVolumeFade[];
        !          1509: extern   WORD  _wSOSDIGIMIDIHandle[];
        !          1510: 
        !          1511: extern   _SOS_MIDI_DIGI_CHANNEL _sMIDIDIGIChannel[];
        !          1512: 
        !          1513: extern   WORD ( cdecl far *_lpMIDIWAVEDrvFunctions[] )( LPSTR, WORD, WORD );
        !          1514: extern   WORD  _wSOSMIDIChannelMuted[][ _SOS_MIDI_MAX_CHANNELS ];
        !          1515: 
        !          1516: extern   BYTE  _szPLYMIDIBuffer[];
        !          1517: extern   WORD  _wPLYMIDIBufferIndex;
        !          1518: extern   WORD  _wSOSMIDIDriverSize[];
        !          1519: 
        !          1520: #pragma pack()
        !          1521: 
        !          1522: #endif
        !          1523: 
        !          1524: 
        !          1525: //
        !          1526: // #include "sosmfnct.h"
        !          1527: //
        !          1528: /****************************************************************************
        !          1529: 
        !          1530:    File              : sosmfnct.h
        !          1531: 
        !          1532:    Programmer(s)     : Don Fowler, Nick Skrepetos
        !          1533:    Date              :
        !          1534: 
        !          1535:    Purpose           : Include Files For Zortech C++ Compiler
        !          1536: 
        !          1537:    Last Updated      :
        !          1538: 
        !          1539: ****************************************************************************
        !          1540:                           Copyright(c) 1993,1994 Human Machine Interfaces 
        !          1541:                                                        All Rights Reserved
        !          1542: ****************************************************************************/
        !          1543: 
        !          1544: #ifndef  _SOS_MIDI_FUNCTIONS
        !          1545: #define  _SOS_MIDI_FUNCTIONS
        !          1546: 
        !          1547: #pragma pack(4)
        !          1548: 
        !          1549: VOID interrupt far sosMIDITimerHandler (  VOID  );
        !          1550: WORD  sosMIDILockMemory                (  VOID  );
        !          1551: WORD  sosMIDIUnLockMemory              (  VOID  );
        !          1552: WORD  sosMIDIGetDeviceCaps             (  WORD, LPSOSMIDIDEVICECAPS  );
        !          1553: WORD  sosMIDIInitSystem                (  LPSTR, WORD  );
        !          1554: WORD  sosMIDIUnInitSystem              (  VOID  );
        !          1555: WORD  sosMIDIInitDriver                (  WORD, _SOS_MIDI_HARDWARE far *,
        !          1556:                                                                                 _SOS_MIDI_INIT_DRIVER far *, WORD far *  );
        !          1557: WORD  sosMIDIUnInitDriver              (  WORD, BOOL  );
        !          1558: WORD  sosMIDILoadDriver                (  WORD, WORD, LPSTR far *, LPSTR far *, PSTR, PSTR, WORD * );
        !          1559: WORD  sosMIDIUnLoadDriver              (  WORD  );
        !          1560: WORD  sosMIDIInitSong                  (  _SOS_MIDI_INIT_SONG far *,
        !          1561:                                                                                  _SOS_MIDI_TRACK_DEVICE far *,
        !          1562:                                                                                  WORD far * );
        !          1563: WORD  sosMIDIUnInitSong                (  WORD  );
        !          1564: WORD  sosMIDIResetSong                 (  WORD, _SOS_MIDI_INIT_SONG far *  );
        !          1565: WORD  sosMIDIStartSong                 (  WORD  );  
        !          1566: WORD  sosMIDIStopSong                  (  WORD  );  
        !          1567: WORD  sosMIDIPauseSong                 (  WORD, WORD  );
        !          1568: WORD  sosMIDIMuteSong                  (  WORD  );
        !          1569: WORD  sosMIDIUnMuteSong                (  WORD  );
        !          1570: WORD  sosMIDIResumeSong                (  WORD  );
        !          1571: BOOL  sosMIDISongDone                  (  WORD  );  
        !          1572: WORD  sosMIDISongAlterTempo            (  WORD, WORD  );  
        !          1573: WORD  sosMIDIGetDeltaTime              (  LPSTR, DWORD far *  );
        !          1574: WORD  sosMIDISongGetTimeToPlay         (  WORD  );  
        !          1575: BYTE _huge * sosMIDINormalizePtr       (  BYTE _huge *  );
        !          1576: WORD  sosMIDISetInsData                (  WORD, LPSTR, WORD  );
        !          1577: WORD  sosMIDIResetDriver               (  WORD  );
        !          1578: BOOL  sosMIDIHandleMIDIData            (  WORD, LPSTR, WORD, WORD  );
        !          1579: WORD  sosMIDISendMIDIData              (  WORD, LPSTR, WORD  );
        !          1580: // NEW
        !          1581: VOID  sosMIDISetTrackState             (  WORD, WORD, WORD  );
        !          1582: // END
        !          1583: 
        !          1584: // compiled in drivers function interface
        !          1585: LPSTR digiGetCallTable                 (  VOID  );
        !          1586: LPSTR callbackGetCallTable             (  VOID  );
        !          1587: LPSTR aweGetCallTable                  (  VOID  );
        !          1588: 
        !          1589: WORD cdecl far callbackSendData             (  LPSTR, WORD, WORD  );
        !          1590: WORD cdecl far callbackInit                 (  LPSTR, WORD, WORD  );
        !          1591: WORD cdecl far callbackUnInit               (  LPSTR, WORD, WORD  );
        !          1592: WORD cdecl far callbackReset                (  LPSTR, WORD, WORD  );
        !          1593: WORD cdecl far callbackSetInstrumentData    (  LPSTR, WORD, WORD  );
        !          1594: 
        !          1595: WORD cdecl far aweSendData             (  LPSTR, WORD, WORD  );
        !          1596: WORD cdecl far aweInit                 (  LPSTR, WORD, WORD  );
        !          1597: WORD cdecl far aweUnInit               (  LPSTR, WORD, WORD  );
        !          1598: WORD cdecl far aweReset                (  LPSTR, WORD, WORD  );
        !          1599: WORD cdecl far aweSetInstrumentData    (  LPSTR, WORD, WORD  );
        !          1600: 
        !          1601: // function prototypes
        !          1602: WORD cdecl far digiSendData             (  LPSTR, WORD, WORD  );
        !          1603: WORD cdecl far digiInit                 (  LPSTR, WORD, WORD  );
        !          1604: WORD cdecl far digiUnInit               (  LPSTR, WORD, WORD  );
        !          1605: WORD cdecl far digiReset                (  LPSTR, WORD, WORD  );
        !          1606: WORD cdecl far digiSetInstrumentData    (  LPSTR, WORD, WORD  );
        !          1607: 
        !          1608: LPSTR waveGetCallTable                 (  VOID  );
        !          1609: WORD cdecl far waveSendData             (  LPSTR, WORD, WORD  );
        !          1610: WORD cdecl far waveInit                 (  LPSTR, WORD, WORD  );
        !          1611: WORD cdecl far waveUnInit               (  LPSTR, WORD, WORD  );
        !          1612: WORD cdecl far waveReset                (  LPSTR, WORD, WORD  );
        !          1613: WORD cdecl far waveSetInstrumentData    (  LPSTR, WORD, WORD  );
        !          1614: VOID cdecl far waveSampleCallback(  WORD, WORD, WORD  );
        !          1615: 
        !          1616: VOID        digiQueueInit           (  WORD, WORD  );
        !          1617: VOID        digiQueueUnInit         (  WORD  );
        !          1618: WORD        digiQueueAddItem        (  WORD, WORD, WORD, WORD, WORD );
        !          1619: WORD        digiQueueGetItem        (  WORD, WORD  );
        !          1620: WORD        digiQueueGetItemWAVE    (  WORD  );
        !          1621: WORD        digiQueueDeleteItem     (  WORD, WORD  );
        !          1622: WORD        digiQueueDeleteItemWAVE (  WORD, WORD  );
        !          1623: WORD        digiQueueDeleteItemMIDI (  WORD, WORD, WORD  );
        !          1624: WORD        digiQueueFindItemMIDI   (  WORD, WORD, WORD  );
        !          1625: 
        !          1626: // function prototypes
        !          1627: VOID cdecl far digiSampleCallback(  WORD, WORD, WORD  );
        !          1628: 
        !          1629: WORD        sosMIDIRegisterBranchFunction (  WORD, WORD ( far * )( WORD, BYTE, BYTE )  );
        !          1630: WORD        sosMIDIRegisterLoopFunction   (  WORD, WORD ( far * )( WORD, BYTE, BYTE, BYTE )  );
        !          1631: WORD        sosMIDIRegisterTriggerFunction(  WORD, BYTE, WORD ( far * )( WORD, BYTE, BYTE ) );
        !          1632: WORD        sosMIDIBranchToTrackLocation  (  WORD, BYTE, BYTE  );
        !          1633: WORD        sosMIDIBranchToSongLocation   (  WORD, BYTE  );
        !          1634: 
        !          1635: #ifdef __cplusplus
        !          1636: extern "C" {
        !          1637: #endif
        !          1638: 
        !          1639: extern   void  cdecl sosMIDIDRVGetCapsInfo( LPSTR, LPSTR, _SOS_MIDI_CAPABILITIES far * );
        !          1640: extern   void  cdecl sosMIDIDRVGetCapsPtr ( LPSTR, LPSTR, _SOS_MIDI_CAPABILITIES far * );
        !          1641: extern   void  cdecl sosMIDIDRVGetFuncsPtr( LPSTR, LPSTR, LPSTR );
        !          1642: extern   LPSTR cdecl sosMIDIDRVSpecialFunction( LPSTR, LPSTR, WORD );
        !          1643: extern   WORD cdecl xgetES( void );
        !          1644: 
        !          1645: #ifdef __cplusplus
        !          1646: }
        !          1647: #endif 
        !          1648: 
        !          1649: BOOL sosMIDIResetChannelStealing (  WORD  );
        !          1650: WORD sosMIDIEnableChannelStealing(  WORD  );
        !          1651: VOID far sosMIDISongHandler( VOID );
        !          1652: 
        !          1653: WORD sosMIDISetMT32InsData       (  WORD, LPSTR, WORD  );
        !          1654: WORD sosMIDISetMasterVolume      (  BYTE  );
        !          1655: VOID far sosMIDIMT32Timer        (  VOID  );
        !          1656: 
        !          1657: WORD sosMIDISetSongVolume        (  WORD, BYTE  );
        !          1658: WORD        sosMIDIFadeSong            (  WORD, WORD, WORD, BYTE, BYTE, WORD  );       
        !          1659: 
        !          1660: // functions for memory locking
        !          1661: VOID  sosMIDICaps_Start( VOID );
        !          1662: VOID  sosMIDICaps_End( VOID );
        !          1663: VOID  sosMIDICbck_Start( VOID );
        !          1664: VOID  sosMIDICbck_End( VOID );
        !          1665: VOID  sosMIDIDigi_Start( VOID );
        !          1666: VOID  sosMIDIDigi_End( VOID );
        !          1667: VOID  sosMIDIDone_Start( VOID );
        !          1668: VOID  sosMIDIDone_End( VOID );
        !          1669: VOID  sosMIDIDq_Start( VOID );
        !          1670: VOID  sosMIDIDq_End( VOID );
        !          1671: VOID  sosMIDIInit_Start( VOID );
        !          1672: VOID  sosMIDIInit_End( VOID );
        !          1673: VOID  sosMIDIIns_Start( VOID );
        !          1674: VOID  sosMIDIIns_End( VOID );
        !          1675: VOID  sosMIDILoad_Start( VOID );
        !          1676: VOID  sosMIDILoad_End( VOID );
        !          1677: VOID  sosMIDIPause_Start( VOID );
        !          1678: VOID  sosMIDIPause_End( VOID );
        !          1679: VOID  sosMIDIPtr_Start( VOID );
        !          1680: VOID  sosMIDIPtr_End( VOID );
        !          1681: VOID  sosMIDISong_Start( VOID );
        !          1682: VOID  sosMIDISong_End( VOID );
        !          1683: VOID  sosMIDISt_Start( VOID );
        !          1684: VOID  sosMIDISt_End( VOID );
        !          1685: VOID  sosMIDITmpo_Start( VOID );
        !          1686: VOID  sosMIDITmpo_End( VOID );
        !          1687: VOID  sosMIDITmr_Start( VOID );
        !          1688: VOID  sosMIDITmr_End( VOID );
        !          1689: 
        !          1690: void    StringOut( BYTE X, BYTE Y, BYTE * String, BYTE Color );
        !          1691: 
        !          1692: #pragma pack()
        !          1693: 
        !          1694: #endif
        !          1695: 
        !          1696: 
        !          1697: #endif
        !          1698: 
        !          1699: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.