home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / graphics / audio / mmcaps / midspids.c < prev    next >
C/C++ Source or Header  |  1997-10-05  |  45KB  |  2,307 lines

  1. //==========================================================================;
  2. //
  3. //  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  4. //  ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
  5. //  TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR
  6. //  A PARTICULAR PURPOSE.
  7. //
  8. //  Copyright (C) 1993 - 1997 Microsoft Corporation. All Rights Reserved.
  9. //
  10. //--------------------------------------------------------------------------;
  11. //
  12. //  midspids.c
  13. //
  14. //
  15. //  Description:
  16. //
  17. //   !!! WARNING DANGER WARNING DANGER WARNING DANGER WARNING DANGER !!!
  18. //
  19. //      This code assumes that the receiving buffers are large enough
  20. //      to contain the largest Mid and Pid--so if some of the strings get
  21. //      obnoxiously long, make sure you update the following defines in
  22. //      MMCAPS.H:
  23. //
  24. //          MMCAPS_MAX_STRING_MID_CHARS
  25. //          MMCAPS_MAX_STRING_PID_CHARS
  26. //
  27. //      Also, this code is horribly disgusting. Its purpose is to convert
  28. //      Manufacturer specific Product Id's to human readable text. And
  29. //      since no standard was defined on how to allocate these Id's,
  30. //      all kinds of inconsistent schemes emerged.
  31. //
  32. //      Therefore, I chose the brute force approach. You are more than
  33. //      welcome to clean this up by finding patterns, etc for each
  34. //      manufacturer--I have better things to do.
  35. //
  36. //   !!! WARNING DANGER WARNING DANGER WARNING DANGER WARNING DANGER !!!
  37. //
  38. //  History:
  39. //       5/13/93
  40. //
  41. //==========================================================================;
  42.  
  43. #include <windows.h>
  44. #include <windowsx.h>
  45. #include <mmsystem.h>
  46. #include <commdlg.h>
  47. #include <stdarg.h>
  48.  
  49. #include "appport.h"
  50. #include "mmcaps.h"
  51.  
  52. #include "debug.h"
  53.  
  54.  
  55. //==========================================================================;
  56. //
  57. //  Manufacturer and Product Id Conversion Hacks
  58. //
  59. //
  60. //==========================================================================;
  61.  
  62. //--------------------------------------------------------------------------;
  63. //  
  64. //  BOOL MMCapsMidPid_MM_MICROSOFT
  65. //  
  66. //  Description:
  67. //  
  68. //  
  69. //  Arguments:
  70. //      PTSTR pszMid:
  71. //  
  72. //      UINT uPid:
  73. //  
  74. //      PTSTR pszPid:
  75. //  
  76. //  Return (BOOL):
  77. //  
  78. //  History:
  79. //      05/13/93
  80. //  
  81. //--------------------------------------------------------------------------;
  82.  
  83. BOOL FNLOCAL MMCapsMidPid_MM_MICROSOFT
  84. (
  85.     PTSTR           pszMid,
  86.     UINT            uPid,
  87.     PTSTR           pszPid
  88. )
  89. {
  90.     static TCHAR szMid[]        = TEXT("Microsoft Corporation");
  91.     static PTSTR aszProductId[] =
  92.     {
  93.     NULL,                                            // 0  
  94.     TEXT("MIDI Mapper"),                             // 1  MM_MIDI_MAPPER
  95.     TEXT("Wave Mapper"),                             // 2  MM_WAVE_MAPPER
  96.     TEXT("Sound Blaster MIDI output port"),          // 3  MM_SNDBLST_MIDIOUT
  97.     TEXT("Sound Blaster MIDI input port"),           // 4  MM_SNDBLST_MIDIIN
  98.     TEXT("Sound Blaster internal synthesizer"),      // 5  MM_SNDBLST_SYNTH
  99.     TEXT("Sound Blaster waveform output"),           // 6  MM_SNDBLST_WAVEOUT
  100.     TEXT("Sound Blaster waveform input"),            // 7  MM_SNDBLST_WAVEIN
  101.     NULL,                                            // 8
  102.     TEXT("Ad Lib-compatible synthesizer"),           // 9  MM_ADLIB
  103.     TEXT("MPU401-compatible MIDI output port"),      // 10 MM_MPU401_MIDIOUT
  104.     TEXT("MPU401-compatible MIDI input port"),       // 11 MM_MPU401_MIDIIN
  105.     TEXT("Joystick adapter"),                        // 12 MM_PC_JOYSTICK
  106.     TEXT("PC Speaker waveform output"),              // 13 MM_PCSPEAKER_WAVEOUT
  107.     TEXT("MS Audio Board waveform input"),           // 14 MM_MSFT_WSS_WAVEIN
  108.     TEXT("MS Audio Board waveform output"),          // 15 MM_MSFT_WSS_WAVEOUT
  109.     TEXT("MS Audio Board Stereo FM synthesizer"),    // 16 MM_MSFT_WSS_FMSYNTH_STEREO
  110.     TEXT("MS Audio Board Mixer Driver"),             // 17 MM_MSFT_WSS_MIXER
  111.     TEXT("MS OEM Audio Board waveform input"),       // 18 MM_MSFT_WSS_OEM_WAVEIN
  112.     TEXT("MS OEM Audio Board waveform Output"),      // 19 MM_MSFT_WSS_OEM_WAVEOUT
  113.     TEXT("MS OEM Audio Board Stereo FM synthesizer"),// 20 MM_MSFT_WSS_OEM_FMSYNTH_STEREO
  114.     TEXT("MS Audio Board Auxiliary Port"),           // 21 MM_MSFT_WSS_AUX
  115.     TEXT("MS OEM Audio Auxiliary Port"),             // 22 MM_MSFT_WSS_OEM_AUX
  116.     TEXT("MS vanilla driver waveform input"),        // 23 MM_MSFT_GENERIC_WAVEIN
  117.     TEXT("MS vanilla driver waveform output"),       // 24 MM_MSFT_GENERIC_WAVEOUT
  118.     TEXT("MS vanilla driver MIDI input"),            // 25 MM_MSFT_GENERIC_MIDIIN
  119.     TEXT("MS vanilla driver external MIDI output"),  // 26 MM_MSFT_GENERIC_MIDIOUT
  120.     TEXT("MS vanilla driver MIDI synthesizer"),      // 27 MM_MSFT_GENERIC_MIDISYNTH
  121.     TEXT("MS vanilla driver aux (line in)"),         // 28 MM_MSFT_GENERIC_AUX_LINE
  122.     TEXT("MS vanilla driver aux (mic)"),             // 29 MM_MSFT_GENERIC_AUX_MIC
  123.     TEXT("MS vanilla driver aux (CD)"),              // 30 MM_MSFT_GENERIC_AUX_CD
  124.     TEXT("MS OEM Audio Board Mixer Driver"),         // 31 MM_MSFT_WSS_OEM_MIXER
  125.     };
  126.  
  127.     #define PRODUCTID_MICROSOFT_LAST    MM_MSFT_WSS_OEM_MIXER
  128.  
  129.     PTSTR       psz;
  130.  
  131.     if (NULL != pszMid)
  132.     lstrcpy(pszMid, szMid);
  133.  
  134.     if (NULL == pszPid)
  135.     return (TRUE);
  136.  
  137.     //
  138.     //
  139.     //
  140.     if ((uPid <= PRODUCTID_MICROSOFT_LAST) && (psz = aszProductId[uPid]))
  141.     {
  142.     lstrcat(pszPid, psz);
  143.     return (TRUE);
  144.     }
  145.  
  146.     pszPid[0] = '\0';
  147.     return (FALSE);
  148. } // MMCapsMidPid_MM_MICROSOFT()
  149.  
  150.  
  151. //--------------------------------------------------------------------------;
  152. //  
  153. //  BOOL MMCapsMidPid_MM_CREATIVE
  154. //  
  155. //  Description:
  156. //  
  157. //  
  158. //  Arguments:
  159. //      PTSTR pszMid:
  160. //  
  161. //      UINT uPid:
  162. //  
  163. //      PTSTR pszPid:
  164. //  
  165. //  Return (BOOL):
  166. //  
  167. //  History:
  168. //      05/13/93
  169. //  
  170. //--------------------------------------------------------------------------;
  171.  
  172. BOOL FNLOCAL MMCapsMidPid_MM_CREATIVE
  173. (
  174.     PTSTR           pszMid,
  175.     UINT            uPid,
  176.     PTSTR           pszPid
  177. )
  178. {
  179.     static TCHAR szMid[]    = TEXT("Creative Labs Inc.");
  180.  
  181.     PTSTR       psz;
  182.  
  183.     if (NULL != pszMid)
  184.     lstrcpy(pszMid, szMid);
  185.  
  186.     if (NULL == pszPid)
  187.     return (TRUE);
  188.  
  189.     //
  190.     //
  191.     //
  192.     psz = NULL;
  193.     switch (uPid)
  194.     {
  195.     case MM_CREATIVE_SB15_WAVEIN:
  196.         psz = TEXT("SB (r) 1.5 waveform input");
  197.         break;
  198.  
  199.     case MM_CREATIVE_SB20_WAVEIN:
  200.         psz = TEXT("SB (r) 2.0 waveform input");
  201.         break;
  202.  
  203.     case MM_CREATIVE_SBPRO_WAVEIN:
  204.         psz = TEXT("SB Pro (r) waveform input");
  205.         break;
  206.  
  207.     case MM_CREATIVE_SBP16_WAVEIN:
  208.         psz = TEXT("SBP16 (r) waveform input");
  209.         break;
  210.  
  211.     case MM_CREATIVE_SB15_WAVEOUT:
  212.         psz = TEXT("SB (r) 1.5 waveform output");
  213.         break;
  214.  
  215.     case MM_CREATIVE_SB20_WAVEOUT:
  216.         psz = TEXT("SB (r) 2.0 waveform output");
  217.         break;
  218.  
  219.     case MM_CREATIVE_SBPRO_WAVEOUT:
  220.         psz = TEXT("SB Pro (r) waveform output");
  221.         break;
  222.  
  223.     case MM_CREATIVE_SBP16_WAVEOUT:
  224.         psz = TEXT("SBP16 (r) waveform output");
  225.         break;
  226.  
  227.     case MM_CREATIVE_MIDIOUT:
  228.         psz = TEXT("SB (r) MIDI output port");
  229.         break;
  230.  
  231.     case MM_CREATIVE_MIDIIN:
  232.         psz = TEXT("SB (r) MIDI input port");
  233.         break;
  234.  
  235.     case MM_CREATIVE_FMSYNTH_MONO:
  236.         psz = TEXT("SB (r) FM synthesizer");
  237.         break;
  238.  
  239.     case MM_CREATIVE_FMSYNTH_STEREO:
  240.         psz = TEXT("SB Pro (r) stereo FM synthesizer");
  241.         break;
  242.  
  243.     case MM_CREATIVE_AUX_CD:
  244.         psz = TEXT("SB Pro (r) aux (CD)");
  245.         break;
  246.  
  247.     case MM_CREATIVE_AUX_LINE:
  248.         psz = TEXT("SB Pro (r) aux (line in)");
  249.         break;
  250.  
  251.     case MM_CREATIVE_AUX_MIC:
  252.         psz = TEXT("SB Pro (r) aux (mic)");
  253.         break;
  254.     }
  255.  
  256.     if (NULL != psz)
  257.     {
  258.     lstrcat(pszPid, psz);
  259.     return (TRUE);
  260.     }
  261.  
  262.     return (FALSE);
  263. } // MMCapsMidPid_MM_CREATIVE()
  264.  
  265.  
  266. //--------------------------------------------------------------------------;
  267. //  
  268. //  BOOL MMCapsMidPid_MM_MEDIAVISION
  269. //  
  270. //  Description:
  271. //  
  272. //  
  273. //  Arguments:
  274. //      PTSTR pszMid:
  275. //  
  276. //      UINT uPid:
  277. //  
  278. //      PTSTR pszPid:
  279. //  
  280. //  Return (BOOL):
  281. //  
  282. //  History:
  283. //      05/13/93
  284. //  
  285. //--------------------------------------------------------------------------;
  286.  
  287. BOOL FNLOCAL MMCapsMidPid_MM_MEDIAVISION
  288. (
  289.     PTSTR           pszMid,
  290.     UINT            uPid,
  291.     PTSTR           pszPid
  292. )
  293. {
  294.     static TCHAR szMid[]    = TEXT("Media Vision Inc.");
  295.  
  296.     PTSTR       psz;
  297.  
  298.     if (NULL != pszMid)
  299.     lstrcpy(pszMid, szMid);
  300.  
  301.     if (NULL == pszPid)
  302.     return (TRUE);
  303.  
  304.     //
  305.     //
  306.     //
  307.     //
  308.     //
  309.     //
  310.     psz = NULL;
  311.     switch (uPid)
  312.     {
  313.     case MM_PROAUD_MIDIOUT:
  314.         psz = TEXT("MediaVision MIDI output port");
  315.         break;
  316.  
  317.     case MM_PROAUD_MIDIIN:
  318.         psz = TEXT("MediaVision MIDI input port");
  319.         break;
  320.  
  321.     case MM_PROAUD_SYNTH:
  322.         psz = TEXT("MediaVision synthesizer");
  323.         break;
  324.  
  325.     case MM_PROAUD_WAVEOUT:
  326.         psz = TEXT("MediaVision Waveform output");
  327.         break;
  328.  
  329.     case MM_PROAUD_WAVEIN:
  330.         psz = TEXT("MediaVision Waveform input");
  331.         break;
  332.  
  333.     case MM_PROAUD_MIXER:
  334.         psz = TEXT("MediaVision Mixer");
  335.         break;
  336.  
  337.     case MM_PROAUD_AUX:
  338.         psz = TEXT("MediaVision aux");
  339.         break;
  340.  
  341.     case MM_MEDIAVISION_THUNDER:
  342.         psz = TEXT("Thunderboard Sound Card");
  343.         break;
  344.     }
  345.  
  346.     if (NULL != psz)
  347.     {
  348.     lstrcat(pszPid, psz);
  349.     return (TRUE);
  350.     }
  351.  
  352.     return (FALSE);
  353. } // MMCapsMidPid_MM_MEDIAVISION()
  354.  
  355.  
  356. //--------------------------------------------------------------------------;
  357. //  
  358. //  BOOL MMCapsMidPid_MM_FUJITSU
  359. //  
  360. //  Description:
  361. //  
  362. //  
  363. //  Arguments:
  364. //      PTSTR pszMid:
  365. //  
  366. //      UINT uPid:
  367. //  
  368. //      PTSTR pszPid:
  369. //  
  370. //  Return (BOOL):
  371. //  
  372. //  History:
  373. //      05/13/93
  374. //  
  375. //--------------------------------------------------------------------------;
  376.  
  377. BOOL FNLOCAL MMCapsMidPid_MM_FUJITSU
  378. (
  379.     PTSTR           pszMid,
  380.     UINT            uPid,
  381.     PTSTR           pszPid
  382. )
  383. {
  384.     static TCHAR szMid[]    = TEXT("Fujitsu");
  385.  
  386.  
  387.     if (NULL != pszMid)
  388.     lstrcpy(pszMid, szMid);
  389.  
  390.     if (NULL == pszPid)
  391.     return (TRUE);
  392.  
  393.     //
  394.     //
  395.     //
  396.  
  397.     return (FALSE);
  398. } // MMCapsMidPid_MM_FUJITSU()
  399.  
  400.  
  401. //--------------------------------------------------------------------------;
  402. //  
  403. //  BOOL MMCapsMidPid_MM_ARTISOFT
  404. //  
  405. //  Description:
  406. //  
  407. //  
  408. //  Arguments:
  409. //      PTSTR pszMid:
  410. //  
  411. //      UINT uPid:
  412. //  
  413. //      PTSTR pszPid:
  414. //  
  415. //  Return (BOOL):
  416. //  
  417. //  History:
  418. //      05/13/93
  419. //  
  420. //--------------------------------------------------------------------------;
  421.  
  422. BOOL FNLOCAL MMCapsMidPid_MM_ARTISOFT
  423. (
  424.     PTSTR           pszMid,
  425.     UINT            uPid,
  426.     PTSTR           pszPid
  427. )
  428. {
  429.     static TCHAR szMid[]    = TEXT("Artisoft Inc.");
  430.  
  431.     PTSTR       psz;
  432.  
  433.     if (NULL != pszMid)
  434.     lstrcpy(pszMid, szMid);
  435.  
  436.     if (NULL == pszPid)
  437.     return (TRUE);
  438.  
  439.     //
  440.     //
  441.     //
  442.     psz = NULL;
  443.     switch (uPid)
  444.     {
  445.     case MM_ARTISOFT_SBWAVEIN:
  446.         psz = TEXT("Artisoft Sounding Board waveform input");
  447.         break;
  448.  
  449.     case MM_ARTISOFT_SBWAVEOUT:
  450.         psz = TEXT("Artisoft Sounding Board waveform output");
  451.         break;
  452.     }
  453.  
  454.     if (NULL != psz)
  455.     {
  456.     lstrcat(pszPid, psz);
  457.     return (TRUE);
  458.     }
  459.  
  460.     return (FALSE);
  461. } // MMCapsMidPid_MM_ARTISOFT()
  462.  
  463.  
  464. //--------------------------------------------------------------------------;
  465. //  
  466. //  BOOL MMCapsMidPid_MM_TURTLE_BEACH
  467. //  
  468. //  Description:
  469. //  
  470. //  
  471. //  Arguments:
  472. //      PTSTR pszMid:
  473. //  
  474. //      UINT uPid:
  475. //  
  476. //      PTSTR pszPid:
  477. //  
  478. //  Return (BOOL):
  479. //  
  480. //  History:
  481. //      05/13/93
  482. //  
  483. //--------------------------------------------------------------------------;
  484.  
  485. BOOL FNLOCAL MMCapsMidPid_MM_TURTLE_BEACH
  486. (
  487.     PTSTR           pszMid,
  488.     UINT            uPid,
  489.     PTSTR           pszPid
  490. )
  491. {
  492.     static TCHAR szMid[]    = TEXT("Turtle Beach");
  493.  
  494.  
  495.     if (NULL != pszMid)
  496.     lstrcpy(pszMid, szMid);
  497.  
  498.     if (NULL == pszPid)
  499.     return (TRUE);
  500.  
  501.     //
  502.     //
  503.     //
  504.  
  505.     return (FALSE);
  506. } // MMCapsMidPid_MM_TURTLE_BEACH()
  507.  
  508.  
  509. //--------------------------------------------------------------------------;
  510. //  
  511. //  BOOL MMCapsMidPid_MM_IBM
  512. //  
  513. //  Description:
  514. //  
  515. //  
  516. //  Arguments:
  517. //      PTSTR pszMid:
  518. //  
  519. //      UINT uPid:
  520. //  
  521. //      PTSTR pszPid:
  522. //  
  523. //  Return (BOOL):
  524. //  
  525. //  History:
  526. //      05/13/93
  527. //  
  528. //--------------------------------------------------------------------------;
  529.  
  530. BOOL FNLOCAL MMCapsMidPid_MM_IBM
  531. (
  532.     PTSTR           pszMid,
  533.     UINT            uPid,
  534.     PTSTR           pszPid
  535. )
  536. {
  537.     static TCHAR szMid[]    = TEXT("International Bussiness Machines Corp.");
  538.  
  539.     PTSTR       psz;
  540.  
  541.     if (NULL != pszMid)
  542.     lstrcpy(pszMid, szMid);
  543.  
  544.     if (NULL == pszPid)
  545.     return (TRUE);
  546.  
  547.     //
  548.     //
  549.     //
  550.     psz = NULL;
  551.     switch (uPid)
  552.     {
  553.     case MM_MMOTION_WAVEAUX:
  554.         psz = TEXT("IBM M-Motion Auxiliary Device");
  555.         break;
  556.  
  557.     case MM_MMOTION_WAVEOUT:
  558.         psz = TEXT("IBM M-Motion Waveform Output");
  559.         break;
  560.  
  561.     case MM_MMOTION_WAVEIN: 
  562.         psz = TEXT("IBM M-Motion Waveform Input");
  563.         break;
  564.     }
  565.  
  566.     if (NULL != psz)
  567.     {
  568.     lstrcat(pszPid, psz);
  569.     return (TRUE);
  570.     }
  571.  
  572.     return (FALSE);
  573. } // MMCapsMidPid_MM_IBM()
  574.  
  575.  
  576. //--------------------------------------------------------------------------;
  577. //  
  578. //  BOOL MMCapsMidPid_MM_VOCALTEC
  579. //  
  580. //  Description:
  581. //  
  582. //  
  583. //  Arguments:
  584. //      PTSTR pszMid:
  585. //  
  586. //      UINT uPid:
  587. //  
  588. //      PTSTR pszPid:
  589. //  
  590. //  Return (BOOL):
  591. //  
  592. //  History:
  593. //      05/13/93
  594. //  
  595. //--------------------------------------------------------------------------;
  596.  
  597. BOOL FNLOCAL MMCapsMidPid_MM_VOCALTEC
  598. (
  599.     PTSTR           pszMid,
  600.     UINT            uPid,
  601.     PTSTR           pszPid
  602. )
  603. {
  604.     static TCHAR szMid[]    = TEXT("Vocaltec LTD.");
  605.  
  606.  
  607.     PTSTR       psz;
  608.  
  609.     if (NULL != pszMid)
  610.     lstrcpy(pszMid, szMid);
  611.  
  612.     if (NULL == pszPid)
  613.     return (TRUE);
  614.  
  615.     //
  616.     //
  617.     //
  618.     psz = NULL;
  619.     switch (uPid)
  620.     {
  621.     case MM_VOCALTEC_WAVEOUT:
  622.         psz = TEXT("Vocaltec Waveform output port");
  623.         break;
  624.  
  625.     case MM_VOCALTEC_WAVEIN:
  626.         psz = TEXT("Waveform input port");
  627.         break;
  628.     }
  629.  
  630.     if (NULL != psz)
  631.     {
  632.     lstrcat(pszPid, psz);
  633.     return (TRUE);
  634.     }
  635.  
  636.     return (FALSE);
  637. } // MMCapsMidPid_MM_VOCALTEC()
  638.  
  639.  
  640. //--------------------------------------------------------------------------;
  641. //  
  642. //  BOOL MMCapsMidPid_MM_ROLAND
  643. //  
  644. //  Description:
  645. //  
  646. //  
  647. //  Arguments:
  648. //      PTSTR pszMid:
  649. //  
  650. //      UINT uPid:
  651. //  
  652. //      PTSTR pszPid:
  653. //  
  654. //  Return (BOOL):
  655. //  
  656. //  History:
  657. //      05/13/93
  658. //  
  659. //--------------------------------------------------------------------------;
  660.  
  661. BOOL FNLOCAL MMCapsMidPid_MM_ROLAND
  662. (
  663.     PTSTR           pszMid,
  664.     UINT            uPid,
  665.     PTSTR           pszPid
  666. )
  667. {
  668.     static TCHAR szMid[]    = TEXT("Roland");
  669.  
  670.     PTSTR       psz;
  671.  
  672.     if (NULL != pszMid)
  673.     lstrcpy(pszMid, szMid);
  674.  
  675.     if (NULL == pszPid)
  676.     return (TRUE);
  677.  
  678.     //
  679.     //
  680.     //
  681.     psz = NULL;
  682.     switch (uPid)
  683.     {
  684.     case MM_ROLAND_MPU401_MIDIOUT:
  685.         psz = TEXT("MM_ROLAND_MPU401_MIDIOUT");
  686.         break;
  687.  
  688.     case MM_ROLAND_MPU401_MIDIIN:
  689.         psz = TEXT("MM_ROLAND_MPU401_MIDIIN");
  690.         break;
  691.  
  692.     case MM_ROLAND_SMPU_MIDIOUTA:
  693.         psz = TEXT("MM_ROLAND_SMPU_MIDIOUTA");
  694.         break;
  695.  
  696.     case MM_ROLAND_SMPU_MIDIOUTB:
  697.         psz = TEXT("MM_ROLAND_SMPU_MIDIOUTB");
  698.         break;
  699.  
  700.     case MM_ROLAND_SMPU_MIDIINA:
  701.         psz = TEXT("MM_ROLAND_SMPU_MIDIINA");
  702.         break;
  703.  
  704.     case MM_ROLAND_SMPU_MIDIINB:
  705.         psz = TEXT("MM_ROLAND_SMPU_MIDIINB");
  706.         break;
  707.  
  708.     case MM_ROLAND_SC7_MIDIOUT:
  709.         psz = TEXT("MM_ROLAND_SC7_MIDIOUT");
  710.         break;
  711.  
  712.     case MM_ROLAND_SC7_MIDIIN:
  713.         psz = TEXT("MM_ROLAND_SC7_MIDIIN");
  714.         break;
  715.     }
  716.  
  717.     if (NULL != psz)
  718.     {
  719.     lstrcat(pszPid, psz);
  720.     return (TRUE);
  721.     }
  722.  
  723.     return (FALSE);
  724. } // MMCapsMidPid_MM_ROLAND()
  725.  
  726.  
  727. //--------------------------------------------------------------------------;
  728. //  
  729. //  BOOL MMCapsMidPid_MM_DIGISPEECH
  730. //  
  731. //  Description:
  732. //  
  733. //  
  734. //  Arguments:
  735. //      PTSTR pszMid:
  736. //  
  737. //      UINT uPid:
  738. //  
  739. //      PTSTR pszPid:
  740. //  
  741. //  Return (BOOL):
  742. //  
  743. //  History:
  744. //      05/13/93
  745. //  
  746. //--------------------------------------------------------------------------;
  747.  
  748. BOOL FNLOCAL MMCapsMidPid_MM_DIGISPEECH
  749. (
  750.     PTSTR           pszMid,
  751.     UINT            uPid,
  752.     PTSTR           pszPid
  753. )
  754. {
  755.     static TCHAR szMid[]    = TEXT("Digispeech, Inc.");
  756.  
  757.     PTSTR       psz;
  758.  
  759.     if (NULL != pszMid)
  760.     lstrcpy(pszMid, szMid);
  761.  
  762.     if (NULL == pszPid)
  763.     return (TRUE);
  764.  
  765.     //
  766.     //
  767.     //
  768.     psz = NULL;
  769.     switch (uPid)
  770.     {
  771.     //case MM_DIGISP_WAVEOUT:
  772.     case MM_DSP_SOLUTIONS_WAVEOUT:
  773.         psz = TEXT("Digispeech Waveform output port");
  774.         break;
  775.  
  776.     //case MM_DIGISP_WAVEIN:
  777.     case MM_DSP_SOLUTIONS_WAVEIN:
  778.         psz = TEXT("Digispeech Waveform input port");
  779.         break;
  780.     case MM_DSP_SOLUTIONS_SYNTH:
  781.     case MM_DSP_SOLUTIONS_AUX:
  782.         break;
  783.  
  784.     #define  MM_DSP_SOLUTIONS_WAVEOUT       1
  785. #define  MM_DSP_SOLUTIONS_WAVEIN            2       
  786. #define  MM_DSP_SOLUTIONS_SYNTH             3       
  787. #define  MM_DSP_SOLUTIONS_AUX               4       
  788.  
  789.     }
  790.  
  791.     if (NULL != psz)
  792.     {
  793.     lstrcat(pszPid, psz);
  794.     return (TRUE);
  795.     }
  796.  
  797.     return (FALSE);
  798. } // MMCapsMidPid_MM_DIGISPEECH()
  799.  
  800.  
  801. //--------------------------------------------------------------------------;
  802. //  
  803. //  BOOL MMCapsMidPid_MM_NEC
  804. //  
  805. //  Description:
  806. //  
  807. //  
  808. //  Arguments:
  809. //      PTSTR pszMid:
  810. //  
  811. //      UINT uPid:
  812. //  
  813. //      PTSTR pszPid:
  814. //  
  815. //  Return (BOOL):
  816. //  
  817. //  History:
  818. //      05/13/93
  819. //  
  820. //--------------------------------------------------------------------------;
  821.  
  822. BOOL FNLOCAL MMCapsMidPid_MM_NEC
  823. (
  824.     PTSTR           pszMid,
  825.     UINT            uPid,
  826.     PTSTR           pszPid
  827. )
  828. {
  829.     static TCHAR szMid[]    = TEXT("NEC");
  830.  
  831.  
  832.     if (NULL != pszMid)
  833.     lstrcpy(pszMid, szMid);
  834.  
  835.     if (NULL == pszPid)
  836.     return (TRUE);
  837.  
  838.     //
  839.     //
  840.     //
  841.  
  842.     return (FALSE);
  843. } // MMCapsMidPid_MM_NEC()
  844.  
  845.  
  846. //--------------------------------------------------------------------------;
  847. //  
  848. //  BOOL MMCapsMidPid_MM_ATI
  849. //  
  850. //  Description:
  851. //  
  852. //  
  853. //  Arguments:
  854. //      PTSTR pszMid:
  855. //  
  856. //      UINT uPid:
  857. //  
  858. //      PTSTR pszPid:
  859. //  
  860. //  Return (BOOL):
  861. //  
  862. //  History:
  863. //      05/13/93
  864. //  
  865. //--------------------------------------------------------------------------;
  866.  
  867. BOOL FNLOCAL MMCapsMidPid_MM_ATI
  868. (
  869.     PTSTR           pszMid,
  870.     UINT            uPid,
  871.     PTSTR           pszPid
  872. )
  873. {
  874.     static TCHAR szMid[]    = TEXT("ATI");
  875.  
  876.     if (NULL != pszMid)
  877.     lstrcpy(pszMid, szMid);
  878.  
  879.     if (NULL == pszPid)
  880.     return (TRUE);
  881.  
  882.     //
  883.     //
  884.     //
  885.  
  886.     return (FALSE);
  887. } // MMCapsMidPid_MM_ATI()
  888.  
  889.  
  890. //--------------------------------------------------------------------------;
  891. //  
  892. //  BOOL MMCapsMidPid_MM_WANGLABS
  893. //  
  894. //  Description:
  895. //  
  896. //  
  897. //  Arguments:
  898. //      PTSTR pszMid:
  899. //  
  900. //      UINT uPid:
  901. //  
  902. //      PTSTR pszPid:
  903. //  
  904. //  Return (BOOL):
  905. //  
  906. //  History:
  907. //      05/13/93
  908. //  
  909. //--------------------------------------------------------------------------;
  910.  
  911. BOOL FNLOCAL MMCapsMidPid_MM_WANGLABS
  912. (
  913.     PTSTR           pszMid,
  914.     UINT            uPid,
  915.     PTSTR           pszPid
  916. )
  917. {
  918.     static TCHAR szMid[]    = TEXT("Wang Laboratories, Inc.");
  919.  
  920.     PTSTR       psz;
  921.  
  922.     if (NULL != pszMid)
  923.     lstrcpy(pszMid, szMid);
  924.  
  925.     if (NULL == pszPid)
  926.     return (TRUE);
  927.  
  928.     //
  929.     //
  930.     //
  931.     psz = NULL;
  932.     switch (uPid)
  933.     {
  934.     case MM_WANGLABS_WAVEIN1:
  935.         psz = TEXT("Wave input on Wang models: Exec 4010, 4030 and 3450; PC 251/25C, PC 461/25S and PC 461/33C");
  936.         break;
  937.  
  938.     case MM_WANGLABS_WAVEOUT1:
  939.         psz = TEXT("Wave output on Wang models: Exec 4010, 4030 and 3450; PC 251/25C, PC 461/25S and PC 461/33C");
  940.         break;
  941.     }
  942.  
  943.     if (NULL != psz)
  944.     {
  945.     lstrcat(pszPid, psz);
  946.     return (TRUE);
  947.     }
  948.  
  949.     return (FALSE);
  950. } // MMCapsMidPid_MM_WANGLABS()
  951.  
  952.  
  953. //--------------------------------------------------------------------------;
  954. //  
  955. //  BOOL MMCapsMidPid_MM_TANDY
  956. //  
  957. //  Description:
  958. //  
  959. //  
  960. //  Arguments:
  961. //      PTSTR pszMid:
  962. //  
  963. //      UINT uPid:
  964. //  
  965. //      PTSTR pszPid:
  966. //  
  967. //  Return (BOOL):
  968. //  
  969. //  History:
  970. //      05/13/93
  971. //  
  972. //--------------------------------------------------------------------------;
  973.  
  974. BOOL FNLOCAL MMCapsMidPid_MM_TANDY
  975. (
  976.     PTSTR           pszMid,
  977.     UINT            uPid,
  978.     PTSTR           pszPid
  979. )
  980. {
  981.     static TCHAR szMid[]    = TEXT("Tandy Corporation");
  982.  
  983.  
  984.     if (NULL != pszMid)
  985.     lstrcpy(pszMid, szMid);
  986.  
  987.     if (NULL == pszPid)
  988.     return (TRUE);
  989.  
  990.     //
  991.     //
  992.     //
  993.  
  994.     return (FALSE);
  995. } // MMCapsMidPid_MM_TANDY()
  996.  
  997.  
  998. //--------------------------------------------------------------------------;
  999. //  
  1000. //  BOOL MMCapsMidPid_MM_VOYETRA
  1001. //  
  1002. //  Description:
  1003. //  
  1004. //  
  1005. //  Arguments:
  1006. //      PTSTR pszMid:
  1007. //  
  1008. //      UINT uPid:
  1009. //  
  1010. //      PTSTR pszPid:
  1011. //  
  1012. //  Return (BOOL):
  1013. //  
  1014. //  History:
  1015. //      05/13/93
  1016. //  
  1017. //--------------------------------------------------------------------------;
  1018.  
  1019. BOOL FNLOCAL MMCapsMidPid_MM_VOYETRA
  1020. (
  1021.     PTSTR           pszMid,
  1022.     UINT            uPid,
  1023.     PTSTR           pszPid
  1024. )
  1025. {
  1026.     static TCHAR szMid[]    = TEXT("Voyetra");
  1027.  
  1028.  
  1029.     if (NULL != pszMid)
  1030.     lstrcpy(pszMid, szMid);
  1031.  
  1032.     if (NULL == pszPid)
  1033.     return (TRUE);
  1034.  
  1035.     //
  1036.     //
  1037.     //
  1038.  
  1039.     return (FALSE);
  1040. } // MMCapsMidPid_MM_VOYETRA()
  1041.  
  1042.  
  1043. //--------------------------------------------------------------------------;
  1044. //  
  1045. //  BOOL MMCapsMidPid_MM_ANTEX
  1046. //  
  1047. //  Description:
  1048. //  
  1049. //  
  1050. //  Arguments:
  1051. //      PTSTR pszMid:
  1052. //  
  1053. //      UINT uPid:
  1054. //  
  1055. //      PTSTR pszPid:
  1056. //  
  1057. //  Return (BOOL):
  1058. //  
  1059. //  History:
  1060. //      05/13/93
  1061. //  
  1062. //--------------------------------------------------------------------------;
  1063.  
  1064. BOOL FNLOCAL MMCapsMidPid_MM_ANTEX
  1065. (
  1066.     PTSTR           pszMid,
  1067.     UINT            uPid,
  1068.     PTSTR           pszPid
  1069. )
  1070. {
  1071.     static TCHAR szMid[]    = TEXT("Antex");
  1072.  
  1073.  
  1074.     if (NULL != pszMid)
  1075.     lstrcpy(pszMid, szMid);
  1076.  
  1077.     if (NULL == pszPid)
  1078.     return (TRUE);
  1079.  
  1080.     //
  1081.     //
  1082.     //
  1083.  
  1084.     return (FALSE);
  1085. } // MMCapsMidPid_MM_ANTEX()
  1086.  
  1087.  
  1088. //--------------------------------------------------------------------------;
  1089. //  
  1090. //  BOOL MMCapsMidPid_MM_ICL_PS
  1091. //  
  1092. //  Description:
  1093. //  
  1094. //  
  1095. //  Arguments:
  1096. //      PTSTR pszMid:
  1097. //  
  1098. //      UINT uPid:
  1099. //  
  1100. //      PTSTR pszPid:
  1101. //  
  1102. //  Return (BOOL):
  1103. //  
  1104. //  History:
  1105. //      05/13/93
  1106. //  
  1107. //--------------------------------------------------------------------------;
  1108.  
  1109. BOOL FNLOCAL MMCapsMidPid_MM_ICL_PS
  1110. (
  1111.     PTSTR           pszMid,
  1112.     UINT            uPid,
  1113.     PTSTR           pszPid
  1114. )
  1115. {
  1116.     static TCHAR szMid[]    = TEXT("ICL PS");
  1117.  
  1118.  
  1119.     if (NULL != pszMid)
  1120.     lstrcpy(pszMid, szMid);
  1121.  
  1122.     if (NULL == pszPid)
  1123.     return (TRUE);
  1124.  
  1125.     //
  1126.     //
  1127.     //
  1128.  
  1129.     return (FALSE);
  1130. } // MMCapsMidPid_MM_ICL_PS()
  1131.  
  1132.  
  1133. //--------------------------------------------------------------------------;
  1134. //  
  1135. //  BOOL MMCapsMidPid_MM_INTEL
  1136. //  
  1137. //  Description:
  1138. //  
  1139. //  
  1140. //  Arguments:
  1141. //      PTSTR pszMid:
  1142. //  
  1143. //      UINT uPid:
  1144. //  
  1145. //      PTSTR pszPid:
  1146. //  
  1147. //  Return (BOOL):
  1148. //  
  1149. //  History:
  1150. //      05/13/93
  1151. //  
  1152. //--------------------------------------------------------------------------;
  1153.  
  1154. BOOL FNLOCAL MMCapsMidPid_MM_INTEL
  1155. (
  1156.     PTSTR           pszMid,
  1157.     UINT            uPid,
  1158.     PTSTR           pszPid
  1159. )
  1160. {
  1161.     static TCHAR szMid[]    = TEXT("Intel");
  1162.  
  1163.     PTSTR       psz;
  1164.  
  1165.     if (NULL != pszMid)
  1166.     lstrcpy(pszMid, szMid);
  1167.  
  1168.     if (NULL == pszPid)
  1169.     return (TRUE);
  1170.  
  1171.     //
  1172.     //
  1173.     //
  1174.     psz = NULL;
  1175.     switch (uPid)
  1176.     {
  1177.     case MM_INTELOPD_WAVEIN:
  1178.         psz = TEXT("HID2 WaveAudio Input driver");
  1179.         break;
  1180.  
  1181.     case MM_INTELOPD_WAVEOUT:
  1182.         psz = TEXT("HID2 WaveAudio Output driver");
  1183.         break;
  1184.  
  1185.     case MM_INTELOPD_AUX:
  1186.         psz = TEXT("HID2 Auxiliary driver (required for mixing functions)");
  1187.         break;
  1188.     }
  1189.  
  1190.     if (NULL != psz)
  1191.     {
  1192.     lstrcat(pszPid, psz);
  1193.     return (TRUE);
  1194.     }
  1195.  
  1196.     return (FALSE);
  1197. } // MMCapsMidPid_MM_INTEL()
  1198.  
  1199.  
  1200. //--------------------------------------------------------------------------;
  1201. //  
  1202. //  BOOL MMCapsMidPid_MM_GRAVIS
  1203. //  
  1204. //  Description:
  1205. //  
  1206. //  
  1207. //  Arguments:
  1208. //      PTSTR pszMid:
  1209. //  
  1210. //      UINT uPid:
  1211. //  
  1212. //      PTSTR pszPid:
  1213. //  
  1214. //  Return (BOOL):
  1215. //  
  1216. //  History:
  1217. //      05/13/93
  1218. //  
  1219. //--------------------------------------------------------------------------;
  1220.  
  1221. BOOL FNLOCAL MMCapsMidPid_MM_GRAVIS
  1222. (
  1223.     PTSTR           pszMid,
  1224.     UINT            uPid,
  1225.     PTSTR           pszPid
  1226. )
  1227. {
  1228.     static TCHAR szMid[]    = TEXT("Gravis");
  1229.  
  1230.  
  1231.     if (NULL != pszMid)
  1232.     lstrcpy(pszMid, szMid);
  1233.  
  1234.     if (NULL == pszPid)
  1235.     return (TRUE);
  1236.  
  1237.     //
  1238.     //
  1239.     //
  1240.  
  1241.     return (FALSE);
  1242. } // MMCapsMidPid_MM_GRAVIS()
  1243.  
  1244.  
  1245. //--------------------------------------------------------------------------;
  1246. //  
  1247. //  BOOL MMCapsMidPid_MM_VAL
  1248. //  
  1249. //  Description:
  1250. //  
  1251. //  
  1252. //  Arguments:
  1253. //      PTSTR pszMid:
  1254. //  
  1255. //      UINT uPid:
  1256. //  
  1257. //      PTSTR pszPid:
  1258. //  
  1259. //  Return (BOOL):
  1260. //  
  1261. //  History:
  1262. //      05/13/93
  1263. //  
  1264. //--------------------------------------------------------------------------;
  1265.  
  1266. BOOL FNLOCAL MMCapsMidPid_MM_VAL
  1267. (
  1268.     PTSTR           pszMid,
  1269.     UINT            uPid,
  1270.     PTSTR           pszPid
  1271. )
  1272. {
  1273.     static TCHAR szMid[]    = TEXT("Video Associates Labs");
  1274.  
  1275.  
  1276.     if (NULL != pszMid)
  1277.     lstrcpy(pszMid, szMid);
  1278.  
  1279.     if (NULL == pszPid)
  1280.     return (TRUE);
  1281.  
  1282.     //
  1283.     //
  1284.     //
  1285.  
  1286.     return (FALSE);
  1287. } // MMCapsMidPid_MM_VAL()
  1288.  
  1289.  
  1290. //--------------------------------------------------------------------------;
  1291. //  
  1292. //  BOOL MMCapsMidPid_MM_INTERACTIVE
  1293. //  
  1294. //  Description:
  1295. //  
  1296. //  
  1297. //  Arguments:
  1298. //      PTSTR pszMid:
  1299. //  
  1300. //      UINT uPid:
  1301. //  
  1302. //      PTSTR pszPid:
  1303. //  
  1304. //  Return (BOOL):
  1305. //  
  1306. //  History:
  1307. //      05/13/93
  1308. //  
  1309. //--------------------------------------------------------------------------;
  1310.  
  1311. BOOL FNLOCAL MMCapsMidPid_MM_INTERACTIVE
  1312. (
  1313.     PTSTR           pszMid,
  1314.     UINT            uPid,
  1315.     PTSTR           pszPid
  1316. )
  1317. {
  1318.     static TCHAR szMid[]    = TEXT("InterActive, Inc.");
  1319.  
  1320.     PTSTR       psz;
  1321.  
  1322.     if (NULL != pszMid)
  1323.     lstrcpy(pszMid, szMid);
  1324.  
  1325.     if (NULL == pszPid)
  1326.     return (TRUE);
  1327.  
  1328.     //
  1329.     //
  1330.     //
  1331.     psz = NULL;
  1332.     switch (uPid)
  1333.     {
  1334.     case MM_INTERACTIVE_WAVEIN:
  1335.         psz = TEXT("MM_INTERACTIVE_WAVEIN or WAVEOUT ??");
  1336.         break;
  1337.  
  1338. #if 0
  1339.     //  mmreg.h has in and out defined as same value... how quaint.
  1340.     case MM_INTERACTIVE_WAVEOUT:
  1341.         psz = TEXT("MM_INTERACTIVE_WAVEOUT");
  1342.         break;
  1343. #endif
  1344.     }
  1345.  
  1346.     if (NULL != psz)
  1347.     {
  1348.     lstrcat(pszPid, psz);
  1349.     return (TRUE);
  1350.     }
  1351.  
  1352.     return (FALSE);
  1353. } // MMCapsMidPid_MM_INTERACTIVE()
  1354.  
  1355.  
  1356. //--------------------------------------------------------------------------;
  1357. //  
  1358. //  BOOL MMCapsMidPid_MM_YAMAHA
  1359. //  
  1360. //  Description:
  1361. //  
  1362. //  
  1363. //  Arguments:
  1364. //      PTSTR pszMid:
  1365. //  
  1366. //      UINT uPid:
  1367. //  
  1368. //      PTSTR pszPid:
  1369. //  
  1370. //  Return (BOOL):
  1371. //  
  1372. //  History:
  1373. //      05/13/93
  1374. //  
  1375. //--------------------------------------------------------------------------;
  1376.  
  1377. BOOL FNLOCAL MMCapsMidPid_MM_YAMAHA
  1378. (
  1379.     PTSTR           pszMid,
  1380.     UINT            uPid,
  1381.     PTSTR           pszPid
  1382. )
  1383. {
  1384.     static TCHAR szMid[]    = TEXT("Yamaha Corp. of America");
  1385.  
  1386.  
  1387.     PTSTR       psz;
  1388.  
  1389.     if (NULL != pszMid)
  1390.     lstrcpy(pszMid, szMid);
  1391.  
  1392.     if (NULL == pszPid)
  1393.     return (TRUE);
  1394.  
  1395.     //
  1396.     //
  1397.     //
  1398.     psz = NULL;
  1399.     switch (uPid)
  1400.     {
  1401.     case MM_YAMAHA_GSS_SYNTH:
  1402.         psz = TEXT("Yamaha Gold Sound Standard FM sythesis driver");
  1403.         break;
  1404.  
  1405.     case MM_YAMAHA_GSS_WAVEOUT:
  1406.         psz = TEXT("Yamaha Gold Sound Standard wave output driver");
  1407.         break;
  1408.  
  1409.     case MM_YAMAHA_GSS_WAVEIN:
  1410.         psz = TEXT("Yamaha Gold Sound Standard wave input driver");
  1411.         break;
  1412.  
  1413.     case MM_YAMAHA_GSS_MIDIOUT:
  1414.         psz = TEXT("Yamaha Gold Sound Standard midi output driver");
  1415.         break;
  1416.  
  1417.     case MM_YAMAHA_GSS_MIDIIN:
  1418.         psz = TEXT("Yamaha Gold Sound Standard midi input driver");
  1419.         break;
  1420.  
  1421.     case MM_YAMAHA_GSS_AUX:
  1422.         psz = TEXT("Yamaha Gold Sound Standard auxillary driver for mixer functions");
  1423.         break;
  1424.     }
  1425.  
  1426.     if (NULL != psz)
  1427.     {
  1428.     lstrcat(pszPid, psz);
  1429.     return (TRUE);
  1430.     }
  1431.  
  1432.     return (FALSE);
  1433. } // MMCapsMidPid_MM_YAMAHA()
  1434.  
  1435.  
  1436. //--------------------------------------------------------------------------;
  1437. //  
  1438. //  BOOL MMCapsMidPid_MM_EVEREX
  1439. //  
  1440. //  Description:
  1441. //  
  1442. //  
  1443. //  Arguments:
  1444. //      PTSTR pszMid:
  1445. //  
  1446. //      UINT uPid:
  1447. //  
  1448. //      PTSTR pszPid:
  1449. //  
  1450. //  Return (BOOL):
  1451. //  
  1452. //  History:
  1453. //      05/13/93
  1454. //  
  1455. //--------------------------------------------------------------------------;
  1456.  
  1457. BOOL FNLOCAL MMCapsMidPid_MM_EVEREX
  1458. (
  1459.     PTSTR           pszMid,
  1460.     UINT            uPid,
  1461.     PTSTR           pszPid
  1462. )
  1463. {
  1464.     static TCHAR szMid[]    = TEXT("Everex Systems, Inc.");
  1465.  
  1466.     PTSTR       psz;
  1467.  
  1468.     if (NULL != pszMid)
  1469.     lstrcpy(pszMid, szMid);
  1470.  
  1471.     if (NULL == pszPid)
  1472.     return (TRUE);
  1473.  
  1474.     //
  1475.     //
  1476.     //
  1477.     psz = NULL;
  1478.     switch (uPid)
  1479.     {
  1480.     case MM_EVEREX_CARRIER:
  1481.         psz = TEXT("Everex Carrier SL/25 Notebook");
  1482.         break;
  1483.     }
  1484.  
  1485.     if (NULL != psz)
  1486.     {
  1487.     lstrcat(pszPid, psz);
  1488.     return (TRUE);
  1489.     }
  1490.  
  1491.     return (FALSE);
  1492. } // MMCapsMidPid_MM_EVEREX()
  1493.  
  1494.  
  1495. BOOL FNLOCAL MMCapsMidPid_MM_ECHO
  1496. (
  1497.     PTSTR           pszMid,
  1498.     UINT            uPid,
  1499.     PTSTR           pszPid
  1500. )
  1501. {
  1502.     static TCHAR szMid[]    = TEXT("Echo Speech Corporation");
  1503.  
  1504.     PTSTR       psz;
  1505.  
  1506.     if (NULL != pszMid)
  1507.     lstrcpy(pszMid, szMid);
  1508.  
  1509.     if (NULL == pszPid)
  1510.     return (TRUE);
  1511.  
  1512.     //
  1513.     //
  1514.     //
  1515.     psz = NULL;
  1516.     switch (uPid)
  1517.     {
  1518.     case MM_ECHO_SYNTH:
  1519.         psz = TEXT("Echo EuSythesis driver");
  1520.         break;
  1521.  
  1522.     case MM_ECHO_WAVEOUT:
  1523.         psz = TEXT("Wave output driver");
  1524.         break;
  1525.  
  1526.     case MM_ECHO_WAVEIN:
  1527.         psz = TEXT("Wave input driver");
  1528.         break;
  1529.  
  1530.     case MM_ECHO_MIDIOUT:
  1531.         psz = TEXT("MIDI output driver");
  1532.         break;
  1533.  
  1534.     case MM_ECHO_MIDIIN:
  1535.         psz = TEXT("MIDI input driver");
  1536.         break;
  1537.  
  1538.     case MM_ECHO_AUX:
  1539.         psz = TEXT("auxillary driver for mixer functions");
  1540.         break;
  1541.     }
  1542.  
  1543.     if (NULL != psz)
  1544.     {
  1545.     lstrcat(pszPid, psz);
  1546.     return (TRUE);
  1547.     }
  1548.  
  1549.     return (FALSE);
  1550. }
  1551.  
  1552.  
  1553. //--------------------------------------------------------------------------;
  1554. //  
  1555. //  BOOL MMCapsMidPid_MM_SIERRA
  1556. //  
  1557. //  Description:
  1558. //  
  1559. //  
  1560. //  Arguments:
  1561. //      PTSTR pszMid:
  1562. //  
  1563. //      UINT uPid:
  1564. //  
  1565. //      PTSTR pszPid:
  1566. //  
  1567. //  Return (BOOL):
  1568. //  
  1569. //  History:
  1570. //      05/13/93
  1571. //  
  1572. //--------------------------------------------------------------------------;
  1573.  
  1574. BOOL FNLOCAL MMCapsMidPid_MM_SIERRA
  1575. (
  1576.     PTSTR           pszMid,
  1577.     UINT            uPid,
  1578.     PTSTR           pszPid
  1579. )
  1580. {
  1581.     static TCHAR szMid[]    = TEXT("Sierra Semiconductor");
  1582.  
  1583.     PTSTR       psz;
  1584.  
  1585.     if (NULL != pszMid)
  1586.     lstrcpy(pszMid, szMid);
  1587.  
  1588.     if (NULL == pszPid)
  1589.     return (TRUE);
  1590.  
  1591.     //
  1592.     //
  1593.     //
  1594.     psz = NULL;
  1595.     switch (uPid)
  1596.     {
  1597.     case MM_SIERRA_ARIA_MIDIOUT:
  1598.         psz = TEXT("Sierra Aria MIDI output");
  1599.         break;
  1600.  
  1601.     case MM_SIERRA_ARIA_MIDIIN:
  1602.         psz = TEXT("Sierra Aria MIDI input");
  1603.         break;
  1604.  
  1605.     case MM_SIERRA_ARIA_SYNTH:
  1606.         psz = TEXT("Sierra Aria Synthesizer");
  1607.         break;
  1608.  
  1609.     case MM_SIERRA_ARIA_WAVEOUT:
  1610.         psz = TEXT("Sierra Aria Waveform output");
  1611.         break;
  1612.  
  1613.     case MM_SIERRA_ARIA_WAVEIN:
  1614.         psz = TEXT("Sierra Aria Waveform input");
  1615.         break;
  1616.  
  1617.     case MM_SIERRA_ARIA_AUX:
  1618.         psz = TEXT("Sierra Aria Auxiliary device");
  1619.         break;
  1620.     }
  1621.  
  1622.     if (NULL != psz)
  1623.     {
  1624.     lstrcat(pszPid, psz);
  1625.     return (TRUE);
  1626.     }
  1627.  
  1628.     return (FALSE);
  1629. } // MMCapsMidPid_MM_SIERRA()
  1630.  
  1631.  
  1632. //--------------------------------------------------------------------------;
  1633. //  
  1634. //  BOOL MMCapsMidPid_MM_CAT
  1635. //  
  1636. //  Description:
  1637. //  
  1638. //  
  1639. //  Arguments:
  1640. //      PTSTR pszMid:
  1641. //  
  1642. //      UINT uPid:
  1643. //  
  1644. //      PTSTR pszPid:
  1645. //  
  1646. //  Return (BOOL):
  1647. //  
  1648. //  History:
  1649. //      05/13/93
  1650. //  
  1651. //--------------------------------------------------------------------------;
  1652.  
  1653. BOOL FNLOCAL MMCapsMidPid_MM_CAT
  1654. (
  1655.     PTSTR           pszMid,
  1656.     UINT            uPid,
  1657.     PTSTR           pszPid
  1658. )
  1659. {
  1660.     static TCHAR szMid[]    = TEXT("Computer Aided Technologies");
  1661.  
  1662.  
  1663.     if (NULL != pszMid)
  1664.     lstrcpy(pszMid, szMid);
  1665.  
  1666.     if (NULL == pszPid)
  1667.     return (TRUE);
  1668.  
  1669.     //
  1670.     //
  1671.     //
  1672.  
  1673.     return (FALSE);
  1674. } // MMCapsMidPid_MM_CAT()
  1675.  
  1676.  
  1677. //--------------------------------------------------------------------------;
  1678. //  
  1679. //  BOOL MMCapsMidPid_MM_APPS
  1680. //  
  1681. //  Description:
  1682. //  
  1683. //  
  1684. //  Arguments:
  1685. //      PTSTR pszMid:
  1686. //  
  1687. //      UINT uPid:
  1688. //  
  1689. //      PTSTR pszPid:
  1690. //  
  1691. //  Return (BOOL):
  1692. //  
  1693. //  History:
  1694. //      05/13/93
  1695. //  
  1696. //--------------------------------------------------------------------------;
  1697.  
  1698. BOOL FNLOCAL MMCapsMidPid_MM_APPS
  1699. (
  1700.     PTSTR           pszMid,
  1701.     UINT            uPid,
  1702.     PTSTR           pszPid
  1703. )
  1704. {
  1705.     static TCHAR szMid[]    = TEXT("APPS Software International");
  1706.  
  1707.  
  1708.     if (NULL != pszMid)
  1709.     lstrcpy(pszMid, szMid);
  1710.  
  1711.     if (NULL == pszPid)
  1712.     return (TRUE);
  1713.  
  1714.     //
  1715.     //
  1716.     //
  1717.  
  1718.     return (FALSE);
  1719. } // MMCapsMidPid_MM_APPS()
  1720.  
  1721.  
  1722. //--------------------------------------------------------------------------;
  1723. //  
  1724. //  BOOL MMCapsMidPid_MM_DSP_GROUP
  1725. //  
  1726. //  Description:
  1727. //  
  1728. //  
  1729. //  Arguments:
  1730. //      PTSTR pszMid:
  1731. //  
  1732. //      UINT uPid:
  1733. //  
  1734. //      PTSTR pszPid:
  1735. //  
  1736. //  Return (BOOL):
  1737. //  
  1738. //  History:
  1739. //      05/13/93
  1740. //  
  1741. //--------------------------------------------------------------------------;
  1742.  
  1743. BOOL FNLOCAL MMCapsMidPid_MM_DSP_GROUP
  1744. (
  1745.     PTSTR           pszMid,
  1746.     UINT            uPid,
  1747.     PTSTR           pszPid
  1748. )
  1749. {
  1750.     static TCHAR szMid[]    = TEXT("DSP Group, Inc.");
  1751.  
  1752.     PTSTR       psz;
  1753.  
  1754.     if (NULL != pszMid)
  1755.     lstrcpy(pszMid, szMid);
  1756.  
  1757.     if (NULL == pszPid)
  1758.     return (TRUE);
  1759.  
  1760.     //
  1761.     //
  1762.     //
  1763.     psz = NULL;
  1764.     switch (uPid)
  1765.     {
  1766.     case MM_DSP_GROUP_TRUESPEECH:
  1767.         psz = TEXT("High quality 9.54:1 Speech Compression Vocoder");
  1768.         break;
  1769.     }
  1770.  
  1771.     if (NULL != psz)
  1772.     {
  1773.     lstrcat(pszPid, psz);
  1774.     return (TRUE);
  1775.     }
  1776.  
  1777.     return (FALSE);
  1778. } // MMCapsMidPid_MM_DSP_GROUP()
  1779.  
  1780.  
  1781. //--------------------------------------------------------------------------;
  1782. //  
  1783. //  BOOL MMCapsMidPid_MM_MELABS
  1784. //  
  1785. //  Description:
  1786. //  
  1787. //  
  1788. //  Arguments:
  1789. //      PTSTR pszMid:
  1790. //  
  1791. //      UINT uPid:
  1792. //  
  1793. //      PTSTR pszPid:
  1794. //  
  1795. //  Return (BOOL):
  1796. //  
  1797. //  History:
  1798. //      05/13/93
  1799. //  
  1800. //--------------------------------------------------------------------------;
  1801.  
  1802. BOOL FNLOCAL MMCapsMidPid_MM_MELABS
  1803. (
  1804.     PTSTR           pszMid,
  1805.     UINT            uPid,
  1806.     PTSTR           pszPid
  1807. )
  1808. {
  1809.     static TCHAR szMid[]    = TEXT("microEngineering Labs");
  1810.  
  1811.     PTSTR       psz;
  1812.  
  1813.     if (NULL != pszMid)
  1814.     lstrcpy(pszMid, szMid);
  1815.  
  1816.     if (NULL == pszPid)
  1817.     return (TRUE);
  1818.  
  1819.     //
  1820.     //
  1821.     //
  1822.     psz = NULL;
  1823.     switch (uPid)
  1824.     {
  1825.     case MM_MELABS_MIDI2GO:
  1826.         psz = TEXT("parallel port MIDI interface");
  1827.         break;
  1828.     }
  1829.  
  1830.     if (NULL != psz)
  1831.     {
  1832.     lstrcat(pszPid, psz);
  1833.     return (TRUE);
  1834.     }
  1835.  
  1836.     return (FALSE);
  1837. } // MMCapsMidPid_MM_MELABS()
  1838.  
  1839.  
  1840. //--------------------------------------------------------------------------;
  1841. //  
  1842. //  BOOL MMCapsMidPid_MM_COMPUTER_FRIENDS
  1843. //  
  1844. //  Description:
  1845. //  
  1846. //  
  1847. //  Arguments:
  1848. //      PTSTR pszMid:
  1849. //  
  1850. //      UINT uPid:
  1851. //  
  1852. //      PTSTR pszPid:
  1853. //  
  1854. //  Return (BOOL):
  1855. //  
  1856. //  History:
  1857. //      05/13/93
  1858. //  
  1859. //--------------------------------------------------------------------------;
  1860.  
  1861. BOOL FNLOCAL MMCapsMidPid_MM_COMPUTER_FRIENDS
  1862. (
  1863.     PTSTR           pszMid,
  1864.     UINT            uPid,
  1865.     PTSTR           pszPid
  1866. )
  1867. {
  1868.     static TCHAR szMid[]    = TEXT("Computer Friends, Inc");
  1869.  
  1870.  
  1871.     if (NULL != pszMid)
  1872.     lstrcpy(pszMid, szMid);
  1873.  
  1874.     if (NULL == pszPid)
  1875.     return (TRUE);
  1876.  
  1877.     //
  1878.     //
  1879.     //
  1880.  
  1881.     return (FALSE);
  1882. } // MMCapsMidPid_MM_COMPUTER_FRIENDS()
  1883.  
  1884.  
  1885. //--------------------------------------------------------------------------;
  1886. //  
  1887. //  BOOL MMCapsMidPid_MM_ESS
  1888. //  
  1889. //  Description:
  1890. //  
  1891. //  
  1892. //  Arguments:
  1893. //      PTSTR pszMid:
  1894. //  
  1895. //      UINT uPid:
  1896. //  
  1897. //      PTSTR pszPid:
  1898. //  
  1899. //  Return (BOOL):
  1900. //  
  1901. //  History:
  1902. //      05/13/93
  1903. //  
  1904. //--------------------------------------------------------------------------;
  1905.  
  1906. BOOL FNLOCAL MMCapsMidPid_MM_ESS
  1907. (
  1908.     PTSTR           pszMid,
  1909.     UINT            uPid,
  1910.     PTSTR           pszPid
  1911. )
  1912. {
  1913.     static TCHAR szMid[]    = TEXT("ESS Technology");
  1914.  
  1915.     PTSTR       psz;
  1916.  
  1917.     if (NULL != pszMid)
  1918.     lstrcpy(pszMid, szMid);
  1919.  
  1920.     if (NULL == pszPid)
  1921.     return (TRUE);
  1922.  
  1923.     //
  1924.     //
  1925.     //
  1926.     psz = NULL;
  1927.     switch (uPid)
  1928.     {
  1929.     case MM_ESS_AMWAVEOUT:
  1930.         psz = TEXT("ESS Audio Magician Waveform Output Port");
  1931.         break;
  1932.  
  1933.     case MM_ESS_AMWAVEIN:
  1934.         psz = TEXT("ESS Audio Magician Waveform Input Port");
  1935.         break;
  1936.  
  1937.     case MM_ESS_AMAUX:
  1938.         psz = TEXT("ESS Audio Magician Auxiliary Port");
  1939.         break;
  1940.  
  1941.     case MM_ESS_AMSYNTH:
  1942.         psz = TEXT("ESS Audio Magician Internal Music Synthesizer Port");
  1943.         break;
  1944.  
  1945.     case MM_ESS_AMMIDIOUT:
  1946.         psz = TEXT("ESS Audio Magician MIDI Output Port");
  1947.         break;
  1948.  
  1949.     case MM_ESS_AMMIDIIN:
  1950.         psz = TEXT("ESS Audio Magician MIDI Input Port");
  1951.         break;
  1952.     }
  1953.  
  1954.     if (NULL != psz)
  1955.     {
  1956.     lstrcat(pszPid, psz);
  1957.     return (TRUE);
  1958.     }
  1959.  
  1960.     return (FALSE);
  1961. } // MMCapsMidPid_MM_ESS()
  1962.  
  1963.  
  1964. //--------------------------------------------------------------------------;
  1965. //  
  1966. //  BOOL MMCapsMidPid_MM_AUDIOFILE
  1967. //  
  1968. //  Description:
  1969. //  
  1970. //  
  1971. //  Arguments:
  1972. //      PTSTR pszMid:
  1973. //  
  1974. //      UINT uPid:
  1975. //  
  1976. //      PTSTR pszPid:
  1977. //  
  1978. //  Return (BOOL):
  1979. //  
  1980. //  History:
  1981. //      05/13/93
  1982. //  
  1983. //--------------------------------------------------------------------------;
  1984.  
  1985. BOOL FNLOCAL MMCapsMidPid_MM_AUDIOFILE
  1986. (
  1987.     PTSTR           pszMid,
  1988.     UINT            uPid,
  1989.     PTSTR           pszPid
  1990. )
  1991. {
  1992.     static TCHAR szMid[]    = TEXT("Audio, Inc.");
  1993.  
  1994.  
  1995.     if (NULL != pszMid)
  1996.     lstrcpy(pszMid, szMid);
  1997.  
  1998.     if (NULL == pszPid)
  1999.     return (TRUE);
  2000.  
  2001.     //
  2002.     //
  2003.     //
  2004.  
  2005.     return (FALSE);
  2006. } // MMCapsMidPid_MM_AUDIOFILE()
  2007.  
  2008.  
  2009. //--------------------------------------------------------------------------;
  2010. //  
  2011. //  BOOL MMCapsMidPid_MM_MOTOROLA
  2012. //  
  2013. //  Description:
  2014. //  
  2015. //  
  2016. //  Arguments:
  2017. //      PTSTR pszMid:
  2018. //  
  2019. //      UINT uPid:
  2020. //  
  2021. //      PTSTR pszPid:
  2022. //  
  2023. //  Return (BOOL):
  2024. //  
  2025. //  History:
  2026. //      05/13/93
  2027. //  
  2028. //--------------------------------------------------------------------------;
  2029.  
  2030. BOOL FNLOCAL MMCapsMidPid_MM_MOTOROLA
  2031. (
  2032.     PTSTR           pszMid,
  2033.     UINT            uPid,
  2034.     PTSTR           pszPid
  2035. )
  2036. {
  2037.     static TCHAR szMid[]    = TEXT("Motorola, Inc.");
  2038.  
  2039.  
  2040.     if (NULL != pszMid)
  2041.     lstrcpy(pszMid, szMid);
  2042.  
  2043.     if (NULL == pszPid)
  2044.     return (TRUE);
  2045.  
  2046.     //
  2047.     //
  2048.     //
  2049.  
  2050.     return (FALSE);
  2051. } // MMCapsMidPid_MM_MOTOROLA()
  2052.  
  2053.  
  2054. //--------------------------------------------------------------------------;
  2055. //  
  2056. //  BOOL MMCapsMidPid_MM_CANOPUS
  2057. //  
  2058. //  Description:
  2059. //  
  2060. //  
  2061. //  Arguments:
  2062. //      PTSTR pszMid:
  2063. //  
  2064. //      UINT uPid:
  2065. //  
  2066. //      PTSTR pszPid:
  2067. //  
  2068. //  Return (BOOL):
  2069. //  
  2070. //--------------------------------------------------------------------------;
  2071.  
  2072. BOOL FNLOCAL MMCapsMidPid_MM_CANOPUS
  2073. (
  2074.     PTSTR           pszMid,
  2075.     UINT            uPid,
  2076.     PTSTR           pszPid
  2077. )
  2078. {
  2079.     static TCHAR szMid[]    = TEXT("Canopus Co., Ltd.");
  2080.  
  2081.  
  2082.     if (NULL != pszMid)
  2083.     lstrcpy(pszMid, szMid);
  2084.  
  2085.     if (NULL == pszPid)
  2086.     return (TRUE);
  2087.  
  2088.     //
  2089.     //
  2090.     //
  2091.  
  2092.     return (FALSE);
  2093. } // MMCapsMidPid_MM_CANOPUS()
  2094.  
  2095.  
  2096. //==========================================================================;
  2097. //
  2098. //
  2099. //
  2100. //
  2101. //==========================================================================;
  2102.  
  2103. //--------------------------------------------------------------------------;
  2104. //  
  2105. //  BOOL MMCapsMidAndPid
  2106. //  
  2107. //  Description:
  2108. //  
  2109. //  
  2110. //  Arguments:
  2111. //      UINT uMid:
  2112. //  
  2113. //      PTSTR pszMid:
  2114. //  
  2115. //      UINT uPid:
  2116. //  
  2117. //      PTSTR pszPid:
  2118. //  
  2119. //  Return (BOOL):
  2120. //  
  2121. //  History:
  2122. //      05/13/93
  2123. //  
  2124. //--------------------------------------------------------------------------;
  2125.  
  2126. BOOL FNGLOBAL MMCapsMidAndPid
  2127. (
  2128.     UINT            uMid,
  2129.     PTSTR           pszMid,
  2130.     UINT            uPid,
  2131.     PTSTR           pszPid
  2132. )
  2133. {
  2134.     static TCHAR    szUnknown[]     = TEXT("Unknown");
  2135.     static TCHAR    szFormatId[]    = TEXT("[%u], %s");
  2136.  
  2137.     TCHAR       achMid[MMCAPS_MAX_STRING_MID_CHARS];
  2138.     TCHAR       achPid[MMCAPS_MAX_STRING_PID_CHARS];
  2139.     BOOL        f;
  2140.  
  2141.     switch (uMid)
  2142.     {
  2143.     case MM_MICROSOFT:
  2144.         f = MMCapsMidPid_MM_MICROSOFT(achMid, uPid, achPid);
  2145.         break;
  2146.  
  2147.     case MM_CREATIVE:
  2148.         f = MMCapsMidPid_MM_CREATIVE(achMid, uPid, achPid);
  2149.         break;
  2150.  
  2151.     case MM_MEDIAVISION:
  2152.         f = MMCapsMidPid_MM_MEDIAVISION(achMid, uPid, achPid);
  2153.         break;
  2154.  
  2155.     case MM_FUJITSU:
  2156.         f = MMCapsMidPid_MM_FUJITSU(achMid, uPid, achPid);
  2157.         break;
  2158.  
  2159.     case MM_ARTISOFT:
  2160.         f = MMCapsMidPid_MM_ARTISOFT(achMid, uPid, achPid);
  2161.         break;
  2162.  
  2163.     case MM_TURTLE_BEACH:
  2164.         f = MMCapsMidPid_MM_TURTLE_BEACH(achMid, uPid, achPid);
  2165.         break;
  2166.  
  2167.     case MM_IBM:
  2168.         f = MMCapsMidPid_MM_IBM(achMid, uPid, achPid);
  2169.         break;
  2170.  
  2171.     case MM_VOCALTEC:
  2172.         f = MMCapsMidPid_MM_VOCALTEC(achMid, uPid, achPid);
  2173.         break;
  2174.  
  2175.     case MM_ROLAND:
  2176.         f = MMCapsMidPid_MM_ROLAND(achMid, uPid, achPid);
  2177.         break;
  2178.  
  2179.     //case MM_DIGISPEECH:
  2180.     case MM_DSP_SOLUTIONS:
  2181.         f = MMCapsMidPid_MM_DIGISPEECH(achMid, uPid, achPid);
  2182.         break;
  2183.  
  2184.     case MM_NEC:
  2185.         f = MMCapsMidPid_MM_NEC(achMid, uPid, achPid);
  2186.         break;
  2187.  
  2188.     case MM_ATI:
  2189.         f = MMCapsMidPid_MM_ATI(achMid, uPid, achPid);
  2190.         break;
  2191.  
  2192.     case MM_WANGLABS:
  2193.         f = MMCapsMidPid_MM_WANGLABS(achMid, uPid, achPid);
  2194.         break;
  2195.  
  2196.     case MM_TANDY:
  2197.         f = MMCapsMidPid_MM_TANDY(achMid, uPid, achPid);
  2198.         break;
  2199.  
  2200.     case MM_VOYETRA:
  2201.         f = MMCapsMidPid_MM_VOYETRA(achMid, uPid, achPid);
  2202.         break;
  2203.  
  2204.     case MM_ANTEX:
  2205.         f = MMCapsMidPid_MM_ANTEX(achMid, uPid, achPid);
  2206.         break;
  2207.  
  2208.     case MM_ICL_PS:
  2209.         f = MMCapsMidPid_MM_ICL_PS(achMid, uPid, achPid);
  2210.         break;
  2211.  
  2212.     case MM_INTEL:
  2213.         f = MMCapsMidPid_MM_INTEL(achMid, uPid, achPid);
  2214.         break;
  2215.  
  2216.     case MM_GRAVIS:
  2217.         f = MMCapsMidPid_MM_GRAVIS(achMid, uPid, achPid);
  2218.         break;
  2219.  
  2220.     case MM_VAL:
  2221.         f = MMCapsMidPid_MM_VAL(achMid, uPid, achPid);
  2222.         break;
  2223.  
  2224.     case MM_INTERACTIVE:
  2225.         f = MMCapsMidPid_MM_INTERACTIVE(achMid, uPid, achPid);
  2226.         break;
  2227.  
  2228.     case MM_YAMAHA:
  2229.         f = MMCapsMidPid_MM_YAMAHA(achMid, uPid, achPid);
  2230.         break;
  2231.  
  2232.     case MM_EVEREX:
  2233.         f = MMCapsMidPid_MM_EVEREX(achMid, uPid, achPid);
  2234.         break;
  2235.  
  2236.     case MM_ECHO:
  2237.         f = MMCapsMidPid_MM_ECHO(achMid, uPid, achPid);
  2238.         break;
  2239.  
  2240.     case MM_SIERRA:
  2241.         f = MMCapsMidPid_MM_SIERRA(achMid, uPid, achPid);
  2242.         break;
  2243.  
  2244.     case MM_CAT:
  2245.         f = MMCapsMidPid_MM_CAT(achMid, uPid, achPid);
  2246.         break;
  2247.  
  2248.     case MM_APPS:
  2249.         f = MMCapsMidPid_MM_APPS(achMid, uPid, achPid);
  2250.         break;
  2251.  
  2252.     case MM_DSP_GROUP:
  2253.         f = MMCapsMidPid_MM_DSP_GROUP(achMid, uPid, achPid);
  2254.         break;
  2255.  
  2256.     case MM_MELABS:
  2257.         f = MMCapsMidPid_MM_MELABS(achMid, uPid, achPid);
  2258.         break;
  2259.  
  2260.     case MM_COMPUTER_FRIENDS:
  2261.         f = MMCapsMidPid_MM_COMPUTER_FRIENDS(achMid, uPid, achPid);
  2262.         break;
  2263.  
  2264.     case MM_ESS:
  2265.         f = MMCapsMidPid_MM_ESS(achMid, uPid, achPid);
  2266.         break;
  2267.  
  2268.     case MM_AUDIOFILE:
  2269.         f = MMCapsMidPid_MM_AUDIOFILE(achMid, uPid, achPid);
  2270.         break;
  2271.  
  2272.     case MM_MOTOROLA:
  2273.         f = MMCapsMidPid_MM_MOTOROLA(achMid, uPid, achPid);
  2274.         break;
  2275.  
  2276.     case MM_CANOPUS:
  2277.         f = MMCapsMidPid_MM_CANOPUS(achMid, uPid, achPid);
  2278.         break;
  2279.  
  2280.     default:
  2281.         lstrcpy(achMid, szUnknown);
  2282.         break;
  2283.     }
  2284.  
  2285.     //
  2286.     //
  2287.     //
  2288.     if (NULL != pszMid)
  2289.     {
  2290.     wsprintf(pszMid, szFormatId, uMid, (LPTSTR)achMid);
  2291.     }
  2292.  
  2293.     if (NULL != pszPid)
  2294.     {
  2295.     if (f)
  2296.         wsprintf(pszPid, szFormatId, uPid, (LPTSTR)achPid);
  2297.     else
  2298.         wsprintf(pszPid, szFormatId, uPid, (LPTSTR)szUnknown);
  2299.     }
  2300.  
  2301.  
  2302.     //
  2303.     //
  2304.     //
  2305.     return (f);
  2306. } // MMCapsMidAndPid()
  2307.