

   THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
   KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
   IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
   PURPOSE.

   Copyright (c) 1993, 1994  Microsoft Corporation.  All Rights Reserved.

===============================================================================

The instrument information is contained in a RIFF file. There can be 
multiple LIST forms in a single file, this will allow manufacturer's to be
able to send on riff file describing all of their instruments.
These files should be zero based.


<MMAP-form>             -->   RIFF( 'MMAP'
                                    <hdr-chk>
                                    <inst-chk>
                                    <caps-chk>
                                    <chnl-chk>
                                    <map-chk>

                                    ['MMAP'
                                    <cfg-chk>
                                    <inst-chk>
                                    <caps-chk>
                                    <chnl-chk>
                                    <map-chk>] )

<hdr-chk>               -->   hdr(  <header> 
                                    <format-specific> )

<header>                -->   typedef struct tag_MIFHEADER
                              {
                                 DWORD cbStruct;
                                 DWORD dwVersion;
                                 DWORD dwCreator;
                              } MIFHEADER, FAR *LPMIFHEADER;

<inst-chk>              -->   inst( <inst-info>
                                    <driver-specific> )

<inst-info>             -->   typedef struct tag_INSTINFO
                              {
                                 DWORD cbStruct;
                                 char  szManufactName[128];
                                 char  szProductName[128];
                                 BYTE  bManufactID;
                                 BYTE  bProductID;
                                 BYTE  bRevision;
                                 BYTE  bPadding;
                              } INSTINFO, FAR *LPINSTINFO;
                           
<caps-chk>              -->   caps( <inst-caps>
                                    <driver-specific> )

<inst-caps>             -->   typedef struct tag_INSTCAPS
                              {
                                 DWORD cbStruct;
                                 DWORD fdwFlags;
                                 DWORD dwBaseChannel;
                                 DWORD cNumChannels;
                                 DWORD cInstPoly;
                                 DWORD cChannelPoly;
                              } INSTCAPS, FAR *LPINSTCAPS;

<chnl-chk>              -->   chnl( <chnl-hdr>
                                    [<chnl-assignments>] * 
                                    <driver-specific> )

<chnl-hdr>              -->   typedef struct tag_CHANNELHDR
                              {
                                 DWORD cbStruct;
                                 DWORD fdwFlags;
                              } CHANNELHDR, FAR *LPCHANNELHDR;

<chnl-assignments>      -->   typedef struct tag_CHANNELINFO
                              {
                                 DWORD dwChannel;
                                 char  szChannelType[30];
                              } CHANNELINFO, FAR *LPCHANNELINFO;

<map-chk>               -->   map( <patchmap-hdr>
                                   [<patchmap-info> ]*
                                   <driver-specific> )

<patchmap-hdr>          -->   typedef struct tag_PATCHMAPHDR
                              {
                                 DWORD cbStruct;
                                 DWORD fdwFlags;
                              } PATCHMAPHDR, FAR *LPPATCHMAPHDR;


<patchmap-info>         -->   typedef struct tag_PATCHMAPINFO
                              {
                                 DWORD dwDst;
                                 DWORD dwSrc;
                              } PATCHMAPINFO, FAR *LPPATCHMAPINFO;

