home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v1.zip / DDKX86 / BOOK / MMPM2.INF (.txt) < prev    next >
OS/2 Help File  |  1995-04-14  |  778KB  |  20,306 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Notices ΓòÉΓòÉΓòÉ
  3.  
  4. Fourth Edition (April 1995) 
  5.  
  6. The following paragraph does not apply to the United Kingdom or any country 
  7. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  8. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  9. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  10. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  11. do not allow disclaimer of express or implied warranties in certain 
  12. transactions, therefore, this statement may not apply to you. 
  13.  
  14. This publication could include technical inaccuracies or typographical errors. 
  15. Changes are periodically made to the information herein; these changes will be 
  16. incorporated in new editions of the publication. IBM may make improvements 
  17. and/or changes in the product(s) and/or the program(s) described in this 
  18. publication at any time. 
  19.  
  20. It is possible that this publication may contain reference to, or information 
  21. about, IBM products (machines and programs), programming, or services that are 
  22. not announced in your country.  Such references or information must not be 
  23. construed to mean that IBM intends to announce such IBM products, programming, 
  24. or services in your country. 
  25.  
  26. Requests for technical information about IBM products should be made to your 
  27. IBM authorized reseller or IBM marketing representative. 
  28.  
  29.  
  30. ΓòÉΓòÉΓòÉ 1.1. Copyright Notices ΓòÉΓòÉΓòÉ
  31.  
  32. COPYRIGHT LICENSE: This publication contains printed sample application 
  33. programs in source language, which illustrate OS/2 programming techniques. You 
  34. may copy, modify, and distribute these sample programs in any form without 
  35. payment to IBM, for the purposes of developing, using, marketing or 
  36. distributing application programs conforming to the OS/2 application 
  37. programming interface. 
  38.  
  39. Each copy of any portion of these sample programs or any derivative work, which 
  40. is distributed to others, must include a copyright notice as follows: "(C) 
  41. (your company name) (year).  All rights reserved." 
  42.  
  43. (C) Copyright International Business Machines Corporation 1995. All rights 
  44. reserved. 
  45. Note to U.S. Government Users - Documentation related to restricted rights - 
  46. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  47. Schedule Contract with IBM Corp. 
  48.  
  49.  
  50. ΓòÉΓòÉΓòÉ 1.2. Disclaimers ΓòÉΓòÉΓòÉ
  51.  
  52. References in this publication to IBM products, programs, or services do not 
  53. imply that IBM intends to make these available in all countries in which IBM 
  54. operates. Any reference to an IBM product, program or service is not intended 
  55. to state or imply that only IBM's product, program, or service may be used. Any 
  56. functionally equivalent product, program, or service that does not infringe any 
  57. of IBM's intellectual property rights or other legally protectable rights may 
  58. be used instead of the IBM product, program, or service. Evaluation and 
  59. verification of operation in conjunction with other products, programs, or 
  60. services, except those expressly designated by IBM, are the user's 
  61. responsibility. 
  62.  
  63. IBM may have patents or pending patent applications covering subject matter in 
  64. this document. The furnishing of this document does not give you any license to 
  65. these patents. You can send license inquiries, in writing, to the IBM Director 
  66. of Licensing, IBM Corporation, 500 Columbus Avenue, Thornwood NY 10594, U.S.A. 
  67.  
  68.  
  69. ΓòÉΓòÉΓòÉ 1.3. Trademarks ΓòÉΓòÉΓòÉ
  70.  
  71. The following terms are trademarks of the IBM Corporation in the United States 
  72. or other countries: 
  73.  
  74. IBM
  75. Multimedia Presentation Manager/2
  76. OS/2
  77. Ultimotion
  78.  
  79. The following terms are trademarks of other companies: 
  80.  
  81.  Helvetica               Linotype Company 
  82.  MASM                    Microsoft Corporation 
  83.  Mitsumi                 Mitsumi Denki Kabushki Kaisha 
  84.  Panasonic               Matsushita Electric Industrial Co., Ltd. 
  85.  OPTi                    OPTi, Inc. 
  86.  Pioneer                 Pioneer Electric Corporation 
  87.  ProAudio Spectrum       Media Vision, Inc. 
  88.  ProAudio Spectrum 16    Media Vision, Inc. 
  89.  QuickVia                Jovian Logic Corp. 
  90.  ReelMagic               Sigma Designs, Inc. 
  91.  Sound Blaster           Creative Technology Ltd. 
  92.  SuperVia                Jovian Logic Corp. 
  93.  Super VideoWindows      New Media Graphics Corporation 
  94.  Video Blaster           Creative Technology, Inc. 
  95.  Yamaha                  Yamaha Corporation 
  96.  
  97.  Windows is a trademark of Microsoft Corporation. 
  98.  
  99.  UNIX is a registered trademark in the United States and other countries 
  100.  licensed exclusively through X/Open Company Limited. 
  101.  
  102.  Other company, product, and service names, which may be denoted by a double 
  103.  asterisk (**), may be trademarks or service marks of others. 
  104.  
  105.  
  106. ΓòÉΓòÉΓòÉ 2. About This Book ΓòÉΓòÉΓòÉ
  107.  
  108. The MMPM/2 Device Driver Reference is for subsystem developers who want to 
  109. write their own physical device drivers (and associated virtual device drivers) 
  110. to support audio and video adapters in the (MMPM/2) system. 
  111.  
  112. Note:  Multimedia Presentation Manager/2 (or MMPM/2) is also referred to as 
  113.        OS/2 Multimedia. 
  114.  
  115.  The IBM Developer Connection Device Driver Kit for OS/2 provides PDD and VDD 
  116.  source code, which serves as a template that can be modified easily to meet 
  117.  your hardware requirements.  Tools to test your device drivers are also 
  118.  available. 
  119.  
  120.  
  121. ΓòÉΓòÉΓòÉ 2.1. Summary of Changes ΓòÉΓòÉΓòÉ
  122.  
  123. Following is a list of the changes made to the MMPM/2 Device Driver Reference 
  124. (Third Edition) since it was provided in online format in October 1994. 
  125.  
  126.    o  MPEG driver documenation was added. 
  127.  
  128.    o  MAD16 driver documentation was added. 
  129.  
  130.    o  A DDCMD/VSD state diagram and information about device states was added. 
  131.  
  132.    o  Information about 0 length buffers was added to DDCMD_READ and 
  133.       DDCMD_WRITE. 
  134.  
  135.    o  VSD_INSERTSETTINGSPAGE was added. 
  136.  
  137.  
  138. ΓòÉΓòÉΓòÉ 2.2. Related Information ΓòÉΓòÉΓòÉ
  139.  
  140. You should be familiar with the IBM Developer's Toolkit for OS/2. Related OS/2 
  141. and OS/2 Multimedia technical information includes: 
  142.  
  143.  OS/2 Physical Device Driver Reference -(10G6266) 
  144.            Defines what a physical device driver is, and how it operates.  It 
  145.            also describes the types of physical device drivers, their 
  146.            interfaces, and available system services. 
  147.  
  148.            An online version of this book is provided in this package. 
  149.  
  150.  OS/2 Virtual Device Driver Reference - (10G6310) 
  151.            Defines what a virtual device driver is, how it operates, and when 
  152.            to use one.  It also describes the types of virtual device drivers, 
  153.            their interfaces, and available kernel services. 
  154.  
  155.            An online version of this book is provided in this package. 
  156.  
  157.  OS/2 Multimedia Technical Library 
  158.  
  159.  Online versions of the following books are provided with the OS/2 Developer's 
  160.  Toolkit. 
  161.  
  162.  OS/2 Multimedia Subsystem Programming Guide 
  163.            Provides guidelines for developing multimedia subsystems. Each 
  164.            subsystem component is described in detail in individual chapters. 
  165.            Models are used to complement the information provided by component 
  166.            sample program templates. 
  167.  
  168.  OS/2 Multimedia Application Programming Guide 
  169.            Provides advisory information on application interfaces to help you 
  170.            select and implement functions for your OS/2 multimedia 
  171.            applications.  Code examples from fully documented sample programs 
  172.            accompany the descriptions of the functions. 
  173.  
  174.  OS/2 Multimedia Programming Reference 
  175.            Provides detailed information on multimedia functions, messages, and 
  176.            data structures to enable you to write code for your multimedia 
  177.            application programs and subsystems. 
  178.  
  179.  
  180. ΓòÉΓòÉΓòÉ 2.3. Using the Online Reference ΓòÉΓòÉΓòÉ
  181.  
  182. Before you begin to use this reference, it would be helpful to understand how 
  183. you can: 
  184.  
  185.    o  Expand the Contents to see all available topics 
  186.    o  Obtain additional information for a highlighted word or phrase 
  187.    o  Use action bar choices 
  188.  
  189.  How to Use the Contents 
  190.  
  191.  When the Contents window first appears, some topics have a plus (+) sign 
  192.  beside them.  The plus sign indicates that additional topics are available. 
  193.  
  194.  To expand the Contents if you are using a mouse, click on the plus sign (+). 
  195.  If you are using a keyboard, use the Up or Down Arrow key to highlight the 
  196.  topic, and press the plus key (+). 
  197.  
  198.  To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  199.  to highlight the topic, and then press Enter). 
  200.  
  201.  How to Obtain Additional Information 
  202.  
  203.  After you select a topic, the information for that topic appears in a window. 
  204.  Highlighted words or phrases indicate that additional information is 
  205.  available.  You will notice that certain words in the following paragraph are 
  206.  highlighted in green letters.  These are called hypertext terms.  If you are 
  207.  using a mouse, double-click on the highlighted word.  If you are using a 
  208.  keyboard, press the Tab key to move to the highlighted word, and then press 
  209.  Enter.  Additional information will appear in a window. 
  210.  
  211.  To return to the window you were viewing before you selected a hypertext term, 
  212.  press Esc. 
  213.  
  214.  How to Use Action Bar Choices 
  215.  
  216.  Several choices are available for managing information presented in the online 
  217.  MMPM/2 Device Driver Reference.  There are three pull-down menus on the action 
  218.  bar:  the Services menu, the Options menu, and the Help menu. 
  219.  
  220.  The actions that are selectable from the Services menu operate in the active 
  221.  window currently displayed on the screen.  These actions include the 
  222.  following: 
  223.  
  224.  Bookmark 
  225.            Sets a place holder so you can retrieve information of interest to 
  226.            you. 
  227.  
  228.            When you place a bookmark on a topic, it is added to a list of 
  229.            bookmarks you have previously set.  You can view the list, and you 
  230.            can remove one or all bookmarks from the list.  If you have not set 
  231.            any bookmarks, the list is empty. 
  232.  
  233.            To set a bookmark, do the following: 
  234.  
  235.    1. Select a topic from the Contents. 
  236.  
  237.    2. When that topic appears, choose the Bookmark option from the Services 
  238.       menu. 
  239.  
  240.    3. If you want to change the name used for the bookmark, type the new name 
  241.       in the field. 
  242.  
  243.    4. Select the Place radio button  (or press the Up or Down Arrow key to 
  244.       select it). 
  245.  
  246.    5. Select OK.  The bookmark is then added to the bookmark list. 
  247.  
  248.  Search 
  249.            Finds occurrences of a word or phrase in the current topic, selected 
  250.            topics, or all topics. 
  251.  
  252.            You can specify a word or phrase to be searched.  You can also limit 
  253.            the search to a set of topics by first marking the topics in the 
  254.            Contents list. 
  255.  
  256.            To search for a word or phrase in all topics, do the following: 
  257.  
  258.    1. Choose the Search option from the Services pull-down. 
  259.  
  260.    2. Type the word or words to be searched. 
  261.  
  262.    3. Select All sections. 
  263.  
  264.    4. Select Search to begin the search. 
  265.  
  266.    5. The list of topics where the word or phrase appears is displayed. 
  267.  
  268.  Print 
  269.            Prints one or more topics.  You can also print a set of topics by 
  270.            first marking the topics in the Contents list. 
  271.  
  272.            You can print one or more topics.  You can also print a set of 
  273.            topics by first marking the topics on the Contents list. 
  274.  
  275.            To print the document Contents list, do the following: 
  276.  
  277.    1. Select Print from the Services menu. 
  278.  
  279.    2. Select Contents. 
  280.  
  281.    3. Select Print. 
  282.  
  283.    4. The Contents list is printed on your printer. 
  284.  
  285.  Copy 
  286.            Copies a topic you are viewing to a file you can edit. 
  287.  
  288.            You can copy a topic you are viewing into a temporary file named 
  289.            TEXT.TMP.  You can later edit that file by using an editor such as 
  290.            the System Editor. 
  291.  
  292.            To copy a topic, do the following: 
  293.  
  294.    1. Expand the Contents list and select a topic. 
  295.  
  296.    2. When the topic appears, select Copy to file from the Services menu. 
  297.  
  298.            The system copies the text pertaining to that topic into the 
  299.            temporary TEXT.TMP file. 
  300.  
  301.            For information on any of the other choices in the Services menu, 
  302.            highlight the choice and press the F1 key. 
  303.  
  304.  Options 
  305.            Changes the way the Contents list is displayed. 
  306.  
  307.            You can control the appearance of the Contents list. 
  308.  
  309.            To expand the Contents and show all levels for all topics, select 
  310.            Expand all from the Options menu. 
  311.  
  312.            For information on any of the other choices in the Options menu, 
  313.            highlight the choice and press the F1 key. 
  314.  
  315.  
  316. ΓòÉΓòÉΓòÉ 2.4. Assistance ΓòÉΓòÉΓòÉ
  317.  
  318. Technical support for device driver development is provided by the IBM Driver 
  319. Development Support Center (DDSC) through a bulletin board system (BBS) known 
  320. as the "DUDE." You are encouraged to use the DUDE to obtain support by sending 
  321. in your questions and reviewing the question and answer database which can be 
  322. downloaded for off-line review. 
  323.  
  324. To access the DUDE, dial 407-982-3217 (using a modem) to register and access 
  325. the support system. For voice support in the United States, call 407-982-4239. 
  326.  
  327. Additional assistance is available through the IBM Developer Assistance 
  328. Program. For membership information: 
  329.  
  330.  Telephone:     407-982-6408 
  331.  
  332.  Fax:           407-988-7610 (U.S.A.) or 
  333.  
  334.  Fax:           407-982-4259 (worldwide) 
  335.  
  336.  
  337. ΓòÉΓòÉΓòÉ 2.5. Ordering Information ΓòÉΓòÉΓòÉ
  338.  
  339. For an illustration of OS/2 Technical Publications and other related product 
  340. documents, see the following figure. The IBM Developer Connection Device Driver 
  341. Kit for OS/2 on CD-ROM contains actual source code for sample device drivers, 
  342. as well as the complete text of the books in online form. 
  343.  
  344. To order any of the publications shown in the illustration, call: 
  345.  
  346. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  347. ΓöéU.S.A.:             Γöé1-800-633-8266       Γöé                     Γöé
  348. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  349. ΓöéCanada:             Γöé1-800-561-5293       Γöé                     Γöé
  350. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  351. ΓöéEurope, Middle East,Γöé English language   Γöé(+45) 48101500       Γöé
  352. ΓöéAfrica, and         Γöé French language    Γöé(+45) 48101200       Γöé
  353. ΓöéLatin America:      Γöé Italian language   Γöé(+45) 48101600       Γöé
  354. Γöé                    Γöé German language    Γöé(+45) 48101000       Γöé
  355. Γöé                    Γöé Spanish language   Γöé(+45) 48101100       Γöé
  356. Γöé                    Γöé Dutch language     Γöé(+45) 48101400       Γöé
  357. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  358. ΓöéAsia/Pacific:       Γöé All except Japan   Γöé(61) 2-354-7684      Γöé
  359. Γöé                    Γöé Japan              Γöé(81) 3-3495-2045(Fax)Γöé
  360. Γöé                    Γöé                     ΓöéFax request to:      Γöé
  361. Γöé                    Γöé                     ΓöéDAP-J, IBM Japan     Γöé
  362. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  363. ΓöéSE Brazil:          Γöé(021) 800-6120(Voice)Γöé                     Γöé
  364. Γöé                    Γöé(021) 800-6936(Fax)  Γöé                     Γöé
  365. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  366. ΓöéMexico:             Γöé Mexico City        Γöé627-2444             Γöé
  367. Γöé                    Γöé Country            Γöé91-800-00639         Γöé
  368. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  369.  
  370.  
  371. ΓòÉΓòÉΓòÉ 3. Adding Support for Audio and Video Adapters ΓòÉΓòÉΓòÉ
  372.  
  373. This DDK enables adding audio and video adapter support to the Multimedia 
  374. Presentation Manager/2 (MMPM/2) audio and video subsystems without having to 
  375. write a separate installation DLL for each adapter. 
  376.  
  377. Adapters are added to the appropriate MMPM/2 subsystem by: 
  378.  
  379.    o  Specifying parameters in a resource file (.RC). The resource file is 
  380.       compiled to create the resource DLL. 
  381.  
  382.    o  Modifying control files that tell MINSTALL how to install your adapter. 
  383.  
  384.    o  Modifying a help file that displays help information to users when they 
  385.       are installing your adapter. 
  386.  
  387.  This process is shown in the following illustration for a video adapter. 
  388.  
  389.  For additional information about adding support for an audio adapter, see 
  390.  Audio Adapter Installation or for adding support for a video adapter, see 
  391.  Video Adapter Installation. 
  392.  
  393.  
  394. ΓòÉΓòÉΓòÉ 3.1. Audio Adapter Installation ΓòÉΓòÉΓòÉ
  395.  
  396. MMPM/2 allows installation of device drivers developed for audio adapters into 
  397. the MMPM/2 audio subsystem. MMPM/2 can then use the audio adapter to play and 
  398. record digital audio files. It can also play, but not record, MIDI files. 
  399.  
  400. This DDK provides a generic installation program that performs the following 
  401. functions: 
  402.  
  403.    o  Asks the user for any information needed to install your adapter, such as 
  404.       the interrupt level. 
  405.  
  406.    o  Updates the CONFIG.SYS file with your DEVICE= statements and any other 
  407.       necessary statements. 
  408.  
  409.    o  Updates the MMPM2.INI file so that MMPM/2 recognizes your device driver. 
  410.  
  411.    o  Copies the files needed by your adapter, such as device drivers. 
  412.  
  413.  The following steps provide an overview of how to use the generic audio 
  414.  installation program to install a device driver into the MMPM/2 audio 
  415.  subsystem. The \MMOS2\MMTOOLKT\SAMPLES\AUDINST subdirectory provides the 
  416.  generic audio installation sample files. For more information about the 
  417.  AUDINST files, see Source Code. More detailed information about each step is 
  418.  provided in the following sections. 
  419.  
  420.  To add an audio adapter to the MMPM/2 audio subsystem, follow these steps: 
  421.  
  422.    1. Create an OS/2 device driver for the audio adapter. 
  423.  
  424.       For information on creating an OS/2 device driver, refer to Audio 
  425.       Physical Device Driver Template. 
  426.  
  427.    2. Write a Vendor-Specific Driver Resource File. 
  428.  
  429.       This file is an audio resource file that describes your audio device to 
  430.       MMPM/2. 
  431.  
  432.       For more information, see Step 2.  Writing a Vendor-Specific Driver. 
  433.  
  434.    3. Modify the CARDINFO.RC file. 
  435.  
  436.       This file contains specific information about the adapter. MMPM/2 uses 
  437.       this information to interface with the adapter. 
  438.  
  439.       For more information, see Step 3.  Modifying the CARDINFO.RC File. 
  440.  
  441.    4. If necessary, create a DLL to perform actions not provided by this 
  442.       generic audio installation program. 
  443.  
  444.       This step is not necessary, unless you want to perform some action that 
  445.       is not provided by the generic audio installation program. 
  446.  
  447.       For more information, see Step 4.  Creating an Audio Installation DLL. 
  448.  
  449.    5. Modify the AUDHELP.ITL file. 
  450.  
  451.       This file contains information that is presented to the user when 
  452.       installing your adapter. 
  453.  
  454.       For more information, see Step 5.  Modifying the AUDHELP.ITL File. 
  455.  
  456.    6. Run the MAKEFILE. 
  457.  
  458.       This file compiles CARDINFO.RC into a resource DLL called CARDINFO.DLL. 
  459.       It also compiles AUDHELP.ITL into a help file called AUDHELP.HLP. 
  460.  
  461.       For more information, see Step 6.  Running the MAKEFILE. 
  462.  
  463.    7. Modify the CONTROL.SCR file. 
  464.  
  465.       This file is the control file used by MINSTALL to determine what 
  466.       subsystems and devices a user can install. 
  467.  
  468.       For more information, see Step 7.  Modifying the CONTROL.SCR File. 
  469.  
  470.    8. Modify the AUDFILES.SCR file. 
  471.  
  472.       This file lists the files the adapter uses. It tells MINSTALL which files 
  473.       need to be copied and into which subdirectories to place them. 
  474.  
  475.       For more information, see Step 8.  Modifying the AUDFILES.SCR File. 
  476.  
  477.    9. If necessary, create a MIDI map. 
  478.  
  479.       This step is not necessary if the adapter uses the general MIDI 
  480.       specifications. 
  481.  
  482.       For more information, see Step 9.  Creating a MIDI Map. 
  483.  
  484.   10. Create an installation diskette. 
  485.  
  486.       This diskette must contain all the files necessary to install the adapter 
  487.       into the MMPM/2 audio subsystem using MINSTALL. 
  488.  
  489.       For more information, see Step 10.  Creating the Installation Diskette. 
  490.  
  491.   11. Install your adapter using MINSTALL. 
  492.  
  493.       For more information, see Step 11.  Using MINSTALL to Install Your 
  494.       Adapter. 
  495.  
  496.  
  497. ΓòÉΓòÉΓòÉ 3.1.1. Source Code ΓòÉΓòÉΓòÉ
  498.  
  499. The \MMOS2\MMTOOLKT\SAMPLES\AUDINST subdirectory provides the generic audio 
  500. installation sample files. These sample files illustrate how to install an 
  501. audio device driver into the MMPM/2 audio subsystem. The sample files include: 
  502.  
  503. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  504. ΓöéSource File              ΓöéDescription                        Γöé
  505. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  506. ΓöéMAKEFILE                 ΓöéCreates the resource DLL containingΓöé
  507. Γöé                         Γöéthe audio adapter information by   Γöé
  508. Γöé                         Γöécompiling the CARDINFO.RC file intoΓöé
  509. Γöé                         Γöéthe CARDINFO.DLL file. This file   Γöé
  510. Γöé                         Γöéalso compiles the AUDHELP.ITL file Γöé
  511. Γöé                         Γöéinto the AUDHELP.HLP help file.    Γöé
  512. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  513. ΓöéCARDINFO.RC              ΓöéSupplies information about the     Γöé
  514. Γöé                         Γöéaudio adapter.                     Γöé
  515. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  516. ΓöéMIDIMAP.RC               ΓöéContains the sample MIDI map table.Γöé
  517. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  518. ΓöéRCSTUB.C                 ΓöéStub 'C' file for compiling        Γöé
  519. Γöé                         ΓöéCARDINFO.RC.                       Γöé
  520. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  521. ΓöéAUDHELP.ITL              ΓöéContains the help information.     Γöé
  522. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  523. ΓöéCONTROL.SCR              ΓöéContains the control information   Γöé
  524. Γöé                         Γöéused by MINSTALL to install the    Γöé
  525. Γöé                         Γöéaudio adapter.                     Γöé
  526. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  527. ΓöéAUDFILES.SCR             ΓöéLists the files to be copied by    Γöé
  528. Γöé                         ΓöéMINSTALL. MINSTALL also copies thisΓöé
  529. Γöé                         Γöéfile.                              Γöé
  530. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  531. ΓöéMIDIMAP.SCR              ΓöéContains the INI change control    Γöé
  532. Γöé                         Γöéfile used by MINSTALL to install a Γöé
  533. Γöé                         ΓöéMIDI map table.                    Γöé
  534. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  535. ΓöéGENIN.DLL                ΓöéIs the generic installation programΓöé
  536. Γöé                         Γöéthat installs your adapter.        Γöé
  537. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  538. ΓöéGENINMRI.DLL             ΓöéContains the text used be GENIN.DLLΓöé
  539. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  540.  
  541. Note:  Before modifying any of these files, make sure you have a backup copy. 
  542.  
  543.  
  544. ΓòÉΓòÉΓòÉ 3.1.2. Step 1.  Creating an OS/2 Device Driver for an Audio Adapter ΓòÉΓòÉΓòÉ
  545.  
  546. For information on creating an OS/2 device driver, refer to Audio Physical 
  547. Device Driver Template. 
  548.  
  549.  
  550. ΓòÉΓòÉΓòÉ 3.1.3. Step 2.  Writing a Vendor-Specific Driver ΓòÉΓòÉΓòÉ
  551.  
  552. The vendor-specific driver (VSD) resource file describes your audio device to 
  553. MMPM/2. When audio services are requested, the Media Device Manager (MDM) 
  554. communicates with the amplifier-mixer (ampmix) device. Then, the ampmix device 
  555. is opened, and it loads the VSD resource DLL and transfers adapter information 
  556. into a memory buffer. If a user requests a particular mode (or audio setting), 
  557. the VSD looks up that mode to determine the device characteristics and reports 
  558. the specific information to the MDM. This process is shown in the following 
  559. illustration: 
  560.  
  561. You can reduce the amount of code required to add a device to MMPM/2 by using a 
  562. VSD resource file. This file enables you to supply only one DLL for all the 
  563. devices being added to MMPM/2. 
  564.  
  565. To add a new audio device to the MMPM/2 audio subsystem, you must supply a 
  566. device driver and a VSD resource file. Both are installed using the generic 
  567. audio installation program. For more information, see Audio Adapter 
  568. Installation. 
  569.  
  570. An example VSD resource file (SAMPLE.RC) is in the 
  571. \MMOS2\MMTOOLKT\SAMPLES\VSDRC subdirectory. When you use the generic audio 
  572. installation program, you must specify the following parameters in the audio 
  573. ampmixer's device-specific parameters: 
  574.  
  575.  RESOURCEDLL= 
  576.     Specifies the name of the DLL that contains the audio resource description. 
  577.     The resource example in the Toolkit contains a DLL named SAMPLE.DLL and 
  578.     creates the following line in the MMPM2.INI file: 
  579.  
  580.         RESOURCEDLL=SAMPLE
  581.  
  582.     Note:  Do not specify the .DLL extension. 
  583.  
  584.  RCID= 
  585.     Indicates which adapter in the VSD resource file is used for audio support. 
  586.     Resource DLLs can contain descriptions for multiple adapters. The sample 
  587.     resource file (\MMOS2\MMTOOLKT\SAMPLES\VSDRC\SAMPLE.RC) contains a 
  588.     description of two audio adapters, the ProAudio Spectrum (indicated by 
  589.     RCID=1) and the Sound Blaster Pro (indicated by RCID=2). 
  590.  
  591.  
  592. ΓòÉΓòÉΓòÉ 3.1.3.1. Resource File Layout ΓòÉΓòÉΓòÉ
  593.  
  594. The following is the format of the vendor-specific driver (VSD) resource file: 
  595.  
  596. BEGIN
  597. RCDATA  <Device Number>
  598. <Device Name>,
  599. <Device ID>, <Reserved1>,
  600. <Reserved2>,
  601. <Number of Datatype Rows>,
  602. <Datatype Row>
  603. END
  604.  
  605. The following list describes the VSD resource file format parameters: 
  606.  
  607.  RCDATA 
  608.     Indicates the beginning of the resource file for each audio adapter. For 
  609.     example, in the \MMOS2\MMTOOLKT\SAMPLES\VSDRC\SAMPLE.RC file, this 
  610.     parameter is (indicated in red): 
  611.  
  612.         RCDATA PAS_16
  613.  
  614.  Device Number 
  615.     Describes the offset in the resource file used to describe the device. This 
  616.     parameter is usually the name of the adapter. For example, in the 
  617.     \MMOS2\MMTOOLKT\SAMPLES\VSDRC\SAMPLE.RC file, this parameter for the Media 
  618.     Vision ProAudio Spectrum adapter is (indicated in red): 
  619.  
  620.         RCDATA PAS_16
  621.  
  622.     and for the Creative Labs Sound Blaster Pro adapter it is: 
  623.  
  624.         RCDATA SB_PRO
  625.  
  626.     Each device number in the resource file must be unique. These numbers are 
  627.     determined by the manufacturer. The defines for the device numbers that are 
  628.     valid in this field are in the SAMPLE.H file. 
  629.  
  630.     This field must be a ULONG. 
  631.  
  632.  Device Name 
  633.     Indicates the device name. This parameter must be the first item in the 
  634.     table because it is used by the amplifier-mixer to return product 
  635.     information. This string must be an ASCIIZ string. For example, in the 
  636.     SAMPLE.RC file, this parameter for the Media Vision ProAudio Spectrum 
  637.     adapter is: 
  638.  
  639.         "Media Vision Pro Audio Spectrum"
  640.  
  641.     and for the Creative Labs Sound Blaster Pro adapter it is: 
  642.  
  643.         "Creative Labs Sound Blaster Pro"
  644.  
  645.  Device ID 
  646.     Indicates which device the system is using. It is the same as the device ID 
  647.     returned from the AUDIO_INIT IOCtl. For example, in the SAMPLE.RC file, 
  648.     this parameter for the Media Vision ProAudio Spectrum adapter is (indicated 
  649.     in red): 
  650.  
  651.         PAS16, 0,
  652.  
  653.     and for the Creative Labs Sound Blaster Pro adapter it is (indicated in 
  654.     red): 
  655.  
  656.         SOUND_BLASTER, 0,
  657.  
  658.     This field must be a USHORT. 
  659.  
  660.     Note:  Because the Device ID in not explicitly defined to be a LONG, the 
  661.            resource compiler assumes this field is a USHORT. 
  662.  
  663.  Reserved1 
  664.     This parameter is reserved and should be set to 0. For example, in the 
  665.     SAMPLE.RC file, this parameter for the Media Vision ProAudio Spectrum 
  666.     adapter is (indicated in red): 
  667.  
  668.         PAS16, 0, 0,
  669.  
  670.     This field must be a USHORT. 
  671.  
  672.  Reserved2 
  673.     This parameter is reserved and should be set to 0. For example, in the 
  674.     SAMPLE.RC file, this parameter for the Media Vision ProAudio Spectrum 
  675.     adapter is (indicated in red): 
  676.  
  677.         PAS16, 0, 0,
  678.  
  679.     This field must be a USHORT. 
  680.  
  681.  Number of Data Type Rows 
  682.     Indicates the number of data type rows. A data type row is defined below. 
  683.  
  684.     Some parameters in the data type row can be duplicated, however, all rows 
  685.     must be unique.  For example, the Bits Per Sample parameter is repeated 
  686.     often, but the rows are unique. 
  687.  
  688.     In the SAMPLE.RC file, the Media Vision ProAudio Spectrum adapter has 17 
  689.     unique combinations of parameters such as Samples Per Second, Bits Per 
  690.     Sample, and Channels (these fields are described in the following 
  691.     parameters).  Therefore, the value of this field is: 
  692.  
  693.         17L
  694.  
  695.     and the Creative Labs Sound Blaster Pro adapter has 11 unique row 
  696.     descriptions.  Therefore, the value of this field is: 
  697.  
  698.         11L
  699.  
  700.     This field must be a ULONG. 
  701.  
  702.  Data type Row 
  703.     A data type row describes the specific capabilities of each of audio device 
  704.     and consists of a combination of the following parameters: 
  705.  
  706.    o  RIFF Data Type 
  707.    o  RIFF Data Subtype 
  708.    o  Samples per Second 
  709.    o  Bits per Sample 
  710.    o  Channels 
  711.    o  Sampling Descriptions 
  712.    o  Play Resource Class 
  713.    o  Play Resource Units Used 
  714.    o  Record Resource Class 
  715.    o  Record Resource Units Used 
  716.  
  717.       RIFF Data Type 
  718.          Indicates a RIFF defined data type indicated in OS2MEDEF.H. For 
  719.          example, in the SAMPLE.RC file, this parameter for the Media Vision 
  720.          ProAudio Spectrum adapter is (indicated in red): 
  721.  
  722.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  723.  
  724.          For additional information, see the OS/2 Multimedia Programming 
  725.          Reference. These are the same subtypes used in the streaming 
  726.          subsystem. 
  727.  
  728.          This field must be a ULONG. 
  729.  
  730.       RIFF Data Subtype 
  731.          Indicates the RIFF subtypes for a given data type. For example, in the 
  732.          SAMPLE.RC file, this parameter for the Media Vision ProAudio Spectrum 
  733.          adapter is (indicated in red): 
  734.  
  735.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  736.  
  737.          For additional information, see the OS/2 Multimedia Programming 
  738.          Reference. These are the same subtypes used in the streaming 
  739.          subsystem. 
  740.  
  741.       Samples Per Second 
  742.          Indicates the sampling rate supported in this RIFF data type. For 
  743.          example, in the SAMPLE.RC file, this parameter for the Media Vision 
  744.          ProAudio Spectrum adapter is (indicated in red): 
  745.  
  746.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  747.  
  748.          This field must be a USHORT. 
  749.  
  750.       Bits Per Sample 
  751.          Indicates the bits per sample supported in this RIFF data type. For 
  752.          example, in the SAMPLE.RC file, this parameter for the Media Vision 
  753.          ProAudio Spectrum adapter is (indicated in red): 
  754.  
  755.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  756.  
  757.          This field must be a USHORT. 
  758.  
  759.       Channels 
  760.          Indicates the channels supported in this RIFF data type. For example, 
  761.          in the SAMPLE.RC file, this parameter for the Media Vision ProAudio 
  762.          Spectrum adapter is (indicated in red): 
  763.  
  764.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  765.  
  766.          This field must be a USHORT. 
  767.  
  768.       Sampling Descriptions 
  769.          Describes the sampling rates. If the current data type row supports a 
  770.          specific sampling rate (for example, the device only supports one 
  771.          specific rate), the STATIC_RATE flag should be specified. For example, 
  772.          the M-Audio adapter can play only one specific sampling rate, so the 
  773.          STATIC_FLAG is specified (indicated in red): 
  774.  
  775.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16   8000,  16,  1, STATIC_RATE,      PCM_CLASS,  1, 0,         0,
  776.  
  777.          If a range of sampling rates are supported (for example, the device 
  778.          can play any rate between 2 kHz and 48 kHz), the lowest sampling rate 
  779.          in the range should contain the BEGIN_CONTINUOUS flag and highest 
  780.          sampling rate should be specified in one of the following rows with 
  781.          the END_CONTINUOUS flag. Intermediate sampling rates should also 
  782.          contain the BEGIN_CONTINUOUS flag. For example, in the SAMPLE.RC file, 
  783.          this parameter for the Media Vision ProAudio Spectrum adapter 
  784.          indicates support for rates between 2 kHz and 48 kHz (indicated in 
  785.          red): 
  786.  
  787.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  788.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_1M16,  11025, 16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  789.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_2M16,  22050, 16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  790.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_4M16,  48000, 16,  1, END_CONTINUOUS,   PCM_CLASS,  1, PCM_CLASS, 1,
  791.  
  792.          Notice that BEGIN_CONTINUOUS is used with the first sampling rate of 
  793.          2000 and that END_CONTINUOUS ends the sampling rate at 48000. For 
  794.          additional information, see the OS/2 Multimedia Subsystem Programming 
  795.          Guide. 
  796.  
  797.          This field must be a ULONG. 
  798.  
  799.       Play Resource Class 
  800.          Indicates the class for the data type defined in this row. For 
  801.          example, this parameter indicates that when a particular data type is 
  802.          defined, the data type falls under this particular class. This 
  803.          parameter matches a class defined for the amplifier-mixer (ampmix) 
  804.          device in the MMPM2.INI file and is determined by the manufacturer. 
  805.          For example, in the SAMPLE.RC file, this parameter for the Media 
  806.          Vision ProAudio Spectrum adapter is (indicated in red): 
  807.  
  808.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  809.  
  810.          This parameter is defined in the SAMPLE.H file. This field must be a 
  811.          USHORT. 
  812.  
  813.       Play Resource Units Used 
  814.          Indicates the number of resource units this RIFF data type (or class) 
  815.          consumes. For example, in the SAMPLE.RC file, this parameter for the 
  816.          Media Vision ProAudio Spectrum adapter is (indicated in red): 
  817.  
  818.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  819.  
  820.          The Media Vision ProAudio Spectrum adapter only supports one instance 
  821.          at a time playing PCM, so the total resources for the class is 1. 
  822.          When this parameter specifies 1 for the Data type row, MDM assures 
  823.          that not more than one instance plays PCM at any one time. For 
  824.          additional information, see the OS/2 Multimedia Subsystem Programming 
  825.          Guide. 
  826.  
  827.          This field must be a USHORT. 
  828.  
  829.       Record Resource Class 
  830.          Indicates the class for the RIFF data type in record mode. This 
  831.          parameter matches the class defined in the MMPM2.INI file and is 
  832.          determined by the manufacturer. If this value is nonzero, the 
  833.          amplifier-mixer assumes that recording is possible for this data type. 
  834.          For example, in the SAMPLE.RC file, this parameter for the Media 
  835.          Vision ProAudio Spectrum adapter is (indicated in red): 
  836.  
  837.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  838.  
  839.          If the class contains a zero, it is assumed that recording is not 
  840.          possible. For example, a device might not be able to record mono, PCM, 
  841.          44 kHz data.  Therefore, a 0 is entered in the record class (indicated 
  842.          in red): 
  843.  
  844.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16, 44000,   8,  1,   END_CONTINUOUS, PCM_CLASS,  1, 0,         1,
  845.  
  846.          This parameter also indicates that when a particular data type is 
  847.          defined, the data type falls under this particular class. The Media 
  848.          Vision ProAudio Spectrum adapter supports only one instance at a time 
  849.          when recording PCM, so the total resources for the class is 1.  When 
  850.          this parameter specifies 1 for the data type, MDM assures that the 
  851.          device does not exceed this number of units. 
  852.  
  853.          This field must be a USHORT. 
  854.  
  855.       Record Resource Units Used 
  856.          Indicates the number of resources this RIFF data type consumes in 
  857.          record mode (USHORT). For example, in the SAMPLE.RC file, this 
  858.          parameter for the Media Vision ProAudio Spectrum adapter is (indicated 
  859.          in red): 
  860.  
  861.                   DATATYPE_WAVEFORM,   WAVE_FORMAT_8M16,  2000,  16,  1, BEGIN_CONTINUOUS, PCM_CLASS,  1, PCM_CLASS, 1,
  862.  
  863.  
  864. ΓòÉΓòÉΓòÉ 3.1.4. Step 3.  Modifying the CARDINFO.RC File ΓòÉΓòÉΓòÉ
  865.  
  866. The CARDINFO.RC file is located in the \MMOS2\MMTOOLKT\SAMPLES\AUDINST 
  867. subdirectory. Modify this file so that it contains information relevant to your 
  868. audio adapter. MMPM/2 uses this information to interface with your adapter. 
  869.  
  870. Notes: 
  871.  
  872.    1. The lines in this file that contain RCDATA, BEGIN, and END identify the 
  873.       beginning and ending of specific pieces of data. Do not change these 
  874.       lines. 
  875.  
  876.    2. If more than one adapter is added, increment each RCDATA number by 10 for 
  877.       each additional adapter. For example, the first adapter uses RCDATA 10 
  878.       through RCDATA 19, the second adapter uses RCDATA 20 through RCDATA 29, 
  879.       and so forth. 
  880.  
  881.    3. If the audio adapter does not have a value corresponding to one of the 
  882.       CARDINFO.RC file parameters, use a null string "/0" in the parameter. 
  883.  
  884.  The CARDINFO.RC parameters are: 
  885.  
  886.  RCDATA 1 
  887.     Indicates the number of adapters described in this CARDINFO.RC file. In 
  888.     most cases, this is 1. To install more than one type of audio adapter, 
  889.     place that number in this parameter. 
  890.  
  891.     For example, in the CARDINFO.RC file, the ProAudio Spectrum adapter is: 
  892.  
  893.         RCDATA 1
  894.         BEGIN
  895.            "1"           /* Number of adapters in this rc file */
  896.         END
  897.  
  898.  RCDATA 10 
  899.     Contains two parameters, the ID number and the type of audio adapter. The 
  900.     ID number is used in the CONTROL.SCR file that you modify in Step 7. The ID 
  901.     number can be any number. However, it must match the ssdllinputparms 
  902.     keyword in the CONTROL.SCR file. For the type of adapter, use "audiovdd" if 
  903.     the adapter uses the IBM AUDIOVDD.SYS device driver. If the adapter does 
  904.     not use this driver, put "audio" in this field. 
  905.  
  906.     For example, in the CARDINFO.RC file, the ProAudio Spectrum 16 adapter is: 
  907.  
  908.         RCDATA 10
  909.         BEGIN
  910.            "26",            /* ID number of this adapter             */
  911.            "audiovdd"       /* Type of adapter - use audiovdd if     */
  912.                             /* you use the IBM audiovdd.sys driver   */
  913.         END
  914.  
  915.     For more information, see Audio Physical Device Driver Template. 
  916.  
  917.  RCDATA 11 
  918.     Contains parameters that indicate: 
  919.  
  920.    o  The maximum number of this type of audio adapter that can be installed at 
  921.       one time. The maximum is six adapters. 
  922.  
  923.    o  The name of the help file that describes the audio adapter. This name 
  924.       defaults to AUDHELP.HLP if the MAKEFILE provided to create the help file 
  925.       is used. 
  926.  
  927.    o  The name of the audio-adapter-specific DLL you wrote to perform functions 
  928.       not provided by this generic audio installation program.  This DLL is 
  929.       described in Step 4.  Creating an Audio Installation DLL. If you did not 
  930.       write a DLL, specify "\0". 
  931.  
  932.    o  The name of the audio-adapter-specific DLL entry point into the DLL in 
  933.       the previous field. If you did not write a DLL, specify "\0". 
  934.  
  935.    o  The number of CONFIG.SYS lines to add to the user's CONFIG.SYS file to 
  936.       support the audio adapter. The maximum is six lines. 
  937.  
  938.       Note:  Do not count the AUDIOVDD.SYS line. 
  939.  
  940.    o  The CONFIG.SYS line format of the lines added to the user's CONFIG.SYS 
  941.       file (except for the AUDIOVDD.SYS line).  Tokens in this line are 
  942.       replaced with the appropriate values at runtime. The following list 
  943.       describes the tokens and their data substitutions: 
  944.  
  945.            *PATH*    Indicates the path where MMPM/2 is installed (for example, 
  946.                      c:\MMOS2). 
  947.  
  948.            *ORD*     Indicates the device ordinal of this adapter. 
  949.  
  950.            *SEQ*     Indicates the sequential number of this adapter. For 
  951.                      example, if the user installs two IBM audio adapters, the 
  952.                      first will have a number of 1 and the second a number of 
  953.                      2. 
  954.  
  955.            *PDD*     Indicates the PDDName of this adapter. 
  956.  
  957.            *VAL*     Indicates the values that the user gives when prompted by 
  958.                      the installation program. You can have more than one of 
  959.                      these tokens if the user is asked for more than one item. 
  960.  
  961.                      Note:  Later in the CARDINFO.RC file, you specify which 
  962.                             questions the installation program should ask. 
  963.  
  964.            *SPEC*    Indicates special values passed from your adapter-specific 
  965.                      DLL. 
  966.  
  967.          For example, the line in the sample CARDINFO.RC file is: 
  968.  
  969.          "DEVICE=*PATH*\\MVPRODD.SYS /I*VAL* /D*VAL* /N:*PDD*" 
  970.  
  971.          After the real values are substituted, the CONFIG.SYS line is similar 
  972.          to: 
  973.  
  974.          DEVICE=C:\MMOS2\MVPRODD.SYS /I5 /D12 /N:PAS161$ 
  975.  
  976.    o  The number of drivers to install into the MMPM/2 system. For an audio 
  977.       adapter, this would normally be three because most audio adapters install 
  978.       a Waveform, Audio Sequencer, and Audio Ampmixer driver. The maximum is 
  979.       six drivers. 
  980.  
  981.    o  The name of the adapter as it is displayed to the user. 
  982.  
  983.    o  The version number of the device driver. 
  984.  
  985.    o  The physical device driver name (PDDName) used to identify the device 
  986.       driver. The sequential number of the adapter and a "$" is added to this 
  987.       name to form the final PDDName. For example, if the user installs two 
  988.       ProAudio Spectrum 16 adapters, the PDDNames are PAS161$ and PAS162$. 
  989.  
  990.    o  The name of the MCD command table used by the drivers. In most cases, 
  991.       this is the IBM MCD command table 'MDM'. 
  992.  
  993.    o  The name of the VSD command table used by the drivers. In most cases this 
  994.       is blank. 
  995.  
  996.     For example, in the CARDINFO.RC file, the ProAudio Spectrum 16 adapter is: 
  997.  
  998.         RCDATA 11
  999.         BEGIN
  1000.            "1",                        /* Max number of adapters (2 chars)           */
  1001.            "audhelp.HLP",              /* Helpfile name (19 chars)                   */
  1002.            "\0",                       /* Adapter specific dll name (19 chars)       */
  1003.            "\0",                       /* Adapter specific dll entry point (39 chars)*/
  1004.  
  1005.            /**** Data for CONFIG.SYS **/
  1006.            "1",                        /* Number of CONFIG.SYS lines (1 char)        */
  1007.            "DEVICE=*PATH*\\MVPRODD.SYS /I*VAL* /D*VAL* /N:*PDD*"
  1008.                                        /* CONFIG.SYS Line 1                          */
  1009.                                        /* (255 chars after token substitution)       */
  1010.  
  1011.            /**** Data for INI File ****/
  1012.            "3",                        /* Number of Drivers to Install (1 char)      */
  1013.            "Pro AudioSpectrum 16",     /* Product name (39 chars)                    */
  1014.            "1.0"                       /* Version of the adapter's software (5 chars)*/
  1015.            "PAS16",                    /* PDD Name  (6 chars)                        */
  1016.            "MDM",                      /* MCD table name (19 chars)                  */
  1017.            "\0"                        /* VSD table name (19 chars)                  */
  1018.         END
  1019.  
  1020.  RCDATA 12 
  1021.     This group of parameters is repeated for each driver you want to install. 
  1022.     The repeated groups start with RCDATA 13, RCDATA 14, and so forth.) These 
  1023.     parameters indicate: 
  1024.  
  1025.    o  The InstallName of this driver. This must be a unique name. Consider 
  1026.       using a name that is a combination of a company name, device type, and 
  1027.       device model. The sequential number of this adapter is added to the name 
  1028.       (for example, IBMWAVEPAS1601). 
  1029.  
  1030.    o  The device type encoding. These codes are defined in the MCIOS2.H file 
  1031.       located in the \MMOS2\MMTOOLKT\H subdirectory. 
  1032.  
  1033.    o  The numeric device flag of this driver. Specifies the LONG INT with the 
  1034.       flags set.  This determines whether or not the device is controllable. 
  1035.       The device flags are defined in the MCIOS2.H file located in the 
  1036.       \MMOS2\MMTOOLKT\H subdirectory. 
  1037.  
  1038.    o  The name of the media control driver (MCD) used by this driver. In most 
  1039.       cases, this is the IBM MCD "AUDIOMCD." 
  1040.  
  1041.    o  The name of the vendor-specific driver (VSD) used by this driver. In most 
  1042.       cases, this is the IBM VSD "AUDIOIF." 
  1043.  
  1044.    o  The numeric share type. Specifies an encoding of the valid types of 
  1045.       sharing supported. These codes are defined in the MMDRVOS2.H file located 
  1046.       in the \MMOS2\MMTOOLKT\H subdirectory. 
  1047.  
  1048.    o  The name to be given to this driver's resources. Specifies a unique name 
  1049.       for the management of the driver resources. The sequential number of the 
  1050.       adapter is added to this name so that resources of different drivers are 
  1051.       not mixed. If you have more than one driver, be sure to use a different 
  1052.       resource name for each driver. For more information, see Resource Units 
  1053.       and Classes. 
  1054.  
  1055.    o  The number of resource units supported by this driver. For more 
  1056.       information, see Resource Units and Classes. 
  1057.  
  1058.    o  The number of resource classes supported by this driver. The maximum is 
  1059.       nine resource classes. These classes are listed in the next field. For 
  1060.       more information, see Resource Units and Classes. 
  1061.  
  1062.    o  The resource classes. For more information, see Resource Units and 
  1063.       Classes. 
  1064.  
  1065.    o  The number of valid combinations of resource classes. The maximum is 81 
  1066.       combinations. For more information, see Resource Units and Classes. 
  1067.  
  1068.    o  The valid resource class combinations. Resource class combinations are 
  1069.       always listed in pairs. For example, if a class 1 can combine with a 
  1070.       class 2, then class 2 can combine with class 1. 
  1071.  
  1072.       For more information, see Resource Units and Classes. 
  1073.  
  1074.    o  The number of connectors. These are listed in the next field. The maximum 
  1075.       is 10 connectors. Each implementation of a media driver defines the paths 
  1076.       of information flow into and out of the device.  These paths are known as 
  1077.       connectors.  Connectors have defined connector types, and each connector 
  1078.       type has an associated connector-type name. 
  1079.  
  1080.    o  The connectors. Each connector has three values: 
  1081.  
  1082.         -  Numeric type of connector. Connection types are defined in the 
  1083.            MCIOS2.H file located in the \MMOS2\MMTOOLKT\H subdirectory. 
  1084.  
  1085.         -  InstallName of the driver to which it connects. If left blank, a 
  1086.            default connector is used. 
  1087.  
  1088.         -  Sequential number of the connector to which it connects. The sample 
  1089.          CARDINFO.RC file uses: 
  1090.  
  1091.          "3","IBMAMPMIXPAS16","1" 
  1092.  
  1093.          where: 
  1094.  
  1095.            3 
  1096.               Indicates the wave stream connector. 
  1097.  
  1098.            "IBMAMPMIXPAS16" 
  1099.               Indicates the amplifier-mixer device. 
  1100.  
  1101.            1 
  1102.               Indicates the first connector of the amplifier-mixer device. 
  1103.  
  1104.    o  The number of file-name extensions associated with this driver. When an 
  1105.       element name is specified as the device name on an MCI_OPEN message and 
  1106.       no device type is specified, the device type is identified by the file 
  1107.       extension.  For example, if the .WAV extension is associated with an 
  1108.       internal driver name, that driver will be used if a file ending in .WAV 
  1109.       is opened. 
  1110.  
  1111.    o  The file-name extensions associated with this driver. 
  1112.  
  1113.    o  The extended attribute associated with this driver. When an element name 
  1114.       is specified as the device name on an MCI_OPEN message and no device type 
  1115.       is specified, the device type is identified by the file's extended 
  1116.       attribute.  For example, if the "Digital Audio" extended attribute is 
  1117.       associated with an internal driver name, that driver will be used if a 
  1118.       file with an extended attribute of "Digital Audio" is opened. 
  1119.  
  1120.    o  The AliasName given to the driver. The device ordinal is added to this 
  1121.       name if the ordinal is greater than 1. For example, the second Waveform 
  1122.       Audio driver would be given an AliasName of Digital Audio 2. 
  1123.  
  1124.    o  Any device specific parameters. For the Waveform Audio driver, the 
  1125.       following parameters set up the initial state of the adapter, and should 
  1126.       be listed: 
  1127.  
  1128.            FORMAT= RIFF Datatype 
  1129.               The RIFF Datatype is a format tab defined in 
  1130.               \MMOS2\MMTOOLKT\H\OS2MEDEF.H. 
  1131.  
  1132.            SAMPRATE= 
  1133.               Indicates the sample rate. 
  1134.  
  1135.            BPS= 
  1136.               Indicates the bits per second. 
  1137.  
  1138.            CHANNEL= 
  1139.               Indicates mono (1) or stereo (2). 
  1140.  
  1141.            DIRECTION= 
  1142.               Indicates PLAY or RECORD. 
  1143.  
  1144.          For the Audio AmpMixer driver, the following parameters set up the 
  1145.          initial state of the adapter, and should be listed. 
  1146.  
  1147.            TREBLE= 
  1148.               Indicates the treble setting.  Valid values are from 0 to 100. 
  1149.               This parameter should usually match the sample CARDINFO.RC file. 
  1150.  
  1151.            BASS= 
  1152.               Indicates the bass setting.  Valid values are from 0 to 100. 
  1153.               This parameter should usually match the sample CARDINFO.RC file. 
  1154.  
  1155.            PITCH= 
  1156.               Indicates the pitch setting.  Valid values are from 0 to 100. 
  1157.               This parameter should usually match the sample CARDINFO.RC file. 
  1158.  
  1159.            GAIN= 
  1160.               Indicates the increase in level of output over the level of input 
  1161.               setting.  Valid values are from 0 to 100.  This parameter should 
  1162.               usually match the sample CARDINFO.RC file. 
  1163.  
  1164.            BALANCE= 
  1165.               Indicates the BALANCE setting.  Valid values are from 0 to 100. 
  1166.               This parameter should usually match the sample CARDINFO.RC file. 
  1167.  
  1168.            VOL= 
  1169.               Indicates the volume setting.  Valid values are from 0 to 100. 
  1170.               This parameter should usually match the sample CARDINFO.RC file. 
  1171.  
  1172.            INPUT= 
  1173.               Specifies LINE or MIC. 
  1174.  
  1175.            OUTPUT= 
  1176.               Specifies SPEAKERS or HEADPHONES. 
  1177.  
  1178.            RESOURCEDLL= 
  1179.               Specifies the name of the vendor-specific driver resource DLL 
  1180.               that you create.  For more information, see Step 2.  Writing a 
  1181.               Vendor-Specific Driver. 
  1182.  
  1183.            RCID 
  1184.               Specifies the resource ID in the vendor-specific driver resource 
  1185.               DLL that you create. For more information, see Step 2.  Writing a 
  1186.               Vendor-Specific Driver. For the Sequencer driver, the following 
  1187.               parameters are listed: 
  1188.  
  1189.                 CHANNELS= 
  1190.                    This parameter is followed by 16 1s or 0s to represent 
  1191.                    whether the sequencer's channels default to on (1) or off 
  1192.                    (0). 
  1193.  
  1194.                 MIDITYPE= 
  1195.                    This parameter is followed by "General MIDI" if your adapter 
  1196.                    uses the General MIDI specification.  If your adapter does 
  1197.                    not use General MIDI, you create a MIDI Map Table as 
  1198.                    specified in Step 9.  Creating a MIDI Map. In this case, the 
  1199.                    parameter is followed by the adapter name.  This name must 
  1200.                    be the same name used for "keyname" in the MIDIMAP.SCR file 
  1201.                    in Step 9.  Creating a MIDI Map. 
  1202.  
  1203.     For example, in the CARDINFO.RC file, the ProAudio Spectrum 16 adapter is: 
  1204.  
  1205.         RCDATA 12
  1206.         BEGIN
  1207.            /**** WAVEAUDIO Driver ****/
  1208.            "IBMWAVEPAS16"              /* Installname (17 chars)                     */
  1209.            "7",                        /* Device type (3 chars)                      */
  1210.            "1",                        /* Device flag (3 chars)                      */
  1211.            "AUDIOMCD",                 /* MCD driver name (19 chars)                 */
  1212.            "AUDIOIF",                  /* VSD driver name (19 chars)                 */
  1213.            "3",                        /* Share Type (3 chars)                       */
  1214.            "ProAudioSpecW",            /* Resource name (17 chars)                   */
  1215.            "1",                        /* # of Resource units (2 chars)              */
  1216.            "1",                        /* # of Resource classes (2 chars)            */
  1217.            "1",                        /* Resource classes (2 char each)             */
  1218.            "0",                        /* # Valid resource class combos (2 chars)    */
  1219.                                        /* Valid resource class combos (2 chars each) */
  1220.            "1",                        /* # of connectors (2 chars)                  */
  1221.            "3","IBMAMPMIXPAS16","1",   /* Connectors (2 chars), (17 chars), (2 chars)*/
  1222.            "1",                        /* # of extensions (2 chars)                  */
  1223.            "WAV",                      /* Extension names (3 chars each)             */
  1224.            "Digital Audio",            /* Extended attribute (255 chars)             */
  1225.            "Digital Audio",            /* Alias Name (17 chars)                      */
  1226.            "FORMAT=1,SAMPRATE=22050,BPS=16,CHANNELS=1,DIRECTION=PLAY"
  1227.                                        /* Device Specific Parameters (255 chars)     */
  1228.         END
  1229.  
  1230.  RCDATA 19 
  1231.     This group of parameters indicates: 
  1232.  
  1233.    o  The number of prompts that should be presented to the user. This number 
  1234.       is used to gather configuration-specific information about the adapter. 
  1235.       The maximum is 10 prompts. 
  1236.  
  1237.    o  The title of the prompt text as it is displayed to the user. 
  1238.  
  1239.    o  The number of valid answers to the prompt. The maximum is 25 answers. You 
  1240.       supply the valid answers in the next field. 
  1241.  
  1242.    o  The valid answers to your prompt.  These answers are displayed to the 
  1243.       user.  The user can select one. 
  1244.  
  1245.    o  The values that are put in your CONFIG.SYS line.  These values replace 
  1246.       the *VAL* tokens that you placed in your CONFIG.SYS line format 
  1247.       previously in this CARDINFO.RC file.  These values correspond to the 
  1248.       valid answers in the previous field.  For example, if the user selects 
  1249.       answer number three from the list of valid answers, then value number 
  1250.       three is placed into your CONFIG.SYS line.  This allows you to ask the 
  1251.       user questions in a user-friendly fashion and then place a more cryptic 
  1252.       value in the CONFIG.SYS line. 
  1253.  
  1254.       For example, if you want to ask the user which song to play, you can use 
  1255.       the following prompt: 
  1256.  
  1257.             Song to play on startup?
  1258.  
  1259.       You can present the following choices to the user: 
  1260.  
  1261.             Happy Birthday
  1262.             Beethoven's Fifth
  1263.             Joy to the World
  1264.  
  1265.       The values put into the CONFIG.SYS line could be "birthday.wav", 
  1266.       "beet_5.wav", or "joyworld.wav". 
  1267.  
  1268.    o  The default answer to the prompt.  This is an index into the list of 
  1269.       valid answers.  For example, if the second answer is the default, specify 
  1270.       "2". For an example of how to specify the RCDATA 19 parameters for this 
  1271.       example, see Songs Example. 
  1272.  
  1273.     For example, in the CARDINFO.RC file, the ProAudio Spectrum 16 adapter is: 
  1274.  
  1275.         RCDATA 19
  1276.         BEGIN
  1277.            // Prompts for the User
  1278.            "2",                        /* Number of prompts to ask user (2 chars)    */
  1279.                                        /* (max 10 prompts)                           */
  1280.            // Prompt 1
  1281.            "DMA Channel",              /* Title of Prompt (max 50 chars)             */
  1282.            "7",                        /* # of valid values (2 chars)                */
  1283.            "0","1","2","3",            /* Valid values  (20 chars each)              */
  1284.            "5","6","7",
  1285.            "0","1","2","3",            /* Corresponding config.sys values            */
  1286.            "5","6","7",                /* (20 chars each)                            */
  1287.  
  1288.            "4",                        /* Default value - Index into valid values    */
  1289.                                        /* (2 chars)                                  */
  1290.  
  1291.            // Prompt 2
  1292.            "Interrupt Level",          /* Title of Prompt (max 50 chars)             */
  1293.            "8",                        /* # of valid values (2 chars)                */
  1294.            "Interrupt 2",              /* Valid values (20 chars each)               */
  1295.            "Interrupt 3",
  1296.            "Interrupt 5",
  1297.            "Interrupt 7",
  1298.            "Interrupt 10",
  1299.            "Interrupt 11",
  1300.            "Interrupt 12",
  1301.            "Interrupt 15",
  1302.  
  1303.            "2",                        /* Corresponding config.sys values            */
  1304.            "3",                        /* (20 chars each)                            */
  1305.            "5",
  1306.            "7",
  1307.            "10",
  1308.            "11",
  1309.            "12",
  1310.            "15",
  1311.  
  1312.            "6"                         /* Default value - Index into valid values    */
  1313.                                        /* (2 chars)                                  */
  1314.         END
  1315.  
  1316.  
  1317. ΓòÉΓòÉΓòÉ 3.1.4.1. Songs Example ΓòÉΓòÉΓòÉ
  1318.  
  1319. The following is an example of how to specify RCDATA 19 parameters to ask a 
  1320. user what song to play: 
  1321.  
  1322. RCDATA 19
  1323. BEGIN
  1324.    // Prompts for the User
  1325.    "1",                        /* Number of prompts to ask user (2 chars)    */
  1326.                                /* (max 10 prompts).                          */
  1327.    // Prompt 1
  1328.    "Song to play on startup?", /* Title of prompt (max 50 chars).            */
  1329.    "3",                        /* Number of valid values (2 chars).          */
  1330.    "Happy Birthday"            /* Valid values  (20 chars each).             */
  1331.    "Beethoven's Fifth"
  1332.    "Joy to the World"
  1333.  
  1334.    "birthday.wav"              /* Corresponding CONFIG.SYS values            */
  1335.    "beet_5.wav"                /* (20 chars each)                            */
  1336.    "joyworld.wav"
  1337.  
  1338.    "2",                        /* Default value - Index into valid values    */
  1339.                                /* (2 chars)                                  */
  1340.  
  1341. END
  1342.  
  1343.  
  1344. ΓòÉΓòÉΓòÉ 3.1.5. Step 4.  Creating an Audio Installation DLL ΓòÉΓòÉΓòÉ
  1345.  
  1346. In some cases, you might want to perform some action that is specific to your 
  1347. adapter, and thus not provided by this generic audio installation program. For 
  1348. example, you might want to query the user's hardware setup to determine values, 
  1349. such as interrupt level, rather than prompting the user for those values. In 
  1350. this case, you can create your own DLL to perform these functions. 
  1351.  
  1352. The audio installation program calls your DLL and allows it to return values 
  1353. that can be added to your lines in the CONFIG.SYS file. The following steps 
  1354. describe how to use your DLL: 
  1355.  
  1356.    1. Write and compile the DLL. 
  1357.  
  1358.       The entry point to your DLL must accept the following parameters: 
  1359.  
  1360.             CardSpecDLLEntry (USHORT usCardNum,
  1361.                               CHAR   achSpec[259])
  1362.  
  1363.       where: 
  1364.  
  1365.            usCardNum 
  1366.               Is the sequential number of this adapter. 
  1367.  
  1368.               For example, if the user chooses to install two of these 
  1369.               adapters, the DLL is called twice. The first time the DLL is 
  1370.               called, usCardNum is 1, and the second time the DLL is called, 
  1371.               usCardNum is 2. 
  1372.  
  1373.            achSpec[5][259] 
  1374.               Is a two dimensional array that can hold up to five strings of 
  1375.               259 characters each. Your DLL can put values into these five 
  1376.               strings. The audio installation program then puts these strings 
  1377.               into lines in the CONFIG.SYS file as specified in CARDINFO.RC. If 
  1378.               there is more than one of these values, they are put into the 
  1379.               CONFIG.SYS in sequential order. For example, your DLL fills in 
  1380.               the following values: 
  1381.  
  1382.                             achSpec[0]="rec"
  1383.                             achSpec[1]="3"
  1384.                             achSpec[2]="11"
  1385.                             achSpec[3]=""
  1386.                             achSpec[4]=""
  1387.  
  1388.           The format of your CONFIG.SYS line in CARDINFO.RC is: 
  1389.  
  1390.                     "DEVICE=*PATH*\\MVPRODD.SYS *SPEC* *SPEC* *SPEC*"
  1391.  
  1392.           The line that is put into CONFIG.SYS is: 
  1393.  
  1394.                     DEVICE=D:\MMOS2\MVPRODD.SYS rec 3 11
  1395.  
  1396.    2. Put the name of the DLL and the name of the DLL's entry point into 
  1397.       CARDINFO.RC. 
  1398.  
  1399.  
  1400. ΓòÉΓòÉΓòÉ 3.1.6. Step 5.  Modifying the AUDHELP.ITL File ΓòÉΓòÉΓòÉ
  1401.  
  1402. AUDHELP.ITL is a help file that gives information to the user when the user 
  1403. installs the audio adapter. Use this file to describe any prompts that ask the 
  1404. user for information. Be careful when modifying this file because the basic 
  1405. format of the file must remain the same for the help to work correctly. If you 
  1406. do not prompt the user for any information, then modify only the first section 
  1407. of the file that explains to the user how many adapters can be installed. 
  1408.  
  1409.  
  1410. ΓòÉΓòÉΓòÉ 3.1.7. Step 6.  Running the MAKEFILE ΓòÉΓòÉΓòÉ
  1411.  
  1412. The MAKEFILE compiles CARDINFO.RC into a resource DLL called CARDINFO.DLL. It 
  1413. also compiles AUDHELP.ITL into a help file called AUDHELP.HLP. 
  1414.  
  1415.  
  1416. ΓòÉΓòÉΓòÉ 3.1.8. Step 7.  Modifying the CONTROL.SCR File ΓòÉΓòÉΓòÉ
  1417.  
  1418. You must modify the CONTROL.SCR file so that it contains information relevant 
  1419. to your adapter. This file is the main control file used by MINSTALL, MMPM/2's 
  1420. installation program. CONTROL.SCR tells MINSTALL what subsystems and devices 
  1421. that the user can install. 
  1422.  
  1423. Modify the following fields in the Audio Adapter Group: 
  1424.  
  1425. Note:  Do not change the fields not listed here. 
  1426.  
  1427.  ssgroup 
  1428.     Specifies the audio adapter group number. The only reason you might need to 
  1429.     change this number is if you are installing more than one type of adapter. 
  1430.     If you install more than one type of adapter, you must duplicate the entire 
  1431.     audio adapter group and change the group number on the second group. If you 
  1432.     add one or more groups, you must increment the group count at the top of 
  1433.     this file. 
  1434.  
  1435.  ssname 
  1436.     Specifies the audio adapter's name. 
  1437.  
  1438.  ssversion 
  1439.     Specifies the version number of the device driver. 
  1440.  
  1441.  sssize 
  1442.     Specifies the total size (in KB) of the device drivers, the AUDHELP.HLP 
  1443.     help file, GENIN.DLL, GENINMRI.DLL, and any other files you install. 
  1444.  
  1445.  ssdllinputparms 
  1446.     Matches the ID number used in CARDINFO.RC. 
  1447.  
  1448.     Specifies the MIDI map table. Uncomment this line if you create a MIDI map 
  1449.     in Step 9. 
  1450.  
  1451.  
  1452. ΓòÉΓòÉΓòÉ 3.1.9. Step 8.  Modifying the AUDFILES.SCR File ΓòÉΓòÉΓòÉ
  1453.  
  1454. Modify the AUDFILES.SCR file so that it lists all the files your adapter uses. 
  1455. AUDFILES.SCR tells MINSTALL which files need to be copied, and into which 
  1456. subdirectories those files should be copied. 
  1457.  
  1458. After changing the list of files in AUDFILES.SCR, change the "Total Number of 
  1459. Files to Copy" in AUDFILES.SCR to match the number of files you have listed. 
  1460.  
  1461.  
  1462. ΓòÉΓòÉΓòÉ 3.1.10. Step 9.  Creating a MIDI Map ΓòÉΓòÉΓòÉ
  1463.  
  1464. If the audio adapter uses the General MIDI specification, this step is not 
  1465. necessary.  When MMPM/2 plays a MIDI file, it maps the patch assignments 
  1466. according to the General MIDI specification. If the audio adapter uses a patch 
  1467. assignment other than General MIDI, you must create a MIDI map table to tell 
  1468. MMPM/2 how to map the patches. 
  1469.  
  1470. The following steps describe how to create a MIDI map: 
  1471.  
  1472.    1. Modify the MIDIMAP.RC file to hold the MIDI map table. 
  1473.  
  1474.       The MIDIMAP.RC file holds a sample MIDI map table.  Modify this table to 
  1475.       describe the adapter.  The data in MIDIMAP.RC is defined by the MIDITYPE 
  1476.       structure.  This structure is defined in the MIDITYPE.H file. 
  1477.  
  1478.             typedef struct {
  1479.               USHORT uGenMidiPatchNumber; /* Device To General MIDI Conversion */
  1480.               USHORT uDevMidiPatchNumber; /* General MIDI to Device Conversion */
  1481.               USHORT uVolumePercent;      /* Channel Patch Volume Scaler */
  1482.               USHORT uGenMidiKeyNumber;   /* Device To General MIDI Key Conversion */
  1483.               USHORT uDevMidiKeyNumber;   /* General MIDI to Device Key Conversion */
  1484.             } MIDITYPEENTRY;
  1485.             typedef MIDITYPEENTRY FAR * PMIDITYPEENTRY;
  1486.  
  1487.             typedef struct {
  1488.                USHORT     uStyle;           /* MIDI Mapping Style */
  1489.                USHORT     uDrums10;         /* Patch for Percussion Channel 10 */
  1490.                USHORT     uDrums16;         /* Patch for Percussion Channel 16 */
  1491.                ULONG      ulReserved;       /* Reserved */
  1492.                MIDITYPEENTRY MidiTypeEntry[128];   /* Array of MIDITYPEENTRYs  */
  1493.                CHAR       szPatchAndPercKeyName[2*128*40];
  1494.                                             /* List of 128 Patch Names */
  1495.                                             /* that are null terminated, then a */
  1496.                                             /* list of 128 Percussion key names */
  1497.                                             /* that are double null terminated  */
  1498.                                             /* Each item is null terminated     */
  1499.             } MIDITYPE;
  1500.             typedef MIDITYPE FAR * PMIDITYPE;
  1501.  
  1502.       The uStyle field specifies flags that indicate the type of mapping that 
  1503.       is required in order to translate from general MIDI to a specific device. 
  1504.  
  1505.       The MT_PERCUSSIONKEYS flag indicates that the device supports percussion 
  1506.       keys and that the percussion keys will be translated according to the key 
  1507.       conversion tables.  If percussion keys are not supported by the MIDI 
  1508.       device and MT_MAPPERCKEYPATCHES is specified, then patches on percussion 
  1509.       channels will be mapped to the patch indicated in uDrums10 or uDrums16. 
  1510.       This will enable the mapper to map patch changes on a percussion channel 
  1511.       to a drum patch. Individual percussion sounds cannot be mapped but a 
  1512.       percussive sound will be heard. 
  1513.  
  1514.       Included in the MIDITYPE data structure is an array of MIDITYPEENTRY 
  1515.       structures.  This structure includes information for mapping patches and 
  1516.       percussion keys between general MIDI and the particular MIDI device. 
  1517.  
  1518.            uGenMidiPatchNumber 
  1519.               Describes the mapping of the nth Patch number from the devices 
  1520.               patch assignments to general MIDI patch assignments. 
  1521.  
  1522.            uDevMidiPatchNumber 
  1523.               Describes the mapping of the nth patch number from the general 
  1524.               MIDI patch assignments of the device. 
  1525.  
  1526.            uRelativeVolume 
  1527.               Describes the relative volume of the nth patch when mapping from 
  1528.               general MIDI to the specified MIDI device. 
  1529.  
  1530.            uGenMidiKeyNumber 
  1531.               Describes the mapping of the nth percussion key number from the 
  1532.               devices percussion key assignments to general MIDI percussion key 
  1533.               assignments. 
  1534.  
  1535.            uDevMidiKeyNumber 
  1536.               Describes the mapping of the nth percussion key number from 
  1537.               general MIDI percussion key assignments to the devices percussion 
  1538.               key assignments. 
  1539.  
  1540.            szPatchAndPercKeyName 
  1541.               Lists patch names for each of 128 patches for this MIDI device. 
  1542.               Each name is null terminated and the list is double-null 
  1543.               terminated. Following the list of patch names is the list of 
  1544.               percussion key names for each of 128 keys. These names can 
  1545.               eventually be used in a user interface. 
  1546.  
  1547.    2. Modify the MAKEFILE to build the MIDIMAP.RC file into a resource file. 
  1548.  
  1549.       At the end of the MAKEFILE, there is a group of commands that are 
  1550.       commented out. These are the commands that build MIDIMAP.RC into 
  1551.       MIDIMAP.DLL. Take the comment character (#) off the beginning of each of 
  1552.       these lines. 
  1553.  
  1554.       Also in the MAKEFILE are two lines that begin with the word "all." These 
  1555.       should be near the 83rd line. Take the comment character (#) off the 
  1556.       beginning of the second line and add a comment character (#) to the 
  1557.       beginning of the first line. These lines tell the MAKEFILE which targets 
  1558.       to build. 
  1559.  
  1560.    3. Run the MAKEFILE to create the MIDIMAP.DLL resource file. 
  1561.  
  1562.    4. Modify the .INI change file called MIDIMAP.SCR. 
  1563.  
  1564.       In MIDIMAP.SCR, change the keyname from "Your Adapter" to the name of the 
  1565.       adapter. This file tells the installation program to install the MIDI map 
  1566.       table contained in MIDIMAP.DLL into MMPM/2's MIDITYPE.INI file. 
  1567.  
  1568.    5. Modify the CARDINFO.RC file to name your MIDI map. 
  1569.  
  1570.       In the device-specific parameters field for the Sequencer driver, there 
  1571.       is a parameter called MIDITYPE. Set this parameter to the same name used 
  1572.       in the MIDIMAP.SCR file in Step 5. For example, you could use 
  1573.       MIDITYPE=Your Adapter. 
  1574.  
  1575.       Note:  Make sure that you use the exact spelling (including 
  1576.              capitalization) as in MIDIMAP.SCR. 
  1577.  
  1578.    6. Modify CONTROL.SCR so that it calls MIDIMAP.SCR. 
  1579.  
  1580.       The last line of the CONTROL.SCR file contains a line that is commented 
  1581.       out. Take the comment characters (/* */) off of this line. This removal 
  1582.       causes the installation program to run MIDIMAP.SCR during installation. 
  1583.  
  1584.    7. Modify AUDFILES.SCR to add the MIDIMAP.DLL file. 
  1585.  
  1586.       In the AUDFILES.SCR file, the last file listed is MIDIMAP.DLL. This file 
  1587.       is commented out. Remove the comment characters (/*) at the beginning of 
  1588.       the line so that your MIDI map file is copied. Increment the number of 
  1589.       files at the top of AUDFILES.SCR. 
  1590.  
  1591.  
  1592. ΓòÉΓòÉΓòÉ 3.1.11. Step 10.  Creating the Installation Diskette ΓòÉΓòÉΓòÉ
  1593.  
  1594. Create a diskette that contains the following files: 
  1595.  
  1596.    o  CONTROL.SCR 
  1597.    o  AUDFILES.SCR 
  1598.    o  MIDIMAP.SCR (if you created one) 
  1599.    o  MIDIMAP.DLL (if you created one) 
  1600.    o  CARDINFO.DLL 
  1601.    o  AUDHELP.HLP 
  1602.    o  GENIN.DLL 
  1603.    o  GENINMRI.DLL 
  1604.    o  Your device drivers 
  1605.  
  1606.  
  1607. ΓòÉΓòÉΓòÉ 3.1.12. Step 11.  Using MINSTALL to Install Your Adapter ΓòÉΓòÉΓòÉ
  1608.  
  1609. You can test your installation diskette before sending it to your customers by 
  1610. running MINSTALL. 
  1611.  
  1612. Before installing the audio adapter, the base MMPM/2 that comes with OS/2 2.1 
  1613. (or later) must be installed. 
  1614.  
  1615. After installing the base MMPM/2, you can install your adapter. The following 
  1616. steps describe how to use MINSTALL: 
  1617.  
  1618.    1. Place the installation diskette in drive A. 
  1619.    2. Type MINSTALL on the OS/2 command line. 
  1620.    3. Change the source drive to A. 
  1621.    4. Select the adapter. 
  1622.    5. If errors occur, check the MINSTALL.LOG file in the \MMOS2\INSTALL 
  1623.       subdirectory for error messages. 
  1624.  
  1625.  
  1626. ΓòÉΓòÉΓòÉ 3.2. Video Adapter Installation ΓòÉΓòÉΓòÉ
  1627.  
  1628. MMPM/2 allows installation of device drivers developed for video adapters into 
  1629. the MMPM/2 video subsystem using a generic video installation program. 
  1630.  
  1631. This DDK provides a generic video installation program that performs the 
  1632. following functions: 
  1633.  
  1634.    o  Asks the user for any information needed to install your adapter, such as 
  1635.       the interrupt level. 
  1636.  
  1637.    o  Updates the CONFIG.SYS file with your DEVICE= statements and any other 
  1638.       necessary statements. 
  1639.  
  1640.    o  Updates the MMPM2.INI file so that MMPM/2 recognizes your device driver. 
  1641.  
  1642.    o  Copies the files needed by your adapter, such as device drivers. 
  1643.  
  1644.  The following steps provide an overview of how to install a device driver into 
  1645.  the MMPM/2 video subsystem so that it can be used by the Digital Video 
  1646.  Recorder to record software motion video. The \MMOS2\MMTOOLKT\SAMPLES\VIDINST 
  1647.  subdirectory provides the generic video installation sample files. For more 
  1648.  information about the VIDINST files, see Source Code. 
  1649.  
  1650.  
  1651. ΓòÉΓòÉΓòÉ 3.2.1. Source Code ΓòÉΓòÉΓòÉ
  1652.  
  1653. The \MMOS2\MMTOOLKT\SAMPLES\VIDINST subdirectory provides the installation 
  1654. sample files for a video device driver. These sample files illustrate how to 
  1655. install a video device driver into the MMPM/2 video subsystem. The sample files 
  1656. include: 
  1657.  
  1658. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1659. ΓöéSample File              ΓöéDescription                        Γöé
  1660. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1661. ΓöéMAKEFILE                 ΓöéCreates the resource DLL containingΓöé
  1662. Γöé                         Γöéthe video adapter information by   Γöé
  1663. Γöé                         Γöécompiling the CARDINFO.RC file intoΓöé
  1664. Γöé                         Γöéthe CARDINFO.DLL file. This file   Γöé
  1665. Γöé                         Γöéalso compiles the VIDHELP.ITL file Γöé
  1666. Γöé                         Γöéinto the VIDHELP.HLP help file.    Γöé
  1667. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1668. ΓöéCARDINFO.RC              ΓöéSupplies information about the     Γöé
  1669. Γöé                         Γöévideo adapter.                     Γöé
  1670. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1671. ΓöéRCSTUB.C                 ΓöéStub 'C' file for compiling        Γöé
  1672. Γöé                         ΓöéCARDINFO.RC.                       Γöé
  1673. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1674. ΓöéVIDHELP.ITL              ΓöéContains the help information.     Γöé
  1675. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1676. ΓöéCONTROL.SCR              ΓöéContains the control information   Γöé
  1677. Γöé                         Γöéused by MINSTALL to install the    Γöé
  1678. Γöé                         Γöévideo adapter.                     Γöé
  1679. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1680. ΓöéVIDFILES.SCR             ΓöéLists the files to be copied by    Γöé
  1681. Γöé                         ΓöéMINSTALL.  MINSTALL also copies    Γöé
  1682. Γöé                         Γöéthis file.                         Γöé
  1683. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1684.  
  1685. Note:  Before modifying any of these files, make sure you have a backup copy. 
  1686.  
  1687.  More detailed information about each step is provided in the following 
  1688.  sections. The steps must be performed in the order listed. 
  1689.  
  1690.  To add a video capture adapter to the MMPM/2 video subsystem, follow these 
  1691.  steps: 
  1692.  
  1693.    1. Create an OS/2 device driver for the video capture adapter. 
  1694.  
  1695.       For information on creating an OS/2 device driver, refer to the OS/2 
  1696.       Physical Device Driver Reference. 
  1697.  
  1698.    2. Modify the CARDINFO.RC file. 
  1699.  
  1700.       This file contains specific information about the adapter. MMPM/2 uses 
  1701.       this information to interface with the adapter. 
  1702.  
  1703.       For more information, see Step 2.  Modifying the CARDINFO.RC File. 
  1704.  
  1705.    3. If necessary, create a DLL to perform actions not provided by this 
  1706.       generic video installation program. 
  1707.  
  1708.       This step is not necessary, unless you want to perform some action that 
  1709.       is not supported by the generic video installation program. For more 
  1710.       information, see Step 3.  Creating a Video Installation DLL. 
  1711.  
  1712.    4. Modify the VIDHELP.ITL file. 
  1713.  
  1714.       This file contains information that is presented to the user when 
  1715.       installing your adapter. 
  1716.  
  1717.       For more information, see Step 4.  Modifying the VIDHELP.ITL File. 
  1718.  
  1719.    5. Run the MAKEFILE. 
  1720.  
  1721.       This file compiles CARDINFO.RC into a resource DLL called CARDINFO.DLL. 
  1722.       It also compiles VIDHELP.ITL into a help file called VIDHELP.HLP. 
  1723.  
  1724.       For more information, see Step 5.  Running the MAKEFILE. 
  1725.  
  1726.    6. Modify the CONTROL.SCR file. 
  1727.  
  1728.       This file is the control file used by MINSTALL to determine what 
  1729.       subsystems and devices a user can install. 
  1730.  
  1731.       For more information, see Step 6.  Modifying the CONTROL.SCR File. 
  1732.  
  1733.    7. Modify the VIDFILES.SCR file. 
  1734.  
  1735.       This file lists the files the adapter uses. It tells MINSTALL which files 
  1736.       need to be copied, and into which subdirectories to place them. 
  1737.  
  1738.       For more information, see Step 7.  Modifying the VIDFILES.SCR File. 
  1739.  
  1740.    8. Create an installation diskette. 
  1741.  
  1742.       This diskette must contain all the files necessary to install the adapter 
  1743.       into the MMPM/2 video subsystem using MINSTALL. 
  1744.  
  1745.       For more information, see Step 8.  Creating the Installation Diskette. 
  1746.  
  1747.    9. Install your adapter using MINSTALL. 
  1748.  
  1749.       For more information, see Step 9.  Using MINSTALL to Install Your 
  1750.       Adapter. 
  1751.  
  1752.  
  1753. ΓòÉΓòÉΓòÉ 3.2.2. Step 1.  Creating an OS/2 Device Driver ΓòÉΓòÉΓòÉ
  1754.  
  1755. For information on creating an OS/2 device driver, refer to the OS/2 Physical 
  1756. Device Driver Reference. 
  1757.  
  1758.  
  1759. ΓòÉΓòÉΓòÉ 3.2.3. Step 2.  Modifying the CARDINFO.RC File ΓòÉΓòÉΓòÉ
  1760.  
  1761. The CARDINFO.RC file is located in the \MMOS2\MMTOOLKT\SAMPLES\VIDINST 
  1762. subdirectory. Modify this file so that it contains information relevant to your 
  1763. video adapter. MMPM/2 uses this information to interface with the adapter. 
  1764.  
  1765. Notes: 
  1766.  
  1767.    1. The lines in this file that contain RCDATA, BEGIN, and END identify the 
  1768.       beginning and ending of specific pieces of data. Do not change these 
  1769.       lines. 
  1770.  
  1771.    2. If more than one adapter is added, increment each RCDATA number by 10 for 
  1772.       each additional adapter. For example, the first adapter uses RCDATA 10 
  1773.       through RCDATA 19, the second adapter uses RCDATA 20 through RCDATA 29, 
  1774.       and so forth. 
  1775.  
  1776.    3. If the video adapter does not have a value corresponding to one of the 
  1777.       CARDINFO.RC file parameters, use a null string "/0" in the parameter. 
  1778.  
  1779.  The CARDINFO.RC parameters are: 
  1780.  
  1781.  RCDATA 1 
  1782.     Indicates the number of adapters described in this CARDINFO.RC file. In 
  1783.     most cases, this is 1. To install more than one type of video adapter, 
  1784.     place that number in this parameter. 
  1785.  
  1786.     For example, in the CARDINFO.RC file, the Video Blaster adapter is: 
  1787.  
  1788.         RCDATA 1
  1789.         BEGIN
  1790.            "1"           /* Number of adapters in this rc file   */
  1791.         END
  1792.  
  1793.  RCDATA 10 
  1794.     Contains two parameters, the ID number and type of adapter used in the 
  1795.     CONTROL.SCR file. The ID number can be any number. However, it must match 
  1796.     the ssdllinputparms keyword in the CONTROL.SCR file that is modified in 
  1797.     Step 6.  Modifying the CONTROL.SCR File. For the type of adapter, the only 
  1798.     valid value is "vca." 
  1799.  
  1800.     For example, in the CARDINFO.RC file, the Video Blaster adapter is: 
  1801.  
  1802.         RCDATA 10
  1803.         BEGIN
  1804.            "33",            /* ID number of this adapter */
  1805.            "vca"            /* Type of adapter           */
  1806.         END
  1807.  
  1808.  RCDATA 11 
  1809.     Contains parameters that indicate: 
  1810.  
  1811.    o  The maximum number of this type of video adapter that can be installed at 
  1812.       one time. The maximum is six adapters. 
  1813.  
  1814.    o  The name of the help file that describes the video adapter. This name 
  1815.       defaults to VIDHELP.HLP if the MAKEFILE provided to create the help file 
  1816.       is used. 
  1817.  
  1818.    o  The name of the video-adapter-specific DLL you wrote to perform functions 
  1819.       not provided by this generic video installation program. This DLL is 
  1820.       described in Step 3.  Creating a Video Installation DLL. If you did not 
  1821.       write a DLL, specify "\0." 
  1822.  
  1823.    o  The name of the video-adapter-specific DLL entry point into the DLL in 
  1824.       the previous field. If you did not write a DLL, specify "\0." 
  1825.  
  1826.    o  The number of CONFIG.SYS lines to add to the user's CONFIG.SYS file to 
  1827.       support the video adapter. The maximum is six lines. 
  1828.  
  1829.    o  The CONFIG.SYS line format of the lines added to the user's CONFIG.SYS 
  1830.       file. Tokens in this line are replaced with the appropriate values at 
  1831.       runtime. The following list describes the tokens and their data 
  1832.       substitutions: 
  1833.  
  1834.            *PATH*    Indicates the path where MMPM/2 was installed (for 
  1835.                      example, c:\MMOS2). 
  1836.  
  1837.            *ORD*     Indicates the device ordinal of this adapter. 
  1838.  
  1839.            *SEQ*     Indicates the sequential number of this adapter. For 
  1840.                      example, if the user installs two IBM video capture 
  1841.                      adapters, the first will have a number of 1 and the second 
  1842.                      a number of 2. 
  1843.  
  1844.            *PDD*     Indicates the PDDName of this adapter. 
  1845.  
  1846.            *VAL*     Indicates the values that the user gives when prompted by 
  1847.                      the installation program. You can have more than one of 
  1848.                      these tokens if the user is asked for more than one item. 
  1849.  
  1850.                      Note:  Later in the CARDINFO.RC file, you specify which 
  1851.                             questions the install program should ask. 
  1852.  
  1853.            *SPEC*    Indicates special values passed from your adapter-specific 
  1854.                      DLL. 
  1855.  
  1856.          For example, the line in the sample CARDINFO.RC file is: 
  1857.  
  1858.          "DEVICE=*PATH*\\VIDVBC.SYS /*VAL* /*VAL* /*VAL* /*SEQ*" 
  1859.  
  1860.          After the real values are substituted, the CONFIG.SYS line is similar 
  1861.          to: 
  1862.  
  1863.          DEVICE=C:\MMOS2\VIDVBC.SYS /0F00000 /2AD6 /I5 /1 
  1864.  
  1865.    o  The number of drivers to install into the MMPM/2 system. For a video 
  1866.       capture adapter, this would normally be 1 because a Digital Video driver 
  1867.       is the only driver installed. The maximum is six drivers. 
  1868.  
  1869.    o  The name of the adapter as it is displayed to the user. 
  1870.  
  1871.    o  The version number of the device driver. 
  1872.  
  1873.    o  The physical device driver name (PDDName) used to identify the device 
  1874.       driver. The sequential number of the adapter and a "$" is added to this 
  1875.       name to form the final PDDName. For example, if the user installs two 
  1876.       Video Blaster** Adapters, the PDDNames are VIDVBC1$ and VIDVBC2$. 
  1877.  
  1878.    o  The name of the MCD command table used by the drivers. In most cases, 
  1879.       this is the IBM MCD command table 'MDM'. 
  1880.  
  1881.    o  The name of the VSD command table used by the drivers. In most cases, 
  1882.       this is blank. 
  1883.  
  1884.     For example, in the CARDINFO.RC file, the Video Blaster adapter is: 
  1885.  
  1886.         RCDATA 11
  1887.         BEGIN
  1888.            "1",                        /* Max number of adapters (2 chars)  (6 max)  */
  1889.            "vidhelp.hlp",              /* Helpfile name (19 chars)                   */
  1890.            "\0",                       /* Adapter specific dll name (19 chars)       */
  1891.            "\0",                       /* Adapter specific dll entry point (39 chars)*/
  1892.  
  1893.            /**** Data for CONFIG.SYS **/
  1894.            "1",                        /* Number of CONFIG.SYS lines (1 char)        */
  1895.            "DEVICE=*PATH*\\VIDVBC.SYS /*VAL* /*VAL* /*VAL* /*SEQ*",
  1896.                                        /* CONFIG.SYS Line 1                          */
  1897.                                        /* (255 chars after token substitution)       */
  1898.  
  1899.            /**** Data for INI File ****/
  1900.            "1",                        /* Number of Drivers to Install (1 char)      */
  1901.            "Video Blaster",            /* Product name (39 chars)                    */
  1902.            "1.0.0",                    /* Version of the adapter's software (6 chars)*/
  1903.            "VIDVBC",                   /* PDD Name  (5 chars)                        */
  1904.            "MDM",                      /* MCD table name (19 chars)                  */
  1905.            "\0"                        /* VSD table name (19 chars)                  */
  1906.         END
  1907.  
  1908.  RCDATA 12 
  1909.     This group of parameters is repeated for each driver you want to install. 
  1910.     The repeated groups should start with RCDATA 13, RCDATA 14, and so forth. 
  1911.     These parameters indicate: 
  1912.  
  1913.    o  The InstallName of this driver. This must be a unique name. Consider 
  1914.       using a name that is a combination of a company name, device type, and 
  1915.       device model. The sequential number of this adapter is added to the name 
  1916.       (for example, IBMDIGVIDCVB01). 
  1917.  
  1918.    o  The device type encoding. These codes are defined in the MCIOS2.H file 
  1919.       located in the \MMOS2\MMTOOLKT\H subdirectory. 
  1920.  
  1921.    o  The numeric device flag of this driver. Specifies the LONG INT with the 
  1922.       flags set. This determines whether or not the device is controllable. The 
  1923.       device flags are defined in the MCIOS2.H file located in the 
  1924.       \MMOS2\MMTOOLKT\H subdirectory. 
  1925.  
  1926.    o  The name of the media control driver (MCD) used by this driver. In most 
  1927.       cases, this is the IBM MCD 'SVMC'. 
  1928.  
  1929.    o  The name of the vendor-specific driver (VSD) used by this driver. In most 
  1930.       cases, this is the IBM VSD 'VIDVCI'. 
  1931.  
  1932.    o  The numeric share type. Specifies an encoding of the valid types of 
  1933.       sharing supported. These codes are defined in the MMDRVOS2.H file located 
  1934.       in the \MMOS2\MMTOOLKT\H subdirectory. 
  1935.  
  1936.    o  The name to be given to this driver's resources. Specifies a unique name 
  1937.       for the management for the driver resources. The sequential number of the 
  1938.       adapter is added to this name so that resources of different drivers are 
  1939.       not mixed. If you have more than one driver, be sure to use a different 
  1940.       name for each driver. For more information, see Resource Units and 
  1941.       Classes. 
  1942.  
  1943.    o  The number of resource units supported by this driver. For more 
  1944.       information, see Resource Units and Classes. 
  1945.  
  1946.    o  The number of resource classes supported by this driver. The maximum is 
  1947.       nine resource classes. These classes are listed in the next field. For 
  1948.       more information, see Resource Units and Classes. 
  1949.  
  1950.    o  The resource classes. For more information, see Resource Units and 
  1951.       Classes. 
  1952.  
  1953.    o  The number of valid combinations of resource classes. For more 
  1954.       information, see Resource Units and Classes. 
  1955.  
  1956.    o  The valid resource class combinations. Resource class combinations are 
  1957.       always listed in pairs. 
  1958.  
  1959.       Note:  This field is not in the sample because Video Blaster does not 
  1960.              have any valid resource class combinations. If it did, the 
  1961.              combination would be listed similar to this: 
  1962.  
  1963.             "1","2",   (One combines with two)
  1964.             "2","1",   (Two combines with one)
  1965.  
  1966.       For more information, see Resource Units and Classes. 
  1967.  
  1968.    o  The number of connectors. These are listed in the next field. The maximum 
  1969.       is 10 connectors. Each implementation of a media driver defines the paths 
  1970.       of information flow into and out of the device. These paths are known as 
  1971.       connectors. Connectors have defined connector types, and each connector 
  1972.       type has an associated connector-type name. 
  1973.  
  1974.    o  The connectors. Each connector has three values: 
  1975.  
  1976.         -  Numeric type of connector. Connection types are defined in the 
  1977.            MCIOS2.H file located in the \MMOS2\MMTOOLKT\H subdirectory. 
  1978.  
  1979.         -  InstallName of the driver to which it connects. If left blank, a 
  1980.            default connector is used. 
  1981.  
  1982.         -  Sequential number of the connector to which it connects. 
  1983.  
  1984.          The sample CARDINFO.RC file uses: 
  1985.  
  1986.          "3","","1" 
  1987.  
  1988.          where: 
  1989.  
  1990.            3         Indicates the wave stream connector. 
  1991.  
  1992.            ""        Indicates the default WaveAudio device. 
  1993.  
  1994.            1         Indicates the first connector of the WaveAudio device. 
  1995.  
  1996.    o  The number of file-name extensions associated with this driver. When an 
  1997.       element name is specified as the device name on an MCI_OPEN message and 
  1998.       no device type is specified, the device type is identified by the file 
  1999.       extension. For example, if the .AVI extension is associated with an 
  2000.       internal driver name, that driver will be used if a file ending in .AVI 
  2001.       is opened. 
  2002.  
  2003.    o  The file-name extensions associated with this driver. 
  2004.  
  2005.       Note:  This field is not used in the sample because no extensions are 
  2006.              associated with the driver for Video Blaster. If there were 
  2007.              extensions, they would be listed like the following: 
  2008.  
  2009.       "AVI", "AVS" 
  2010.  
  2011.    o  The extended attribute associated with this driver. When an element name 
  2012.       is specified as the device name on an MCI_OPEN message and no device type 
  2013.       is specified, the device type is identified by the files extended 
  2014.       attribute. For example, if the "Digital Video" extended attribute is 
  2015.       associated with an internal driver name, that driver will be used if a 
  2016.       file with an extended attribute of "Digital Video" is opened. 
  2017.  
  2018.    o  The AliasName given to the driver. This is an alternate name given to the 
  2019.       driver. The device ordinal is added to this name if the ordinal is 
  2020.       greater than 1. For example, the second DigitalVideo device would be 
  2021.       given an AliasName of Digital Video 2. 
  2022.  
  2023.    o  Any device specific parameters. These parameters allow you to provide 
  2024.       additional information about the driver to the MCD. In most cases, this 
  2025.       is blank. 
  2026.  
  2027.     For example, in the CARDINFO.RC file, the Video Blaster adapter is: 
  2028.  
  2029.         RCDATA 12
  2030.         BEGIN
  2031.            /**** DIGITAL VIDEO Driver ****/
  2032.            "IBMDIGVIDCVB",             /* Installname (17 chars)                     */
  2033.            "12",                       /* Device type (3 chars)                      */
  2034.            "1",                        /* Device flag (3 chars)                      */
  2035.            "SVMC",                     /* MCD driver name (19 chars)                 */
  2036.            "VIDVCI",                   /* VSD driver name (19 chars)                 */
  2037.            "3",                        /* Share Type (3 chars)                       */
  2038.            "Video Blaster",            /* Resource name (17 chars)                   */
  2039.            "10",                       /* # of Resource units (2 chars)              */
  2040.            "2",                        /* # of Resource classes (2 chars)            */
  2041.            "10","1",                   /* Resource classes (2 char each)             */
  2042.            "0",                        /* # Valid resource class combos (2 chars)    */
  2043.            /* No combos */             /* Valid resource class combos (2 chars each) */
  2044.            "1",                        /* # of connectors  (2 chars)                 */
  2045.            "3","","1",                 /* Connectors (2 chars), (17 chars), (2 chars)*/
  2046.            "0",                        /* # of extensions (2 chars)                  */
  2047.            /* no extension names */    /* Extension names  (3 chars each)            */
  2048.            "\0",                       /* Extended attribute (255 chars)             */
  2049.            "Digital Video",            /* Alias Name (17 chars)                      */
  2050.            "\0"                        /* Device Specific Parameters (255 chars)     */
  2051.         END
  2052.  
  2053.  RCDATA 19 
  2054.     This group of parameters indicate: 
  2055.  
  2056.    o  The number of prompts that should be presented to the user. This number 
  2057.       is used to gather configuration-specific information about the user's 
  2058.       adapter. The maximum is 10 prompts. 
  2059.  
  2060.    o  The title of the prompt text as it is displayed to the user. 
  2061.  
  2062.    o  The number of valid answers to the prompt. The maximum is 25 answers. You 
  2063.       supply the valid answers in the next field. 
  2064.  
  2065.    o  The valid answers to your prompt.  These answers are displayed to the 
  2066.       user.  The user can select one. 
  2067.  
  2068.    o  The values that are put in your CONFIG.SYS line. These values replace the 
  2069.       *VAL* tokens that you placed in your CONFIG.SYS line format previously in 
  2070.       this CARDINFO.RC file. These values correspond to the valid answers in 
  2071.       the previous field. For example, if the user selects answer number three 
  2072.       from the list of valid answers, then value number three is placed into 
  2073.       your CONFIG.SYS line. This allows you to ask the user questions in a 
  2074.       user-friendly fashion and then place a more cryptic value in the 
  2075.       CONFIG.SYS line. 
  2076.  
  2077.       For example, you can ask the user if they want to run a hardware test on 
  2078.       startup with the following prompt: 
  2079.  
  2080.             Run hardware test on startup?
  2081.  
  2082.       The valid answers that you present to the user could be: 
  2083.  
  2084.             Yes
  2085.             No
  2086.  
  2087.       The valid values that could be put into the CONFIG.SYS line could be 
  2088.       "test" or "notest." 
  2089.  
  2090.    o  The default answer to the prompt. This is an index into the list of valid 
  2091.       answers. For example, if the first answer is the default, specify "1." 
  2092.       For an example of how to specify the RCDATA 19 parameters for this 
  2093.       example, see Startup Example. 
  2094.  
  2095.     For example, in the CARDINFO.RC file, the Video Blaster adapter is: 
  2096.  
  2097.         RCDATA 19
  2098.         BEGIN
  2099.            // Prompts for the User
  2100.            "3",                        /* # Number of prompts to ask user (3 chars)  */
  2101.                                        /* (max 10 prompts)                           */
  2102.            // Prompt 1
  2103.            "Frame Buffer Base Address",/* Title of Prompt (max 50 chars)             */
  2104.            "8",                        /* # of valid values (2 chars)                */
  2105.            "0F00000",                  /* Valid values  (20 chars each)              */
  2106.            "0E00000",
  2107.            "0D00000",
  2108.            "0C00000",
  2109.            "0B00000",
  2110.            "0A00000",
  2111.            "0900000",
  2112.            "0800000",
  2113.            "1",                        /* Default value - Index into valid values    */
  2114.                                        /* (2 chars)                                  */
  2115.  
  2116.            // Prompt 2
  2117.            "Base I/O Address",         /* Title of Prompt (max 50 chars)             */
  2118.            "3",                        /* # of valid values (2 chars)                */
  2119.            "2AD6",                     /* Valid values (20 chars each)               */
  2120.            "2A90",
  2121.            "2AF0",
  2122.            "1",                        /* Default value - Index into valid values    */
  2123.                                        /* (2 chars)                                  */
  2124.  
  2125.            // Prompt 3
  2126.            "Interrupt",                /* Title of Prompt (max 50 chars)             */
  2127.            "4",                        /* # of valid values (2 chars)                */
  2128.            "I5",
  2129.            "I10",                      /* Valid values (20 chars each)               */
  2130.            "I11",
  2131.            "I12",
  2132.            "2"                         /* Default value - Index into valid values    */
  2133.                                        /* (2 chars)                                  */
  2134.         END
  2135.  
  2136.  
  2137. ΓòÉΓòÉΓòÉ 3.2.3.1. Startup Example ΓòÉΓòÉΓòÉ
  2138.  
  2139. The following is an example of how to specify RCDATA 19 parameters to ask a 
  2140. user if they want to run a hardware setup test: 
  2141.  
  2142. RCDATA 19
  2143. BEGIN
  2144.    // Prompts for the User
  2145.    "1",                        /* Number of prompts to ask user (3 chars)    */
  2146.                                /* (max 10 prompts).                          */
  2147.    // Prompt 1
  2148.    "Run hardware test on startup",/* Title of Prompt (max 50 chars).         */
  2149.    "2",                        /* Number of valid values (2 chars).          */
  2150.    "yes"                       /* Valid values  (20 chars each).             */
  2151.    "no"
  2152.  
  2153.    "test"                      /* Corresponding CONFIG.SYS values            */
  2154.    "notest"                    /* (20 chars each).                           */
  2155.  
  2156.    "1",                        /* Default value - Index into valid values    */
  2157.                                /* (2 chars).                                 */
  2158. END
  2159.  
  2160.  
  2161. ΓòÉΓòÉΓòÉ 3.2.4. Step 3.  Creating a Video Installation DLL ΓòÉΓòÉΓòÉ
  2162.  
  2163. In some cases, you might want to perform some action that is specific to your 
  2164. adapter, and thus not provided by this generic video installation program. For 
  2165. example, you might want to query the user's hardware setup to determine values, 
  2166. such as interrupt level, rather than prompting the user for those values. In 
  2167. this case, you can create your own DLL to perform these functions. 
  2168.  
  2169. The video installation program calls your DLL and allows it to return values 
  2170. that can be added to the CONFIG.SYS file. The following steps describe how to 
  2171. use your DLL: 
  2172.  
  2173.    1. Write and compile the DLL. 
  2174.  
  2175.       The entry point to your DLL must accept the following parameters: 
  2176.  
  2177.             CardSpecDLLEntry (USHORT usCardNum,
  2178.                               CHAR   achSpec[5][259])
  2179.  
  2180.       where: 
  2181.  
  2182.            usCardNum 
  2183.               Is the sequential number of this adapter. 
  2184.  
  2185.               For example, if the user chooses to install two of these 
  2186.               adapters, the DLL is called twice. The first time the DLL is 
  2187.               called, usCardNum is 1, and the second time the DLL is called, 
  2188.               usCardNum is 2. 
  2189.  
  2190.            achSpec[5][259] 
  2191.               Is a two dimensional array that can hold up to five strings of 
  2192.               259 characters each. Your DLL can put values into these five 
  2193.               strings. The video installation program then puts these strings 
  2194.               into lines in the CONFIG.SYS file as specified in CARDINFO.RC. If 
  2195.               there is more than one of these values, they are put into the 
  2196.               CONFIG.SYS in sequential order. For example, your DLL fills in 
  2197.               the following values: 
  2198.  
  2199.                             achSpec[0]="rec"
  2200.                             achSpec[1]="3"
  2201.                             achSpec[2]="11"
  2202.                             achSpec[3]=""
  2203.                             achSpec[4]=""
  2204.  
  2205.           The format of your CONFIG.SYS line in CARDINFO.RC is: 
  2206.  
  2207.           DEVICE=*PATH*\\VIDVBC.SYS *SPEC* *SPEC* *SPEC* 
  2208.  
  2209.           The line that is put into CONFIG.SYS is: 
  2210.  
  2211.           DEVICE=D:\MMOS2\VIDVBC.SYS rec 3 11 
  2212.  
  2213.    2. Put the name of the DLL and the name of the DLL's entry point into 
  2214.       CARDINFO.RC. 
  2215.  
  2216.  
  2217. ΓòÉΓòÉΓòÉ 3.2.5. Step 4.  Modifying the VIDHELP.ITL File ΓòÉΓòÉΓòÉ
  2218.  
  2219. VIDHELP.ITL is a help file that gives information to the user when the user 
  2220. installs the video adapter. Use this file to describe any prompts that ask the 
  2221. user for information. Be careful when modifying this file, because the basic 
  2222. format of the file must remain the same for the help to work correctly. If you 
  2223. do not prompt the user for any information, then modify only the first section 
  2224. of the file that explains to the user how many adapters can be installed. 
  2225.  
  2226.  
  2227. ΓòÉΓòÉΓòÉ 3.2.6. Step 5.  Running the MAKEFILE ΓòÉΓòÉΓòÉ
  2228.  
  2229. The MAKEFILE compiles CARDINFO.RC into a resource DLL called CARDINFO.DLL. It 
  2230. also compiles VIDHELP.ITL into a help file called VIDHELP.HLP. 
  2231.  
  2232.  
  2233. ΓòÉΓòÉΓòÉ 3.2.7. Step 6.  Modifying the CONTROL.SCR File ΓòÉΓòÉΓòÉ
  2234.  
  2235. Modify the CONTROL.SCR file so that it contains information relevant to your 
  2236. adapter. This file is the main control file used by MINSTALL, MMPM/2's 
  2237. installation program. CONTROL.SCR tells MINSTALL which subsystems and devices 
  2238. that the user can install. 
  2239.  
  2240. Modify the following fields in the Video Adapter Group: 
  2241.  
  2242. Note:  Do not change the fields not listed here. 
  2243.  
  2244.  ssgroup 
  2245.     Specifies the video adapter group number. The only reason to change this 
  2246.     number is if you are installing more than one video adapter. If you install 
  2247.     more than one type of adapter, you must duplicate the entire video adapter 
  2248.     group and change the group number on the second group. If you add one or 
  2249.     more groups, you must increment the group count at the top of this file. 
  2250.  
  2251.  ssname 
  2252.     Specifies the video adapter's name. 
  2253.  
  2254.  ssversion 
  2255.     Specifies the version number of your device driver. 
  2256.  
  2257.  sssize 
  2258.     Specifies the total size (in KB) of your device drivers and the VIDHELP.HLP 
  2259.     help file. 
  2260.  
  2261.  ssdllinputparms 
  2262.     Matches the ID number used in CARDINFO.RC. 
  2263.  
  2264.  
  2265. ΓòÉΓòÉΓòÉ 3.2.8. Step 7.  Modifying the VIDFILES.SCR File ΓòÉΓòÉΓòÉ
  2266.  
  2267. Modify the VIDFILES.SCR file so that it lists all the files the adapter uses. 
  2268. VIDFILES.SCR tells MINSTALL which files need to be copied, and into which 
  2269. subdirectories those files should be copied. 
  2270.  
  2271. After changing the list of files in VIDFILES.SCR, change the "Total Number of 
  2272. Files to Copy" in VIDFILES.SCR to match the number of files you have listed. 
  2273.  
  2274.  
  2275. ΓòÉΓòÉΓòÉ 3.2.9. Step 8.  Creating the Installation Diskette ΓòÉΓòÉΓòÉ
  2276.  
  2277. Create a diskette that contains the following files: 
  2278.  
  2279.    o  CONTROL.SCR 
  2280.    o  VIDFILES.SCR 
  2281.    o  CARDINFO.DLL 
  2282.    o  VIDHELP.HLP 
  2283.    o  Your device drivers 
  2284.  
  2285.  
  2286. ΓòÉΓòÉΓòÉ 3.2.10. Step 9.  Using MINSTALL to Install Your Adapter ΓòÉΓòÉΓòÉ
  2287.  
  2288. You can test your installation diskette by running MINSTALL. Before installing 
  2289. the video adapter, you must install: 
  2290.  
  2291.    o  OS/2 Version 2.1 (or later) 
  2292.  
  2293.    o  MMPM/2 
  2294.  
  2295.    o  The files that came with this DDK. 
  2296.  
  2297.  After installing the base MMPM/2, you can install your adapter. The following 
  2298.  steps describe how to use MINSTALL: 
  2299.  
  2300.    1. Place the installation diskette in drive A. 
  2301.    2. Type MINSTALL. 
  2302.    3. Change the source drive to A. 
  2303.    4. Select the adapter. 
  2304.    5. If errors occur, check the \MMOS2\INSTALL\MINSTALL.LOG file. 
  2305.  
  2306.  
  2307. ΓòÉΓòÉΓòÉ 3.3. Resource Units and Classes ΓòÉΓòÉΓòÉ
  2308.  
  2309. Device contexts are managed by the Media Device Manager (MDM), using an 
  2310. abstract concept of resource units, resource classes, and valid class 
  2311. combinations. 
  2312.  
  2313. Resource units provide a measurement for the resource manager to determine how 
  2314. many device contexts can be active at any given time. Each device specifies how 
  2315. many resource units it can process concurrently. 
  2316.  
  2317. In addition to a total resource number, each resource class has a maximum 
  2318. number of resource units available to it. This allows the MDM to determine how 
  2319. many device contexts from a particular class can be active concurrently. During 
  2320. the installation procedure the maximum numbers are provided. 
  2321.  
  2322. On the MCI_OPEN of a device context the required resource units and class for 
  2323. the device context is returned in the MMDRV_OPEN_PARMS structure.  The required 
  2324. resource units and resource class of a device context can be changed by the MCD 
  2325. by calling the MDM with the MCIDRV_CHANGERESOURCE message.  For example, if a 
  2326. waveaudio device allocated one resource unit for a mono wave and two units for 
  2327. a stereo wave, then a load command might change the required units for that 
  2328. device context. 
  2329.  
  2330. The final piece of resource management is provided during installation. This 
  2331. piece is the valid class combinations.  A certain device might have multiple 
  2332. classes but might not allow certain classes to have active device contexts 
  2333. concurrently. 
  2334.  
  2335. For further information on Resource Units and Classes, refer to the OS/2 
  2336. Multimedia Subsystem Programming Guide 
  2337.  
  2338.  
  2339. ΓòÉΓòÉΓòÉ 4. Audio Physical Device Driver Template ΓòÉΓòÉΓòÉ
  2340.  
  2341. This DDK provides two complete working samples for writing your own audio 
  2342. physical device drivers for the MMPM/2 environment. The first is the Media 
  2343. Vision PAS-16 sample. It is the production code for the Media Vision MMPM/2 
  2344. Audio PDD. The second is IBM-written Analog Devices AD1848 Business Audio 
  2345. MMPM/2 Audio PDD. 
  2346.  
  2347. This sample is the production level Media Vision** code for the ProAudio 
  2348. Spectrum** device driver. The ProAudio Spectrum 16 driver includes all the code 
  2349. required for communication with MMPM/2 and the ProAudio Spectrum 16 adapter. 
  2350. This includes establishing communication with MMPM/2, controlling specific 
  2351. hardware devices, and establishing inter-device driver (IDC) communications 
  2352. with the MMPM/2 stream handlers and IOCtl-based communications with the MMPM/2 
  2353. amplifier-mixer (ampmix) and media control drivers (MCDs). 
  2354.  
  2355. Note:  For further information on when to use a physical device driver (PDD) 
  2356.        and how it operates, see the online OS/2 Physical Device Driver 
  2357.        Reference provided in this package. This reference describes the types 
  2358.        of physical device drivers, their interfaces, and available system 
  2359.        services. 
  2360.  
  2361.  
  2362. ΓòÉΓòÉΓòÉ 4.1. Source Code for PAS-16 ΓòÉΓòÉΓòÉ
  2363.  
  2364. Source code for the ProAudio Spectrum device driver is located in the 
  2365. \MMOS2\MMTOOLKT\SAMPLES\PASTK subdirectory.  Source files include documentation 
  2366. headers, which provide detailed descriptions of the programming concepts and 
  2367. routines incorporated within the module. 
  2368.  
  2369. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2370. ΓöéSource File              ΓöéDescription                        Γöé
  2371. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2372. ΓöéSTARTUP.ASM              ΓöéSixteen-bit entry points into the  Γöé
  2373. Γöé                         Γöéphysical device driver from        Γöé
  2374. Γöé                         Γöéexternal code. The PDD is written  Γöé
  2375. Γöé                         Γöéprimarily in C language, but       Γöé
  2376. Γöé                         ΓöéAssembler is required for          Γöé
  2377. Γöé                         Γöécommunication with the OS/2 kernel Γöé
  2378. Γöé                         Γöéor the MMPM/2 audio stream handler.Γöé
  2379. Γöé                         ΓöéIt also provides Assembler to C    Γöé
  2380. Γöé                         Γöélanguage conversion for parameters Γöé
  2381. Γöé                         Γöéreceived from the OS/2 kernel or   Γöé
  2382. Γöé                         ΓöéMMPM/2 audio stream handler.       Γöé
  2383. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2384. ΓöéCDEVHLP.ASM              ΓöéSixteen-bit Assembler calls to OS/2Γöé
  2385. Γöé                         ΓöéDevHlp services from 16-bit        Γöé
  2386. Γöé                         ΓöéC-compiler code. The C file        Γöé
  2387. Γöé                         Γöéprovides callable functions that   Γöé
  2388. Γöé                         Γöémap to OS/2 defined PDD DevHlp     Γöé
  2389. Γöé                         Γöéfunction.                          Γöé
  2390. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2391. ΓöéMVPRODD.C                ΓöéMain routines accessed through     Γöé
  2392. Γöé                         Γöéincoming request packet IOCtls.    Γöé
  2393. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2394. ΓöéAUDIODAT.C               ΓöéGlobal data.                       Γöé
  2395. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2396. ΓöéAUDSUBS.C                ΓöéVarious device specific            Γöé
  2397. Γöé                         Γöésubroutines.                       Γöé
  2398. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2399. ΓöéAUDINTR.C                ΓöéInterrupt handler routines with    Γöé
  2400. Γöé                         Γöésupport code to call back to the   Γöé
  2401. Γöé                         Γöéstream handler through the IDC.    Γöé
  2402. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2403. ΓöéAUDIOVDM.C               ΓöéSupport routines for VDD-PDD       Γöé
  2404. Γöé                         Γöécommunication (for example, DOS    Γöé
  2405. Γöé                         Γöéserialization support). The        Γöé
  2406. Γöé                         ΓöéPDDInternalEntryPoint() routine is Γöé
  2407. Γöé                         Γöécalled through the IDC from the    Γöé
  2408. Γöé                         Γöévirtual device driver.             Γöé
  2409. Γöé                         ΓöéThe VDMInterruptTime() routine is  Γöé
  2410. Γöé                         Γöécalled at hardware interrupt time. Γöé
  2411. Γöé                         ΓöéThe PDD calls the VDD so that it   Γöé
  2412. Γöé                         Γöécan virtualize the interrupt for   Γöé
  2413. Γöé                         Γöéthe VDM.                           Γöé
  2414. Γöé                         ΓöéThe CallVDD() function is in       Γöé
  2415. Γöé                         ΓöéSTARTUP.ASM.                       Γöé
  2416. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2417. ΓöéMMDDCMDS.C               ΓöéMain routines for incoming stream  Γöé
  2418. Γöé                         Γöéhandler requests through the IDC.  Γöé
  2419. Γöé                         ΓöéThis function is called from the   Γöé
  2420. Γöé                         ΓöéSTARTUP.ASM file and receives      Γöé
  2421. Γöé                         Γöécontrol from the MMPM/2 Stream     Γöé
  2422. Γöé                         ΓöéHandler. Based on the DDCMD, the   Γöé
  2423. Γöé                         Γöéappropriate sub-function is called.Γöé
  2424. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2425. ΓöéCOMMDBG.C                ΓöéRoutines to send debug information Γöé
  2426. Γöé                         Γöéto COM: ports during execution of  Γöé
  2427. Γöé                         Γöédevice driver. The routines provideΓöé
  2428. Γöé                         Γöé'C' printf like functions that sendΓöé
  2429. Γöé                         Γöétheir output to the serial port    Γöé
  2430. Γöé                         Γöérather than stdout. The calls to   Γöé
  2431. Γöé                         Γöéthese routines are only called for Γöé
  2432. Γöé                         Γöédebug versions of the driver.  See Γöé
  2433. Γöé                         Γöéthe DEBUG.H file for flags to turn Γöé
  2434. Γöé                         Γöéon or off different debug options. Γöé
  2435. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2436. ΓöéGLOBALS.C                ΓöéVariables global to execution of   Γöé
  2437. Γöé                         Γöédevice driver.  GLOBALS.C includes Γöé
  2438. Γöé                         Γöévariables for indexing stream      Γöé
  2439. Γöé                         Γöébuffers and pointers for           Γöé
  2440. Γöé                         Γöécalculating stream position.       Γöé
  2441. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2442. ΓöéINITC.C                  ΓöéHardware initialization functions. Γöé
  2443. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2444. ΓöéPARSE.C                  ΓöéParses the command line arguments  Γöé
  2445. Γöé                         Γöéfrom the CONFIG.SYS command line.  Γöé
  2446. Γöé                         ΓöéThis code is discarded from the    Γöé
  2447. Γöé                         Γöédevice driver after it is invoked. Γöé
  2448. Γöé                         ΓöéParameters switches can be         Γöé
  2449. Γöé                         Γöéuppercase or lowercase. The '-'    Γöé
  2450. Γöé                         Γöécharacter is not supported.        Γöé
  2451. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2452. ΓöéANLDIV.ASM               ΓöéImplements a C callable routine forΓöé
  2453. Γöé                         Γöéa long divide. This implementation Γöé
  2454. Γöé                         Γöéprevents using the C runtime       Γöé
  2455. Γöé                         Γöéroutine.                           Γöé
  2456. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2457. ΓöéANLMUL.ASM               ΓöéAssembler multiplication routines. Γöé
  2458. Γöé                         ΓöéThis file implements a C callable  Γöé
  2459. Γöé                         Γöéroutine for long multiplication.   Γöé
  2460. Γöé                         ΓöéThis implementation prevents using Γöé
  2461. Γöé                         Γöéthe C runtime routine              Γöé
  2462. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2463. ΓöéANNALDIV.ASM             ΓöéImplements the /= function for C   Γöé
  2464. Γöé                         Γöélanguage.                          Γöé
  2465. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2466. ΓöéANNALMUL.ASM             ΓöéImplements the *= function for 'C'.Γöé
  2467. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2468. The following files are specific to the ProAudio Spectrum adapter: 
  2469.  
  2470.    o  2OP_CDRM.C 
  2471.    o  4_CMP_P.C 
  2472.    o  ADLIB.C 
  2473.    o  ASSIGN2.C 
  2474.    o  CMP_DRUM.C 
  2475.    o  DO.C 
  2476.    o  FINDPAS.C 
  2477.    o  FMMAIN.C 
  2478.    o  FMPARSE.C 
  2479.    o  MIXINITC.C 
  2480.    o  MIXSUBS.C 
  2481.    o  MVMIX.C 
  2482.    o  MVMIXER.C 
  2483.    o  NAMEDAT.C 
  2484.    o  NAMER.C 
  2485.    o  OUTCHIP.C 
  2486.    o  PATCHER.C 
  2487.    o  INITA.ASM 
  2488.    o  MIDIA.ASM 
  2489.    o  MVMIXA.ASM 
  2490.    o  MVSOUND.ASM 
  2491.  
  2492.  
  2493. ΓòÉΓòÉΓòÉ 4.2. Source Code for AD1848 PDD ΓòÉΓòÉΓòÉ
  2494.  
  2495. Source code for the AD1848 device driver is located in the 
  2496. \MMOS2\MMTOOLKT\SAMPLES\PASTK subdirectory. Source files include documentation 
  2497. headers, which provide detailed descriptions of the programming concepts and 
  2498. routines incorporated within the module. 
  2499.  
  2500. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2501. ΓöéSource File              ΓöéDescription                        Γöé
  2502. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2503. ΓöéAD1848.C                 ΓöéThis file contains functions that  Γöé
  2504. Γöé                         Γöéinterface with the Analog Device   Γöé
  2505. Γöé                         Γöéstereo codec AD1848.               Γöé
  2506. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2507. ΓöéAUDCONT.C                ΓöéThis file contains functions that  Γöé
  2508. Γöé                         Γöésupport audio control commands fromΓöé
  2509. Γöé                         Γöéthe DosDevIoctl interface to the   Γöé
  2510. Γöé                         Γöédevice driver.                     Γöé
  2511. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2512. ΓöéDMA.C                    ΓöéThis file contains routines that   Γöé
  2513. Γöé                         Γöésupport DMA services.              Γöé
  2514. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2515. ΓöéECHO.C                   ΓöéThis file contains functions that  Γöé
  2516. Γöé                         Γöéinterface with the ECHO personal   Γöé
  2517. Γöé                         Γöésound system asic.                 Γöé
  2518. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2519. ΓöéHEADER.C                 ΓöéThis file contains device driver   Γöé
  2520. Γöé                         Γöéheader information and routines.   Γöé
  2521. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2522. ΓöéMEM.C                    ΓöéThis file contains functions       Γöé
  2523. Γöé                         Γöérelated to dynamic memory          Γöé
  2524. Γöé                         Γöéallocation.                        Γöé
  2525. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2526. ΓöéPARAM.C                  ΓöéThis file contains routines that   Γöé
  2527. Γöé                         Γöéparse parameters from the device   Γöé
  2528. Γöé                         Γöéassignment statement in the        Γöé
  2529. Γöé                         Γöéconfig.sys file.                   Γöé
  2530. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2531. ΓöéSTRATEGY.C               ΓöéThis file contain the routine that Γöé
  2532. Γöé                         Γöéservices the device driver strategyΓöé
  2533. Γöé                         Γöéentry point and routines that      Γöé
  2534. Γöé                         Γöésupport the vdd interface.         Γöé
  2535. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2536. ΓöéSTRING.C                 ΓöéThis file contains miscellaneous   Γöé
  2537. Γöé                         Γöéstring utility functions.          Γöé
  2538. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2539. ΓöéSTRMCONT.C               ΓöéThis file contains functions that  Γöé
  2540. Γöé                         Γöéservice requests from the audio    Γöé
  2541. Γöé                         Γöéstea handler and report events to  Γöé
  2542. Γöé                         Γöéthe audio stream handler.          Γöé
  2543. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2544. ΓöéSTRMHELP.C               ΓöéThis file contains routines that   Γöé
  2545. Γöé                         Γöésupport stream related services.   Γöé
  2546. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2547. ΓöéTIMER.C                  ΓöéThis file contains miscellaneous   Γöé
  2548. Γöé                         Γöétime related functions.            Γöé
  2549. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2550. ΓöéTRACE.C                  ΓöéThis file contains routines that   Γöé
  2551. Γöé                         Γöésupport the data logging facility  Γöé
  2552. Γöé                         Γöéused for device driver debugging   Γöé
  2553. Γöé                         Γöéand performance analysis.          Γöé
  2554. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2555. ΓöéAUDCONT.H                ΓöéThis file contains prototypes for  Γöé
  2556. Γöé                         Γöépublic functions originating in    Γöé
  2557. Γöé                         ΓöéAUDCONT.C                          Γöé
  2558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2559. ΓöéDEVHELP.H                ΓöéThis file contains prototypes for  Γöé
  2560. Γöé                         Γöépublic functions in DEVHLP.ASM.    Γöé
  2561. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2562. ΓöéDEVICE.H                 ΓöéThis file contains definitions for Γöé
  2563. Γöé                         Γöéshared constants and prototypes forΓöé
  2564. Γöé                         Γöépublic functions that originate in Γöé
  2565. Γöé                         ΓöéDEVICE.C.                          Γöé
  2566. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2567. ΓöéDMA.H                    ΓöéThis file contains prototypes for  Γöé
  2568. Γöé                         Γöépublic functions and definitions   Γöé
  2569. Γöé                         Γöéfor shared constants originating inΓöé
  2570. Γöé                         ΓöéDMA.C.                             Γöé
  2571. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2572. ΓöéECHO.H                   ΓöéThis file contains prototypes for  Γöé
  2573. Γöé                         Γöépublic functions originating in    Γöé
  2574. Γöé                         ΓöéECHO                               Γöé
  2575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2576. ΓöéEND.H                    ΓöéThis file contains prototypes for  Γöé
  2577. Γöé                         Γöépublic functions in END.C.         Γöé
  2578. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2579. ΓöéDEVHLP.ASM               ΓöéThis file contains routines that   Γöé
  2580. Γöé                         Γöésupport device driver helper       Γöé
  2581. Γöé                         Γöéservices from the operating system.Γöé
  2582. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2583. ΓöéENTRY.ASM                ΓöéThis file contains functions that  Γöé
  2584. Γöé                         Γöésupport all the entry points into  Γöé
  2585. Γöé                         Γöéthe driver.                        Γöé
  2586. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2587. ΓöéUTIL.ASM                 ΓöéThis file contains miscellaneous   Γöé
  2588. Γöé                         Γöéutility functions for io port data Γöé
  2589. Γöé                         Γöétransfer, memory data transfer, andΓöé
  2590. Γöé                         Γöéaddress manipulation.              Γöé
  2591. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2592.  
  2593.  
  2594. ΓòÉΓòÉΓòÉ 4.3. PDD Architecture ΓòÉΓòÉΓòÉ
  2595.  
  2596. The MMPM/2 audio PDD is a standard OS/2 PDD. Audio PDDs communicate with MMPM/2 
  2597. via strategy entry point and via Inter-Device Driver Communication (IDC) 
  2598. Interface. These interfaces provide the foundation for sharing of the audio 
  2599. device by MMPM/2 applications and media drivers. 
  2600.  
  2601. The audio IOCtl interface is standard OS/2 IOCtls. Definitions follow in this 
  2602. chapter. Media drivers running at Ring 3 use the IOCtl interface to set up the 
  2603. audio device for access, to change volume controls, and so on.  The IOCtl 
  2604. interface is not meant to be used to send audio data to the device driver. 
  2605.  
  2606. The IDC interface is imitated by the OS/2 AttachDD DevHlp function. Stream 
  2607. handler device drivers and audio physical device drivers use the IDC interface 
  2608. to communicate with one another to coordinate their efforts to stream data to 
  2609. the audio device. 
  2610.  
  2611. The following graphic shows the audio physical device driver architecture. 
  2612.  
  2613. The IDC Interface 
  2614.  
  2615. Two entry points are provided for the two device drivers participating in the 
  2616. IDC interface, DDCMDEntryPoint and SHDEntryPoint. DDCMDEntryPoint allows the 
  2617. stream handler device driver to call to the PDD, and SHDEntryPoint allows the 
  2618. audio PDD to call to the stream handler. 
  2619.  
  2620. Note that streaming data buffer pointers are passed by the Sync/Stream Manager 
  2621. to the audio stream handler by means of Sync/Stream Manager Helper (SMH) calls. 
  2622. Then the audio stream handler passes pointers to the PDD using device driver 
  2623. command (DDCMD) messages. 
  2624.  
  2625. The following graphic shows the audio physical device driver modules. 
  2626.  
  2627. Communication to the PDD 
  2628.  
  2629. DDCMD Messages are defined from the DDCMDEntryPoint.  Each message represents a 
  2630. specific request by the stream handler for the audio PDD to perform an action. 
  2631.  
  2632. Read and write messages allow the stream handler to get and receive data 
  2633. directly from the PDD without any intervention required by the application. 
  2634. The application neither has to send data through an IOCtl nor allocate and lock 
  2635. memory to perform data transfers. 
  2636.  
  2637. Communication to the Stream Handler 
  2638.  
  2639. The SHDEntryPoint contains the following two messages.  These messages are 
  2640. located in the SHDD.H file of the \MMOS2\MMTOOLKT\H subdirectory.  SHDD.H 
  2641. contains the data structures, their type definitions, and #define statements 
  2642. for certain values.  Note that the messages pass pointers to packets of data, 
  2643. to allow maximum flexibility for the future. 
  2644.  
  2645.  SHD_REPORT_INT 
  2646.            The PDD uses this message when it needs data at interrupt time.  For 
  2647.            example, it uses this message to tell the stream handler it has used 
  2648.            up all the data and needs more. 
  2649.  
  2650.            When the stream handler gets the call, it knows the PDD is passing 
  2651.            back a buffer that it might already have consumed.  So the stream 
  2652.            handler returns on that call, giving the PDD a fresh buffer to 
  2653.            consume. 
  2654.  
  2655.  SHD_REPORT_EVENT 
  2656.            The stream handler uses this message to keep in sync with PDD 
  2657.            activities.  For example, the stream handler can request the PDD to 
  2658.            report back every tenth of a second that data is played. The stream 
  2659.            handler has all the logic to handle these events.  The PDD examines 
  2660.            the request, and during its checks when it realizes a tenth of a 
  2661.            second has been played in data, the PDD calls SHD_REPORT_EVENT. The 
  2662.            stream handler can do what it wants at this point, and the PDD 
  2663.            returns. 
  2664.  
  2665.            The PDD keeps track of the processes. In other words, only the PDD 
  2666.            knows how much data, to the millisecond, has been played out to the 
  2667.            device.  The stream handler can approximate the data played, using 
  2668.            calculations based on how much data has gone by.  But the stream 
  2669.            handler cannot calculate the data played to the millisecond, or even 
  2670.            to the fraction of a millisecond, the way the PDD can. 
  2671.  
  2672.  Stream Handler Values 
  2673.  
  2674.  There are certain values that the stream handler is expecting.  For example, 
  2675.  when the stream handler requests a stop or a pause on a DDCMD_CONTROL message, 
  2676.  the pointer that comes back to the stream handler is a pointer to the 
  2677.  cumulative time that the PDD has recorded in real time.  So whenever the 
  2678.  stream handler requests the device to stop, the PDD honors that request and 
  2679.  informs the stream handler the real time that the PDD stopped within the 
  2680.  stream. 
  2681.  
  2682.  Another value the stream handler looks for is returned on DDCMD_STATUS.  This 
  2683.  is also a pointer to the cumulative time from the PDD, with respect to when 
  2684.  that stream was first started at the stream handler's request. 
  2685.  
  2686.  PDD Values 
  2687.  
  2688.  The stream handler passes a pointer to the PDD on DDCMD_STATUS.  This points 
  2689.  to a value used by the PDD for setting the referenced time of the PDD. It is 
  2690.  not always correct for the PDD to start its time at 0 every time the stream 
  2691.  handler does a start, because the stream handler might have performed a seek 
  2692.  in the stream.  The PDD might have played a minute of data and then performed 
  2693.  a backwards seek to the 30-second mark in the data.  If a start is issued, the 
  2694.  PDD should start from the 30-second mark in that stream. 
  2695.  
  2696.  DDCMD_CONTROL has an important NOTIFY subfunction, which is used for cuepoint 
  2697.  or event detection.  The stream handler supports events in cuepoints-an 
  2698.  application request to be notified when a particular location in the file is 
  2699.  reached or a specific time period has elapsed. The stream handler uses two 
  2700.  methods for detecting how much time has elapsed: 
  2701.  
  2702.    o  Using DDCMD_CONTROL NOTIFY, the stream handler requests to be notified by 
  2703.       the PDD at a particular time and passes a pointer to the cue time. 
  2704.  
  2705.    o  The stream handler determines the time internally.  This method is not as 
  2706.       precise as the first method, because only the PDD knows the real time. 
  2707.  
  2708.  For example, suppose the stream handler does a DDCMD_CONTROL NOTIFY at one 
  2709.  minute.  If the PDD supports precise event detection, it must accept this 
  2710.  request and put it into a queue somewhere, preferably a linked list.  This 
  2711.  linked list will have the time of one minute so that during the streaming 
  2712.  process, the PDD occasionally checks to see whether it is at the one minute 
  2713.  mark.  When this event occurs, the PDD calls back on an SHD_REPORT_EVENT. 
  2714.  Then you can free up the event detection linked list node. 
  2715.  
  2716.  Keep in mind that the PDD should have the capability to queue these requests 
  2717.  because there might be additional requests.  For example, an application might 
  2718.  request to be notified at the one-minute mark, next at a minute and a half, 
  2719.  and possibly every five minutes. 
  2720.  
  2721.  If the PDD does not support event detection, then when it gets called on a 
  2722.  DDCMD_CONTROL NOTIFY, it responds with an ERROR_INVALID_REQUEST.  This 
  2723.  response tells the stream handler that it must do the event-detection itself. 
  2724.  
  2725.  
  2726. ΓòÉΓòÉΓòÉ 4.4. Data Transfers ΓòÉΓòÉΓòÉ
  2727.  
  2728. Following are the two methods of transferring data: 
  2729.  
  2730.  Direct Memory Access (DMA) 
  2731.            The most efficient way to transfer data from the host system to the 
  2732.            audio adapter's memory is through direct memory access (DMA).  This 
  2733.            is a technique for moving data directly between main storage without 
  2734.            requiring processing of the data by the CPU.  To accomplish this, we 
  2735.            create a DMA buffer within the device driver to transfer the data. 
  2736.            As the device driver receives the stream buffer data, it copies the 
  2737.            stream buffer data into the DMA buffer at interrupt time.  When the 
  2738.            DMA buffer is full, it can be sent directly to the audio device.  A 
  2739.            preferable (but unproven) method would be to DMA directly from the 
  2740.            stream buffer.  Currently, however, a copy operation (which requires 
  2741.            time and CPU utilization) is required to get data into the AUDIODD 
  2742.            DMA buffer. 
  2743.  
  2744.            To perform direct memory access, you are essentially programming the 
  2745.            DMA microcontroller on the system board.  For each direct memory 
  2746.            access, you can DMA transfer data up to the limit of the DMA channel 
  2747.            that the audio adapter is using: 
  2748.  
  2749.            - 64KB for the 8-bit DMA channels 0, 1, and 3 
  2750.  
  2751.            - 128KB for the 16-bit DMA channels 5, 6, and 7 
  2752.  
  2753.            Note that this DMA transfer must always be from the same buffer 
  2754.            pointer. Unless you decide to change the buffer pointer, you would 
  2755.            have to reprogram the microcontroller from the beginning. 
  2756.  
  2757.            Therefore, if you want to DMA directly from the stream buffer, your 
  2758.            device driver would always require a different pointer which means 
  2759.            reprogramming the DMA controller at each interrupt.  So, each time 
  2760.            you get a new buffer from the stream handler, you would have to look 
  2761.            at the pointer, reprogram the DMA controller, and then start the DMA 
  2762.            transfer.  At this stage, most developers state that there is not 
  2763.            enough time to reprogram the DMA controller during interrupt time. 
  2764.            Therefore, they are creating one DMA buffer when the device driver 
  2765.            is initialized at system startup.  The developer programs the DMA 
  2766.            controller at that point, informs the controller that this is the 
  2767.            pointer, and tells it how much data the device driver is going to 
  2768.            transfer.  The value is set for the lifetime of the driver. 
  2769.  
  2770.            Dual DMA Buffers 
  2771.  
  2772.            MMPM/2's stream handler implementation uses two DMA buffers or dual 
  2773.            DMA buffers to ensure a smooth flow of audio data. 
  2774.  
  2775.            In this implementation, the amplifier-mixer (ampmix) device issues a 
  2776.            request through the OS/2 kernel to the audio PDD for it to prepare 
  2777.            to process audio data.  The audio PDD informs the stream handler 
  2778.            that it needs the audio data, and the stream handler informs the 
  2779.            file system PDD to fill two 4KB DMA buffers with the appropriate 
  2780.            audio data. 
  2781.  
  2782.            When the audio PDD processes the first 4KB buffer, it issues a 
  2783.            hardware interrupt that signals the file system PDD to replace the 
  2784.            first 4KB buffer with the next 4KB of audio data.  Meanwhile, the 
  2785.            audio PDD is processing the second 4KB buffer.  When the audio PDD 
  2786.            processes the second 4KB buffer, it issues a hardware interrupt 
  2787.            again and the process is repeated. 
  2788.  
  2789.            With this process, you only have to track two DMA buffers and the 
  2790.            stream handler ensures a smooth flow of audio data to the audio PDD. 
  2791.            The following illustration provides an overview of this process. 
  2792.  
  2793.  
  2794.                                       1st 4KB DMA    2nd 4KB DMA
  2795.                                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2796.                                 ΓöîΓöÇΓöÇΓöÇΓöé             Γöé             Γöé
  2797.                                 Γöé    Γöé             Γöé             Γöé
  2798.                                 Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2799.                                 Γöé                               
  2800.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇThe audio PDD
  2801.                       Γöé                      Γöé                     issues hardware
  2802.                       Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé                     interrupts when it
  2803.                       Γöé Γöé Stream Handler  Γöé  Γöé                     finishes processing
  2804.                       Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé                     each 4KB DMA block.
  2805.                       Γöé     Γöé       Γöé      Γöé
  2806.                       Γöé   Γöé  Γöé       Γöé  Γöé    Γöé
  2807.                       Γöé   Γöé           Γöé    Γöé      The stream handler manages
  2808.                       Γöé ΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÉ Γöé      the process of the audio
  2809.                       Γöé ΓöéAudio  Γöé  ΓöéFile   Γöé Γöé      PDD processing 4KB DMA
  2810.                       Γöé ΓöéPDD    Γöé  ΓöéSystem Γöé Γöé      blocks and the file system
  2811.                       Γöé Γöé       Γöé  ΓöéPDD    Γöé Γöé      PDD replacing the block as
  2812.                       Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé      it is processed.
  2813.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2814.  
  2815.  Programmed I/O 
  2816.            Programmed I/O involves copying the stream buffer's data directly to 
  2817.            the adapter's buffer. 
  2818.  
  2819.  
  2820. ΓòÉΓòÉΓòÉ 4.5. Stream Descriptions ΓòÉΓòÉΓòÉ
  2821.  
  2822. Each physical device driver supports the following: 
  2823.  
  2824.  Multiple Opens 
  2825.            A PDD must be able to handle multiple open operations.  In other 
  2826.            words, the OS/2 operating system should be able to open your device 
  2827.            driver as many times as necessary.  However, resource should only be 
  2828.            allocated at the audio initialization stage (IOCtl stage). 
  2829.  
  2830.  Multiple Streams 
  2831.            A PDD must be able to handle multiple streams.  For example, there 
  2832.            might be ten multimedia programs on the desktop that have the device 
  2833.            open.  However, only one program can own the device.  For that one 
  2834.            program, a stream is created and resources are used. However, if 
  2835.            that one program gets put to sleep or the audio is paused, a second 
  2836.            program can take its place and use that resource.  The Media Device 
  2837.            Manager will save pointers to the stream instance that is currently 
  2838.            paused, point to the next program, and allow the program to use the 
  2839.            resource.  At this point, there will be two streams created.  If the 
  2840.            second program gets initialized, and perhaps paused, the third 
  2841.            program will be initialized, and so on. 
  2842.  
  2843.            Many streams can be created, however, the program that has focus is 
  2844.            the program using the adapter.  In addition, a device driver might 
  2845.            have ten streams allocated but only one stream will be active at a 
  2846.            given time if the hardware supports only one stream.  Some hardware 
  2847.            can support more than one active stream at a time.  For example, the 
  2848.            ACPA card can play two mono streams at the same time but only one 
  2849.            stereo. 
  2850.  
  2851.  Multiple Streams Implementation 
  2852.            A stream table is a collection of streams with each stream having 
  2853.            different data-similar to a data instance for DLLs.  For example, 
  2854.            one stream might be set up for recording using specific data rates 
  2855.            and buffer pointers, while another stream might be set up for 
  2856.            playback of a different data rate and buffer pointers.  The two 
  2857.            streams are unaffected by each other.  The hardware will react to 
  2858.            whichever stream is active. 
  2859.  
  2860.            A stream table contains the key indexes to determine which stream to 
  2861.            make active.  The key indexes are hStream and ulSysFileNum.  The 
  2862.            hStream comes from the stream handler during stream registration 
  2863.            while the ulSysFileNum comes from both the DDCMD_REGISTER message 
  2864.            and the AUDIO_INIT IOCtl. For example, in the following table, 
  2865.            stream #1 has a system file number of 6B and stream #2 has a system 
  2866.            file number of 7C.  When the AUDIO_INIT IOCtl comes in to start the 
  2867.            second instance, the IOCtl requests that you start the stream with 
  2868.            the matching ulSysFileNum. Next, across the inter-device driver 
  2869.            communications interface, the stream handler will tell you to start 
  2870.            stream #2.  To start stream #2, search the stream table for a match 
  2871.            with system file number #7C.  If you find a match, make the stream 
  2872.            active.  If you do not find a match, the operation fails. 
  2873.  
  2874.                                               IOCtl
  2875.                                               ulSysFileNum
  2876.                                                  Γöé
  2877.                                                  Γöé
  2878.                                                  
  2879.                                       hstream  sysfile#  state  data  pData
  2880.                                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2881.                         IDC          Γöé   1    Γöé  6B    Γöé      Γöé     Γöé       Γöé
  2882.                         hStream      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2883.                         ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ   Γöé   2    Γöé  7C    Γöé      Γöé     Γöé       Γöé
  2884.                                      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2885.                                      Γöé   3    Γöé  8D    Γöé      Γöé     Γöé       Γöé
  2886.                                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2887.  
  2888.  
  2889. ΓòÉΓòÉΓòÉ 4.6. Roadmaps ΓòÉΓòÉΓòÉ
  2890.  
  2891. The following figures illustrate the routines and IOCtls included in the audio 
  2892. physical device driver files. 
  2893.  
  2894.  
  2895. ΓòÉΓòÉΓòÉ 4.6.1. STARTUP.ASM ΓòÉΓòÉΓòÉ
  2896.  
  2897.                            STARTUP.ASM File
  2898.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2899. OS/2 IOCtls ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöé   AUDIODD.C         Γöé
  2900.                         Γöé                     Γöé
  2901. Stream Handler IDC ΓöÇΓöÇΓöÇ Γöé   MMDDCMDS.C        Γöé
  2902.                         Γöé                     Γöé
  2903. VDD IDC ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Γöé   AUDIOVDM.C        Γöé
  2904.                         Γöé                     Γöé
  2905. VDD ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ   Γöé    CallVDD()        Γöé
  2906.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2907.  
  2908.  
  2909. ΓòÉΓòÉΓòÉ 4.6.2. AUDIODD.C ΓòÉΓòÉΓòÉ
  2910.  
  2911.  
  2912.     AUDIODD.C File
  2913.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2914.    Γöé Strategy.C()                             Γöé
  2915.    Γöé  Γöé                                       Γöé
  2916.    Γöé  Γö£ΓöÇ IOCTL_Init()                        Γöé
  2917.    Γöé  Γö£ΓöÇ IOCTL_Invalid()                     Γöé
  2918.    Γöé  Γö£ΓöÇ IOCTL_Read()                        Γöé
  2919.    Γöé  Γö£ΓöÇ IOCTL_NondestructiveRead()          Γöé
  2920.    Γöé  Γö£ΓöÇ IOCTL_ReadStatus()                  Γöé
  2921.    Γöé  Γö£ΓöÇ IOCTL_FlushInput()                  Γöé
  2922.    Γöé  Γö£ΓöÇ IOCTL_Write()                       Γöé
  2923.    Γöé  Γö£ΓöÇ IOCTL_WriteStatus()                 Γöé
  2924.    Γöé  Γö£ΓöÇ IOCTL_FlushOutput()                 Γöé
  2925.    Γöé  Γö£ΓöÇ IOCTL_Input()                       Γöé
  2926.    Γöé  Γö£ΓöÇ IOCTL_Output()                      Γöé
  2927.    Γöé  Γö£ΓöÇ IOCTL_Open()                        Γöé
  2928.    Γöé  Γö£ΓöÇ IOCTL_Close()                       Γöé
  2929.    Γöé  ΓööΓöÇ IOCTL_GenIOCTL()                    Γöé
  2930.    Γöé             Γöé                            Γöé
  2931.    Γöé             Γö£ΓöÇ Audio_IOCTL_Init()       Γöé
  2932.    Γöé             Γö£ΓöÇ Audio_IOCTL_Status()     Γöé
  2933.    Γöé             Γö£ΓöÇ Audio_IOCTL_Control()    Γöé
  2934.    Γöé             Γö£ΓöÇ Audio_IOCTL_Buffer()     Γöé
  2935.    Γöé             Γö£ΓöÇ Audio_IOCTL_Load()       Γöé
  2936.    Γöé             Γö£ΓöÇ Audio_IOCTL_Wait()       Γöé
  2937.    Γöé             ΓööΓöÇ Audio_IOCTL_Hpi()        Γöé
  2938.    Γöé                                          Γöé
  2939.    Γöé InitPos()                                Γöé
  2940.    Γöé InitStreams()                            Γöé
  2941.    Γöé AllocDMABuffer()                         Γöé
  2942.    Γöé ParseArgs()                              Γöé
  2943.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2944.  
  2945.  
  2946. ΓòÉΓòÉΓòÉ 4.6.3. MMDDCMDS.C ΓòÉΓòÉΓòÉ
  2947.  
  2948.  
  2949.     MMDDCMDS.C File
  2950.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2951.    Γöé DDCMDInternalEntryPoint()                Γöé
  2952.    Γöé  Γöé                                       Γöé
  2953.    Γöé  Γö£ΓöÇ DDCMDSetup()                        Γöé
  2954.    Γöé  Γö£ΓöÇ DDCMDRead()                         Γöé
  2955.    Γöé  Γö£ΓöÇ DDCMDWrite()                        Γöé
  2956.    Γöé  Γö£ΓöÇ DDCMDStatus()                       Γöé
  2957.    Γöé  Γö£ΓöÇ DDCMDControl()                      Γöé
  2958.    Γöé  Γö£ΓöÇ DDCMDRegister()                     Γöé
  2959.    Γöé  ΓööΓöÇ DDCMDDeRegister()                   Γöé
  2960.    Γöé                                          Γöé
  2961.    Γöé GetStreamEntry()                         Γöé
  2962.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2963.  
  2964.  
  2965. ΓòÉΓòÉΓòÉ 4.6.4. AUDIOVDM.C ΓòÉΓòÉΓòÉ
  2966.  
  2967.  
  2968.     AUDIOVDM.C File
  2969.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2970.    Γöé PDDInternalEntryPoint()                  Γöé
  2971.    Γöé                                          Γöé
  2972.    Γöé VDMInterruptTime ()                      Γöé
  2973.    Γöé  Γöé                                       Γöé
  2974.    Γöé  ΓööΓöÇ CallVDD()                           Γöé
  2975.    Γöé                                          Γöé
  2976.    Γöé VDMClose()                               Γöé
  2977.    Γöé  Γöé                                       Γöé
  2978.    Γöé  ΓööΓöÇ CallVDD()                           Γöé
  2979.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2980.  
  2981.  
  2982. ΓòÉΓòÉΓòÉ 4.6.5. AUDINTR.C ΓòÉΓòÉΓòÉ
  2983.  
  2984.  
  2985.     AUDINTR.C File
  2986.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2987.    Γöé InterruptHandler()                              Γöé
  2988.    Γöé  Γöé                                              Γöé
  2989.    Γöé  Γö£ΓöÇ VDMInterruptTime()                         Γöé
  2990.    Γöé  Γö£ΓöÇ WriteDatatoCard()                          Γöé
  2991.    Γöé  Γö£ΓöÇ SHDEntryPoint() call back to stream handlerΓöé
  2992.    Γöé  ΓööΓöÇ EOI()                                      Γöé
  2993.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2994.  
  2995.  
  2996. ΓòÉΓòÉΓòÉ 4.6.6. CDEVHLP.ASM ΓòÉΓòÉΓòÉ
  2997.  
  2998.  
  2999.     CDEVHLP.ASM File
  3000.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3001.    Γöé DevHlp_AllocGDTSelector()    Γöé
  3002.    Γöé DevHlp_AllocPhys()           Γöé
  3003.    Γöé DevHlp_PhysToGDTSelector()   Γöé
  3004.    Γöé DevHlp_PhysToVirt()          Γöé
  3005.    Γöé DevHlp_VirtToLin()           Γöé
  3006.    Γöé DevHlp_ABIOSCall()           Γöé
  3007.    Γöé DevHlp_GETLIDEntry()         Γöé
  3008.    Γöé DevHlp_FreeLIDEntry()        Γöé
  3009.    Γöé DevHlp_RegisterPDD()         Γöé
  3010.    Γöé DevHlp_AttachDD()            Γöé
  3011.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3012.  
  3013.  
  3014. ΓòÉΓòÉΓòÉ 5. Audio Virtual Device Driver Template ΓòÉΓòÉΓòÉ
  3015.  
  3016. The IBM Developer Connection Device Driver Kit for OS/2 includes full source 
  3017. for the MMPM/2 provided Virtual Device Driver, AUDIOVDD.SYS. Use AUDIOVDD.SYS 
  3018. to serialize DOS application access to audio hardware in the MMPM/2 
  3019. environment.  This VDD can communicate with multiple audio PDDs through the 
  3020. Inter-Device Driver Communication (IDC) Interface. With a consistent API on the 
  3021. part of the PDDs (and similar hardware), it is possible for the AUDIOVDD.SYS 
  3022. driver to support up to eight hardware devices.  However, where the services of 
  3023. AUDIOVDD.SYS are not sufficient, you can modify the audio VDD template to meet 
  3024. your device driver requirements. 
  3025.  
  3026. You can code you Physical Device Driver to meet the interfaces of AUDIOVDD as 
  3027. an initial stop toward virtualization. Because AUDIOVDD has no knowledge of how 
  3028. it projects, its functionality is limited. You can expand this functionality by 
  3029. copying and changing AUDIOVDD to take advantage of your hardware and private 
  3030. interfaces which can be established between the VDD and DOS or WIN-OS/2 audio 
  3031. device drivers. 
  3032.  
  3033. Note:  For further information on when to use a VDD and how it operates, see 
  3034.        the online OS/2 Virtual Device Driver Reference provided in this 
  3035.        package. This reference describes the types of virtual device drivers, 
  3036.        their interfaces, and available kernel services. 
  3037.  
  3038.  
  3039. ΓòÉΓòÉΓòÉ 5.1. Source Code ΓòÉΓòÉΓòÉ
  3040.  
  3041. The VDD template is written using MASM Version 6.0 and linked with the 32-bit 
  3042. OS/2 linker.  Source code for the audio VDD sample is located in the 
  3043. \MMOS2\MMTOOLKT\SAMPLES\AUDIOVDD subdirectory.  Source files include 
  3044. documentation headers, which provide detailed descriptions of the programming 
  3045. concepts and routines incorporated within the module. 
  3046.  
  3047. To follow the VDD execution flow, begin with the VDDINIT.ASM file, which 
  3048. contains the VDD initialization routine.  Next, progress to AUDIOVDD.ASM to 
  3049. watch the session hooks, and continue with AUDIOREQ.ASM for hardware sharing 
  3050. between the PDD and VDD. 
  3051.  
  3052. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3053. ΓöéSource File                 ΓöéDescription                     Γöé
  3054. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3055. ΓöéVDDINIT.ASM                 ΓöéInitializes the VDD during      Γöé
  3056. Γöé                            Γöésystem startup.                 Γöé
  3057. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3058. ΓöéAUDIOVDD.ASM                ΓöéCatches DOS session event hooks.Γöé
  3059. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3060. ΓöéAUDIOREQ.ASM                ΓöéRequests/frees access to the    Γöé
  3061. Γöé                            Γöéshared hardware.                Γöé
  3062. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3063. ΓöéAUDIOEOI.ASM                ΓöéHandles end of interrupt        Γöé
  3064. Γöé                            Γöénotifications.                  Γöé
  3065. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3066. ΓöéGLOBDATA.ASM                ΓöéDefines global (common) data    Γöé
  3067. Γöé                            Γöésegments.                       Γöé
  3068. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3069. ΓöéINSTDATA.ASM                ΓöéDefines instance data segments  Γöé
  3070. Γöé                            Γöé(per-DOS session data).         Γöé
  3071. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3072. ΓöéAUDIOVDD.INC                ΓöéDefines functions for           Γöé
  3073. Γöé                            ΓöéAUDIOVDD.ASM.                   Γöé
  3074. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3075. ΓöéAUDIOREQ.INC                ΓöéContains function definitions   Γöé
  3076. Γöé                            Γöéfor AUDIOREQ.ASM.               Γöé
  3077. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3078. ΓöéAUDIOEOI.INC                ΓöéContains function definitions   Γöé
  3079. Γöé                            Γöéfor AUDIOEOI.ASM.               Γöé
  3080. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3081. ΓöéVDDDATA.INC                 ΓöéDefines EXTERNs for the         Γöé
  3082. Γöé                            ΓöéGLOBDATA.ASM and INSTDATA.ASM   Γöé
  3083. Γöé                            Γöéfiles.                          Γöé
  3084. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3085. ΓöéVDDSTRUC.INC                ΓöéContains structure declarations Γöé
  3086. Γöé                            Γöéfor the GLOBDATA.ASM and        Γöé
  3087. Γöé                            ΓöéINSTDATA.ASM files.             Γöé
  3088. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3089. ΓöéDEVHELP.INC                 ΓöéDefines EXTERNs for OS/2 virtualΓöé
  3090. Γöé                            ΓöéDevice Helper (DevHlp)          Γöé
  3091. Γöé                            Γöéfunctions.                      Γöé
  3092. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3093.  
  3094.  
  3095. ΓòÉΓòÉΓòÉ 5.2. VDD Architecture ΓòÉΓòÉΓòÉ
  3096.  
  3097. The AUDIOVDD.SYS virtual device driver is a Ring 0, 32-bit device driver 
  3098. responsible for controlling multiple virtual DOS sessions.  If there is no 
  3099. requirement for multiple sessions to share access to a device, a requirement 
  3100. for a virtual device driver is unlikely. 
  3101.  
  3102. VDD architecture usually calls for a device driver pair:  a PDD and VDD working 
  3103. together to serialize and control a common piece of hardware, called shared 
  3104. hardware.  The PDD controls access to the hardware and OS/2 sessions; the VDD 
  3105. controls DOS sessions and communicates with the PDD to serialize access.  That 
  3106. is, the PDD and VDD communicate to make sure DOS sessions and OS/2 sessions 
  3107. cannot concurrently access the shared hardware. 
  3108.  
  3109. Without a VDD, DOS sessions have complete access to system hardware.  Most DOS 
  3110. visible hardware resources are controlled by system VDDs, preventing DOS 
  3111. sessions from interfering with each other and protecting OS/2 applications from 
  3112. DOS sessions. 
  3113.  
  3114. When a PDD exists with no VDD, the hardware device is visible to the OS/2 side 
  3115. (through the PDD) and to all DOS sessions (through the VDM Manager).  This 
  3116. presents an opportunity for DOS sessions to take control of a hardware resource 
  3117. owned by an OS/2 PDD.  Writing a virtual device driver corrects this situation, 
  3118. resulting in system-wide protected access to the hardware resource. 
  3119.  
  3120. This PDD-VDD pair usually results in a VDD (like a PDD) being written to the 
  3121. specifications of a specific hardware device.  AUDIOVDD.SYS supports multiple 
  3122. adapters by using a protocol for PDD-VDD communication where the PDD defines 
  3123. the characteristics of its device at system startup. 
  3124.  
  3125. The key to supporting multiple PDDs is communication at system startup to 
  3126. attain a description of the physical characteristics of each adapter.  PDDs are 
  3127. loaded and initialized prior to VDDs.  When the PDD loads, it registers itself 
  3128. as willing to communicate with VDDs by providing its IDC name and entry point 
  3129. for this communication.  When the VDD loads, it calls a Virtual DevHlp service 
  3130. (VDHOpenPDD) to resolve the IDC entry point of the PDD.  On this call, the 
  3131. operating system calls the PDD to deliver the VDD IDC entry point.  When the 
  3132. PDD and VDD exchange entry points, the drivers are free to communicate through 
  3133. whatever private protocol is chosen including exchanging register-based entry 
  3134. points. 
  3135.  
  3136. For these calls to function, the VDD must know the name by which the PDD 
  3137. registered.  In a non-generic implementation, this is not a problem as the two 
  3138. device drivers can refer to the name from a common include file.  This 
  3139. "generic" VDD takes the PDD names as DEVICE=AUDIOVDD.SYS parameters on the 
  3140. CONFIG.SYS statement. 
  3141.  
  3142. In the case where a single PDD supports multiple devices, the PDD should 
  3143. register multiple IDC names and entry points (specifying the names on the 
  3144. DEVICE=AUDIOVDD.SYS statement).  During initialization, the VDD calls all the 
  3145. PDDs to establish communication and to query the hardware resources that the 
  3146. PDD controls. The VDD will use this information to trap DOS session attempts to 
  3147. access the adapter.  When a DOS session takes control of a PDD-owned resource, 
  3148. the VDD traps the DOS session pending permission to use the hardware.  As the 
  3149. PDD controls access, the VDD queries the PDD for permission to use the 
  3150. hardware.  If permission is granted, the VDD disables further traps and allows 
  3151. the DOS session to continue uninterrupted.  Traps are disabled to give maximum 
  3152. performance.  Because the VDD does not keep track of port accesses (and does 
  3153. not know the details of supported adapters), it is unable to remember the state 
  3154. of the adapter.  That is, as soon as a DOS session owns the hardware, ownership 
  3155. cannot be relinquished and restored, because the VDD does not know how to 
  3156. restore the state of the device.  The VDD supports serialization (not 
  3157. virtualization). 
  3158.  
  3159. If access is denied by the PDD, or if another DOS session already owns the 
  3160. hardware, a pop-up message is displayed asking the user for direction.  The 
  3161. user can give instruction to terminate the session, suspend the session, or 
  3162. pretend the hardware does not exist.  Based on this response, the VDD executes 
  3163. Virtual DevHlp services to perform the necessary actions.  Semaphores are used 
  3164. to block DOS session execution when they are suspended awaiting access to 
  3165. hardware.  When the last DOS session releases the hardware, the VDD returns 
  3166. hardware ownership to the PDD. 
  3167.  
  3168. Note:  See VDD Operations for further information. 
  3169.  
  3170.  
  3171. ΓòÉΓòÉΓòÉ 5.3. VDD Operations ΓòÉΓòÉΓòÉ
  3172.  
  3173. When writing a PDD to control physical hardware, it is common to write a VDD to 
  3174. provide serialization with DOS sessions.  Without a VDD, DOS sessions have 
  3175. complete access to system resources.  That is, if an adapter has only a PDD, 
  3176. DOS sessions can directly access the adapter resulting in unpredictable 
  3177. consequences. 
  3178.  
  3179. Often, with similar PDDs, the VDD implementations are similar.  Rather than 
  3180. write multiple VDDs, the MMPM/2 product uses a generic driver, AUDIOVDD.SYS. 
  3181. The PDDs are written to its interface allowing a single VDD to support multiple 
  3182. adapters and codes the PDDs to its interface.  The PDD names are given on the 
  3183. CONFIG.SYS command line.  (Actually, the name given is the name the PDD 
  3184. registers during PDD initialization.  This is not necessarily the same as the 
  3185. PDD name given in its device handler.)  For each listed device, the VDD 
  3186. establishes communication and queries the information describing the adapter. 
  3187. That is, it asks the PDD to return information dictating I/O port ranges and 
  3188. IRQ levels. 
  3189.  
  3190. When DOS sessions are created, the VDD installs hooks for the indicated port 
  3191. ranges.  On first access, the DOS session is said to be "requesting hardware 
  3192. access."  By convention, the PDD controls hardware access.  To gain use, the 
  3193. VDD must ask the PDD for permission to use the hardware.  When granted, the DOS 
  3194. session traps are removed and the session is allowed to continue executing.  At 
  3195. interrupt time, the PDD calls the VDD IDC entry point where the VDD virtualizes 
  3196. the hardware interrupt for the owning session. 
  3197.  
  3198. Subsequent DOS session access attempts are denied pending hardware 
  3199. availability.  A hard error pop-up window is displayed giving the user three 
  3200. options: 
  3201.  
  3202.    o  End   - Terminate the DOS session 
  3203.    o  Retry  - Block until hardware becomes free 
  3204.    o  Ignore - Instruct the VDD to ignore the adapter 
  3205.  
  3206.  If retry is chosen, the DOS session is blocked until the hardware becomes 
  3207.  available.  When the DOS session in use releases the hardware, the next DOS 
  3208.  session gains access.  This process continues until no more devices are 
  3209.  waiting at which point the VDD relinquishes ownership to the PDD. 
  3210.  
  3211.  If ignore is chosen, the DOS session continues execution but with no 
  3212.  visibility to the protected adapter.  This allows sound-enabled DOS 
  3213.  applications to execute under the impression that the system does not have an 
  3214.  audio card installed. 
  3215.  
  3216.  For access queues, the PDD uses semaphores and the OS/2 scheduler. The VDD 
  3217.  maintains no queues.  Instead, 1 mutex and 1 event semaphore are used to 
  3218.  control access.  Only one DOS session can own the hardware at any one time. 
  3219.  When the VDD owns the hardware, the DOS session owning the mutex semaphore is 
  3220.  allowed to execute.  All others are blocked pending hardware availability. 
  3221.  When the owning session releases the hardware (the semaphore), the OS/2 
  3222.  semaphore routines and scheduler determine which session next gains access. 
  3223.  
  3224.  A DOS session can also be denied access due to OS/2 PDD refusal to relinquish 
  3225.  ownership. This would be the case when an OS/2 application is using the 
  3226.  services of the PDD before a DOS session attempts access. Here, all pending 
  3227.  DOS sessions are queued waiting on an event semaphore.  When the OS/2 PDD 
  3228.  relinquishes hardware, all blocked sessions are allowed to run by posting the 
  3229.  event semaphore. The sessions compete for ownership of the mutex semaphore. 
  3230.  One session wins, the others block; serialization is maintained. 
  3231.  
  3232.  
  3233. ΓòÉΓòÉΓòÉ 5.4. Inter-Device Driver Communication (IDC) Interface ΓòÉΓòÉΓòÉ
  3234.  
  3235. Virtual device drivers (VDDs) communicate with physical device drivers (PDDs) 
  3236. through the inter-device driver communication (IDC) interface provided with the 
  3237. OS/2 operating system.  The drivers exchange the address of an entry point and 
  3238. call each other through the exchanged addresses.  A VDD communicates with a PDD 
  3239. directly through a callable 16:32 interface or by using the Virtual DevHlp 
  3240. services that map to File System APIs. 
  3241.  
  3242. Physical device drivers and virtual device drivers use the following OS/2 
  3243. DevHlp functions to establish inter-device driver communication (IDC). 
  3244.  
  3245.  RegisterPDD 
  3246.            This function is called by the PDD during initialization to 
  3247.            advertise a 16:16 entry point for VDD-PDD communication.  The PDD 
  3248.            provides a textual name, which the VDD must supply during its 
  3249.            initialization. 
  3250.  
  3251.  VDHOpenPDD 
  3252.            This function gets the address of the routine in a physical device 
  3253.            driver that the virtual device driver uses to communicate with the 
  3254.            physical device driver.  The physical device driver's device must 
  3255.            have previously registered its name and entry point using the DevHlp 
  3256.            service, RegisterPDD.  If the function is successful, it returns a 
  3257.            pointer to the physical device driver IDC entry point. 
  3258.  
  3259.  
  3260. ΓòÉΓòÉΓòÉ 6. MAD16 PDD and VDD Sample Device Drivers (Watcom C) ΓòÉΓòÉΓòÉ
  3261.  
  3262. The Developer Connection Device Driver Source Kit for OS/2 includes a PDD/VDD 
  3263. pair that program the OPTi/MediaChips 82C928/82C929 Audio Controller (MAD16). 
  3264. The MAD16 is an integrated digital audio controller for PC sound applications. 
  3265.  
  3266. Beyond its use for multimedia device developers, the sample provides a 
  3267. reference for using Watcom 16 and 32-bit C compilers for OS/2 device driver 
  3268. development. 
  3269.  
  3270. The device drivers are located on the CD-ROM in the multimedia section. 
  3271.  
  3272.  PDD       \ddkx86\mmos2\samples\mad16 
  3273.  
  3274.  VDD       \ddkx86\mmos2\samples\vmad16 
  3275.  
  3276.  
  3277. ΓòÉΓòÉΓòÉ 6.1. Board Architecture ΓòÉΓòÉΓòÉ
  3278.  
  3279. The reference design for the MAD16 includes the following primary parts: 
  3280.  
  3281. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3282. ΓöéChip                     ΓöéDescription                        Γöé
  3283. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3284. ΓöéOPTi 82C929 (MAD16)      ΓöéPrimary chip. ISA bus interface,   Γöé
  3285. Γöé                         ΓöéCD-ROM control, MPU-401 interface  Γöé
  3286. Γöé                         Γöéand Sound Blaster to Windows Sound Γöé
  3287. Γöé                         ΓöéSystem command translation.        Γöé
  3288. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3289. ΓöéAudio Codec              ΓöéWindows Sound System compatible    Γöé
  3290. Γöé                         Γöéaudio CODEC. The sample supports   Γöé
  3291. Γöé                         Γöéthe Analog Devices AD1848 and the  Γöé
  3292. Γöé                         ΓöéCrystal Semiconductor CS4231.      Γöé
  3293. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3294. ΓöéYamaha YMF-262 (OPL-3)   ΓöéFM MIDI synthesis (same part as    Γöé
  3295. Γöé                         ΓöéSound Blaster Pro).                Γöé
  3296. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3297. ΓöéCD-ROM connectors        ΓöéSupport Sony31A, Mitsumi, IDE and  Γöé
  3298. Γöé                         ΓöéPanasonic drives.  All interfaces  Γöé
  3299. Γöé                         Γöéare controlled via the MAD16.      Γöé
  3300. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3301.  
  3302. The MAD16-based board can support applications and device drivers written to a 
  3303. variety of CD-ROM, audio and MIDI interfaces. 
  3304.  
  3305.  
  3306. ΓòÉΓòÉΓòÉ 6.2. MAD16.ADD Device Driver Overview ΓòÉΓòÉΓòÉ
  3307.  
  3308. All device configuration is performed through software programmable settings. 
  3309. Base I/O address and DMA and IRQ selections for CD-ROM and audio are 
  3310. initialized from software through the MAD16.ADD device driver. There are no 
  3311. jumpers. 
  3312.  
  3313. Once enabled, existing device drivers can be used to perform audio and CD-ROM 
  3314. actions. For example, existing AD1848 business audio device drivers can be used 
  3315. on configurations with the AD1848. Existing CS4231 device drivers can be used 
  3316. in board configurations that have the CS4231 device. Likewise, the MAD16 device 
  3317. can be set to enable Sony31A, Mitsumi, Panasonic or IDE CD-ROM interfaces. An 
  3318. appropriate CD-ROM device driver is loaded later to perform CD-ROM activities. 
  3319.  
  3320. The job of the MAD16.ADD is to initialize the device. 
  3321.  
  3322.  
  3323. ΓòÉΓòÉΓòÉ 6.3. Boot Sequence ΓòÉΓòÉΓòÉ
  3324.  
  3325. To initialize the device before the other device drivers load, the MAD16.ADD 
  3326. device driver has to load before the other device drivers (Audio/CD-ROM). OS/2 
  3327. loads device drivers in a specific order. Device drivers needed to boot the 
  3328. system are loaded early. Less critical device drivers including audio are 
  3329. loaded toward the end of the device driver load sequence. In a particular class 
  3330. of device drivers, load order is based on order in the CONFIG.sys. 
  3331.  
  3332. Device driver load order is as follows: 
  3333.  
  3334.    1. Kernel known basedevs (resource manager) 
  3335.    2. BASEDEVs 
  3336.  
  3337.         a. .ADDs first 
  3338.         b. .SYS 
  3339.  
  3340.    3. Non-BASEDEVs (for example, Audio) 
  3341.  
  3342.  To load early, the MAD16.ADD wakeup code is written as a BASEDEV .ADD. This 
  3343.  insures that regardless of CONFIG.SYS order, it loads early. For CD-ROM 
  3344.  however, both the wakeup code and CD-ROM device driver are .ADDs. This creates 
  3345.  an install requirement that the MAD16.ADD precede the CD-ROM device driver in 
  3346.  CONFIG.SYS. 
  3347.  
  3348.  
  3349. ΓòÉΓòÉΓòÉ 6.4. PDD Operation and Architecture ΓòÉΓòÉΓòÉ
  3350.  
  3351. The MAD16.ADD does most of its work during initialization. Device modes and 
  3352. settings are read from a persistent database (CONFIG.SYS). The MAD16 device is 
  3353. programmed to set the base address of all the other parts on the board. For 
  3354. CD-ROM, turning the device on is all that is required. For audio, an 
  3355. initialization sequence is required to bring the audio Codec and MAD16 to a 
  3356. state where both Windows Sound System and Sound Blaster applications can be 
  3357. supported. 
  3358.  
  3359. Using Watcom 16-bit C, the MAD16.ADD device driver has very little assembler 
  3360. code. The strategy routine is executed with no assembler stub. Watcom provides 
  3361. "pragma aux ", which allows the programmer to specify that parameters arrive in 
  3362. registers rather than on the stack. With this, much of the stub code popular in 
  3363. C device drivers is unnecessary. 
  3364.  
  3365. The following table describes the MAD16.ADD source code. 
  3366.  
  3367. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3368. ΓöéMAD16.ADD Source Files   ΓöéDescription                        Γöé
  3369. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3370. Γöémakefile                 ΓöéBuild procedure - "nmake".         Γöé
  3371. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3372. ΓöéDATA.C                   ΓöéDevice driver data (global).       Γöé
  3373. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3374. ΓöéDDPRINTF.C               ΓöéSupport for writing messages to    Γöé
  3375. Γöé                         Γöéconsole (printf).                  Γöé
  3376. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3377. ΓöéDDSTRING.C               ΓöéString processing routines (commandΓöé
  3378. Γöé                         Γöéline parsing support).             Γöé
  3379. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3380. ΓöéHEADER.C                 ΓöéDevice driver header (DevHdr).     Γöé
  3381. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3382. ΓöéIDC_PDD.C                ΓöéIDC operations for PDDs.           Γöé
  3383. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3384. ΓöéIDC_VDD.C                ΓöéIDC operations for VDDs.           Γöé
  3385. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3386. ΓöéINIT.C                   ΓöéInitialization code (Good place to Γöé
  3387. Γöé                         Γöéstart reading).                    Γöé
  3388. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3389. ΓöéIOCTL.C                  ΓöéIO Control processing (called from Γöé
  3390. Γöé                         ΓöéStrategy routine).                 Γöé
  3391. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3392. ΓöéMAD16.C                  ΓöéCode that knows how to initialize  Γöé
  3393. Γöé                         Γöéthe 82C929 MAD16 device.           Γöé
  3394. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3395. ΓöéMADUTIL.C                ΓöéCode that programs the MAD16       Γöé
  3396. Γöé                         Γöé(retained after init).             Γöé
  3397. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3398. ΓöéQMAD16.C                 Γöé32-bit Application - display PDD   Γöé
  3399. Γöé                         Γöéstructures to screen.              Γöé
  3400. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3401. ΓöéSNDBLAST.C               ΓöéCode that knows how to reset and   Γöé
  3402. Γöé                         Γöéprogram a Sound Blaster Pro.       Γöé
  3403. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3404. ΓöéSTRATEGY.C               ΓöéDevice driver strategy routine.    Γöé
  3405. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3406. ΓöéTRACE.C                  ΓöéHolds trace information and copies Γöé
  3407. Γöé                         Γöéof error messages.                 Γöé
  3408. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3409. ΓöéUTIL.C                   ΓöéI/O delay function, OPL-3 mute     Γöé
  3410. Γöé                         Γöécode.                              Γöé
  3411. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3412. ΓöéWSS.C                    ΓöéCode that initializes the audio    Γöé
  3413. Γöé                         ΓöéCODEC.                             Γöé
  3414. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3415. ΓöéWSSUTIL.C                ΓöéAudio CODEC code (retained after   Γöé
  3416. Γöé                         Γöéinit).                             Γöé
  3417. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3418. ΓöéSEGS.ASM                 ΓöéDefine device driver segments.     Γöé
  3419. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3420. ΓöéUTILA.ASM                ΓöéIDC entrypoints (16:16 <-> 16:32   Γöé
  3421. Γöé                         Γöéthunks).                           Γöé
  3422. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3423. ΓöéDATA.H                   ΓöéHeader file for DATA.C.            Γöé
  3424. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3425. ΓöéDDPRINTF.H               ΓöéHeader file for DDPRINTF.C.        Γöé
  3426. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3427. ΓöéDDSTRING.H               ΓöéHeader file for DDSTRING.C.        Γöé
  3428. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3429. ΓöéHEADER.H                 ΓöéHeader file for HEADER.C.          Γöé
  3430. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3431. ΓöéIDC_PDD.H                ΓöéHeader file for IDC_PDD.C.         Γöé
  3432. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3433. ΓöéIDC_VDD.H                ΓöéHeader file for IDC_VDD.C.         Γöé
  3434. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3435. ΓöéIOCTL.H                  ΓöéHeader file for IOCTL.C.           Γöé
  3436. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3437. ΓöéMAD16.H                  ΓöéHeader file for MAD16.C.           Γöé
  3438. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3439. ΓöéREQPKT.H                 ΓöéHeader file for REQPKT.C.          Γöé
  3440. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3441. ΓöéRMHELP.H                 ΓöéHeader file for RMHELP.C.          Γöé
  3442. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3443. ΓöéSNDBLAST.H               ΓöéHeader file for SNDBLAST.C.        Γöé
  3444. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3445. ΓöéSTRATEGY.H               ΓöéHeader file for STRATEGY.C.        Γöé
  3446. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3447. ΓöéTRACE.H                  ΓöéHeader file for TRACE.C.           Γöé
  3448. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3449. ΓöéUTIL.H                   ΓöéHeader file for UTIL.C.            Γöé
  3450. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3451. ΓöéWSS.H                    ΓöéHeader file for WSS.C.             Γöé
  3452. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3453.  
  3454.  
  3455. ΓòÉΓòÉΓòÉ 6.5. VDD Operation and Architecture ΓòÉΓòÉΓòÉ
  3456.  
  3457. Because all audio operations are performed by the audio CODEC, only one audio 
  3458. mode can be active at one time. The device is not capable of performing two 
  3459. concurrent wave audio play operations. 
  3460.  
  3461. At initialization, one mode must be selected. By convention, the Windows Sound 
  3462. System mode is the default because this support is used by MMPM/2 and WinOS2 
  3463. for wave audio operations. 
  3464.  
  3465. Becuase OS/2 and WinOS2 audio are controlled by the audio CODEC PDD, DRV, and 
  3466. VDD, the VMAD16 VDD must communicate with the other drivers to negotiate use of 
  3467. the audio device. 
  3468.  
  3469. Audio operations are performed using existing audio device drivers. Sound 
  3470. Blaster games are supported in a virtual DOS machine through a OS/2 Virtual 
  3471. Device Driver (VMAD16). 
  3472.  
  3473. The figure below illustrates the architecture. 
  3474.  
  3475.  
  3476.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3477.   ΓöéQMAD16.exeΓöé  ΓöéMMPM/2    Γöé  ΓöéWinOS2    Γöé ΓöéDOS SessionΓöé ΓöéDOS SessionΓöé
  3478.   ΓöéDiagnosticΓöé  ΓöéMME subsysΓöé  ΓöéMME subsysΓöé ΓöéWSS App    Γöé ΓöéSB App     Γöé
  3479.   ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3480.        Γöé             Γöé        ΓöéAudio.DRV Γöé      Γöé             Γöé
  3481.        Γöé Ring-3      Γöé        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé             Γöé
  3482.   -----Γöé-------------Γöé--------------Γöé-----------Γöé-------------Γöé-------
  3483.        Γöé Ring-0      Γöé              Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             Γöé
  3484.   ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ            ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  3485.   ΓöéMAD16.ADDΓöé     ΓöéAudio PDDΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñAudioVDD Γöé            Γöé VMAD16  Γöé
  3486.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ            ΓööΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  3487.         Γöé               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  3488.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3489.  
  3490. When a Sound Blaster specific application, such as a game, programs the device 
  3491. from a Virtual DOS machine, the VMAD16.SYS VDD intercepts the first port I/O 
  3492. and takes this as a request to use the audio hardware. It communicates with the 
  3493. audio CODEC PDD to gain ownership. Once ownership is attained, the VMAD16 VDD 
  3494. sends a command to the MAD16.ADD wakeup code commanding it to switch the device 
  3495. from Windows Sound System mode into Sound Blaster mode. 
  3496.  
  3497. When the owning DOS application terminates, the VDD commands a switch back to 
  3498. Windows Sound System mode and returns device ownership to the audio CODEC PDD. 
  3499.  
  3500. The following table describes the VMAD16.SYS source code. 
  3501.  
  3502. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3503. ΓöéVMAD16.SYS Source        ΓöéDescription                        Γöé
  3504. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3505. Γöémakefile                 ΓöéBuild procedure - "nmake".         Γöé
  3506. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3507. ΓöéDDSTRING.C               ΓöéString processing routines.        Γöé
  3508. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3509. ΓöéEVENTS.C                 ΓöéSession create/terminate and other Γöé
  3510. Γöé                         Γöéevent hooks.                       Γöé
  3511. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3512. ΓöéGLOBDATA.C               ΓöéVDD global data declarations.      Γöé
  3513. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3514. ΓöéINIT.C                   ΓöéInitialization code.               Γöé
  3515. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3516. ΓöéAUDIOREQ.C               ΓöéRoutines to communicate with audio Γöé
  3517. Γöé                         ΓöéPDD for hardware ownership.        Γöé
  3518. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3519. ΓöéDATA.ASM                 ΓöéPer DOS session instance data      Γöé
  3520. Γöé                         Γöédeclarations.                      Γöé
  3521. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3522. ΓöéUTILA.ASM                ΓöéIDC support (16:32 to 16:16 far    Γöé
  3523. Γöé                         Γöécalls).                            Γöé
  3524. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3525. ΓöéAUDIOREQ.H               ΓöéHeader for AUDIOREQ.C.             Γöé
  3526. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3527. ΓöéAUDIOVDD.H               ΓöéHeader for AUDIOVDD.C.             Γöé
  3528. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3529. ΓöéDATA.H                   ΓöéPrototypes for GLOBDATA.C and      Γöé
  3530. Γöé                         ΓöéDATA.ASM.                          Γöé
  3531. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3532. ΓöéDDSTRING.H               ΓöéHeader for DDSTRING.C.             Γöé
  3533. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3534. ΓöéEVENTS.H                 ΓöéHeader for EVENTS.C.               Γöé
  3535. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3536. ΓöéUTIL.H                   ΓöéHeader for UTIL.C.                 Γöé
  3537. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3538.  
  3539.  
  3540. ΓòÉΓòÉΓòÉ 7. PDD Sample for Video Capture Adapters ΓòÉΓòÉΓòÉ
  3541.  
  3542. This DDK provides a sample of a video capture physical device driver (PDD) to 
  3543. assist in the creation of physical device drivers (PDDs) for video capture 
  3544. adapters (VCAs). 
  3545.  
  3546.  
  3547. ΓòÉΓòÉΓòÉ 7.1. Source Code ΓòÉΓòÉΓòÉ
  3548.  
  3549. Source code for the physical device driver (PDD) sample is located in the 
  3550. \MMOS2\MMTOOLKT\SAMPLES\VCADDT subdirectory. Source files include documentation 
  3551. headers, which provide detailed descriptions of the programming concepts and 
  3552. routines used in incorporating the module. 
  3553.  
  3554. The sample programs require MASM** 5.1 for assembly. 
  3555.  
  3556. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3557. ΓöéFile                     ΓöéDescription                        Γöé
  3558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3559. ΓöéREADME                   ΓöéDescribes how to create the        Γöé
  3560. Γöé                         Γöéresource DLL containing the video  Γöé
  3561. Γöé                         Γöéadapter information and how to     Γöé
  3562. Γöé                         Γöécreate the .SYS file containing theΓöé
  3563. Γöé                         ΓöéVCDD.                              Γöé
  3564. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3565. ΓöéVCA32.ASM                ΓöéContains the main entry point for  Γöé
  3566. Γöé                         ΓöéIOCtl parsing.                     Γöé
  3567. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3568. ΓöéVCACAPT.ASM              ΓöéContains image copy and scale      Γöé
  3569. Γöé                         Γöéroutines.                          Γöé
  3570. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3571. ΓöéVCAIDC.ASM               ΓöéContains device specific streaming Γöé
  3572. Γöé                         Γöéroutines.                          Γöé
  3573. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3574. ΓöéVCAINIT.ASM              ΓöéContains device initialization     Γöé
  3575. Γöé                         Γöéroutines.                          Γöé
  3576. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3577. ΓöéVIDIDC.ASM               ΓöéContains generic device streaming  Γöé
  3578. Γöé                         Γöéroutines.                          Γöé
  3579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3580. ΓöéVIDIDC.INC               ΓöéContains streaming instances       Γöé
  3581. Γöé                         Γöéstructures.                        Γöé
  3582. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3583. ΓöéVIDIN.INC                ΓöéContains the open instance         Γöé
  3584. Γöé                         Γöéstructure.                         Γöé
  3585. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3586. ΓöéVIDVCI.INC               ΓöéContains the interface for the     Γöé
  3587. Γöé                         ΓöéIOCtl.                             Γöé
  3588. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3589. ΓöéVIDVCIT.SYS              ΓöéIs the compiled device driver.     Γöé
  3590. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3591.  
  3592.  
  3593. ΓòÉΓòÉΓòÉ 7.2. Program Flow ΓòÉΓòÉΓòÉ
  3594.  
  3595. The following figure illustrates the program flow from the Media Device Manager 
  3596. (MDM) through the PDD and finally on to the video capture adapter. 
  3597.  
  3598.  
  3599.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3600.     Γöé Media Device Γöé (4)          Γöé SPI          Γöé
  3601.     Γöé Manager      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Interfaces   Γöé
  3602.     Γöé              Γöé              Γöé SSM          Γöé
  3603.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3604.     (1)    Γöé                      (5)    Γöé
  3605.            Γöé                             Γöé
  3606.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3607.     Γöé Vendor-      Γöé              Γöé Video CaptureΓöé
  3608.     Γöé Specific     Γöé              Γöé Stream       Γöé
  3609.     Γöé Driver       Γöé              Γöé Handler      Γöé
  3610.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3611.     (2)    Γöé                       (6)   Γöé
  3612.            Γöé                             Γöé
  3613.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                     Γöé
  3614.     Γöé Physical     Γöé                     Γöé
  3615.     Γöé Device       ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3616.     Γöé Driver       Γöé
  3617.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3618.     (3)    Γöé
  3619.            Γöé
  3620.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3621.     Γöé Video        Γö£ΓöÉ ΓöÇΓöÇ Video Input
  3622.     Γöé Capture      Γö£Γöÿ
  3623.     Γöé Adapter      Γöé
  3624.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3625.  
  3626.  1    Media Control Interface functions are passed from the MCD to the 
  3627.       vendor-specific driver. 
  3628.  
  3629.  2    The VSD passes information to the PDD. 
  3630.  
  3631.  3    The PDD controls the video capture adapter. The sample provided works 
  3632.       with the IBM VCA adapter. To modify the sample to work with a different 
  3633.       adapter, you must replace all hardware-specific routines with routines 
  3634.       that are specific to your adapter. If you update the PDD sample, make a 
  3635.       backup copy first. In order for the generic install to work, you must 
  3636.       update the RCDATA 12 parameters so that MINSTALL will install the correct 
  3637.       PDD. 
  3638.  
  3639.  4    After the video capture adapter is initialized, the MCD passes control to 
  3640.       the Video Capture Stream Handler through the SPI interface. 
  3641.  
  3642.  5    The SPI interface receives video data from the video capture stream 
  3643.       handler. 
  3644.  
  3645.  6    The control video data from the Video Capture Stream Handler is passed to 
  3646.       and from the PDD. 
  3647.  
  3648.  
  3649. ΓòÉΓòÉΓòÉ 7.3. PDD Architecture ΓòÉΓòÉΓòÉ
  3650.  
  3651. The following figure illustrates how the PDD fits in the overall MMPM/2 
  3652. subsystem structure.  The media device manager (MDM) uses Media Control 
  3653. Interface commands to pass information through the vendor-specific driver and 
  3654. on to the PDD.  The PDD directly controls the video capture adapter and passed 
  3655. video adapter request to the video capture stream handler. 
  3656.  
  3657.  
  3658.         ΓòöΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòù                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3659.         Γòæ        Γòæ                  Γöé Multimedia  Γöé
  3660.         Γòæ        ΓòæΓöÇΓöÇΓöÉ              Γöé Application Γöé
  3661.         ΓòÜΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓò¥   Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  3662.         PM Monitor   Γöé    Notifications Γöé     Γöé MCI Commands
  3663.                      Γöé           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3664.                      Γöé      ΓöîΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÉ
  3665.                      Γöé      Γöé    Γöé        MDM        Γöé    Γöé
  3666.                      Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÿ
  3667.                      Γöé           Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3668.                      Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé
  3669.            mmioOpen  ΓööΓöÇΓöÇΓöÇΓöÇΓöñDigital VideoΓöé     ΓöéAmplifier MixerΓöé          Γöé
  3670.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñMedia  DriverΓö£ΓöÇΓöÉ ΓöîΓöÇΓöñ Media  Driver Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  3671.      Γöé    mmioSetHeader   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé    Γöé
  3672.      Γöé                          Γöé         Γöé Γöé          Γöé            Γöé    Γöé
  3673.      Γöé                          Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé            Γöé    Γöé
  3674.      Γöé                          Γöé   ΓöéSPI InterfacesΓöé   Γöé            Γöé    Γöé
  3675.      Γöé                          Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Γöé            Γöé    Γöé
  3676.      Γöé                          ΓööΓöÇΓöÇΓöÇΓöñ     SSM      Γö£ΓöÇΓöÇΓöÇΓöÿ            Γöé    Γöé
  3677.      Γöé                              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöÇΓöÇΓöÉ            Γöé    Γöé
  3678.      Γöé                               audio data   Γöé    Γöé            Γöé    Γöé
  3679.      Γöé              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÉ    Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉΓöé
  3680. ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉmmioWriteΓöéMulti-trackΓöÇΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÿΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöñAudio  ΓöÇΓöÇΓöñAudio  ΓöéΓöé
  3681. Γöé MMIO    ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñStream     Γöé  ΓöîΓöÇΓöÉ            ΓööΓöÉ ΓöéStream Γöé  ΓöéAdapterΓöéΓöé
  3682. Γöé Manager ΓöémmioSeek ΓöéHandler    ΓöÇΓöÇΓö╝ΓöÇΓöñ             Γöé ΓöéHandlerΓöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  3683. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γö£ΓöÇΓöñ uncompressedΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ       ΓöîΓöÇΓöÇΓöÇΓöÿ
  3684. multiΓöétrack dataΓöîΓöÇΓöÇΓöÇΓöÉ   compressed Γö£ΓöÇΓöñ ΓöîΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÉ ΓööΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3685. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÉ Γöé         data Γö£ΓöÇΓöñ ΓööΓö¼Γö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÿΓöÇΓöÇΓöñVideo  Γöé  ΓöéCaptureΓöé
  3686. Γöé   AVI         Γöé Γöé Γöé              ΓööΓöÿ  Γöé   data     ΓöéCaptureΓöÇΓöÇΓöñDD     Γöé
  3687. Γöé   IOProc      Γöé Γöé Γöé               Γöé   Γöé            ΓöéStream Γöé  Γöécopy   Γöé
  3688. ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÿ Γöé               Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöéHandlerΓöé  Γöéscale  Γöé
  3689.  Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÉ Γöé               Γöé         Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  3690.  Γöé Γöé Ultimotion Γöé Γöé Γöé               Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3691.  Γöé Γöé RT Codec   Γöé Γöé Γöé               ΓööΓöÇΓöÇΓöÇΓöñ Compression Γöé         ΓöéVideo  Γöé
  3692.  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Stream      Γöé         ΓöéAdapterΓöé
  3693.                ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ Handler     Γöé         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3694. raw data               compression      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3695.  
  3696.  
  3697. ΓòÉΓòÉΓòÉ 7.4. Strategy Commands ΓòÉΓòÉΓòÉ
  3698.  
  3699. There are several generic strategy commands that are supported by all physical 
  3700. device drivers, video or otherwise. These are documented in the OS/2 Physical 
  3701. Device Driver Reference. The generic strategy commands supported by video 
  3702. device drivers are described in the following table. 
  3703.  
  3704. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3705. ΓöéFunctions  ΓöéDescription                   Γöé
  3706. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3707. ΓöéINIT       ΓöéInitializes the device.       Γöé
  3708. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3709. ΓöéOPEN       ΓöéOpens an instance of the      Γöé
  3710. Γöé           Γöédevice and prepares it for    Γöé
  3711. Γöé           Γöéuse.                          Γöé
  3712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3713. ΓöéCLOSE      ΓöéCloses an instance of the     Γöé
  3714. Γöé           Γöédevice.                       Γöé
  3715. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3716.  
  3717.  
  3718. ΓòÉΓòÉΓòÉ 8. PDD Sample for MPEG Video Playback Devices ΓòÉΓòÉΓòÉ
  3719.  
  3720. The Developer Connection Device Driver Source Kit for OS/2 provides a sample 
  3721. MPEG Video Playback physical device driver (PDD) to assist in the creation of 
  3722. PDDs for other video playback devices. This sample provides a code base for a 
  3723. new PDD, simplifies development, and illustrates the OS/2 MPEG Video Playback 
  3724. PDD model for a nonshared frame buffer device, also referred to as an overlay 
  3725. device. The ReelMagic card from Sigma Designs, Inc. is an example of such a 
  3726. device. 
  3727.  
  3728. The code contained in this sample was derived from a working driver. All 
  3729. hardware-specific code and header files have been removed from the sample. 
  3730.  
  3731.  
  3732. ΓòÉΓòÉΓòÉ 8.1. Source Code ΓòÉΓòÉΓòÉ
  3733.  
  3734. Source code for the PPD sample is located on the Developer Connection Device 
  3735. Driver Source Kit for OS/2 CD-ROM. Source files include documented headers, 
  3736. which provide detailed descriptions of the programming concepts and routines. 
  3737.  
  3738. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3739. ΓöéFile                     ΓöéDescription                        Γöé
  3740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3741. ΓöéMAKEFILE                 ΓöéMakefile.                          Γöé
  3742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3743. ΓöéINIT.ASM                 ΓöéHandles the Device Init message at Γöé
  3744. Γöé                         ΓöéOS/2 start-up time.                Γöé
  3745. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3746. ΓöéIOCTL.ASM                ΓöéIOCtl message routing and IOCtl    Γöé
  3747. Γöé                         Γöéprocessing.                        Γöé
  3748. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3749. ΓöéSUBSA.ASM                ΓöéDevice-specific Assembler routines.Γöé
  3750. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3751. ΓöéVEND.C                   ΓöéDevice-specific C routines.        Γöé
  3752. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3753. ΓöéVIDRMS1.INI              ΓöéDevice-specific .INI (defaults     Γöé
  3754. Γöé                         Γöésettings) file.                    Γöé
  3755. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3756. ΓöéVIDVCI.INC               ΓöéIOCtl interface description/header Γöé
  3757. Γöé                         Γöéfile.                              Γöé
  3758. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3759. ΓöéENDOF.ASM                ΓöéLabel to mark the end of the code. Γöé
  3760. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3761. ΓöéINOUTP.C                 ΓöéC-callable routines for port IN andΓöé
  3762. Γöé                         ΓöéOUT.                               Γöé
  3763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3764. ΓöéINOUTP.H                 ΓöéC interface header file for Port INΓöé
  3765. Γöé                         Γöéand Port OUT routines.             Γöé
  3766. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3767. ΓöéVIDVCI.H                 ΓöéIOCtl interface description/header Γöé
  3768. Γöé                         Γöéfile for .C.                       Γöé
  3769. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3770. ΓöéVIDVCI.INC               ΓöéIOCtl interface description/header Γöé
  3771. Γöé                         Γöéfile for .ASM.                     Γöé
  3772. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3773. ΓöéARUNTIME.ASM             ΓöéStandard C runtime routines writtenΓöé
  3774. Γöé                         Γöéin assembler.                      Γöé
  3775. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3776.  
  3777.  
  3778. ΓòÉΓòÉΓòÉ 8.2. Program Flow ΓòÉΓòÉΓòÉ
  3779.  
  3780.    1. The application opens the MPEG Digital Video Device through the media 
  3781.       control interface (MCI). 
  3782.  
  3783.    2. The media control device (MCD) finds the PDDname and VSDname in the 
  3784.       MMPM2.INI file and opens the VSD with the PDDname. 
  3785.  
  3786.    3. The VSD opens the PDD, reads in an .INI file, and passes the .INI file to 
  3787.       the PDD. The filename is based on the first seven characters of the 
  3788.       PDDname with the .INI extension. The .INI file is device-dependent. The 
  3789.       types of information in the .INI file may include default key color, 
  3790.       video alignment offsets, and video quality adjustments. 
  3791.  
  3792.    4. Through the DevInfo IOCTL, the VSD queries the PDD to determine its 
  3793.       capabilities. 
  3794.  
  3795.    5. The application loads an MPEG file through the MCI. 
  3796.  
  3797.         a. Through the standard I/O Proc interfaces, the MCD identifies MPGIO 
  3798.            as the I/O Proc for the MPEG file. 
  3799.  
  3800.         b. Through the standard compressor/decompressor (CODEC) interfaces, the 
  3801.            MPEG I/O Proc (MPEGIO) selects the MPEG hardware decompressor 
  3802.            (MPEGDC). The MCD tells the VSD handle to the MPEGDC so that it can 
  3803.            call the VSD/PDD to play back the compressed Video MPEG data. 
  3804.  
  3805.         c. Through the VSD and the PDD, the hardware CODEC MPEGDC loads the 
  3806.            device with its DSP/MicroCode from a file called VREEL.BIN. 
  3807.  
  3808.         d. The MCD opens the playback window, queries the VSD/PDD for the 
  3809.            transparent/key color, and paints the window with the key color. 
  3810.  
  3811.         e. The MCD tells the VSD/PDD the source movie size and window location. 
  3812.  
  3813.         f. The MCD tells the VSD/PDD to enable the monitor window and color 
  3814.            keying. 
  3815.  
  3816.    6. The application issues a play command through the MCI. 
  3817.  
  3818.    7. The MPEG I/O Proc reads part of the MPEG file. 
  3819.  
  3820.    8. The audio data is sent through the system to the audio PDD. 
  3821.  
  3822.       Note:  The MPEG audio data has an 8-byte header. The first 4 bytes 
  3823.              contain the initial audio system clock reference (SCR) and the 
  3824.              second 4 bytes contain the buffers' SCR from the MPEG data stream. 
  3825.  
  3826.    9. The video data is sent through the system to the MPEG CODEC (MPEGDC). If 
  3827.       this data is the first packet in the stream, MPEGDC will issue a 
  3828.       VCA_PlayStart IOCtl to the VSD/PDD to set up the device and initialize 
  3829.       the stream time. As the data arrives, MPEGDC issues a VCA_PlayData IOCtl 
  3830.       to the VSD/PDD. 
  3831.  
  3832.   10. As the audio PDD plays audio buffers, it reports back to the audio stream 
  3833.       time, which is eventually sent to MPEGDC. 
  3834.  
  3835.   11. The audio time is passed on the next VCA_PlayData IOCtl to the VSD/PDD. 
  3836.  
  3837.       Note:  When playing from the beginning of an MPEG file the audio time 
  3838.              will begin at zero regardless of the files initial SCR value. 
  3839.  
  3840.   12. Steps 7 through 11 are repeated until the end of the MPEG data/file is 
  3841.       reached. 
  3842.  
  3843.  
  3844. ΓòÉΓòÉΓòÉ 8.3. Audio and Video Synchronization ΓòÉΓòÉΓòÉ
  3845.  
  3846. The MPEGDC is a decompressor that does not require the MMPM/2 subsystem to 
  3847. control or time the flow of images to the decompressor. (Contrast the MPEGDC 
  3848. with the Ultimotion CODEC. The Ultimotion CODEC allows the MMPM/2 subsystem to 
  3849. control the flow of images to the decompressor, which is not called until it is 
  3850. time to display the image.) Data is sent to MPEGDC as fast it can be sent by 
  3851. the system. The PDD and its hardware must control the synchronization between 
  3852. audio and video. When the data is arriving too fast (the hardware data buffers 
  3853. are filled), the PDD must suspend processing on the MPEGDC thread until the 
  3854. hardware can accept more data. The hardware may contain over three-fourths of a 
  3855. second of video data waiting to be decompressed. The hardware will decompress 
  3856. the image when its SCR reaches the presentation time stamp (PTS) of the data 
  3857. packet in the hardware buffer. If the SCR is greater than the PTS, the hardware 
  3858. will speed up or skip images until the PTS and SCR match. 
  3859.  
  3860. To synchronize the audio with the video, the PDD must know the location in time 
  3861. of the audio. Because the audio and video have separate hardware with different 
  3862. clocks, the PDD will need the audio time to keep the audio and video 
  3863. synchronized. 
  3864.  
  3865. As the audio stream plays the audio buffer, it reports back the current audio 
  3866. time. This time is relayed to the MPEGDC. The MPEGDC will pass down the last 
  3867. reported audio time to the PDD on the VCA_PlayData IOCtl. To get the current 
  3868. audio SCR, the PDD multiplies the audio time by 30 to convert from MMTime to 
  3869. the MPEG 90KHz clock and adds the stream's intial SCR from the VCA_PlayStart 
  3870. IOCtl audio time. The PlayStart audio time is the initial stream SCR. It is 
  3871. required because the audio stream times reported by the audio subsystem are 
  3872. zero-based times and the PTSs in the video stream are based on the initial SCR. 
  3873. The PDD compares the hardware video SCR with the calculated audio SCR to 
  3874. determine if the video is ahead of or behind the audio. If the video and audio 
  3875. are not synchronized with the video hardware, the SCR must be updated to match 
  3876. the audio SCR. 
  3877.  
  3878. Note:  The audio time may contain the same value on subsequent PlayData 
  3879.        commands until the audio device driver updates the audio stream time. 
  3880.        The audio time can be set to zero, meaning no audio in the MPEG file or 
  3881.        no audio PDD. In either case, the audio and video synchronization logic 
  3882.        may be skipped. 
  3883.  
  3884.  
  3885. ΓòÉΓòÉΓòÉ 8.4. Running the Sample Device Driver ΓòÉΓòÉΓòÉ
  3886.  
  3887. The easiest way to install and run this sample device driver is to install 
  3888. Sigma Designs' ReelMagic through the OS/2 Warp Selective Install and copy this 
  3889. sample device driver over the Sigma Design Reel Magic device driver that has 
  3890. the same name. The file can be found in the MMOS2 subdirectory (usually 
  3891. \MMOS2\VIDRMS1.SYS). 
  3892.  
  3893. This device driver will not display images on the screen because it contains no 
  3894. hardware-specific code, but it will allow you to see and follow the commands 
  3895. and data to the device driver. 
  3896.  
  3897. Reboot the computer after installing this sample device driver. 
  3898.  
  3899.  
  3900. ΓòÉΓòÉΓòÉ 9. Audio Sample for Vendor-Specific Drivers ΓòÉΓòÉΓòÉ
  3901.  
  3902. OS/2 Version 3 provides sample files that assist in the creation of 
  3903. vendor-specific drivers (VSDs). The VSD defines a generic device driver-like 
  3904. interface which effectively decomposes high-level media control interface 
  3905. functions into more fundamental operations at the Ring 3 level. The following 
  3906. figure illustrates the program flow from the Media Device Manager (MDM) through 
  3907. the VSD and finally on to the audio adapter. 
  3908.  
  3909.  1    Media Control Interface functions are passed from the Media Device 
  3910.       Manager to the vendor-specific driver using VSD commands. 
  3911.  
  3912.  2    The VSD passes information to the device driver. This provides a Ring 3 
  3913.       interface to control audio devices. The VSD sample provided with the DDK 
  3914.       should be adequate to cover all basic audio functions. If your audio 
  3915.       adapter requires special processing, you might have to supplement the 
  3916.       sample VSD. To install the VSD, update the VSDDriver= option in the 
  3917.       generic install routines (or CARDINFO.RC). 
  3918.  
  3919.  3    The device driver controls the audio adapter. 
  3920.  
  3921.  4    After the audio adapter is initialized, the MDM passes control to the 
  3922.       Audio Stream Handler through the SPI interface. 
  3923.  
  3924.  5    The SPI interface sends/receives audio data from the audio stream 
  3925.       handler. 
  3926.  
  3927.  6    The Audio Stream Handler controls audio data passed to and from the 
  3928.       device driver. 
  3929.  
  3930.  
  3931. ΓòÉΓòÉΓòÉ 9.1. Source Code ΓòÉΓòÉΓòÉ
  3932.  
  3933. Source code for the vendor-specific driver (VSD) sample is located in the IBM 
  3934. Device Driver Source Kit for OS/2. Source files include documentation headers 
  3935. which provide detailed descriptions of the programming concepts and routines 
  3936. used in incorporating the sample. 
  3937.  
  3938. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3939. ΓöéAUDIOIF.C                ΓöéThis module checks for valid VSD   Γöé
  3940. Γöé                         Γöémessages and routes them to the    Γöé
  3941. Γöé                         Γöéappropriate function. It also      Γöé
  3942. Γöé                         Γöéperforms flag checking and error   Γöé
  3943. Γöé                         Γöéreporting.                         Γöé
  3944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3945. ΓöéVSDOPEN.C                ΓöéThis module retrieves the          Γöé
  3946. Γöé                         ΓöéVSD_AUDIOOPEN_PARMS structure from Γöé
  3947. Γöé                         Γöéthe VSD_OPEN message, checks to seeΓöé
  3948. Γöé                         Γöéif the hardware supports the       Γöé
  3949. Γöé                         Γöérequested mode and returns resourceΓöé
  3950. Γöé                         Γöémanagement information. VSDs shouldΓöé
  3951. Γöé                         Γöénot allocate hardware resource on  Γöé
  3952. Γöé                         Γöéthe device. This will happen on theΓöé
  3953. Γöé                         ΓöéVSD_RESTORE message.               Γöé
  3954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3955. ΓöéVSDSET.C                 ΓöéThe source file processes the      Γöé
  3956. Γöé                         Γöéfollowing VSD_SET messages:        Γöé
  3957. Γöé                         ΓöéVSD_SETVOLUME                      Γöé
  3958. Γöé                         ΓöéChanges the volume for the current Γöé
  3959. Γöé                         Γöéinstance.                          Γöé
  3960. Γöé                         ΓöéVSD_SETCONNECTOR                   Γöé
  3961. Γöé                         ΓöéEnable/Disables connectors.        Γöé
  3962. Γöé                         ΓöéVSD_SETMIXCONNECTIONS              Γöé
  3963. Γöé                         ΓöéConnects a source to a sink.       Γöé
  3964. Γöé                         ΓöéVSD_SETAUDIOATTRIBUTES             Γöé
  3965. Γöé                         ΓöéSets audio items such as treble,   Γöé
  3966. Γöé                         Γöébass etc.                          Γöé
  3967. Γöé                         ΓöéVSD_SETMONITOR                     Γöé
  3968. Γöé                         ΓöéEnables/disables audio monitoring. Γöé
  3969. Γöé                         ΓöéVSD_SETDATATYPE                    Γöé
  3970. Γöé                         ΓöéSets mode (i.e. bits/sample,       Γöé
  3971. Γöé                         Γöéchannels, sampling rate etc.).     Γöé
  3972. Γöé                         ΓöéVSD_SETMIXCONTROL                  Γöé
  3973. Γöé                         ΓöéSets the attributes for a mixer    Γöé
  3974. Γöé                         Γöéline.                              Γöé
  3975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3976. ΓöéVSDMAN.C                 ΓöéProcesses the following messages:  Γöé
  3977. Γöé                         ΓöéVSD_RESTORE                        Γöé
  3978. Γöé                         ΓöéConsumes hardware resources. On    Γöé
  3979. Γöé                         Γöésome audio cards, it will also loadΓöé
  3980. Γöé                         Γöéa DSP.                             Γöé
  3981. Γöé                         ΓöéVSD_SAVE                           Γöé
  3982. Γöé                         ΓöéRemoves hardware utilization (otherΓöé
  3983. Γöé                         Γöéinstances can use it after it is   Γöé
  3984. Γöé                         Γöédone).                             Γöé
  3985. Γöé                         ΓöéVSD_CLOSE                          Γöé
  3986. Γöé                         ΓöéCloses VSD and frees memory etc.   Γöé
  3987. Γöé                         ΓöéVSD_RESOURCE                       Γöé
  3988. Γöé                         ΓöéReturns resource management        Γöé
  3989. Γöé                         Γöéinformation to the caller.         Γöé
  3990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3991. ΓöéVSDIOCTL.C               ΓöéThis C module makes AUDIODD IOCTL  Γöé
  3992. Γöé                         Γöécalls. See the AUDIODD reference   Γöé
  3993. Γöé                         Γöéfor more information.              Γöé
  3994. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3995. ΓöéVSDCAP.C                 ΓöéProcesses the VSD_GETDEVCAPS       Γöé
  3996. Γöé                         Γöémessage. Returns the capabilities  Γöé
  3997. Γöé                         Γöéof the VSD to the caller.          Γöé
  3998. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3999. ΓöéVSDQUERY.C               ΓöéProcesses the following messages:  Γöé
  4000. Γöé                         ΓöéVSD_QUERYVOLUME                    Γöé
  4001. Γöé                         ΓöéReturns the current volume setting.Γöé
  4002. Γöé                         ΓöéVSD_QUERYCONNECTOR                 Γöé
  4003. Γöé                         ΓöéReturns the state of a hardware    Γöé
  4004. Γöé                         Γöéconnector.                         Γöé
  4005. Γöé                         ΓöéVSD_QUERYMIXCONNECTIONS            Γöé
  4006. Γöé                         ΓöéReturns the source/sink connection Γöé
  4007. Γöé                         Γöéinformation.                       Γöé
  4008. Γöé                         ΓöéVSD_QUERYAUDIOATTRIBUTES           Γöé
  4009. Γöé                         ΓöéReturns the status of audio        Γöé
  4010. Γöé                         Γöéattributes.                        Γöé
  4011. Γöé                         ΓöéVSD_QUERYMONITOR                   Γöé
  4012. Γöé                         ΓöéReturns if audio monitoring is     Γöé
  4013. Γöé                         Γöéavailable.                         Γöé
  4014. Γöé                         ΓöéVSD_QUERYDATATYPE                  Γöé
  4015. Γöé                         ΓöéReturns if a particular datatype isΓöé
  4016. Γöé                         Γöésupported in the VSD.              Γöé
  4017. Γöé                         ΓöéVSD_QUERYMIXCONTROL                Γöé
  4018. Γöé                         ΓöéReturns the status of audio        Γöé
  4019. Γöé                         Γöéattributes for a mixer sink/source.Γöé
  4020. Γöé                         ΓöéVSD_QUERYMIXLINE                   Γöé
  4021. Γöé                         ΓöéReturns line capabilities.         Γöé
  4022. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4023. ΓöéVSDCONN.C                ΓöéHandles AUDIODD input/output       Γöé
  4024. Γöé                         Γöéconnections.                       Γöé
  4025. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4026. ΓöéVSDDEF.C                 ΓöéProcesses shared memory for the    Γöé
  4027. Γöé                         ΓöéVSD.                               Γöé
  4028. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4029. ΓöéVSDINI.C                 ΓöéThis file reads a vendor specific  Γöé
  4030. Γöé                         Γöéini file, determines resource      Γöé
  4031. Γöé                         Γöémanagement information to be       Γöé
  4032. Γöé                         Γöéreturned on VSD_OPEN or            Γöé
  4033. Γöé                         ΓöéVSD_QUERYDATATYPE.                 Γöé
  4034. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4035. ΓöéOS2MIXER.C               ΓöéProcesses AUDIODD mixer IOCTLs. ForΓöé
  4036. Γöé                         Γöémore information, see Mixer IOCtl  Γöé
  4037. Γöé                         ΓöéFunctions Introduction.            Γöé
  4038. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4039. ΓöéVSDINI2.C                ΓöéMain entry point.                  Γöé
  4040. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4041. ΓöéDDCMD.C                  ΓöéProcesses streaming related        Γöé
  4042. Γöé                         Γöéfunctions. Communicates with       Γöé
  4043. Γöé                         Γöéprotect mode device driver to      Γöé
  4044. Γöé                         Γöéimplement DDCMD processing.        Γöé
  4045. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4046.  
  4047.  
  4048. ΓòÉΓòÉΓòÉ 9.2. VSD Architecture ΓòÉΓòÉΓòÉ
  4049.  
  4050. The VSD layer is a device-independent physical device driver-like layer that 
  4051. resides in Ring 3. It passes information between the media control interface 
  4052. subsystem and multimedia devices. A VSD has the following characteristics: 
  4053.  
  4054.    o  Does not deal with media control interface notifications. 
  4055.  
  4056.    o  Usually uses a single standard time format (MMTIME). 
  4057.  
  4058.    o  Usually does not have to deal with file management. 
  4059.  
  4060.  
  4061. ΓòÉΓòÉΓòÉ 9.3. Interface to the VSD ΓòÉΓòÉΓòÉ
  4062.  
  4063. The interface to the Vendor Specific Driver (VSD) uses an entry point called 
  4064. VSDEntry. First a DosLoadModule is issued for the VSD's DLL. The DosLoadModule 
  4065. returns a handle for the VSD. Then with the VSD handle, a DosQueryProcAddr is 
  4066. issued to find the VSD entry point (VSDEntry). From this point on, calls to the 
  4067. VSD are made through the following API: 
  4068.  
  4069. ULONG    VSDEntry ( HVSD       hvsd,     // Handle to VSD driver
  4070.                     ULONG      ulFunc,   // Function code
  4071.                     ULONG      ulFlags,  // Flags for driver
  4072.                     PVOID      pRequest) // Request Parameter Block/Value
  4073.  
  4074.  
  4075. ΓòÉΓòÉΓòÉ 9.4. Device Type Function Table ΓòÉΓòÉΓòÉ
  4076.  
  4077. Because the VSD interface supports commands for numerous data types, it is not 
  4078. necessary for every VSD to support all commands.  The only commands that must 
  4079. be supported are those for the particular device type (for example, audio, 
  4080. video, and so on) that the VSD is implementing. This section provides 
  4081. guidelines for which functions and flags must be supported and which functions 
  4082. and flags are optional. The following table shows which functions are Required 
  4083. (R) and Optional (O) by device type. 
  4084.  
  4085. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4086. ΓöéFunctions/Subfunctions            ΓöéDigitalΓöéAmp    ΓöéLaser  ΓöéFax/TamΓöé
  4087. Γöé                                  ΓöéAudio  ΓöéMixer  ΓöéDisk   Γöé       Γöé
  4088. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4089. ΓöéVSD_CLOSE                         ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4090. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4091. ΓöéVSD_GETDEVCAPS                    ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4092. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4093. ΓöéVSD_OPEN                          ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4094. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4095. ΓöéVSD_RESOURCE                      ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4096. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4097. ΓöéVSD_RESTORE                       ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4098. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4099. ΓöéVSD_SAVE                          ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4100. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4101. ΓöéVSD_QUERY                         ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4102. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4103. ΓöéVSD_SET                           ΓöéR      ΓöéR      ΓöéR      ΓöéR      Γöé
  4104. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4105. ΓöéVSD_ESCAPE                        ΓöéO      ΓöéO      ΓöéO      ΓöéO      Γöé
  4106. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4107.  
  4108. Legend:
  4109.  
  4110. R - Required Command
  4111. O - Optional Command
  4112.  
  4113. The flags that must be supported by a VSD for the VSD_SET command vary 
  4114. according to the media types it supports. The following table illustrates which 
  4115. flags are required for the specified media type. 
  4116.  
  4117. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4118. ΓöéFunctions/Subfunctions            ΓöéDigitalΓöéAmp    ΓöéLaser  ΓöéFax/TamΓöé
  4119. Γöé                                  ΓöéAudio  ΓöéMixer  ΓöéDisk   Γöé       Γöé
  4120. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4121. ΓöéVSD_SETVOLUME                     ΓöéO      ΓöéR      Γöé       Γöé       Γöé
  4122. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4123. ΓöéVSD_SETAUDIOATTRIBUTES            ΓöéO      ΓöéR      Γöé       Γöé       Γöé
  4124. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4125. ΓöéVSD_SETMONITOR                    Γöé       ΓöéR      Γöé       Γöé       Γöé
  4126. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4127. ΓöéVSD_SETDATATYPE                   Γöé       ΓöéR      Γöé       Γöé       Γöé
  4128. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4129. ΓöéVSD_SETCONNECTOR                  Γöé       Γöé       Γöé       Γöé       Γöé
  4130. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4131. ΓöéVSD_SETMIXCONNECTIONS             Γöé       Γöé       Γöé       Γöé       Γöé
  4132. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4133. ΓöéVSD_SETMIXCONTROL                 Γöé       Γöé       Γöé       Γöé       Γöé
  4134. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4135.  
  4136. Legend:
  4137.  
  4138. R - Required Command
  4139. O - Optional Command
  4140. <Blank> - Not Applicable
  4141.  
  4142. The flags that must be supported by a VSD for the VSD_QUERY command vary 
  4143. according to the media types it supports. The following table illustrates which 
  4144. flags are required for the specified media type. 
  4145.  
  4146. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4147. ΓöéFunctions/Subfunctions            ΓöéDigitalΓöéAmp    ΓöéLaser  ΓöéFax/TamΓöé
  4148. Γöé                                  ΓöéAudio  ΓöéMixer  ΓöéDisk   Γöé       Γöé
  4149. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4150. ΓöéVSD_QUERYCONNECTOR                ΓöéO      ΓöéR      Γöé       Γöé       Γöé
  4151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4152. ΓöéVSD_QUERYDATATYPE                 Γöé       ΓöéR      Γöé       Γöé       Γöé
  4153. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4154. ΓöéVSD_QUERYMONITOR                  Γöé       ΓöéO      Γöé       Γöé       Γöé
  4155. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4156. ΓöéVSD_QUERYVOLUME                   ΓöéO      ΓöéR      Γöé       Γöé       Γöé
  4157. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4158. ΓöéVSD_QUERYMIXCONNECTIONS           Γöé       ΓöéR      Γöé       Γöé       Γöé
  4159. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4160. ΓöéVSD_QUERYMIXCONTROL               Γöé       ΓöéR      Γöé       Γöé       Γöé
  4161. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4162. ΓöéVSD_QUERYMIXLINE                  Γöé       ΓöéR      Γöé       Γöé       Γöé
  4163. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4164.  
  4165. Legend:
  4166.  
  4167. R - Required Command
  4168. O - Optional Command
  4169. <Blank> - Not Applicable
  4170.  
  4171.  
  4172. ΓòÉΓòÉΓòÉ 9.5. Device States ΓòÉΓòÉΓòÉ
  4173.  
  4174. Media devices that transport data are considered to be in one of the following 
  4175. states at any given time: 
  4176.  
  4177.    o  Registered 
  4178.    o  Deregistered 
  4179.    o  Saved 
  4180.    o  Restored 
  4181.    o  Closed 
  4182.  
  4183.  When a device is opened and restored, the device context is assumed to be in 
  4184.  the restored state. The closed state can be viewed as both the initial state 
  4185.  and the termination state. Or this state can be thought of as not a state at 
  4186.  all, because a device context does not exist before it is opened, and ceases 
  4187.  to exist when it is closed. 
  4188.  
  4189.  The following figure lists the allowable device states across the top of the 
  4190.  table and indicates the changes in state that occur when the command messages 
  4191.  shown in the first column of the table are issued. This table assumes all 
  4192.  error conditions keep the device in its current state. For example, a waveform 
  4193.  player that is opened without an element remains in the stopped state when a 
  4194.  play is issued, and the MCD receives an error code. 
  4195.  
  4196.  The following figure is provided as a guide to application developers and MCD 
  4197.  writers. There can be no guarantee that every media device will conform to 
  4198.  this table, but every effort should be made to hide the complexity of the 
  4199.  device from the application. 
  4200.  
  4201.  Legend 
  4202.  
  4203.  *    After a restore, the device is considered active and available for use. 
  4204.       If the stream has been registered, it is restored to the state it was in 
  4205.       before the VSD_SAVE. 
  4206.  -    Error condition. 
  4207.  
  4208.  
  4209. ΓòÉΓòÉΓòÉ 10. Audio Device Driver Exerciser (PMADDE) Tool ΓòÉΓòÉΓòÉ
  4210.  
  4211. The Audio Device Driver Exerciser (PMADDE) is a PM-interface tool you can use 
  4212. to test code for low-level MMPM/2 components, such as audio device drivers or 
  4213. stream handlers.  Using PMADDE, you can test various stages of your code at the 
  4214. Ring 0 level.  This is useful when you want to verify that individual functions 
  4215. are working in your device driver without testing media control interface code 
  4216. (which might not be written yet).  Each time you complete a function, you can 
  4217. test the function to see that it works, and then continue with the development 
  4218. of your driver. 
  4219.  
  4220.  
  4221. ΓòÉΓòÉΓòÉ 10.1. Setting Up the Program ΓòÉΓòÉΓòÉ
  4222.  
  4223. Before using PMADDE, OS/2 2.x with MMPM/2 must be installed on your computer. 
  4224. The PMADDE source files are located in the DDK\MMOS2\MMTOOLKT\NEATSTUF\PMADDE 
  4225. subdirectory. To build the PMADDE program, change to the PMADDE subdirectory, 
  4226. type NMAKE, and press Enter. Your output is the executable file (PMADDE.EXE). 
  4227. You can then type PMADDE from the command line to start the program.  The Audio 
  4228. Device Driver Exerciser window is displayed. 
  4229.  
  4230. The PMADDE program defaults to the first waveform audio device it locates.  To 
  4231. change the default option, select Options.  Select Change Device to display the 
  4232. Change Audio Device window. 
  4233.  
  4234. This window contains information about each installed audio device including 
  4235. the logical device name, physical device name, and product information.  Select 
  4236. the audio device you want to test. 
  4237.  
  4238.  
  4239. ΓòÉΓòÉΓòÉ 10.2. PMADDE Functions ΓòÉΓòÉΓòÉ
  4240.  
  4241. The PMADDE tool uses Stream Programming Interface Functions to test your audio 
  4242. device driver.  The Data Stream menu on the Audio Device Driver Exerciser 
  4243. window includes the following choices: (See Stream Setup and Control for 
  4244. additional information on SPI functions.) 
  4245.  
  4246. SpiGet Handler 
  4247.  
  4248. This option sends an SpiGetHandler function to return a stream handler ID and 
  4249. ensure the stream handler is loaded.  Although this function does not perform 
  4250. any actions on the audio device driver, you must complete this function before 
  4251. creating a stream. 
  4252.  
  4253. SpiCreate 
  4254.  
  4255. This option sends an SpiCreateStream function to the stream handler to create a 
  4256. data stream of a given data type.  The data is then passed to the audio device 
  4257. driver using a DDCMD_REG_STREAM message, which establishes a communication link 
  4258. and registers a stream instance with the device driver. 
  4259.  
  4260. SpiAssociate 
  4261.  
  4262. This option sends an SpiAssociate function to link a stream object with a given 
  4263. stream source or target.  A data object must be identified for use with a 
  4264. stream before the stream can be started. 
  4265.  
  4266. SpiStart 
  4267.  
  4268. This option sends an SpiStartStream function to start data streaming for a 
  4269. stream instance or group of streams.  The device driver receives several calls 
  4270. including DDCMD_SETUP, DDCMD_WRITE, and DDCMD_CONTROL (DDCMD_START) messages. 
  4271.  
  4272. SpiStop 
  4273.  
  4274. This option sends an SpiStopStream function to the stream handler, which is 
  4275. translated to the audio device driver as a DDCMD_CONTROL (DDCMD_STOP) message. 
  4276.  
  4277. SpiInstall Protocol 
  4278.  
  4279. This option sends an SpiInstallProtocol function to install stream protocol in 
  4280. the stream handler.  It also generates an internal Stream Protocol Control 
  4281. Block (SPCB) key, which is used to differentiate between multiple SPCBs of the 
  4282. same data stream type.  If your device driver can perform using a type of data 
  4283. format that the MMPM/2 subsystem currently does not use as its default, use 
  4284. this option to install new protocol that your device driver supports. 
  4285.  
  4286. SpiDestroy 
  4287.  
  4288. This option sends an SpiDisableSync function to destroy the stream you created 
  4289. with SpiCreate. SpiDestroy calls the DDCMD_CONTROL (DDCMD_STOP) and 
  4290. DDCMD_DEREG_STREAM messages at the inter-device driver communication (IDC) 
  4291. level. (See Inter-Device Driver Communication (IDC) Interface.) 
  4292.  
  4293. SpiSeek 
  4294.  
  4295. This option sends an SpiSeekStream function to set the time within the audio 
  4296. device driver.  You can seek the stream to a certain position, back to 0, or 
  4297. position it forward. 
  4298.  
  4299. SpiQuery Time 
  4300.  
  4301. This option sends an SpiGetTime function to the stream handler, which issues a 
  4302. DDCMD_STATUS message to the audio device driver to report the current stream 
  4303. time in milliseconds. 
  4304.  
  4305.  
  4306. ΓòÉΓòÉΓòÉ 10.3. PMADDE Scenario ΓòÉΓòÉΓòÉ
  4307.  
  4308. The following test scenario uses the PMADDE program to play back a waveform 
  4309. audio file from the source file system stream handler (FSSH) to the target 
  4310. audio system stream handler (AUDIOSH$). See Stream Setup and Control for 
  4311. detailed information on the phases of operation for a data stream. 
  4312.  
  4313.  
  4314. ΓòÉΓòÉΓòÉ 10.3.1. Step 1 ΓòÉΓòÉΓòÉ
  4315.  
  4316. To get a handler ID, select Data Stream.  Select SpiGet Handler for a list of 
  4317. MMPM/2 installed handlers. 
  4318.  
  4319. Select AUDIOSH$ (audio stream handler) and FSSH (file system stream handler), 
  4320. and select OK. 
  4321.  
  4322. Note:  AUDIOSH$ and FSSH are the only handlers that can be tested using the 
  4323.        PMADDE program.  The source code can be modified to create tools that 
  4324.        test stream handlers other than AUDIOSH$ and FSSH. 
  4325.  
  4326.  The Active Handlers window then lists the handler names and classes and the 
  4327.  IDs for AUDIOSH$ and FSSH. 
  4328.  
  4329.  A handler ID is provided for an active handler to be a source (producer) and a 
  4330.  target (consumer). After you have both a producer and consumer stream handler, 
  4331.  you can advance to step 2 to create the stream. 
  4332.  
  4333.  
  4334. ΓòÉΓòÉΓòÉ 10.3.2. Step 2 ΓòÉΓòÉΓòÉ
  4335.  
  4336. To create the stream, select Data Stream. Select SpiCreate to display the 
  4337. Create Data Stream window. 
  4338.  
  4339. Enter the input source and target stream handler IDs.  For example, enter the 
  4340. FSSH source ID (4) and the AUDIOSH$ target ID (2).  Select a stream data type, 
  4341. and select OK. 
  4342.  
  4343. The Stream State field in the Active Streams window displays information about 
  4344. the stream that has been created. The audio device driver has accepted the 
  4345. audio IOCtls and the IDC APIs to create the stream. 
  4346.  
  4347.  
  4348. ΓòÉΓòÉΓòÉ 10.3.3. Step 3 ΓòÉΓòÉΓòÉ
  4349.  
  4350. To associate the stream with an audio file, select Data Stream.  Select 
  4351. SpiAssociate to display the Associate Data Stream window. 
  4352.  
  4353. Type the input stream number, an audio file name, and select OK.  You can now 
  4354. start the stream you created, or you can create several streams. 
  4355.  
  4356.  
  4357. ΓòÉΓòÉΓòÉ 10.3.4. Step 4 ΓòÉΓòÉΓòÉ
  4358.  
  4359. To start the stream, select Data Stream. Select SpiStart to display the Start 
  4360. Stream window. 
  4361.  
  4362. Type the stream number and select a start flag. The SpiStartStream function 
  4363. starts data streaming in a specific stream or in a synchronized group of 
  4364. streams. Select the Start flag to start the stream immediately. Select the 
  4365. Preroll flag to cause the source stream handler to start and fill the buffers. 
  4366. An event is generated by the Sync/Stream Manager when a stream is prerolled. 
  4367. The application can then start the stream (or streams) for improved real-time 
  4368. response and initial synchronization of streams. 
  4369.  
  4370. You can perform a stop at any time on the waveform audio file. To stop a 
  4371. stream, select Data Stream. Select SpiStop to display the Stop Stream window. 
  4372.  
  4373. Type the stream number and select the appropriate stop flag. There are three 
  4374. types of stops. The first is the regular stop or pause, which pauses the data 
  4375. stream but does not disturb any data.  The second type of stop is a discard 
  4376. stop, which stops the stream immediately and discards any data left in the 
  4377. stream buffers. The third type is a flush stop, which stops the source stream 
  4378. handler, but the target stream handler continues until the last buffer held 
  4379. when the stop was requested is consumed by the target stream handler. 
  4380.  
  4381. For a discard or flush stop, the Sync/Stream Manager detects when the stream 
  4382. handlers have stopped and return all buffers.  At this point, the Sync/Stream 
  4383. Manager notifies the application with an EVENT_STREAM_STOPPED event in the 
  4384. Event Monitor window. 
  4385.  
  4386. Streams can be restarted after a stop or end-of-stream (EOS).  For the EOS 
  4387. case, the stream would need to be reassociated with another object or a seek 
  4388. backward to some point in the stream would need to be performed to actually 
  4389. start streaming again.  A flush stop after a pause stop causes the stream to 
  4390. flush the existing buffers to the output device. 
  4391.  
  4392. Note:  Typically, data streaming continues until the end of the stream.  When 
  4393.        this happens, the Sync/Stream Manager sends an EVENT_EOS event to the 
  4394.        event routine of the application. To restart the stream after you have 
  4395.        paused or stopped it, select SpiStart from the Data Stream menu.  The 
  4396.        program restarts the stream and informs you when an end-of-stream (EOS) 
  4397.        is reached. 
  4398.  
  4399.  
  4400. ΓòÉΓòÉΓòÉ 10.3.5. Step 5 ΓòÉΓòÉΓòÉ
  4401.  
  4402. To get the stream time, select SpiQuery Time from the Data Stream menu. 
  4403.  
  4404. Type the input stream number and select OK. The stream time is displayed in 
  4405. milliseconds. 
  4406.  
  4407.  
  4408. ΓòÉΓòÉΓòÉ 10.4. PMADDE Script Interface ΓòÉΓòÉΓòÉ
  4409.  
  4410. To pipe a test script that already exists into the program, select Run Script 
  4411. File from the Options menu. 
  4412.  
  4413. Select the script file you want to pipe into the PMADDE program, and select OK. 
  4414. If the script file exists, the user interface of the PMADDE program is disabled 
  4415. and commands are accepted from the script file only. The following figure is an 
  4416. example of a PMADDE test script. 
  4417.  
  4418.  
  4419. ;*****************************************************
  4420. ;**  Audio Device Driver Exerciser V 1.0
  4421. ;**    Test Script File.
  4422. ;*****************************************************
  4423. BEGIN                 ;
  4424. DEVICENAME AUDIO1$    ; device name
  4425. GETHANDLER  AUDIOSH$  ; stream handler name
  4426. GETHANDLER  FSSH      ;
  4427. CREATE  3  2  3       ; Source ID, Target ID & Data type index
  4428. SLEEP 1000            ; Sleep for 1000 milliseconds
  4429. CREATE  3  2  3       ;
  4430. SLEEP 1000            ;
  4431. ASSOCIATE  1  WELCOM.WAV  ; stream number & Audio file
  4432. SLEEP 1000            ;
  4433. ASSOCIATE  2  PMADDE.WAV  ;
  4434. SLEEP 1000            ;
  4435. START  1  0           ; stream number & flag (0=Start, 1=Preroll)
  4436. SLEEP 5000            ;
  4437. START  2  0           ;
  4438. END                   ;
  4439.  
  4440. The following information describes the syntax associated with the PMADDE 
  4441. script language. 
  4442.  
  4443.  Syntax    Description 
  4444.  
  4445.  BEGIN 
  4446.            Starts the script file. 
  4447.  
  4448.  DEVICENAME device name 
  4449.            Specifies the physical device name. 
  4450.  
  4451.  CREATE hidSource hidTarget datatype 
  4452.            Creates a data stream of datatype from hidSource to hidTarget. 
  4453.            Select SpiCreate from the Data Stream menu to view the stream data 
  4454.            types available.  The data types listed correspond to a number 
  4455.            beginning with 0.  The second data type in the list is 1, the third 
  4456.            is 2, and so on. To create a data stream from FSSH to AUDIOSH$ of 
  4457.            data type PCM, 16-bit, 44 kHz, and mono, type the following: 
  4458.  
  4459.                       CREATE 4 2 3;
  4460.  
  4461.  ASSOCIATE stream # filename 
  4462.            Associates a data stream with a data object. 
  4463.  
  4464.  START stream# startflags 
  4465.            Starts a data stream. The startflags can be one of the following: 
  4466.  
  4467.    o  PREROLL 
  4468.    o  START 
  4469.  
  4470.  STOP stream# stopflags 
  4471.            Stops a data stream. The stopflags can be one of the following: 
  4472.  
  4473.    o  FLUSH 
  4474.    o  DISCARD 
  4475.    o  PAUSE 
  4476.  
  4477.  SEEK stream# mode units position 
  4478.            Seeks to the specified position in the data stream using the 
  4479.            specified units and specified mode. 
  4480.  
  4481.  DESTROY stream# 
  4482.            Destroys the specified stream. 
  4483.  
  4484.  QRYTIME stream# 
  4485.            Queries the stream time of the specified stream. 
  4486.  
  4487.  SLEEP sleepinterval 
  4488.            Suspends execution of the script file for the duration of the 
  4489.  
  4490.  END 
  4491.            Ends the script file. 
  4492.  
  4493.  You can also create a test script by recording your keystrokes to be piped 
  4494.  into the PMADDE program at a later time. You must specify a name for the 
  4495.  script file you want to create when starting the PMADDE program. If the script 
  4496.  file exists, the user interface is disabled and commands are accepted from the 
  4497.  script file only. If the script file specified does not already exist, all 
  4498.  actions are recorded and a script file is created. For example, to create a 
  4499.  script file named TEST.SCR, use the following syntax: 
  4500.  
  4501.   PMADDE TEST.SCR logfile
  4502.  
  4503.  Note:  You must specify a logfile (for example, TEST.LOG) when creating a test 
  4504.         script. If you are using the command-line interface to execute a test 
  4505.         script that already exists, you must also specify a logfile. 
  4506.  
  4507.  
  4508. ΓòÉΓòÉΓòÉ 10.5. Stream Setup and Control ΓòÉΓòÉΓòÉ
  4509.  
  4510. There are five phases of operation for a data stream: 
  4511.  
  4512.    1. Configuration 
  4513.    2. Creation 
  4514.    3. Association 
  4515.    4. Streaming/Synchronization 
  4516.    5. Destruction 
  4517.  
  4518.  Each of these five phases involves specific operational steps that an 
  4519.  application can control.  In any phase, the program can take action to modify 
  4520.  certain options.  The five phases are described below. 
  4521.  
  4522.  Phase 1.  Configuration 
  4523.  
  4524.  After installation, each system has predefined or default connection 
  4525.  configurations that allow applications to operate according to general default 
  4526.  parameters chosen by the user or by the installation program.  An example of 
  4527.  stream configuration is where waveform audio data is configured to stream to 
  4528.  the Line 1 Output on the IBM Audio Playback and Capture Adapter.  This is a 
  4529.  default connection that determines which hardware output resource the waveform 
  4530.  audio stream will connect to.  These configuration options are established 
  4531.  when you run the Multimedia Setup program of the MMPM/2 system.  Application 
  4532.  installation utility programs can also set up connection defaults.  Note that 
  4533.  the source and target stream handler, as well as the source and target device 
  4534.  association, must be specified when the stream is created. 
  4535.  
  4536.  Phase 2.  Creation 
  4537.  
  4538.  When a media control driver (or other multimedia application) determines that 
  4539.  data will be streamed between devices, it can invoke SpiCreateStream, which 
  4540.  results in the stream being created.  The caller specifies the source and 
  4541.  target stream handler IDs, source and target device-specific information, and 
  4542.  the stream data type.  (Use the SpiEnumerateHandlers function to return a list 
  4543.  of stream handler names.  You can then use the SpiGetHandler function to 
  4544.  return a handler ID given a handler name.  Use the SpiEnumerateProtocols 
  4545.  function to determine which data types a given stream handler can process.) 
  4546.  
  4547.  The Sync/Stream Manager notifies each of the two stream handlers that a stream 
  4548.  is being created, and each stream handler must return a valid stream protocol 
  4549.  control block (SPCB) to the Sync/Stream Manager.  The Sync/Stream Manager will 
  4550.  negotiate the parameters of the stream and notify the handlers by a 
  4551.  SHC_NEGOTIATE_RESULT call to each handler.  Negotiation consists of 
  4552.  determining which SPCB parameters both stream handlers can accept.  This 
  4553.  includes stream buffer sizes and the number of buffers needed to maintain 
  4554.  continuous streaming of data. 
  4555.  
  4556.  Typically, the Sync/Stream Manager allocates buffers for the stream, but it is 
  4557.  possible to use the application buffer directly.  The SPCBBUF_USERPROVIDED 
  4558.  flag in the SPCB indicates whether to use provided buffers or to allocate 
  4559.  buffers.  This is useful for streaming to or from the memory stream handler. 
  4560.  In a split stream situation, a particular stream might not allocate its own 
  4561.  buffers but use the buffers of another stream.  In other words, it might share 
  4562.  buffers.  This is useful for interleaved data coming from one source but going 
  4563.  to more than one destination. 
  4564.  
  4565.  For Sync/Stream Manager-allocated buffers, stream buffer allocation is done 
  4566.  during stream creation.  The number of buffers to allocate is taken from the 
  4567.  "negotiated" SPCB.  The buffers are allocated and then locked, so that they 
  4568.  will not be paged out to disk.  The buffers are unlocked and freed upon an 
  4569.  SpiDestroyStream request.  These buffers are available at Ring 3 in the 
  4570.  process linear space and Ring 0 in global linear system memory.  The 
  4571.  Sync/Stream Manager will provide global descriptor table (GDT) selectors to 
  4572.  allow Ring 0 stream handlers to access the buffer memory.  The stream handler 
  4573.  can assume that the Sync/Stream Manager manages the GDT selectors used.  The 
  4574.  maximum buffer size is 64KB. 
  4575.  
  4576.  Both handlers (source and target) share access to the buffers allocated by the 
  4577.  Sync/Stream Manager.  Note that if the minimum buffer space (specified in the 
  4578.  SPCB) is not available, the stream creation will fail.  The allocation of 
  4579.  memory when the stream is created prevents the need to perform allocations of 
  4580.  physical memory when the stream is active, which could result in disruption of 
  4581.  data flow affecting the real-time performance of the stream. Therefore, it is 
  4582.  advantageous to allow the Sync/Stream Manager to allocate buffers and lock 
  4583.  them at stream creation time instead of providing buffers to the Sync/Stream 
  4584.  Manager that probably cannot be locked when the stream is created. 
  4585.  
  4586.  Phase 3.  Association 
  4587.  
  4588.  After a stream is created, and before it is possible to start the stream, it 
  4589.  is necessary to make sure that a data resource, or stream object, is 
  4590.  identified for use with the stream.  For example, if the application wishes to 
  4591.  stream waveform data from application memory (the application dynamically 
  4592.  creates the waveform), then the application must make an association between 
  4593.  the stream and the memory object.  This is accomplished using the SpiAssociate 
  4594.  function. 
  4595.  
  4596.  An association for a specific stream handler must match the type of the stream 
  4597.  handler as well as the data type of the stream.  Each stream handler will list 
  4598.  supported object types in response to calling SpiEnumerateProtocols.  Note 
  4599.  that only one data object can be associated with a stream once the stream is 
  4600.  created, and it is specific to a particular stream handler (that is, source or 
  4601.  target).  Associations can be changed, but the stream cannot be active; it 
  4602.  must be stopped first (discard stop, flush stop, or EOS).  The SpiAssociate 
  4603.  function can be used to "reassociate" data objects for a stream handler as 
  4604.  long as the stream handler is the type that the stream was created to handle. 
  4605.  
  4606.  Note:  Devices should be associated with stream handlers only when the stream 
  4607.         is created. 
  4608.  
  4609.  Phase 4.  Streaming/Synchronization 
  4610.  
  4611.  There are several stream operation functions, and each can be used in 
  4612.  conjunction with stream synchronization. 
  4613.  
  4614.  The following paragraphs contain outlines of the function descriptions. 
  4615.  
  4616.  SpiStartStream 
  4617.            Starts data streaming in a specific stream or a synchronized group 
  4618.            of streams, depending on the flags for this function.  This function 
  4619.            also allows a stream or group of streams to be prerolled.  Preroll 
  4620.            allows the source stream handlers to start and fill the buffers.  An 
  4621.            event is generated by the Sync/Stream Manager when the streams are 
  4622.            prerolled.  The application can then start the streams for better 
  4623.            real-time response and initial synchronization of streams. 
  4624.  
  4625.            If multiple streams are involved, when the synchronization master is 
  4626.            started or prerolled, all slave streams can also be started or 
  4627.            prerolled.  This synchronization relationship can be set up by using 
  4628.            the SpiEnableSync function after all streams are created. 
  4629.  
  4630.            The active stream protocol governs the amount of data buffered and 
  4631.            the rate of data flow maintained.  Both source and target stream 
  4632.            handlers are controlled by the stream protocol (SPCB).  Both 
  4633.            handlers contribute to the contents of the SPCB when the stream is 
  4634.            created. Stream events such as cue points are detected by the 
  4635.            appropriate stream handler and an event notification is sent to the 
  4636.            process that owns the stream. 
  4637.  
  4638.  SpiStopStream 
  4639.            Stops data streaming in a given stream or streams.  There are three 
  4640.            types of stops for this command. The first is the regular stop or 
  4641.            pause, which pauses the data stream, but does not disturb any data. 
  4642.            The second kind of stop is a discard stop, which requests that the 
  4643.            stream be stopped immediately and the data left in the stream 
  4644.            buffers be discarded.  The third type is a flush stop.  This stop 
  4645.            requests that the source stream handler be stopped, but that the 
  4646.            target stream handler continue until the last buffer held at the 
  4647.            time the stop was requested is consumed by the target stream 
  4648.            handler. 
  4649.  
  4650.            For a discard or flush stop, the Sync/Stream Manager will detect 
  4651.            when the stream handlers have stopped and return all buffers.  At 
  4652.            this point, the Sync/Stream Manager notifies the application with an 
  4653.            EVENT_STREAM_STOPPED event. 
  4654.  
  4655.            Streams can be restarted after a stop or end-of-stream (EOS).  For 
  4656.            the EOS case, the stream would need to be reassociated with another 
  4657.            object or a seek backward to some point in the stream would need to 
  4658.            be performed to actually start streaming again.  A flush stop after 
  4659.            a pause stop causes the stream to flush the existing buffers to the 
  4660.            output device. 
  4661.  
  4662.            Note:  Typically, data streaming continues until the end of the 
  4663.                   stream. When this happens, the Sync/Stream Manager sends an 
  4664.                   EVENT_EOS event to the applications event routine. 
  4665.  
  4666.  SpiSeekStream 
  4667.            Seeks to a specific point in the stream source object.  Depending on 
  4668.            the type of object associated with the stream at a source or target, 
  4669.            this function directs the appropriate stream handler to relocate the 
  4670.            current stream index, or position, to the specified location.  The 
  4671.            object types that support this function are memory, file, CD track, 
  4672.            and library object.  Use this function to reposition the stream 
  4673.            forward or backward from its current position.  This can be 
  4674.            performed only on a newly created, unstarted stream or a stopped 
  4675.            stream (discard stop, flush stop, or EOS). 
  4676.  
  4677.  SpiEnableSync 
  4678.            Establishes stream synchronization between multiple streams.  Stream 
  4679.            synchronization is automatically handled by the stream protocol, 
  4680.            depending on whether a given stream is the synchronization master or 
  4681.            slave.  Once a synchronization relationship is established, 
  4682.            synchronization is maintained according to real-time events detected 
  4683.            at the master and passed on to the slaves.  The application does not 
  4684.            have additional stream events to process due to synchronization. 
  4685.            Only one stream can be a master. 
  4686.  
  4687.  SpiDisableSync 
  4688.            Stops stream synchronization for a given stream or streams. A 
  4689.            previously designated stream master is disabled, and all 
  4690.            synchronization under that master is deactivated. 
  4691.  
  4692.  SpiGetTime 
  4693.            Fills in the current stream-specific time information.  This allows 
  4694.            an application to query the stream time.  This function is supported 
  4695.            for any stream that is active or stopped, and will not disrupt data 
  4696.            transport in the stream.  A more accurate method to determine the 
  4697.            stream time is to enable stream time events, which will report 
  4698.            stream time continuously and in real-time to the application. 
  4699.  
  4700.  Phase 5.  Destruction 
  4701.  
  4702.  When a stream is no longer to be used by an application, it must be destroyed. 
  4703.  Note that the stream handlers involved can remain active with other streams, 
  4704.  and will remain available to create additional streams (without additional 
  4705.  calls to SpiGetHandler).  The application will receive no further stream 
  4706.  events in its event handling routine after calling the SpiDestroyStream 
  4707.  function.  All system resources allocated to the stream are released, 
  4708.  including the physical memory used to create stream buffers.  After the stream 
  4709.  is destroyed, the stream handler state reverts back to its condition 
  4710.  immediately prior to the creation of the stream.  If the stream being 
  4711.  destroyed is a master stream of a sync group, all synchronization under that 
  4712.  master stream will become inactive.  If the stream is a slave in a sync group, 
  4713.  the stream will be removed from the sync group and will not affect the master 
  4714.  or other slave streams in the group. 
  4715.  
  4716.  
  4717. ΓòÉΓòÉΓòÉ <hidden> stream object ΓòÉΓòÉΓòÉ
  4718.  
  4719. A stream object is the data resource or device channel that represents either 
  4720. the data source or target for a stream.  In order for a stream to obtain data, 
  4721. it must be associated with a source stream object.  This can be a waveform 
  4722. audio data object such as a file on the file system, or it can be a MIDI mapper 
  4723. stream handler from the MIDI hardware adapter.  Also, the stream target handler 
  4724. must be associated with a target stream object.  This could be a file which 
  4725. will be written to, or it could be an output device that will store, convert, 
  4726. or transmit the data. 
  4727.  
  4728. Association of a stream with a source stream object, target stream object, or 
  4729. both may be permanent.  In other cases, associations must be made whenever the 
  4730. stream is created and before the stream may be manipulated.  For example, if 
  4731. there is only one audio adapter with only one input line, then the audio stream 
  4732. handler device driver will always associate a stream with that input line 
  4733. whenever it acts as a source. 
  4734.  
  4735. Associations are tied to the concept of connections at the media control 
  4736. interface level of the system.  Default connections can be made between logical 
  4737. devices and the actual physical device that performs the function of the 
  4738. logical device.  Media drivers must use this connection information to 
  4739. determine the source and target handler names to be used on a subsequent 
  4740. SpiGetHandler.  The connection information is also used to provide the source 
  4741. and target device or object associations used on an SpiCreateStream function. 
  4742.  
  4743. Devices may be associated with stream handlers at stream creation time only. An 
  4744. SpiAssociate request can be used, however, to "re-associate" data objects with 
  4745. stream handlers after the stream has been created. The stream must be stopped 
  4746. (discarded, flushed, or EOS) to do this. 
  4747.  
  4748.  
  4749. ΓòÉΓòÉΓòÉ <hidden> stream protocol ΓòÉΓòÉΓòÉ
  4750.  
  4751. A stream protocol defines key parameters that control the behavior of a data 
  4752. stream.  The application can query, install, or deinstall a specific SPCB from 
  4753. a stream handler.  Each stream handler supports one or more stream protocols. 
  4754. An SPCB is uniquely identified by the value of the stream data type (SPCB key). 
  4755. One field in the SPCB key allows the stream handler to have multiple SPCB's 
  4756. installed for the same data type.  This field can be used by an application to 
  4757. specify which SPCB, for any data type, it wants to use.  Each application in 
  4758. the system could define multiple SPCB for the same data type (see the ulType 
  4759. field in the SPCBKEY data structure).  The application can modify a stream 
  4760. protocol by installing a new SPCB and deinstalling the old SPCB. 
  4761.  
  4762.  
  4763. ΓòÉΓòÉΓòÉ 10.6. Stream Programming Interface Functions ΓòÉΓòÉΓòÉ
  4764.  
  4765. The stream programming interface (SPI) contains functions exported by the 
  4766. Sync/Stream Manager to support applications that control real-time data 
  4767. streams.  These functions are used to perform stream creation, association, 
  4768. configuration, operation, synchronization, and destruction functions. SPI 
  4769. functions also include enabling applications to modify Stream Protocol Control 
  4770. Blocks (SPCBs) and querying a stream's time information. 
  4771.  
  4772. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4773. ΓöéFunction                  ΓöéDescription                       Γöé
  4774. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4775. ΓöéSpiAssociate              ΓöéAssociates a data object with a   Γöé
  4776. Γöé                          Γöéstream handler.                   Γöé
  4777. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4778. ΓöéSpiCreateStream           ΓöéCreates a stream instance between Γöé
  4779. Γöé                          Γöéa source and a target stream      Γöé
  4780. Γöé                          Γöéhandler.                          Γöé
  4781. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4782. ΓöéSpiDestroyStream          ΓöéRemoves a stream instance from theΓöé
  4783. Γöé                          Γöésystem.                           Γöé
  4784. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4785. ΓöéSpiDetermineSyncMaster    ΓöéDetermines the best master stream Γöé
  4786. Γöé                          Γöéto be used in a sync group.       Γöé
  4787. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4788. ΓöéSpiDisableEvent           ΓöéDisables event detection for a    Γöé
  4789. Γöé                          Γöéparticular event.                 Γöé
  4790. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4791. ΓöéSpiDisableSync            ΓöéRemoves a group of streams.       Γöé
  4792. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4793. ΓöéSpiEnableEvent            ΓöéEnables event detection for a     Γöé
  4794. Γöé                          Γöéparticular event.                 Γöé
  4795. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4796. ΓöéSpiEnableSync             ΓöéEstablishes a group of streams to Γöé
  4797. Γöé                          Γöésynchronize the streams.          Γöé
  4798. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4799. ΓöéSpiEnumerateHandlers      ΓöéReturns a list of the stream      Γöé
  4800. Γöé                          Γöéhandler names installed in the    Γöé
  4801. Γöé                          ΓöéSPI.INI file.                     Γöé
  4802. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4803. ΓöéSpiEnumerateProtocols     ΓöéReturns a list of stream protocol Γöé
  4804. Γöé                          Γöékeys for the specified stream     Γöé
  4805. Γöé                          Γöéhandler.                          Γöé
  4806. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4807. ΓöéSpiGetHandler             ΓöéReturns the handler ID for the    Γöé
  4808. Γöé                          Γöéspecified stream handler.         Γöé
  4809. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4810. ΓöéSpiGetProtocol            ΓöéQueries a stream handler for a    Γöé
  4811. Γöé                          Γöéspecified stream protocol.        Γöé
  4812. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4813. ΓöéSpiGetTime                ΓöéQueries the current stream time.  Γöé
  4814. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4815. ΓöéSpiInstallProtocol        ΓöéInstalls or removes a specified   Γöé
  4816. Γöé                          Γöéstream protocol for a stream      Γöé
  4817. Γöé                          Γöéhandler.                          Γöé
  4818. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4819. ΓöéSpiSeekStream             ΓöéSeeks to a specified point in the Γöé
  4820. Γöé                          Γöéstream object or sets the current Γöé
  4821. Γöé                          Γöéstream time.                      Γöé
  4822. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4823. ΓöéSpiStartStream            ΓöéStarts data streaming for a singleΓöé
  4824. Γöé                          Γöéstream instance or a group of     Γöé
  4825. Γöé                          Γöéstreams.                          Γöé
  4826. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4827. ΓöéSpiSendMsg                ΓöéSends a message to a stream       Γöé
  4828. Γöé                          Γöéhandler.                          Γöé
  4829. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4830. ΓöéSpiStopStream             ΓöéStops data streaming for a single Γöé
  4831. Γöé                          Γöéstream instance or a group of     Γöé
  4832. Γöé                          Γöéstreams.                          Γöé
  4833. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4834.  
  4835.  
  4836. ΓòÉΓòÉΓòÉ 11. AP2/P2STRING Tool ΓòÉΓòÉΓòÉ
  4837.  
  4838. This chapter describes the AP2 and P2STRING tools. 
  4839.  
  4840.  
  4841. ΓòÉΓòÉΓòÉ 11.1. AP2 ΓòÉΓòÉΓòÉ
  4842.  
  4843. AP2 is the easiest and most complete automated method of testing the audio and 
  4844. video device driver. AP2 provides an easy to use PM interface to the P2STRING 
  4845. tool with a complete set of test scripts for the audio and video device driver. 
  4846. AP2 queries the device driver to determine the functions it supports by using 
  4847. the capability MCI (media control interface) string command. Based on these 
  4848. compatabilities, AP2 will create a list of test scripts that are supported by 
  4849. the default device drivers. You can run any combination of these scripts. 
  4850.  
  4851. The AP2 tool consists of the file AP2.EXE, AP2.HLP, and AP2.INI and 
  4852. P2S_DESC.TXT. AP2 also requires the P2STRING tool consisting of P2STRING.EXE 
  4853. AND P2S_DLL.DLL. These files are located in the IBM Developer Connection Device 
  4854. Driver Kit for OS/2. The AP2 script files are located in a subdirectory under 
  4855. AP2 called SCRIPTS, and the data files are located in another subdirectory 
  4856. called DATA. 
  4857.  
  4858. AP2 does not require any parameters If AP2 is entered from the command line, 
  4859. AP2 will run, test the device capabilities and display all scripts that can be 
  4860. tested. The file P2S_DESC.TXT file contains the descriptions for all the AP2 
  4861. test scripts. The results of the capability test are placed in the file 
  4862. CAPABLTY.TXT. 
  4863.  
  4864. The following table shows the parameters that are available for AP2 The AP2 
  4865. parameters include: 
  4866.  
  4867. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4868. ΓöéParameter                ΓöéDescription                        Γöé
  4869. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4870. Γöé[script_file]            ΓöéSpecifies the script files to be   Γöé
  4871. Γöé                         Γöéused. The default is *.P2S.        Γöé
  4872. Γöé                         ΓöéWildcards *,? are supported.       Γöé
  4873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4874. Γöé[-AMPMIX]                ΓöéSpecifies that the Ampmix scripts  Γöé
  4875. Γöé                         Γöéwill be selected when AP2 is       Γöé
  4876. Γöé                         Γöéstarted. Ampmix scripts are denotedΓöé
  4877. Γöé                         Γöéby an 'A' in the first character inΓöé
  4878. Γöé                         Γöéthe filename.                      Γöé
  4879. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4880. Γöé[-CD]                    ΓöéSpecifies that the CD scripts will Γöé
  4881. Γöé                         Γöébe selected when AP2 is started. CDΓöé
  4882. Γöé                         Γöéscripts are denoted by a 'C' in theΓöé
  4883. Γöé                         Γöéfirst character in the filename.   Γöé
  4884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4885. Γöé[-CDXA]                  ΓöéSpecifies that the CDXA scripts    Γöé
  4886. Γöé                         Γöéwill be selected when AP2 is       Γöé
  4887. Γöé                         Γöéstarted. CDXA scripts are denoted  Γöé
  4888. Γöé                         Γöéby an 'X' in the first character inΓöé
  4889. Γöé                         Γöéthe filename.                      Γöé
  4890. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4891. Γöé[-MIDI]                  ΓöéSpecifies that the MIDI scripts    Γöé
  4892. Γöé                         Γöéwill be selected when AP2 is       Γöé
  4893. Γöé                         Γöéstarted. MIDI scripts are denoted  Γöé
  4894. Γöé                         Γöéby an 'M' in the first character inΓöé
  4895. Γöé                         Γöéthe filename.                      Γöé
  4896. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4897. Γöé[-WAVE]                  ΓöéSpecifies that the Wave scripts    Γöé
  4898. Γöé                         Γöéwill be selected when AP2 is       Γöé
  4899. Γöé                         Γöéstarted. Wave scripts are denoted  Γöé
  4900. Γöé                         Γöéby a 'W' in the first character in Γöé
  4901. Γöé                         Γöéthe filename.                      Γöé
  4902. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4903. Γöé[-VIDEO]                 ΓöéSpecifies that the Video scripts   Γöé
  4904. Γöé                         Γöéwill be selected when AP2 is       Γöé
  4905. Γöé                         Γöéstarted. Video scripts are denoted Γöé
  4906. Γöé                         Γöéby a 'V' in the first character in Γöé
  4907. Γöé                         Γöéthe filename.                      Γöé
  4908. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4909. Γöé[-INTERACTIVE]           ΓöéSpecifies that the Interactive     Γöé
  4910. Γöé                         Γöéscripts will be selected when AP2  Γöé
  4911. Γöé                         Γöéis started. An interactive script  Γöé
  4912. Γöé                         Γöérequires some form of user input   Γöé
  4913. Γöé                         Γöéduring the execution of the script.Γöé
  4914. Γöé                         ΓöéA script is denoted as interactive Γöé
  4915. Γöé                         Γöéby an 'I' in the seventh character Γöé
  4916. Γöé                         Γöéin the filename.                   Γöé
  4917. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4918. Γöé[-ALL]                   ΓöéSpecifies that all loaded scripts  Γöé
  4919. Γöé                         Γöéwill be selected.                  Γöé
  4920. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4921. Γöé[-BATCH]                 ΓöéSpecifies that testing will be in aΓöé
  4922. Γöé                         Γöébatch mode. One or more of the     Γöé
  4923. Γöé                         Γöéabove selection parameters is      Γöé
  4924. Γöé                         Γöérequired to specify which scripts  Γöé
  4925. Γöé                         Γöéare to be tested. In batch mode AP2Γöé
  4926. Γöé                         Γöéwill automatically start testing,  Γöé
  4927. Γöé                         Γöélog any messages to an output file Γöé
  4928. Γöé                         Γöéand terminate when complete. If theΓöé
  4929. Γöé                         Γöéinteractive switch is used in      Γöé
  4930. Γöé                         Γöéconjunction with batch, interactiveΓöé
  4931. Γöé                         Γöéwill be ignored, and no interactiveΓöé
  4932. Γöé                         Γöéscripts are tested in batch mode.  Γöé
  4933. Γöé                         ΓöéAll output and failed scripts are  Γöé
  4934. Γöé                         Γöélogged to an output file. If an    Γöé
  4935. Γöé                         Γöéoutput file is not specified, the  Γöé
  4936. Γöé                         Γöédefault is AP2.OUT.                Γöé
  4937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4938. Γöé[-oOUT_FILE]             ΓöéIf this parameter is specified, allΓöé
  4939. Γöé                         Γöéscripts that FAIL will also be     Γöé
  4940. Γöé                         Γöélogged to this file.               Γöé
  4941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4942. Γöé[-TEST]                  ΓöéSpecifies that AP2 will            Γöé
  4943. Γöé                         Γöéautomatically test device          Γöé
  4944. Γöé                         Γöécapabilities at startup.           Γöé
  4945. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4946. Γöé[-NOTEST]                ΓöéSpecifies that AP2 will preform no Γöé
  4947. Γöé                         Γöétesting of device capabilities at  Γöé
  4948. Γöé                         Γöéstartup.                           Γöé
  4949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4950. Γöé[-DATAPATH]              ΓöéSpecifies the data path to be used Γöé
  4951. Γöé                         Γöéby AP2. This is the same as        Γöé
  4952. Γöé                         Γöéselecting the Data Path button.    Γöé
  4953. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4954.  
  4955.  
  4956. ΓòÉΓòÉΓòÉ 11.1.1. Starting and Running AP2 ΓòÉΓòÉΓòÉ
  4957.  
  4958. When running AP2 for the first time, it is necessary to set the Data Path. The 
  4959. Data Path points to the directory where all the data files for AP2 are located. 
  4960. Every AP2 script that requires a data file uses an environment variable 
  4961. AP2PATH, which is set by AP2. 
  4962.  
  4963. The Start Test button tests the selected scripts. To test scripts, highlight 
  4964. the selected scripts and click on the Start Test button. After each script is 
  4965. completed, the status for that script is displayed. The output for every script 
  4966. is located in the OUT directory. The output file has the same name as the 
  4967. script with the extension of "OUT". 
  4968.  
  4969. The View Output button allows the viewing of the files that are generated from 
  4970. the execution of the *.P2S files. To view the output for a specific script, 
  4971. highlight the script, and click on the View Output button. 
  4972.  
  4973. The Data Path button displays a dialog box and allows you to select the 
  4974. location of the AP2 data directory. AP2 will not run correctly if the data path 
  4975. is not set to the directory containing the AP2 data files. 
  4976.  
  4977.  
  4978. ΓòÉΓòÉΓòÉ 11.2. P2STRING ΓòÉΓòÉΓòÉ
  4979.  
  4980. Use the P2STRING script processing tool to test media control interface string 
  4981. commands in the MMPM/2 environment. 
  4982.  
  4983. The P2STRING tool processes script files (containing string commands and tool 
  4984. directives) to test string commands in your application programs. The P2STRING 
  4985. tool tests your low-level components at the Ring 3 level (as compared to the 
  4986. PMADDE tool, which tests code at the Ring 0 level). P2STRING extracts the 
  4987. strings from the script files and processes the commands through the 
  4988. mciSendString function. Messages and error conditions of the processes included 
  4989. in the scripts are logged to an output file and displayed in windows. P2STRING 
  4990. comes with a set of predefined scripts to test audio and video functions. These 
  4991. tests are a group of test files called test suites. For more information about 
  4992. test suites, see Testing Device Drivers. 
  4993.  
  4994. Each process logs to its own display window, but all processes log to the same 
  4995. output file. In addition, if you close the display window, the string execution 
  4996. thread is immediately destroyed and the entire process ends. 
  4997.  
  4998. Output messages include all non-comment lines read from the script (for 
  4999. example, script directives, command strings, expected return values, expected 
  5000. and received notify messages, and status lines). In addition, errors and 
  5001. debugging statements of unsuccessful string commands are logged to a file named 
  5002. P2STRING.LOG file. 
  5003.  
  5004.  
  5005. ΓòÉΓòÉΓòÉ 11.2.1. Setting Font Size and Type ΓòÉΓòÉΓòÉ
  5006.  
  5007. Before you start the P2STRING tool, you can change the size and type of font 
  5008. displayed in the P2STRING window on the desktop. For example, to specify Times 
  5009. Roman font with a 10 point font size, type: 
  5010.  
  5011. SET P2STRING_FONTFACE=TIMES
  5012. SET P2STRING_FONTSIZE=10
  5013.  
  5014. You can specify either font face, font size, or both. Possible FONTFACE values 
  5015. include SYSTEM, COURIER, TIMES, or HELVETICA (default). Possible FONTSIZE 
  5016. values include 8 (default), 10, 12, 14, or 18. 
  5017.  
  5018.  
  5019. ΓòÉΓòÉΓòÉ 11.2.2. Starting P2STRING ΓòÉΓòÉΓòÉ
  5020.  
  5021. The P2STRING tool consists of two files:  P2STRING.EXE and P2S_DLL.DLL. These 
  5022. files are located in the IBM Developer Connection Device Driver Kit for OS/2. 
  5023. The following example displays the syntax used to start the P2STRING program. 
  5024. Associated parameters are described in the following table. 
  5025.  
  5026. P2STRING inp_file [-a]out_file [-eerr_file] [-d|-D] [-E] [-t]
  5027.  
  5028. Note:  The parameters are case sensitive. 
  5029.  
  5030.  The following list describes the parameters associated with the P2STRING 
  5031.  program. 
  5032.  
  5033.  Parameter           Description 
  5034.  
  5035.  script_file         Specifies the script file name you want to process. 
  5036.  
  5037.                      Note:  Refer to P2STRING Script Language for information 
  5038.                             on the contents of a script file and how to 
  5039.                             interpret the script language. 
  5040.  
  5041.  [-a]out_file        Specifies the output file name containing the results of 
  5042.                      the test. This file contains only the results of the test 
  5043.                      you are running, unless you specify the optional -a 
  5044.                      parameter. For example, to append the output of a script 
  5045.                      file named SAMPLE.SCR to output currently in a file named 
  5046.                      MDM.OUT, type: 
  5047.  
  5048.                                           P2STRING SAMPLE.SCR -aMDM.OUT
  5049.  
  5050.  [-eerr_file]        Specifies the optional error file name that receives 
  5051.                      messages from string commands that completed 
  5052.                      unsuccessfully. For example, to create an error file named 
  5053.                      MDM.ERR, type: 
  5054.  
  5055.                                           P2STRING SAMPLE.SCR MDM.OUT -eMDM.ERR
  5056.  
  5057.  [-d|-D]             Specifies one of the following optional parameters: 
  5058.  
  5059.                                           -d   Instructs P2STRING to end after processing a script file.
  5060.                                               Use this parameter when you are running test cases automatically  .
  5061.                                               There is no change in the output.
  5062.                                               When the script file has completed processing, P2STRING prompts
  5063.                                               you with a message requiring you to end the test.
  5064.                                           -D   Behaves identically to the -d parameter except that the script
  5065.                                               directives requiring user input are ignored.
  5066.  
  5067.                      Note:  Refer to Tool Directives for information on how to 
  5068.                             add execution directives (which require user input) 
  5069.                             in a script file. 
  5070.  
  5071.  -E                  Causes the script file to exit after the first error. By 
  5072.                      default, script files run to completion regardless of 
  5073.                      errors. For example, the following command ends the 
  5074.                      processing of SAMPLE.SCR after an error is encountered: 
  5075.  
  5076.                                           P2STRING SAMPLE.SCR -aMDM.OUT -d -eMDM.ERR -E
  5077.  
  5078.  -t                  Records time stamps for strings and MM_MCIPASSDEVICE 
  5079.                      notification messages. 
  5080.  
  5081.  
  5082. ΓòÉΓòÉΓòÉ 11.2.3. P2STRING Script Language ΓòÉΓòÉΓòÉ
  5083.  
  5084. This section describes the contents of a script file and how to interpret the 
  5085. script language. Script files can contain several types of lines including: 
  5086.  
  5087.    o  Comments 
  5088.    o  Tool Directives 
  5089.    o  MMPM/2 String Commands 
  5090.    o  Expected Return Strings 
  5091.    o  Expected Error Messages 
  5092.    o  Expected Notification Messages 
  5093.  
  5094.  The following example displays an example of how a script file appears. 
  5095.  
  5096.   @ PROCESSES = 2
  5097.   @ EVENTS = { HASCTRL1 = 1 , HASCTRL2 = 0 }
  5098.   #
  5099.   #
  5100.   #
  5101.   @ PROCESS  1
  5102.   ;
  5103.   ;  set  masteraudio  level  for  session  to  10 %  -  will  affect  all
  5104.   ;  3  processes
  5105.   ;
  5106.   masteraudio  volume  10
  5107.   ;
  5108.   ;  open  waveaudio  device  non - exclusively
  5109.   ;
  5110.   open  waveaudio  alias  wav1  shareable  notify
  5111.   + MM _ MCINOTIFY  MCI _ NOTIFY _ SUCCESSFUL  MCI _ OPEN  # 1
  5112.   @ WAIT _ NOTIFY  1  60000
  5113.   @ WAIT _ PASSDEVICE  wav1  60000
  5114.   @ WAIT _ NOTIFY  21  60000
  5115.  
  5116.  
  5117. ΓòÉΓòÉΓòÉ 11.2.3.1. Comments ΓòÉΓòÉΓòÉ
  5118.  
  5119. Script comment lines must start with either a semi-colon (;) or comment sign 
  5120. (#) in the first column. These comment lines are neither displayed nor echoed 
  5121. in the output file. If you want a remark to appear in the output, use the @REM 
  5122. directive. 
  5123.  
  5124. P2STRING allows for a variable number of lines to be displayed in its window. 
  5125. Regular comment lines (header lines) are not displayed nor written to the 
  5126. output file. 
  5127.  
  5128.  
  5129. ΓòÉΓòÉΓòÉ 11.2.3.2. Tool Directives ΓòÉΓòÉΓòÉ
  5130.  
  5131. The P2STRING tool supports either multithreaded or multiprocess execution, but 
  5132. not both. You can use tool directives to test either @PROCESSES or @THREADS in 
  5133. a script file. 
  5134.  
  5135. Tool directives start with an at sign (@) in the first column. These directives 
  5136. affect the execution and appearance of the output. The following classes of 
  5137. directives are recognized: 
  5138.  
  5139.    o  Initialization 
  5140.    o  Execution 
  5141.  
  5142.  Initialization Directives 
  5143.  
  5144.  Use initialization directives to set up the content of the script file. These 
  5145.  directives must appear before execution directives because the tool 
  5146.  preprocesses the script file and builds process command buffers. 
  5147.  
  5148.  The @THREADS and @PROCESSES directives are mutually exclusive. In other words, 
  5149.  the P2STRING tool supports either multithreaded or multiprocess execution in a 
  5150.  script file (not both). In addition, there is a limit of 10 processes or 
  5151.  threads per script file. 
  5152.  
  5153.  The following table lists the supported initialization directives. 
  5154.  
  5155.  Directive                            Description 
  5156.  
  5157.   @PROCESSES=x
  5158.                                       Specifies the number (x) of processes the 
  5159.                                       script file will be running.  For 
  5160.                                       example: 
  5161.  
  5162.                                                                             @PROCESSES=2
  5163.  
  5164.   @THREADS=x
  5165.                                       Specifies the number (x) of threads the 
  5166.                                       script file will be running. 
  5167.  
  5168.   @EVENTS={n[=0|1] [,n[=0|1]]}
  5169.                                       Specifies one or more names of events. 
  5170.                                       Events are user-defined with a maximum of 
  5171.                                       15 characters. Events can be set to 1 or 
  5172.                                       0. Set an event to 1 for an event that is 
  5173.                                       set with the @SET_EVENT execution 
  5174.                                       directive. Set an event to 0 to clear or 
  5175.                                       reset the event. If no initialization 
  5176.                                       values are specified, the event is 
  5177.                                       initialized to 0. For example: 
  5178.  
  5179.                                                                             @EVENTS={brad=1,john=1,test=0}
  5180.  
  5181.  Execution Directives 
  5182.  
  5183.  Use execution directives to process the script file. Again, the @THREAD and 
  5184.  @PROCESS directives are mutually exclusive. 
  5185.  
  5186.  The following table lists the supported execution directives. 
  5187.  
  5188.  Note:  Timing out on the @WAIT_EVENT and @WAIT_NOTIFY directives is not 
  5189.         considered a failure. 
  5190.  
  5191.  Directive                                Description 
  5192.  
  5193.   @THREAD x
  5194.                                           Specifies that the script lines 
  5195.                                           following this directive belong to 
  5196.                                           thread number x until the next 
  5197.                                           @THREAD directive is encountered. 
  5198.  
  5199.   @PROCESS x
  5200.                                           Specifies that the script lines 
  5201.                                           following this directive belong to 
  5202.                                           process number x until the next 
  5203.                                           @PROCESS directive is encountered. 
  5204.  
  5205.   @SET_EVENT name 0|1
  5206.                                           Sets the event name to either 1 or 0. 
  5207.                                           Use 1 to mark that the event has 
  5208.                                           happened. Use 0 to clear or reset the 
  5209.                                           event. 
  5210.  
  5211.                                           Note:  The event must be declared 
  5212.                                                  through the @EVENTS directive. 
  5213.  
  5214.   @WAIT_EVENT name [to]
  5215.                                           Waits until the event name is set to 
  5216.                                           1. @WAIT_EVENT does not cause a 
  5217.                                           change of the event state. If you 
  5218.                                           need a reusable event, use this 
  5219.                                           directive. 
  5220.  
  5221.                                           The timeout (to) is specified in 
  5222.                                           milliseconds. If omitted, it defaults 
  5223.                                           to 3 minutes. 
  5224.  
  5225.   @WAIT_NOTIFY x [to]
  5226.                                           Waits for a specific number (x) from 
  5227.                                           an expected MM_MCINOTIFY notification 
  5228.                                           message. This number must match the 
  5229.                                           index used in the MM_MCINOTIFY 
  5230.                                           reference line. The @WAIT_NOTIFY 
  5231.                                           events are not reusable because there 
  5232.                                           are no events that logically reset 
  5233.                                           it. 
  5234.  
  5235.                                           The timeout (to) is specified in 
  5236.                                           milliseconds. If omitted, it defaults 
  5237.                                           to 3 minutes. 
  5238.  
  5239.                                           If the associated mciSendString 
  5240.                                           function fails, the event is posted 
  5241.                                           to prevent delays for notifications 
  5242.                                           that are never going to be sent. 
  5243.  
  5244.   @WAIT_PASSDEVICE alias [to]
  5245.                                           Waits until the device instance with 
  5246.                                           an alias of alias gains use. This 
  5247.                                           assumes that the alias names used 
  5248.                                           within a script file are unique. The 
  5249.                                           maximum alias name length is 20 
  5250.                                           characters. 
  5251.  
  5252.                                           Note:  Use a unique alias for every 
  5253.                                                  OPEN command. 
  5254.  
  5255.                                           The timeout (to) is specified in 
  5256.                                           milliseconds. If omitted, it defaults 
  5257.                                           to 3 minutes. 
  5258.  
  5259.                                           The tool assumes that a unique alias 
  5260.                                           is specified on each OPEN string 
  5261.                                           command. If unique aliases are not 
  5262.                                           used, errors conditions might occur. 
  5263.  
  5264.   @REM comment
  5265.                                           Echoes the comment to the screen and 
  5266.                                           the output log file. All other script 
  5267.                                           comment lines (those starting with ; 
  5268.                                           or #) are neither transferred nor 
  5269.                                           displayed. 
  5270.  
  5271.   @PAUSE to
  5272.                                           Pauses processing of the current 
  5273.                                           thread or process in the input script 
  5274.                                           file for the specified time. It does 
  5275.                                           not stop the processing of the 
  5276.                                           notifications or window functions. 
  5277.                                           Other threads or processes are not 
  5278.                                           affected by this directive. 
  5279.  
  5280.   @BREAK [message]
  5281.                                           Causes a message box to appear with 
  5282.                                           message text. Script processing is 
  5283.                                           halted until the user responds with 
  5284.                                           the correct action. For example: 
  5285.  
  5286.                                                                                     @BREAK [replace the CD]
  5287.  
  5288.   @CHECK [message]
  5289.                                           Grades the success of the previous 
  5290.                                           command based on the user's response. 
  5291.                                           A pop-up window displays the message 
  5292.                                           and prompts the user with Yes or No 
  5293.                                           push buttons. The status is passed if 
  5294.                                           the user selects Yes, or failed if No 
  5295.                                           is selected. For example: 
  5296.  
  5297.                                                                                     @BREAK The music will play for 5 secs.  Ready to time it?
  5298.                                                                                     play cdaudio notify
  5299.                                                                                     @PAUSE 5000
  5300.                                                                                     @CHECK Did it play?
  5301.  
  5302.  
  5303. ΓòÉΓòÉΓòÉ 11.2.3.3. MMPM/2 String Commands ΓòÉΓòÉΓòÉ
  5304.  
  5305. All lines that do not fall into any of the other categories are interpreted as 
  5306. MMPM/2 string commands. These lines are passed to the Media Device Manager 
  5307. (MDM) through the mciSendString function after the environment variables have 
  5308. been substituted. 
  5309.  
  5310. Any token in the string command line bracketed by question marks (such as 
  5311. ?FOO?) is interpreted as an environment variable. The actual value of the 
  5312. environment variable is substituted into the string before it is passed to the 
  5313. mciSendString function. If the variable is not found, a warning is issued and 
  5314. the token is replaced with a null string. For example, assuming the environment 
  5315. string MMDATA is set to D:\DATA, open ?mmdata?\temp.wav alias a is equal to 
  5316. open d:\data\temp.wav alias a. 
  5317.  
  5318.  
  5319. ΓòÉΓòÉΓòÉ 11.2.3.4. Expected Return Strings ΓòÉΓòÉΓòÉ
  5320.  
  5321. Many MMPM/2 commands return strings. It is possible to check these strings 
  5322. against an expected value with an expected return string line. 
  5323.  
  5324. An expected return string line has the format: 
  5325.  
  5326. =result
  5327.  
  5328. The equal sign (=) must be in column 1 and should have no trailing spaces. If 
  5329. an empty string is expected, nothing should follow the = (not even spaces). For 
  5330. example: 
  5331.  
  5332. status cdaudio ready wait
  5333. =TRUE
  5334. status cdaudio mode wait
  5335. =stopped
  5336.  
  5337. The expected result is always interpreted as a string. This might produce some 
  5338. unusual outputs for commands that return binary data. 
  5339.  
  5340. Where the return is a textual numerical value, it can be matched to a tolerance 
  5341. range of +/-10% using a tilde (~) before the number. This is typically used 
  5342. when the exact value cannot be known. For example: 
  5343.  
  5344. set foo time format milliseconds wait
  5345. play foo notify
  5346. @PAUSE 1000
  5347. stop foo wait
  5348. status foo position wait
  5349. =~1000
  5350.  
  5351. Thus, the status command is considered successful if the returned string is in 
  5352. the range 900 - 1100. 
  5353.  
  5354.  
  5355. ΓòÉΓòÉΓòÉ 11.2.3.5. Expected Error Messages ΓòÉΓòÉΓòÉ
  5356.  
  5357. When an MMPM/2 string command is expected to fail with an error, use the 
  5358. expected error line to specify the expected error. The expected error line has 
  5359. the format: 
  5360.  
  5361. =!error
  5362.  
  5363. The =! must start in column 1. If any error is acceptable, then use the keyword 
  5364. ERROR. If a specific error is expected, type the exact error message after the 
  5365. =!. For example: 
  5366.  
  5367. open sequencer alias mymidi wait
  5368. load mymidi nofile.foo
  5369. =!File not found.
  5370.  
  5371. Be careful about extra blanks in the expected-error and expected-result lines. 
  5372. The case of the strings is unimportant; however, the comparison will fail if 
  5373. the spacing or punctuation does not match exactly. 
  5374.  
  5375.  
  5376. ΓòÉΓòÉΓòÉ 11.2.3.6. Expected Notification Messages ΓòÉΓòÉΓòÉ
  5377.  
  5378. Many MMPM/2 string commands cause notification messages to be sent to the 
  5379. P2STRING tool. The system uses notification messages to respond to 
  5380. applications. For example, notification messages indicate system status 
  5381. regarding completion of a media device function or passing of the ownership of 
  5382. a media control device from one process to another. 
  5383.  
  5384. It is possible to verify that the proper notifications are received by using an 
  5385. expected-notify line. Each expected notification line begins with a plus sign 
  5386. (+) in column 1. The following types of notification lines are possible: 
  5387.  
  5388.    o  Command completion/error notifications 
  5389.    o  Event notifications 
  5390.    o  Position change notifications 
  5391.  
  5392.  Note:  Any or all notification messages might be expected for a single MMPM/2 
  5393.         string command. 
  5394.  
  5395.  Command Completion/Error Notifications 
  5396.  
  5397.  A MM_MCINOTIFY line notifies an application when a device successfully 
  5398.  completes the action indicated by a media message or when an error occurs. 
  5399.  
  5400.   +MM_MCINOTIFY  notify-code [#x]
  5401.  
  5402.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5403.   ΓöéKeyword           ΓöéDescription                               Γöé
  5404.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5405.   Γöénotify-code       ΓöéSpecifies the notification message code,  Γöé
  5406.   Γöé                  Γöéfor example, MCI_NOTIFY_SUCCESSFUL. The   Γöé
  5407.   Γöé                  Γöéspelling must be the same as the #defines Γöé
  5408.   Γöé                  Γöéin the OS2ME.H file for the notify codes. Γöé
  5409.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5410.   Γöémessage           ΓöéSpecifies the media control interface     Γöé
  5411.   Γöé                  Γöémessage that caused the notification, for Γöé
  5412.   Γöé                  Γöéexample, MCI_PLAY. The spelling must be   Γöé
  5413.   Γöé                  Γöéthe same as the #defines in the OS2ME.H   Γöé
  5414.   Γöé                  Γöéfile for media control interface messages.Γöé
  5415.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5416.   Γöéx                 ΓöéSpecifies a unique number (x) used to     Γöé
  5417.   Γöé                  Γöéassociate @WAIT_NOTIFY directives with    Γöé
  5418.   Γöé                  Γöéparticular notifications. This number has Γöé
  5419.   Γöé                  Γöénothing to do with the order in which     Γöé
  5420.   Γöé                  Γöéstrings are sent. The number must be      Γöé
  5421.   Γöé                  Γöéunique and in the range 1-99.             Γöé
  5422.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5423.  
  5424.  Event Notifications 
  5425.  
  5426.  A MM_MCIPOSITIONCHANGE line notifies an application of the current media 
  5427.  position. 
  5428.  
  5429.   +MM_MCIPOSITIONCHANGE position %user-parameter #x
  5430.  
  5431.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5432.   ΓöéKeyword           ΓöéDescription                               Γöé
  5433.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5434.   Γöéposition          ΓöéSpecifies the expected MMTIME position of Γöé
  5435.   Γöé                  Γöéthe first position-change message.        Γöé
  5436.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5437.   Γöéuser-parameter    ΓöéSpecifies the user parameter to be        Γöé
  5438.   Γöé                  Γöéreturned. This should be the same as the  Γöé
  5439.   Γöé                  Γöéreturn value specified in the             Γöé
  5440.   Γöé                  ΓöéSETPOSITIONADVISE string command. Note    Γöé
  5441.   Γöé                  Γöéthat the return value must be a unique    Γöé
  5442.   Γöé                  Γöéinteger in the range of 1 - 99.           Γöé
  5443.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5444.   Γöéx                 ΓöéSpecifies the number (x) of position      Γöé
  5445.   Γöé                  Γöéchange messages expected. For further     Γöé
  5446.   Γöé                  Γöéinformation, refer to Limitations of      Γöé
  5447.   Γöé                  ΓöéMM_MCIPOSITIONCHANGE Verification.        Γöé
  5448.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5449.  
  5450.  Position Change Notifications 
  5451.  
  5452.  A MM_MCICUEPOINT line notifies an application that the playlist processor has 
  5453.  encountered a message instruction. 
  5454.  
  5455.   +MM_MCICUEPOINT position %user-parameter
  5456.  
  5457.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5458.   ΓöéKeyword           ΓöéDescription                               Γöé
  5459.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5460.   Γöéposition          ΓöéSpecifies the expected MMTIME position of Γöé
  5461.   Γöé                  Γöéthe first position-change message.        Γöé
  5462.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5463.   Γöéuser-parameter    ΓöéSpecifies the user parameter to be        Γöé
  5464.   Γöé                  Γöéreturned. This should be the same as the  Γöé
  5465.   Γöé                  Γöéreturn value specified in the             Γöé
  5466.   Γöé                  ΓöéSETPOSITIONADVISE string command. Note    Γöé
  5467.   Γöé                  Γöéthat the return value must be a unique    Γöé
  5468.   Γöé                  Γöéinteger in the range of 1 - 99.           Γöé
  5469.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5470.  
  5471.  Note:  Other notifications cannot be compared because they do not allow for a 
  5472.         user-parameter as part of the message, which is essential for the 
  5473.         tracking of related notifications. 
  5474.  
  5475.  
  5476. ΓòÉΓòÉΓòÉ 11.2.4. Limitations of MM_MCIPOSITIONCHANGE Verification ΓòÉΓòÉΓòÉ
  5477.  
  5478. There are limitations to what you can verify in the P2STRING tool using event 
  5479. notification lines. The MM_MCIPOSITIONCHANGE line requires the use of the 
  5480. "return value" item in the respective string commands. This line also does not 
  5481. provide for timing start point, for example, playing has started. The P2STRING 
  5482. tool can only count the number of messages received for a specific user 
  5483. parameter (used as a key) and check if subsequent messages have positions 
  5484. approximate to the given expected position interval. The script writer has the 
  5485. responsibility to determine how many POSITIONADVISE messages are expected, 
  5486. taking into account the duration of playing, time format, and start position of 
  5487. the play/record. The reference position given in the expected notification line 
  5488. must be in MMTIME units. If the "expected number of messages" parameter is 
  5489. omitted, the tool verifies only the position interval (not the number). In case 
  5490. of scripts where play, seek, or record are used to cover non-monotonic ranges, 
  5491. the tool might report failures on position-advises because it expects each 
  5492. positionadvise to be in the next position interval from the previous message. 
  5493. If the script makes a jump to a position that does not conform to this, the 
  5494. status will be logged as failed. 
  5495.  
  5496. For example: 
  5497.  
  5498. setpositionadvise SomeDevice every 10000 on return 5
  5499. +MM_MCIPOSITIONCHANGE 10000 %5
  5500. play SomeDevice from 35000 to 55000 notify (produces 3 positionchange messages)
  5501. seek SomeDevice to 30000 wait
  5502. play SomeDevice notify (produces a number of messages starting at 30000)
  5503.  
  5504. The position-change messages are logged as failed, because of the lapse in 
  5505. position interval. A way to handle this situation is to disable the 
  5506. position-change before an explicit position jump is made and enable the same 
  5507. position-advise with a different user parameter. 
  5508.  
  5509. For example: 
  5510.  
  5511. setpositionadvise SomeDevice every 10000 on return 5
  5512. +MM_MCIPOSITIONCHANGE 10000 %5
  5513. play SomeDevice from 35000 to 55000 notify (produces 3 positionchange messages)
  5514. setpositionadvise SomeDevice every 10000 off
  5515. seek SomeDevice to 30000 wait
  5516. setpositionadvise SomeDevice every 10000 on return 6
  5517. +MM_MCIPOSITIONCHANGE 10000 %6
  5518. play SomeDevice notify (produces a number of messages starting at 30000)
  5519.  
  5520.  
  5521. ΓòÉΓòÉΓòÉ 11.3. Processing Logic ΓòÉΓòÉΓòÉ
  5522.  
  5523. A string command line can be followed by zero to one return value lines, or 
  5524. zero to three notification lines. Note that this is an exclusive OR, meaning 
  5525. that specifying both expected return value and expected notification is not 
  5526. going to give reliable results due to the fact that returned buffer does not 
  5527. become valid prior to the end of the notify message. Also, in case of notify 
  5528. flags, return values are in the procedural interface format rather than in the 
  5529. string interface format. 
  5530.  
  5531. The MDM will not be able to convert return values to strings for commands 
  5532. processed with the notify flag because media control drivers will be sending 
  5533. their notify messages directly to the application. 
  5534.  
  5535. Status of each command is determined in two stages. The first stage is at 
  5536. string execution. If the mciSendString function returns an error and there was 
  5537. no =!ERROR reference line in the script following the command string line, the 
  5538. command is considered failed. If a return value was found after mciSendString 
  5539. is processed, the tool will check for expected return and perform comparison of 
  5540. the two. It they do not match, the command is considered failed. In case of an 
  5541. error that is not in the range understood by the mciGetErrorString function, 
  5542. the command is considered failed even if the !ERROR was encountered. 
  5543.  
  5544. The second stage of the comparison is after a notification is received and 
  5545. after all the commands are issued. If a notification was received and it was 
  5546. successfully compared to the expected notification line, the command is 
  5547. considered successful. If there was no reference notification line, status of 
  5548. the command will not be assigned, unless notify-error was returned. After all 
  5549. the scripts are processed, expected reference notifications will be used to 
  5550. determine if all the notifications were received. The commands that did not 
  5551. receive a notification, and had an expected notification line of the type, are 
  5552. marked failed. Note that command strings are not examined for presence of a 
  5553. notify flag and it is the writer's responsibility to create an expected notify 
  5554. line if it is of importance. In case of expected NOTIFY_SUCCESSFUL messages, 
  5555. all codes other than NOTIFY_ERROR are considered valid. This includes 
  5556. NOTIFY_SUCCESSFUL, NOTIFY_ABORTED and NOTIFY_SUPERSEDED. If any other notify 
  5557. code was specified as expected, and exact match will be checked for. If 
  5558. NOTIFY_ERROR is expected, all errors in the range are verified as passed. There 
  5559. is no facility for verification of an exact error code returned in the 
  5560. notification. 
  5561.  
  5562.  
  5563. ΓòÉΓòÉΓòÉ 11.4. Testing Device Drivers ΓòÉΓòÉΓòÉ
  5564.  
  5565. Test suites have been provided with this release of the DDK to assist in 
  5566. certifying audio and video device drivers.  The test suites provided consist of 
  5567. several test cases. The following sections describe how to: 
  5568.  
  5569.    o  Set up the environment for running the test suites 
  5570.  
  5571.    o  Run the test suites 
  5572.  
  5573.    o  Analyze the test 
  5574.  
  5575.  
  5576. ΓòÉΓòÉΓòÉ 11.4.1. Setting Up the Environment for Running Test Suites ΓòÉΓòÉΓòÉ
  5577.  
  5578. Before using the audio or video test suites with the P2STRING tool, do the 
  5579. following: 
  5580.  
  5581.    1. Make sure that OS/2 2.1 and the adapter to be tested are installed. 
  5582.  
  5583.    2. Update the CONFIG.SYS file. 
  5584.  
  5585.       All the test suites use environment variable to determine the location of 
  5586.       the input data files. Add the following SET statements to the CONFIG.SYS 
  5587.       file. 
  5588.  
  5589.             SET MMDATA=<path>
  5590.             SET MMDATA-AUD=<path>
  5591.             SET TESTDATA=<path>
  5592.  
  5593.       The path for MMDATA and MMDATA-AUD must specify the path to the audio 
  5594.       input files. For example, your .WAV or .MID files. The path for TESTDATA 
  5595.       must specify a path to a temporary working directory that you create. 
  5596.  
  5597.       The following files must be loaded, and their path must be specified in 
  5598.       the CONFIG.SYS file: 
  5599.  
  5600.            SETENV.CMD 
  5601.            RESETINI.CMD 
  5602.            HWCODE.CMD 
  5603.            P2STRING.EXE 
  5604.            P2S_DLL.DLL 
  5605.  
  5606.    3. Shut down and restart your workstation so the CONFIG.SYS parameters will 
  5607.       take effect. 
  5608.  
  5609.    4. Run HWCODE.CMD for each test suite to be tested. 
  5610.  
  5611.       This file is in the IBM Developer Connection Device Driver Kit for OS/2 
  5612.       HWCODE.CMD is a REXX command that determines each test case's exact 
  5613.       hardware needs and displays the results.  The test case's name contains 
  5614.       information that HWCODE.CMD uses to make these determinations, so it is 
  5615.       important not to change the name of the test case. 
  5616.  
  5617.       The syntax for HWCODE.CMD is: 
  5618.  
  5619.             HWCODE <Test Case Name>
  5620.  
  5621.       Note:  The Test Case Name must include the file name extension. 
  5622.  
  5623.       HWCODE.CMD displays the brand and model of audio and video adapters 
  5624.       currently supported by OS/2 2.1.  The adapter being tested is not listed 
  5625.       if it is new, but this information is useful for comparing results based 
  5626.       on expected compatibility with other manufactures. 
  5627.  
  5628.       HWCODE.CMD also displays audio and video hardware codes. 
  5629.  
  5630.  
  5631. ΓòÉΓòÉΓòÉ 11.4.1.1. Hardware Codes ΓòÉΓòÉΓòÉ
  5632.  
  5633. The hardware codes are two digit codes.  The hyphen (-) in the tables indicate 
  5634. the position of the unspecified digit in the code. For example, if you receive 
  5635. the hardware code 84, you would look in the 8- column and the -4 column to 
  5636. decipher the hardware code. 
  5637.  
  5638. Audio Hardware Codes 
  5639.  
  5640. Audio Capture Playback Adapters 
  5641.  
  5642. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5643. ΓöéHardware Code       ΓöéACPA                ΓöéNumber of Cards     Γöé
  5644. Γöé                    Γöé                    ΓöéUnspecified         Γöé
  5645. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5646. Γöé0-                  Γöé                    Γöé                    Γöé
  5647. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5648. Γöé1-                  Γöé1                   Γöé                    Γöé
  5649. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5650. Γöé2-                  Γöé2                   Γöé                    Γöé
  5651. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5652. Γöé3-                  Γöé3                   Γöé                    Γöé
  5653. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5654. Γöé8-                  Γöé                    Γöé1                   Γöé
  5655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5656. Γöé9-                  Γöé1                   Γöé1                   Γöé
  5657. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5658. ΓöéA-                  Γöé2                   Γöé1                   Γöé
  5659. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5660. ΓöéB-                  Γöé3                   Γöé1                   Γöé
  5661. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5662. ΓöéG-                  Γöé                    Γöé2                   Γöé
  5663. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5664. ΓöéH-                  Γöé1                   Γöé2                   Γöé
  5665. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5666. ΓöéI-                  Γöé2                   Γöé2                   Γöé
  5667. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5668. ΓöéJ-                  Γöé3                   Γöé2                   Γöé
  5669. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5670. ΓöéO-                  Γöé                    Γöé3                   Γöé
  5671. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5672. ΓöéP-                  Γöé1                   Γöé3                   Γöé
  5673. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5674. ΓöéQ-                  Γöé1                   Γöé3                   Γöé
  5675. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5676. ΓöéR-                  Γöé3                   Γöé3                   Γöé
  5677. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5678.  
  5679. OEM 
  5680.  
  5681. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5682. ΓöéHardware Code       ΓöéOEM                 ΓöéNumber of CDROMs    Γöé
  5683. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5684. Γöé-0                  Γöé                    Γöé                    Γöé
  5685. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5686. Γöé-1                  ΓöéOPL0 (original SoundΓöé                    Γöé
  5687. Γöé                    ΓöéBlaster chipset)    Γöé                    Γöé
  5688. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5689. Γöé-4                  ΓöéSound Blaster 16    Γöé                    Γöé
  5690. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5691. Γöé-5                  ΓöéProAudio Spectrum 16Γöé                    Γöé
  5692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5693. Γöé-6                  ΓöéSound Blaster Pro   Γöé                    Γöé
  5694. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5695. Γöé-7                  ΓöéAny Sound Blaster   Γöé                    Γöé
  5696. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5697. Γöé-8                  Γöé                    Γöé1                   Γöé
  5698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5699. Γöé-9                  ΓöéOPL0 (original SoundΓöé1                   Γöé
  5700. Γöé                    ΓöéBlaster chipset)    Γöé                    Γöé
  5701. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5702. Γöé-C                  ΓöéSound Blaster 16    Γöé1                   Γöé
  5703. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5704. Γöé-D                  ΓöéProAudio Spectrum 16Γöé1                   Γöé
  5705. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5706. Γöé-E                  ΓöéSound Blaster Pro   Γöé1                   Γöé
  5707. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5708. Γöé-F                  ΓöéAny Sound Blaster   Γöé1                   Γöé
  5709. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5710. Γöé-G                  Γöé                    Γöé2                   Γöé
  5711. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5712. Γöé-H                  ΓöéOPL0                Γöé2                   Γöé
  5713. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5714. Γöé-K                  ΓöéSound Blaster 16    Γöé2                   Γöé
  5715. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5716. Γöé-L                  ΓöéProAudio Spectrum 16Γöé2                   Γöé
  5717. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5718. Γöé-M                  ΓöéSound Blaster Pro   Γöé2                   Γöé
  5719. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5720. Γöé-N                  ΓöéAny SB              Γöé2                   Γöé
  5721. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5722. Γöé-O                  Γöé                    Γöé3                   Γöé
  5723. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5724. Γöé-P                  ΓöéOPL0 (original SoundΓöé3                   Γöé
  5725. Γöé                    ΓöéBlaster chipset)    Γöé                    Γöé
  5726. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5727. Γöé-S                  ΓöéSound Blaster 16    Γöé3                   Γöé
  5728. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5729. Γöé-T                  ΓöéProAudio Spectrum 16Γöé3                   Γöé
  5730. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5731. Γöé-U                  ΓöéSound Blaster Pro   Γöé3                   Γöé
  5732. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5733. Γöé-V                  ΓöéAny SB              Γöé3                   Γöé
  5734. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5735.  
  5736. Special Hardware Needs 
  5737.  
  5738. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5739. ΓöéHardware Code       ΓöéSpecial Hardware Needs                  Γöé
  5740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5741. ΓöéW0                  ΓöéPioneer laser disc V80000               Γöé
  5742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5743. ΓöéW1                  ΓöéPioneer laser disc V4400                Γöé
  5744. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5745. ΓöéW2                  ΓöéPioneer laser disc V4200                Γöé
  5746. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5747. ΓöéW3                  ΓöéPioneer laser disc V4300D               Γöé
  5748. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5749.  
  5750. Video Hardware Codes 
  5751.  
  5752. VCA 
  5753.  
  5754. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5755. ΓöéHardware Code       ΓöéVCA                 ΓöéNumber of Cards     Γöé
  5756. Γöé                    Γöé                    ΓöéUnspecified         Γöé
  5757. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5758. Γöé4-                  Γöé                    Γöé                    Γöé
  5759. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5760. Γöé5-                  Γöé1                   Γöé                    Γöé
  5761. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5762. Γöé6-                  Γöé2                   Γöé                    Γöé
  5763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5764. ΓöéC-                  Γöé                    Γöé1                   Γöé
  5765. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5766. ΓöéD-                  Γöé1                   Γöé1                   Γöé
  5767. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5768. ΓöéE-                  Γöé2                   Γöé1                   Γöé
  5769. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5770. ΓöéK-                  Γöé                    Γöé2                   Γöé
  5771. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5772. ΓöéL-                  Γöé1                   Γöé2                   Γöé
  5773. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5774. ΓöéM-                  Γöé2                   Γöé2                   Γöé
  5775. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5776.  
  5777. OEM 
  5778.  
  5779. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5780. ΓöéHardware Code       ΓöéOEM                 ΓöéNumber of CDROMs    Γöé
  5781. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5782. Γöé-0                  ΓöéAny video capture   Γöé                    Γöé
  5783. Γöé                    Γöécard                Γöé                    Γöé
  5784. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5785. Γöé-1                  ΓöéAny video capture   Γöé                    Γöé
  5786. Γöé                    Γöécard and a Sound    Γöé                    Γöé
  5787. Γöé                    ΓöéBlaster 16          Γöé                    Γöé
  5788. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5789. Γöé-2                  ΓöéAny video capture   Γöé                    Γöé
  5790. Γöé                    Γöécard and a ProAudio Γöé                    Γöé
  5791. Γöé                    ΓöéSpectrum 16         Γöé                    Γöé
  5792. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5793. Γöé-8                  ΓöéAny video capture   Γöé1                   Γöé
  5794. Γöé                    Γöécard                Γöé                    Γöé
  5795. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5796. Γöé-9                  ΓöéAny video capture   Γöé1                   Γöé
  5797. Γöé                    Γöécard and a Sound    Γöé                    Γöé
  5798. Γöé                    ΓöéBlaster 16          Γöé                    Γöé
  5799. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5800. Γöé-A                  ΓöéAny video capture   Γöé1                   Γöé
  5801. Γöé                    Γöécard and a ProAudio Γöé                    Γöé
  5802. Γöé                    ΓöéSpectrum 16         Γöé                    Γöé
  5803. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5804. Γöé-G                  ΓöéAny video capture   Γöé2                   Γöé
  5805. Γöé                    Γöécard                Γöé                    Γöé
  5806. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5807. Γöé-H                  ΓöéAny video capture   Γöé2                   Γöé
  5808. Γöé                    Γöécard and a Sound    Γöé                    Γöé
  5809. Γöé                    ΓöéBlaster 16          Γöé                    Γöé
  5810. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5811. Γöé-I                  ΓöéAny video capture   Γöé2                   Γöé
  5812. Γöé                    Γöécard and a Sound    Γöé                    Γöé
  5813. Γöé                    ΓöéBlaster 16          Γöé                    Γöé
  5814. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5815.  
  5816. Special Hardware Needs 
  5817.  
  5818. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5819. ΓöéHardware Code       ΓöéSpecial Hardware Needs                  Γöé
  5820. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5821. ΓöéX0                  ΓöéIBM VCA NTSC                            Γöé
  5822. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5823. ΓöéX1                  ΓöéJovian SuperVia NTSC                    Γöé
  5824. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5825. ΓöéX2                  ΓöéJovian QuickVia NTSC                    Γöé
  5826. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5827. ΓöéX3                  ΓöéVideo Blaster NTSC                      Γöé
  5828. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5829. ΓöéX4                  ΓöéIBM VCA  PAL                            Γöé
  5830. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5831. ΓöéX5                  ΓöéJovian SuperVia  PAL                    Γöé
  5832. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5833. ΓöéX6                  ΓöéJovian QuickVia  PAL (WinMovie)         Γöé
  5834. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5835. ΓöéX7                  ΓöéVideo Blaster PAL                       Γöé
  5836. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5837.  
  5838.  
  5839. ΓòÉΓòÉΓòÉ 11.4.2. Running the Test Suites ΓòÉΓòÉΓòÉ
  5840.  
  5841. The suites are run using P2STRING. For more information about P2STRING, see 
  5842. AP2/P2STRING Tool. 
  5843.  
  5844. To run a device test, do the following: 
  5845.  
  5846.    1. Open an OS/2 window. 
  5847.  
  5848.    2. Run SETENV.CMD. 
  5849.  
  5850.       Note:  Nothing is displayed when running this command.  When the OS/2 
  5851.              command prompt is displayed again, this command is finished. 
  5852.  
  5853.       This file is in the IBM Developer Connection Device Driver Kit for OS/2. 
  5854.       This command should be run prior to running the first test (each time you 
  5855.       open an OS/2 window) because it sets up the audio devices correctly.  To 
  5856.       run this command, type: 
  5857.  
  5858.             SETENV
  5859.  
  5860.    3. Run RESETINI.CMD prior to each test. 
  5861.  
  5862.       Note:  Nothing is displayed when running this command.  When the OS/2 
  5863.              command prompt is displayed again, this command is finished. 
  5864.  
  5865.       This file is in the IBM Developer Connection Device Driver Kit for OS/2. 
  5866.       This command resets system connections in the appropriate INI files for 
  5867.       audio and video tests to their defaults.  To run this command, type: 
  5868.  
  5869.             RESETINI
  5870.  
  5871.    4. Run each test. Each test can be run from the command line and the output 
  5872.       is saved in a file for analysis. The P2STRING syntax is: 
  5873.  
  5874.             P2STRING inp_file [-a]out_file [-eerr_file] [-d|-D] [-E] [-t]
  5875.  
  5876.  For more information about running tests from the command line, see Starting 
  5877.  P2STRING. 
  5878.  
  5879.  The tests display messages in a message box and might not automatically close 
  5880.  the message box when the test finishes. If the test does not close the message 
  5881.  box, you need to manually close it. The message box is not closed if P2STRING 
  5882.  is waiting for a return value that might or might not be returned. The test 
  5883.  has finished processing if the string "Script completed successfully" is 
  5884.  displayed at the bottom of the message box. Allow approximately one minute 
  5885.  after this message is displayed before manually closing the message box to 
  5886.  allow for any late return codes. 
  5887.  
  5888.  Note:  The "Script completed successfully" message does not indicate that all 
  5889.         the tests passed.  It only indicated the script has finished 
  5890.         processing. 
  5891.  
  5892.  
  5893. ΓòÉΓòÉΓòÉ 11.4.3. Analyzing a Device Driver Test ΓòÉΓòÉΓòÉ
  5894.  
  5895. After an audio or video test is run, the results of the test are stored in a 
  5896. file with a .IND extension appended to the file name. The media control 
  5897. interface strings that passed are flagged with a PASSED keyword in the return 
  5898. string, and failed strings are flagged with a FAILED keyword. 
  5899.  
  5900. Those that are flagged as FAILED can be analyzed further.  When all strings are 
  5901. passed successfully, the device driver is handling all conditions specified by 
  5902. the test correctly. 
  5903.  
  5904. Note:  If a string command is supposed to fail and does, the return string is 
  5905.        considered PASSED, because the return string matches the expected 
  5906.        results. 
  5907.  
  5908.  The following example illustrates how to compare the results file with the 
  5909.  test script. 
  5910.  
  5911.  
  5912.     TEST SCRIPT  (AUDIO1.P80)
  5913.  
  5914.  
  5915.            ############################################
  5916.            #                                          #
  5917.            #   OPEN THE MIDIPLAYER                    #
  5918.            #   WAIT FOR SUCCESSFUL OPEN               #
  5919.            #                                          #
  5920.            ############################################
  5921.            #
  5922.    ΓöîΓöÇΓöÇΓöÇ>   open sequencer alias midiplayer notify
  5923.    ΓöéΓöîΓöÇΓöÇ>   +MM_MCINOTIFY MCI_NOTIFY_SUCCESSFUL MCI_OPEN #1
  5924.    ΓöéΓöé      @WAIT_NOTIFY 1 45000
  5925.    ΓöéΓöé      @WAIT_PASSDEVICE midiplayer
  5926.    ΓöéΓöé      ############################################
  5927.    ΓöéΓöé      #                                          #
  5928.    ΓöéΓöé      #   LOAD AND CUE TYPE1. MID FILE           #
  5929.    ΓöéΓöé      #   PLAY jesu.mid  FILE AND EXPECT AN      #
  5930.    ΓöéΓöé      #   ABORT FROM A PAUSE                     #
  5931.    ΓöéΓöé      #                                          #
  5932.    ΓöéΓöé      ############################################
  5933.    ΓöéΓöé      #
  5934.    ΓöéΓöé  ΓöîΓöÇ> load midiplayer ?MMDATA-AUD?\jesu.mid  wait
  5935.    ΓöéΓöé  Γöé   cue midiplayer output wait
  5936.    ΓöéΓöé  Γöé   play midiplayer from 100 to 60000 notify
  5937.    ΓöéΓöé  Γöé   +MM_MCINOTIFY MCI_NOTIFY_ABORTED MCI_PLAY
  5938.    ΓöéΓöé  Γöé   #
  5939.    ΓöéΓöé  Γöé
  5940.    ΓöéΓöé  Γöé
  5941.    ΓöéΓöé  Γöé                 TEST OUTPUT FILE (AUDIO1.LOG)
  5942.    ΓöéΓöé  Γöé
  5943.    ΓöéΓöé  Γöé
  5944.    ΓöéΓöé  Γöé          ****************Opening script file
  5945.    ΓöéΓöé  Γöé
  5946.    ΓöéΓöé  Γöé
  5947.    ΓöéΓöé  Γöé          Thread 1 executing 21 commands.
  5948.    ΓööΓöéΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ> T:1 send string #  1 open sequencer alias midiplayer notify
  5949.     ΓööΓöÇΓöÇΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ> EXPECTED NOTIFY FOR #1: MM_MCINOTIFY SUCCESSFUL by MCI_OPEN script param= 1
  5950.        Γöé     Γö£ΓöÇΓöÇ> T:1 Notify received for #  1 MM_MCINOTIFY SUCCESSFUL by command MCI_OPEN ID 1
  5951.        Γöé     ΓööΓöÇΓöÇ> NOTIFY STATUS FOR #1: PASSED
  5952.        Γöé          T:1 Notify received MM_MCIPASSDEVICE MCI_GAINING_USE Device ID 1
  5953.        Γöé           returned string for #  1: 1
  5954.        Γöé          T:1 @WAIT_NOTIFY 1 45000
  5955.        Γöé          T:1 @WAIT_PASSDEVICE MIDIPLAYER
  5956.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇ> T:1 send string #  2 load midiplayer D:\SYSTEST\DATA-AUD\type1.mid  wait
  5957.              Γö£ΓöÇΓöÇ>  no returned string for #  2.
  5958.              ΓööΓöÇΓöÇ> NOTIFY STATUS FOR #2: FAILED
  5959.                      .
  5960.                      .
  5961.                      .
  5962.  
  5963.                   END OF SCRIPT FILE REACHED. 14 COMMANDS SENT
  5964.  
  5965.                   Waiting for late notifications for 30 sec
  5966.                   T:1 Notify received for # 14 MM_MCINOTIFY SUCCESSFUL by command MCI_CLOSE ID 1
  5967.                   NOTIFY STATUS FOR #14: PASSED
  5968.  
  5969.                   Script completed successfully
  5970.  
  5971.  The first command "open sequencer alias midiplayer notify" in the test expects 
  5972.  the following results: 
  5973.  
  5974.   +MM_MCINOTIFY MCI_NOTIFY_ABORTED MCI_PLAY
  5975.  
  5976.  Following the first and second line down in the previous example, you can see 
  5977.  that this command passed successfully: 
  5978.  
  5979.   EXPECTED NOTIFY FOR #1: MM_MCINOTIFY SUCCESSFUL by MCI_OPEN script param= 1
  5980.   T:1 Notify received for #  1 MM_MCINOTIFY SUCCESSFUL by command MCI_OPEN ID 1
  5981.   NOTIFY STATUS FOR #1: PASSED
  5982.  
  5983.  The following lines in the test script are not expecting returned information: 
  5984.  
  5985.   @WAIT_NOTIFY 1 45000
  5986.   @WAIT_PASSDEVICE midiplayer
  5987.  
  5988.  Therefore, the test output echoes these commands to show they were received. 
  5989.  
  5990.   T:1 @WAIT_NOTIFY 1 45000
  5991.   T:1 @WAIT_PASSDEVICE MIDIPLAYER
  5992.  
  5993.  However, the "load midiplayer ?MMDATA-AUD?\jesu.mid wait" command did not 
  5994.  receive the expected message, and the following is logged to the test file: 
  5995.  
  5996.   T:1 send string #  2 load midiplayer D:\SYSTEST\DATA-AUD\type1.mid  wait
  5997.    no returned string for #  2.
  5998.   NOTIFY STATUS FOR #2: FAILED
  5999.  
  6000.  The bottom of the test output file indicates how many commands were processed, 
  6001.  it also indicates if it is waiting for late notifications.  Depending on the 
  6002.  test, and the devices being tested, expected notifications might not always 
  6003.  arrive on time or in the order expected.  If a notification does not arrive 
  6004.  when expected, it can arrive later if the device driver has not failed. 
  6005.  
  6006.  This is especially important on multi-threaded or multi-process processing. 
  6007.  The more complicated the test (for example stress testing the device driver 
  6008.  with multiple devices), the more difficult it is to decipher the output file. 
  6009.  You will have to keep track of each thread or process separately to determine 
  6010.  the results of the test. 
  6011.  
  6012.  
  6013. ΓòÉΓòÉΓòÉ 12. Ultimotion Data Stream Specification ΓòÉΓòÉΓòÉ
  6014.  
  6015. Advances in microprocessor power, data storage, and compression technology have 
  6016. provided key technologies for creating and playing digital video data on 
  6017. personal computers.  The high capacity disk drives and CD-ROMs satisfy the 
  6018. large storage needs of digital video data.  Additionally, today's more powerful 
  6019. microprocessors provide sufficient power to handle digital video data in real 
  6020. time.  When these advances are combined with image compression techniques, the 
  6021. result is a powerful integration of video and the personal computer. 
  6022.  
  6023. Several compression algorithms are currently in use throughout the industry. 
  6024. Some of these algorithms are numerically intensive and use additional video 
  6025. hardware to compress and decompress the digitized video.  Others are less 
  6026. numerically intensive and can be handled by software running on the main CPU 
  6027. and still maintain sufficient frame rates to provide motion.  These are 
  6028. referred to as software-only algorithms.  While software-only techniques are 
  6029. attractive due to their low cost, the video quality of these algorithms is 
  6030. typically lower than the hardware-based algorithms.  Consequently, producers of 
  6031. digital video data struggle with trading off lower quality and cost of 
  6032. software-only techniques for the higher quality and cost of hardware-assisted 
  6033. video.  Ultimotion* provides a motion video compression technique capable of 
  6034. producing a high level of quality in a software-only playback environment. 
  6035.  
  6036.  
  6037. ΓòÉΓòÉΓòÉ 12.1. Overview of Ultimotion Video Compression ΓòÉΓòÉΓòÉ
  6038.  
  6039. Decompression (playback) of Ultimotion video is possible with very low 
  6040. computational complexity to enable real-time playback in a software-only 
  6041. environment.  The "nominal Ultimotion movie" is defined as 320 x 240, 15 frames 
  6042. per second at a 150KB per second data rate.  This movie can be played on at 
  6043. least a 25 MHz 80386 microprocessor.  Systems with faster microprocessors are 
  6044. capable of higher frame rates and larger output image sizes. 
  6045.  
  6046. Compression (recording) of Ultimotion video can be performed with a range of 
  6047. computational complexity.  In a software-only environment using frame-grabber 
  6048. hardware, Ultimotion video can be compressed either in real-time or 
  6049. asymmetrically in conjunction with frame-step recording. 
  6050.  
  6051. Ultimotion real-time compression provides instant video turn-around at a very 
  6052. low cost.  The most common quality type can be used to produce 160 x 120 videos 
  6053. at 15 frames per second with a 25 MHz 80486 microprocessor. A larger frame size 
  6054. can be used to produce 320 x 240 videos at 8 frames per second. The quality 
  6055. level is selectable to attain different data rates. Slower systems may also be 
  6056. used for real time capture or record, but the frame rates will be lower. 
  6057.  
  6058. Asymmetric compression provides the most compression and quality, but must be 
  6059. used in conjunction with frame-step capture, or raw input source files.  With a 
  6060. 25 MHz 80486 microprocessor, 320 x 240 frames can be compressed in one to four 
  6061. seconds. Specialized capture or compression hardware will enable real-time 
  6062. capture with the same quality level now attained through asymmetric 
  6063. compression. 
  6064.  
  6065.  
  6066. ΓòÉΓòÉΓòÉ 12.1.1. Scalability ΓòÉΓòÉΓòÉ
  6067.  
  6068. Ultimotion is a playback-time scalable video data stream. While the frame rate 
  6069. and output image size (resolution) are set when the video is created, the 
  6070. characteristics of a playback scalable video are modified during playback 
  6071. according to the capabilities of the playback platform. These playback-platform 
  6072. capabilities depend on the type of microprocessor, data bandwidth, display 
  6073. driver, and video adapter available during playback. Based on the 
  6074. characteristics of these components, the output quality of a single Ultimotion 
  6075. video stream can be "scaled" to the playback platform. 
  6076.  
  6077.  
  6078. ΓòÉΓòÉΓòÉ 12.1.2. Processor Independence ΓòÉΓòÉΓòÉ
  6079.  
  6080. In deriving the Ultimotion data stream, care was taken to balance the 
  6081. requirements of software-only and hardware-assisted decompression. The 
  6082. resulting data stream: 
  6083.  
  6084.    o  Uses byte-oriented data organization and simple integer arithmetic (that 
  6085.       is, no multiplication or division) so that non-computationally intensive 
  6086.       decompression algorithms can be used. 
  6087.  
  6088.    o  Organizes the data for efficient processing of unwanted data when being 
  6089.       scaled during playback. 
  6090.  
  6091.  Data structures are organized for hardware-assisted techniques wherever 
  6092.  feasible but do not utilize any particular processor instruction capability. 
  6093.  
  6094.  
  6095. ΓòÉΓòÉΓòÉ 12.1.3. Playback Characteristics ΓòÉΓòÉΓòÉ
  6096.  
  6097. While Ultimotion is a runtime scalable data stream, the magnitude that the data 
  6098. stream will "scale" is determined by the amount of information that is encoded 
  6099. in the data stream when it was created.  That is, the amount of data placed in 
  6100. the stream at creation time determines the "maximum" playback characteristics 
  6101. that a particular stream can achieve. In turn, the processing capabilities of 
  6102. the playback system determine how much of the data can be processed and 
  6103. presented during playback.  Therefore, the playback characteristics of a given 
  6104. video are a function of the data put into the video by the author and the 
  6105. processing capabilities of the playback system. 
  6106.  
  6107. The factors affecting the data stream at creation time are: 
  6108.  
  6109.    o  Resolution - width and height of video 
  6110.    o  Frame duration - frequency at which frames are to be displayed 
  6111.    o  I-frame rate - frequency at which reference frames are to occur 
  6112.    o  Data rate - average amount of data allowed for an interval of video 
  6113.  
  6114.  Factors affecting the playback of a video are: 
  6115.  
  6116.    o  Processing power of the CPU 
  6117.    o  Throughput of data storage (for example, CD-ROM, hard disk, and LAN) 
  6118.    o  Efficiency of the display subsystem 
  6119.  
  6120.  Resolution Scalability 
  6121.  
  6122.  Resolution of a video determines how much spatial information is in a video 
  6123.  image, as well as the "normal" playback size.  Ultimotion video compression 
  6124.  enables the output image size to be efficiently scaled up or down as it is 
  6125.  decompressed, based on user preference or application requirements.  Scaling 
  6126.  down the output image size enables more efficient playback on slower systems. 
  6127.  
  6128.  Frame Rate Scalability 
  6129.  
  6130.  Frame duration for the frames in a video is usually referred to as frame rate. 
  6131.  A frame compressed without regard to a prior frame uses intraframe compression 
  6132.  and is called an I-frame. A frame compressed by considering only what has 
  6133.  changed from a prior frame uses temporal compression and is called a delta 
  6134.  frame. I-frames are a snapshot in time of the video.  Delta frames show only 
  6135.  what changed.  The I-frame rate of a video is the frequency that I-frames 
  6136.  occur in the data stream. 
  6137.  
  6138.  The I-frame rate affects several characteristics of a video stream: 
  6139.  
  6140.    o  Data rate 
  6141.    o  Quality of motion during scanning 
  6142.    o  Performance of seek operations 
  6143.    o  Ability to maintain smooth motion when frames are dropped to maintain 
  6144.       audio synchronization 
  6145.    o  Image re-paint time in a windowing system where no backup saving is used 
  6146.       during clipping 
  6147.  
  6148.  Since I-frames contain the compressed data of the entire image, they are 
  6149.  typically larger than delta frames. Ultimotion data streams that mix I-frames 
  6150.  and delta frames: 
  6151.  
  6152.    o  Reduce throughput requirements with smaller delta frames 
  6153.    o  Provide points in the stream at which the entire image exists (good for 
  6154.       seeking and scanning) 
  6155.    o  Provide points in the video stream at which artifacts are repaired (with 
  6156.       I-frames) 
  6157.  
  6158.  Generally, an I-frame rate of one I-frame every one or two seconds provides 
  6159.  the best results. 
  6160.  
  6161.  Color Scalability 
  6162.  
  6163.  Ultimotion compression algorithms store images in a YUV direct color space. 
  6164.  This color space is mapped at playback time to the number of colors available 
  6165.  on the playback system.  This avoids the need to have different versions of 
  6166.  video content to fully exploit varying hardware capabilities. 
  6167.  
  6168.  
  6169. ΓòÉΓòÉΓòÉ 12.1.4. Playback Platform Considerations ΓòÉΓòÉΓòÉ
  6170.  
  6171. Direct Output 
  6172.  
  6173. When decompressed, the Ultimotion data stream can produce either partial or 
  6174. complete video frames.  The technique chosen to display these frames varies 
  6175. from platform to platform and largely depends on the display subsystem of the 
  6176. platform.  Some systems allow a decompressor to access the display buffer 
  6177. directly where the decompressor may only update changed information. Others 
  6178. require changed information in full frames. The resulting performance 
  6179. characteristics of playback on various platforms is dependent on the efficiency 
  6180. of the display subsystem. 
  6181.  
  6182. Window Clipping 
  6183.  
  6184. In support of direct output in a windowing environment, Ultimotion 
  6185. decompression is well-suited for enabling clipping in the decompressor. 
  6186.  
  6187.  
  6188. ΓòÉΓòÉΓòÉ 12.2. How Ultimotion Video Compression Works ΓòÉΓòÉΓòÉ
  6189.  
  6190. The data stream combines several techniques to provide both temporal and 
  6191. spatial compression.  These techniques include the following, which will be 
  6192. discussed in more detail in this section: 
  6193.  
  6194.    o  Variable chrominance subsampling 
  6195.    o  Luminance transition coding 
  6196.    o  Statistical luminance image coding 
  6197.  
  6198.  
  6199. ΓòÉΓòÉΓòÉ 12.2.1. Interframe versus Intraframe Compression ΓòÉΓòÉΓòÉ
  6200.  
  6201. While the data stream supports both interframe and intraframe compression, no 
  6202. specific distinction is made between frame types.  An intraframe compressed 
  6203. frame is one that does not contain any unchanged data.  This does not preclude 
  6204. the file format from making such a distinction, as in the Audio/Video 
  6205. Interleaved (AVI) file format. Capture or compression software generally 
  6206. enables periodic insertion of intraframe compressed video frames. 
  6207.  
  6208.  
  6209. ΓòÉΓòÉΓòÉ 12.2.2. Format of Encoded Video Frame Data ΓòÉΓòÉΓòÉ
  6210.  
  6211. During video compression, each video frame is decomposed into non-overlapping 
  6212. square blocks, nominally of 8 x 8 pixels.  Blocks in turn are decomposed into 
  6213. quadrants, nominally of 4 x 4 pixels.  The quadrants in a block are considered 
  6214. to be ordered in a counter-clockwise direction, beginning with the upper-left 
  6215. quadrant. 
  6216.  
  6217. Blocks 
  6218.  
  6219. The format of the encoded video frame data is the sequence of all blocks in the 
  6220. frame, each encoded as shown in the following figure, and ordered in a raster 
  6221. scan of the grid of blocks in the video frame. The data for a block begins with 
  6222. a one-byte block header that defines the interpretation of the data that 
  6223. follows for the block and the quadrants contained in the block. 
  6224.  
  6225. While the block size is variable on output, the preferred output block size is 
  6226. 8 x 8 pixels, which results in a direct mapping of some encoding types 
  6227. (statistical). 
  6228.  
  6229. The following figure shows the format for each encoded block used to represent 
  6230. the decomposed frame. 
  6231.  
  6232. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6233. ΓöéXXXXXXXXΓöé   Encoded Block              Γöé
  6234. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6235.                  OR
  6236. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6237. ΓöéXXXXXXXXΓöéQuad 1  Quad 2  Quad 3  Quad 4Γöé
  6238. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6239.   Header      Four Encoded Quadrants
  6240.  
  6241. Color Space 
  6242.  
  6243. The data stream uses a direct color space; that is, no in-stream palettes or 
  6244. lookup tables are used.  The color space used provides 6 bits of luminance and 
  6245. 8 bits of chrominance (6Y 4U 4V). The encoding of chrominance is performed by 
  6246. quantizing a portion of the dynamic range of the U and V components. The RGB 
  6247. conversion is performed using the following equations, which assume an RGB 
  6248. 5-6-5 representation: 
  6249.  
  6250.  
  6251.         Y  = ((0.299R + 0.2935G + 0.114B) x 2.037) + 0.5
  6252.         U  = (((-0.169R - 0.163G + 0.500B) x 8.226)/6.375) + 5
  6253.         V  = (((0.500R - 0.206G - 0.081B) x 8.226)/7.500) + 6
  6254.  
  6255. The value of Y is restricted to 0 through 63 and the values of U and V are 
  6256. restricted to 0 through 15. 
  6257.  
  6258.  
  6259. ΓòÉΓòÉΓòÉ 12.2.3. Variable Chrominance Subsampling ΓòÉΓòÉΓòÉ
  6260.  
  6261. The chrominance value for each quadrant is determined by taking a weighted 
  6262. average of the chrominance values of the pixels in the quadrant.  The 
  6263. chrominance values for each quadrant in the block are then compared with the 
  6264. chrominance values for other quadrants in the block, and if the values are 
  6265. within a threshold t of each other, the chrominance of the entire block is 
  6266. considered to be perceptually similar, and a single chrominance value is used 
  6267. for the entire block.  This results in this block of the image being sampled at 
  6268. a low frequency.  If, on the other hand, the chrominance values for the 
  6269. quadrants in the block differ by more than t, the block is considered to 
  6270. contain perceptually dissimilar colors, and a unique chrominance value is used 
  6271. for each quadrant in the block.  This results in this block of the image being 
  6272. sampled at a high frequency. 
  6273.  
  6274. Chrominance Modes 
  6275.  
  6276. The data stream uses a variable chrominance subsampling mechanism. Chrominance 
  6277. data appears in the data stream with a varying frequency depending on the 
  6278. chrominance mode: 
  6279.  
  6280.    o  Normal chrominance mode 
  6281.  
  6282.       This is the default mode.  A single chrominance value (one byte) 
  6283.       immediately follows the block header (except in the case of a completely 
  6284.       unchanged block) and that chrominance value is used for the entire block. 
  6285.  
  6286.    o  Unique chrominance mode 
  6287.  
  6288.       This mode is entered whenever chrominance subsampling fails; that is, 
  6289.       using a single chrominance value for an entire block results in 
  6290.       "chrominance bleeding" artifacts.  In this mode, the block header is not 
  6291.       followed by a chrominance value.  Instead, each quadrant encoding 
  6292.       includes a unique chrominance value. 
  6293.  
  6294.    o  Single unique chrominance 
  6295.  
  6296.       Single unique chrominance is signaled by an escape value and indicates 
  6297.       that a unique chrominance mode is used for the next block only.  See 
  6298.       Escape Values. 
  6299.  
  6300.  
  6301. ΓòÉΓòÉΓòÉ 12.2.4. Luminance Transition Coding ΓòÉΓòÉΓòÉ
  6302.  
  6303. Luminance transition coding (LTC) is based on the reduction of variation in 
  6304. luminance of a region of an image to a single direction.  Each region of the 
  6305. image is analyzed to correlate individual luminance values and determine the 
  6306. direction in which the maximum luminance change is occurring.  Sample values 
  6307. are then determined by taking the average number of pixels perpendicular to 
  6308. this direction. The luminance values within the region can then be mapped to 
  6309. one of a predetermined set of luminance values based on various functions of 
  6310. increasing luminance.  These functions approximate commonly occurring luminance 
  6311. variations in natural images. 
  6312.  
  6313. The resultant encoding of the region is then compared with the uncompressed 
  6314. image data for the region.  The error (in luminance space) is calculated for 
  6315. use in comparing with other encoding types. The selection of an encoding type 
  6316. is based on the following two considerations: (1) comparison of the errors of 
  6317. the different types (where the error as defined above is inversely correlated 
  6318. to the quality of the representation) and (2) the amount of data each type 
  6319. consumes as allowed by the amount of compression to be obtained. 
  6320.  
  6321. One-Byte Luminance Transition Region Encoding 
  6322.  
  6323. The data for a one-byte encoding consists of a single luminance value and 2 
  6324. bits that indicate a direction of increasing luminance of one step, if any. 
  6325. The one-byte encoding is useful because regions that have the same luminance 
  6326. value (known as homogeneous regions), or only a very small change in luminance, 
  6327. are common and should be encoded with as little data as possible. 
  6328.  
  6329. Two-Byte Luminance Transition Region Encoding 
  6330.  
  6331. The data for a two-byte encoding consists of the direction of increasing 
  6332. luminance and a transition index value that specifies a base Y value, a delta Y 
  6333. value, and a transition function. The transition index is the index into a 
  6334. table which defines the common set of four byte-transitions.  The derivation of 
  6335. this index value is described later. 
  6336.  
  6337. Four-Byte Luminance Transition Region Encoding 
  6338.  
  6339. The data for a four-byte encoding consists of a direction of luminance change 
  6340. and four luminance sample values along the specified direction. The four-byte 
  6341. encoding is useful for regions in which the changes in luminance cannot be 
  6342. accurately mapped to the set of predetermined luminance values used in the 
  6343. two-byte encoding.  Note that the specified direction (angle) does not include 
  6344. the opposite directions (╤æ 180 degrees) because the luminance values need not 
  6345. be increasing (a requirement of the transition index).  Thus the opposite 
  6346. directions are implied by the use of the four luminance values. 
  6347.  
  6348.  
  6349. ΓòÉΓòÉΓòÉ 12.2.5. Format of Block Header ΓòÉΓòÉΓòÉ
  6350.  
  6351. The encoding for a block begins with a block header specifying how the four 
  6352. quadrants it represents have been encoded. In addition to specifying these 
  6353. encoding types, certain values of the block header are reserved as escape 
  6354. values that contain control information about the interpretation of the data 
  6355. stream. The possibilities for processing a block as specified by the block 
  6356. header fall into two basic categories: 
  6357.  
  6358.    o  Quadrant encodings 
  6359.  
  6360.       Quadrant encodings specify that the block is comprised of four quadrants, 
  6361.       NW, SW, SE, and NE.  Each quadrant in turn is separately encoded with a 
  6362.       quadrant encoding type.  Quadrants in a block are encoded independently, 
  6363.       and may use different quadrant encoding types, with some restrictions 
  6364.       which are described later. 
  6365.  
  6366.    o  Block header escape 
  6367.  
  6368.       Rather than indicate the encoding type for a block and its respective 
  6369.       quadrants, certain values are reserved as escape values to enable special 
  6370.       processing of the data stream. 
  6371.  
  6372.  A block encoding is encoded using a one-byte block header followed by an 
  6373.  encoding type. The following figure shows the format for a block encoding. 
  6374.  
  6375.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6376.   ΓöéXXXXXXXXΓöé  BLOCK ENCODING DATA         Γöé
  6377.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6378.     Header     Encoded Quadrants
  6379.  
  6380.  A quadrant encoding block uses the two left-most bits of the block header to 
  6381.  specify how the first quadrant in the stream was encoded.  Similarly, the next 
  6382.  two left-most bits of the block header specify how the next quadrant was 
  6383.  encoded, and so on. The following figure shows the format for a quadrant 
  6384.  block. 
  6385.  
  6386.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6387.   ΓöéQ1Q2Q3Q4ΓöéCOLOR  QUAD 1  QUAD 2  QUAD 3  QUAD 4Γöé
  6388.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6389.    Header    Four Quadrant Encodings
  6390.  
  6391.  The specification of the block header bits depends on the current stream 
  6392.  interpretation mode.  This mode determines which set of four encoding types is 
  6393.  used when a block is decomposed into quadrants.  The stream interpretation 
  6394.  mode can be switched anywhere within a frame.  The stream interpretation mode 
  6395.  defaults to mode 0 at the start of each frame. 
  6396.  
  6397.  The following combination of quadrant types are defined for mode 0 stream 
  6398.  interpretation: 
  6399.  
  6400.    o  00: Unchanged quadrant 
  6401.    o  01: Homogeneous/shallow LTC quadrant 
  6402.    o  10: LTC quadrant 
  6403.    o  11: Statistical/extended LTC quadrant 
  6404.  
  6405.  The following combination of quadrant types are defined for mode 1 stream 
  6406.  interpretation: 
  6407.  
  6408.    o  00: Unchanged quadrant 
  6409.    o  01: Homogenous quadrant 
  6410.    o  10: Subsampled 4-luminance quadrant 
  6411.    o  11: 16-luminance quadrant 
  6412.  
  6413.  
  6414. ΓòÉΓòÉΓòÉ 12.2.6. Quadrant Encoding Types ΓòÉΓòÉΓòÉ
  6415.  
  6416. Encoding types used when a block is comprised into quadrants are described 
  6417. here.  All the quadrants of a block share a single 8-bit chrominance value 
  6418. unless unique chrominance mode is being used, in which case each of the 
  6419. quadrant encodings in a block are preceded by a unique chrominance value. 
  6420.  
  6421. Unchanged Quadrant 
  6422.  
  6423. The data for the quadrant is unchanged from the previous frame and no further 
  6424. data is encoded.  Note that a block with four unchanged quadrants is the same 
  6425. as an unchanged block which contains no chrominance value. The following figure 
  6426. shows how the encoded data is organized for a block containing one changed 
  6427. quadrant and three unchanged quadrants. 
  6428.  
  6429. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6430. Γöé00 00 01 00ΓöéCHROMINANCEΓöéQUAD 3 Γöé...
  6431. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6432.  Block Header          One Encoded Quadrant
  6433.  
  6434. Decoding Tips 
  6435.  
  6436. To decode an unchanged quadrant: 
  6437.  
  6438.    1. Move pointers in the output data to the next quadrant of the block. 
  6439.    2. Continue processing the next two bits of the block header. 
  6440.  
  6441.  Compression attained with this quadrant encoding is 0.25 bits per pixel, 
  6442.  assuming normal chrominance mode, including 2 bits chrominance and 2 bits for 
  6443.  the block header, representing a 1/4 share of each for a quadrant.  A 
  6444.  completely unchanged block (4 unchanged quadrants) will attain a compression 
  6445.  level of 0.125 bits per pixel, as no chrominance information is encoded for 
  6446.  the block. 
  6447.  
  6448.  Luminance Transition Coding Quadrant 
  6449.  
  6450.  The data for the quadrant is described as an angle of direction of increasing 
  6451.  luminance and an index indicating the luminance sample values along that 
  6452.  direction. The delta Y values are distributed to provide lower quantization in 
  6453.  shallow gradients. The following figure shows how the encoded data is 
  6454.  organized for an LTC quadrant. 
  6455.  
  6456.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6457.   Γöéxx 10 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé AAAA YDIST index  Γöé
  6458.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6459.   Block Header Shared                Luminance transition
  6460.                Chrominance
  6461.  
  6462.  The quadrant is encoded as follows: 
  6463.  
  6464.    o  Four bits representing angle of direction of increasing luminance (0 
  6465.       indicates increasing luminance left to right - 0 degrees - with 
  6466.       subsequent angles increasing in a counter-clockwise direction at 
  6467.       increments of 22.5 degrees). 
  6468.  
  6469.            4 bits    Angle of Direction 
  6470.            0000      0 degrees 
  6471.            0001      22.5 degrees 
  6472.            0010      45 degrees 
  6473.  
  6474.                                           .
  6475.                                           .
  6476.                                           .
  6477.  
  6478.            1111      337.5 (-22.5) degrees 
  6479.  
  6480.    o  12 bits luminance transition index 
  6481.  
  6482.  Decoding Tips 
  6483.  
  6484.  To decode this quadrant: 
  6485.  
  6486.    1. Determine the luminance values to use for the quadrant by performing a 
  6487.       table lookup. 
  6488.    2. Interpret the direction bits and reverse luminance values if angle value 
  6489.       is greater than 7. 
  6490.    3. Using the shared chrominance for the block plus the 6 bits of the first 
  6491.       luminance, convert the resulting color to the target color space. 
  6492.    4. Using the direction bits as a vector,  store the color in the appropriate 
  6493.       positions of the quadrant.  This can be done with eight output routines 
  6494.       that map the luminance values into patterns for the first eight angles. 
  6495.       The remaining eight angles are the opposite directions from the first 
  6496.       eight, and are covered by reversing the luminance values. 
  6497.    5. Convert the remaining Y values and store in appropriate positions in the 
  6498.       quadrant. 
  6499.  
  6500.  Compression attained with this quadrant encoding is 1.25 bits per pixel, 
  6501.  assuming normal chrominance mode, including 2 bits chrominance and 2 bits for 
  6502.  the block header, representing a 1/4 share of each for a quadrant. 
  6503.  
  6504.  Statistical Pattern/Extended LTC Quadrant 
  6505.  
  6506.  The first bit of the encoding determines whether the data is a statistical 
  6507.  pattern or an extended LTC encoding.  If the first bit is 0, the data for the 
  6508.  quadrant is described as two luminance values Y1 and Y2, and a pattern 
  6509.  specifying the distribution of the two luminance values among the pixels in 
  6510.  the quadrant. The following figure shows how the encoded data is organized for 
  6511.  a statistical quadrant. 
  6512.  
  6513.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6514.   Γöéxx 11 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé Pattern Γöé 00 Y1 00 Y2 Γöé
  6515.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6516.   Block Header Shared                Pattern  Luminance Values
  6517.                Chrominance
  6518.  
  6519.  The quadrant is encoded as follows: 
  6520.  
  6521.    o  16 bits of pattern in raster scan order (MSB = 0) 
  6522.    o  2 bits undefined (decoder must mask) 
  6523.    o  6 bits Y1 
  6524.    o  2 bits undefined (decoder must mask) 
  6525.    o  6 bits Y2 
  6526.  
  6527.  Decoding Tips 
  6528.  
  6529.  To decode this quadrant: 
  6530.  
  6531.    1. Convert the two luminance values to the output color space using the 
  6532.       chrominance for the block or the quadrant, as defined by the current 
  6533.       chrominance mode. 
  6534.    2. Output the two colors into pixels in the quadrant as defined by the 
  6535.       pattern.  The color obtained by converting Y1 is output wherever the 
  6536.       corresponding pattern bit is 0, and the color obtained by converting Y2 
  6537.       is output wherever the corresponding pattern bit is 1. 
  6538.  
  6539.  The following figure shows how the encoded data is organized for an Extended 
  6540.  LTC quadrant. 
  6541.  
  6542.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6543.   Γöéxx 11 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé1Γöé AAA Γöé Y1 Γöé Y2 Γöé 00 Y3 Γöé 00 Y4 Γöé
  6544.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6545.   Block Header Shared                  Angle    Luminance Values
  6546.                Chrominance
  6547.  
  6548.  The quadrant is encoded as follows: 
  6549.  
  6550.    o  1 bit = 1 
  6551.  
  6552.    o  3 bits angle 0-157.5 degrees ( 000 = 0 degrees, 22.5 degree increments) 
  6553.  
  6554.    o  6 bits Y1 
  6555.  
  6556.    o  6 bits Y2 
  6557.  
  6558.    o  2 bits undefined (decoder must mask) 
  6559.  
  6560.    o  6 bits Y3 
  6561.  
  6562.    o  2 bits undefined (decoder must mask) 
  6563.  
  6564.    o  6 bits Y4 
  6565.  
  6566.  Decoding Tips 
  6567.  
  6568.  To decode this quadrant: 
  6569.  
  6570.    1. Shift the luminance values into the same positions that are obtained by 
  6571.       the luminance transition index lookup. 
  6572.    2. Enter the appropriate output routine in the LTC quadrant processing based 
  6573.       on the angle specified. (Note that only eight angles are encoded. Because 
  6574.       individual Y values are uniquely specified, each angle + 180 degrees is 
  6575.       implied by reversing the ordering.) 
  6576.  
  6577.  Format of Homogeneous Quadrant/Shallow Gradient Quadrant 
  6578.  
  6579.  An encoded homogeneous/shallow gradient quadrant is specified by its 
  6580.  corresponding two bits in the block header and a luminance value. The 
  6581.  following figure shows how the encoded data is organized for a decomposed 
  6582.  block whose second quadrant is a homogenous/shallow gradient. 
  6583.  
  6584.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6585.   Γöéxx 01 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé ssLL LLLL Γöé
  6586.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6587.   Block Header Shared                Luminance
  6588.                Chrominance
  6589.  
  6590.  The quadrant is encoded as follows: 
  6591.  
  6592.    o  2 bits representing Y delta and angle of direction of increasing 
  6593.       luminance (00 indicates constant luminance, and values 01, 10, and 11 
  6594.       specify luminance increasing one level across the quadrant in the 
  6595.       specified direction). 
  6596.  
  6597.            2 bits    Y delta, Angle of Direction 
  6598.            00        0, N/A 
  6599.            01        1, 45 degrees 
  6600.            10        1, 135 degrees 
  6601.            11        1, 270 degrees 
  6602.  
  6603.    o  Six bits Y 
  6604.  
  6605.  Decoding Tips 
  6606.  
  6607.  To decode this quadrant: 
  6608.  
  6609.    1. Using the shared chrominance value for the block, use the luminance value 
  6610.       Y and convert the YUV color to the target color space. 
  6611.    2. If angle/delta is 0, store the target color in the entire quadrant. 
  6612.    3. If angle/delta is not 0, perform a second color space conversion using 
  6613.       Y+1 as the luminance value, and output the two colors with an error 
  6614.       diffused density pattern in the direction specified. 
  6615.    4. Increment output pointers to the next quadrant in the block. 
  6616.    5. Move to the next quadrant in the encoded stream. 
  6617.  
  6618.  Compression attained with this quadrant encoding is 2.25 bits per pixel, 
  6619.  assuming normal chrominance mode, including 2 bits chrominance and 2 bits for 
  6620.  the block header, representing a 1/4 share of each for a quadrant. 
  6621.  
  6622.  Subsampled 4-Luminance Quadrant 
  6623.  
  6624.  An encoded subsampled 4-luminance quadrant is specified by its corresponding 
  6625.  two bits in the block header and four luminance values.  When decoded to an 8 
  6626.  x 8 block size, this quadrant encoding type results in one color value per 2 x 
  6627.  2 pixel region in the quadrant. The following figure shows how the encoded 
  6628.  data is organized for a block whose second quadrant is a Subsampled 
  6629.  4-luminance quadrant. 
  6630.  
  6631.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6632.   Γöéxx 10 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé 1111 1122 Γöé 2222 3333 Γöé 3344 4444 Γöé
  6633.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6634.   Block Header Shared                Four Luminance Values
  6635.                Chrominance
  6636.  
  6637.  The quadrant is encoded as follows: 
  6638.  
  6639.    o  6 bits Y1 
  6640.  
  6641.    o  6 bits Y2 
  6642.  
  6643.    o  6 bits Y3 
  6644.  
  6645.    o  6 bits Y4 
  6646.  
  6647.  Decoding Tips 
  6648.  
  6649.  To decode this quadrant: 
  6650.  
  6651.    1. Using the shared chrominance value in this quadrant and the first 
  6652.       luminance value (Y1), convert the YUV color to the target color space. 
  6653.    2. Store the output color in the corresponding 2 x 2 area of the quadrant. 
  6654.    3. Move output pointers to the next 2 x 2 of the quadrant in the order NW, 
  6655.       NE, SW, SE. 
  6656.    4. Repeat the last 3 steps for each luminance in the encoded stream. 
  6657.  
  6658.  Compression attained with this quadrant encoding is 1.75 bits per pixel, 
  6659.  assuming normal chrominance mode, including 2 bits chrominance and 2 bits for 
  6660.  the block header, representing a 1/4 share of each for a quadrant. 
  6661.  
  6662.  16-Luminance Quadrant 
  6663.  
  6664.  An encoded 16-luminance quadrant is specified by its corresponding two bits in 
  6665.  the block header and 16 luminance values. When decoded with an 8 x 8 block 
  6666.  size, this quadrant encoding contains one color value per pixel in the 
  6667.  quadrant. The following figure shows how the encoded data is organized for a 
  6668.  block whose second quadrant is a 16-luminance quadrant. 
  6669.  
  6670.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6671.   Γöéxx 11 xx xxΓöéCHROMINANCEΓöé QUAD 1 Γöé 1111 1122 Γöé 2222 3333 Γöé 3344 4444 Γöé ....
  6672.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6673.   Block Header Shared                16 Luminance Values
  6674.                Chrominance
  6675.  
  6676.  The quadrant is encoded as follows: 
  6677.  
  6678.    o  6 bits Y1 
  6679.  
  6680.    o  6 bits Y2 
  6681.  
  6682.    o  6 bits Y3 
  6683.  
  6684.    o  6 bits Y4 
  6685.  
  6686.                 .
  6687.                 .
  6688.                 .
  6689.  
  6690.    o  6 bits Y16 
  6691.  
  6692.  Decoding Tips 
  6693.  
  6694.  To decode this quadrant: 
  6695.  
  6696.    1. Using the shared chrominance value in this quadrant and the first 
  6697.       luminance value (Y1), convert the YUV color to the target color space. 
  6698.    2. Store the output color in the corresponding pixel of the quadrant. 
  6699.    3. Repeat the last two steps for each pixel in the quadrant. 
  6700.  
  6701.  Compression attained with this quadrant encoding is 6.25 bits per pixel, 
  6702.  assuming normal chrominance mode, including 2 bits chrominance and 2 bits for 
  6703.  the block header, representing a 1/4 share of each for a quadrant. 
  6704.  
  6705.  
  6706. ΓòÉΓòÉΓòÉ 12.2.7. Escape Values ΓòÉΓòÉΓòÉ
  6707.  
  6708. Block headers with a value of 01110xxx are used as escape values, used to 
  6709. specify both block encoding types and data stream interpretation escape values. 
  6710. The following data stream interpretation escape values are defined: 
  6711.  
  6712.    o  Normal/unique chrominance mode toggle 
  6713.  
  6714.       This escape toggles the chrominance mode between normal and unique. 
  6715.  
  6716.    o  Single unique chrominance mode 
  6717.  
  6718.       This escape causes the following block to be interpreted in unique 
  6719.       chrominance mode.  The current chrominance mode is unchanged. 
  6720.  
  6721.    o  Frame guard byte 
  6722.  
  6723.       For efficiency, decoder implementations may choose not to bounds check 
  6724.       addressing into the source data buffer.  If the source buffer contains 
  6725.       invalid data, an access violation might occur.  Additionally, invalid 
  6726.       data might be decoded as valid data without any means of software 
  6727.       detection.  Both of these problems are addressed with the "guard byte" 
  6728.       value. 
  6729.  
  6730.       At least one guard byte always appears at the end of a coded frame, and 
  6731.       is encoded in the stream.  If the byte immediately following the last 
  6732.       block encoding for a frame is not equal to this value, it is considered 
  6733.       to be an error.  As it is highly improbable that a buffer containing 
  6734.       invalid data will be decoded and the above condition still met, decoding 
  6735.       of invalid source data can be detected in this way. 
  6736.  
  6737.       If a guard byte value is encountered as an escape before the end of the 
  6738.       frame, it is also considered to be an error.  It is possible to stop a 
  6739.       decoder from over-reading with invalid data by appending 64 bytes (the 
  6740.       size of the largest block encoding) equal to 73H (the frame guard byte 
  6741.       value) to the end of the buffer. A decoder interpreting a stream will 
  6742.       then encounter a guard byte before the end of the buffer is overrun. 
  6743.  
  6744.    o  Unchanged block run 
  6745.  
  6746.       This escape indicates a number of blocks are completely unchanged. The 
  6747.       byte following the escape indicates the total number of blocks to skip. 
  6748.       While it is perfectly valid to have consecutive unchanged blocks encoded 
  6749.       with block header values of zero, it should be noted that for 
  6750.       compression, three or more consecutive unchanged blocks should be encoded 
  6751.       as an unchanged block run.  Also, since two consecutive unchanged blocks 
  6752.       may be encoded as an unchanged block run in the same space as zero block 
  6753.       header values, an encoder can establish an unchanged run in the output 
  6754.       data stream whenever two consecutive unchanged blocks are encountered. 
  6755.  
  6756.    o  General stream control escape 
  6757.  
  6758.       This escape provides a generalized escape mechanism for more escapes than 
  6759.       permitted by the 3-bit direct escape in the byte header.  This escape is 
  6760.       followed by a 1-byte control value.  The following generalized escapes 
  6761.       are defined: 
  6762.  
  6763.         -  Enable stream interpretation mode 0 
  6764.         -  Enable stream interpretation mode 1 
  6765.  
  6766.  Note that since block header values 01110xxx are reserved as escape values, 
  6767.  quadrant encoding combinations that would produce a block header value with 
  6768.  any of these eight values are not allowed and must be altered to other 
  6769.  encodings by the compressor. 
  6770.  
  6771.  
  6772. ΓòÉΓòÉΓòÉ 12.3. Predetermined Luminance Transitions ΓòÉΓòÉΓòÉ
  6773.  
  6774. A static set of luminance transitions across a region are defined. Seven types 
  6775. of predetermined transitions are defined for increasing luminance: 
  6776.  
  6777.    1. Linear 
  6778.  
  6779.       The luminance level increases at a constant rate across the region. 
  6780.  
  6781.    2. Low-contrast edge at 1/4 block width from low-luminance edge 
  6782.  
  6783.       The luminance level changes at an edge that is perpendicular to the 
  6784.       direction of increasing luminance at a point where the area of the region 
  6785.       following the edge is three times the area of that preceding the edge. 
  6786.       The change in luminance is not instantaneous, analogous to a blurry 
  6787.       transition. 
  6788.  
  6789.    3. Low-contrast edge at 1/2 block width from low-luminance edge 
  6790.  
  6791.       Same as above, but with the change occurring at the point where the areas 
  6792.       of the region on either side of the edge are equal. 
  6793.  
  6794.    4. Low-contrast edge at 3/4 block width from low-luminance edge 
  6795.  
  6796.       Same as above, but with the change occurring at the point where the area 
  6797.       of the region preceding the edge is three times the area of that 
  6798.       following the edge. 
  6799.  
  6800.    5. High-contrast edge at 1/4 block width from low-luminance edge 
  6801.  
  6802.       The luminance level changes at an edge that is perpendicular to the 
  6803.       direction of increasing luminance at a point where the area of the region 
  6804.       following the edge is three times the area of that preceding the edge. 
  6805.       The change in luminance is instantaneous, analogous to a sharp, well 
  6806.       defined edge. 
  6807.  
  6808.    6. High-contrast edge at 1/2 block width from low-luminance edge 
  6809.  
  6810.       Same as above, but with the change occurring at the point where the areas 
  6811.       of the region on either side of the edge are equal. 
  6812.  
  6813.    7. High-contrast edge at 3/4 block width from low-luminance edge 
  6814.  
  6815.       Same as above, but with the change occurring at the point where the area 
  6816.       of the region preceding the edge is three times the area of that 
  6817.       following the edge. 
  6818.  
  6819.  The pre-determined luminance transitions are comprised of a subset of the 
  6820.  total possible luminance changes in the range 0 through 63 for each of the 
  6821.  transition types as follows: 
  6822.  
  6823.    o  Linear 
  6824.  
  6825.       Total Y delta = 2 3 4 5 6 7 8 11 14 17 20 
  6826.  
  6827.    o  Low-contrast Edge 
  6828.  
  6829.       Total Y delta = 4 5 6 7 8 11 14 17 20 23 26 29 32 36 
  6830.  
  6831.    o  High-contrast Edge 
  6832.  
  6833.       Total Y delta = 6 8 11 14 17 20 23 26 29 32 35 40 46 
  6834.  
  6835.  These selections of allowable Y delta values in two-byte Luminance Transition 
  6836.  region encodings accomplish several objectives: 
  6837.  
  6838.    o  When combined with the seven transition types at all 64 initial luminance 
  6839.       levels, the total number of valid transitions (those in which the Y delta 
  6840.       value added to the initial luminance level does not exceed the maximum 
  6841.       luminance level of 63) is 4096, which can be encoded in 12 bits in the 
  6842.       two-byte encoding. 
  6843.  
  6844.    o  Regions with small changes in luminance (for example, <= 8) can be 
  6845.       encoded with single luminance level precision.  Regions with small 
  6846.       changes in luminance are more common than regions with extreme changes. 
  6847.  
  6848.    o  Regions with larger changes in luminance (8 < x < 32) can be represented 
  6849.       with an edge-to-edge error not exceeding one luminance level. 
  6850.  
  6851.    o  Extreme changes in luminance (32 < x < 50) can be represented in two-byte 
  6852.       encodings if required by data rate constraints, although with some 
  6853.       potential loss in quality as the extreme Y delta values are more highly 
  6854.       quantized. 
  6855.  
  6856.  The following additional characteristics are exploited in the selection of 
  6857.  allowable Y delta values for each transition type: 
  6858.  
  6859.    o  Transitions with Y delta values less than two are encoded with the 
  6860.       one-byte encoding (resulting in a quantized direction). 
  6861.  
  6862.    o  Edge transitions with Y delta values less than 4 are deemed perceptually 
  6863.       similar to a linear transition. 
  6864.  
  6865.    o  Edge transitions with Y delta values less than 6 are deemed perceptually 
  6866.       similar with regard to edge type, that is, low or high contrast. 
  6867.  
  6868.    o  Transitions with Y delta values greater than 20 tend to be non-linear, 
  6869.       that is, usually include an edge, and are coded only as such 
  6870.  
  6871.    o  Luminance changes greater than 50 are extremely rare and can be quantized 
  6872.       with little perceptible quality loss. 
  6873.  
  6874.  The luminance transition index is produced by enumerating all valid 
  6875.  transitions that are combinations of initial Y values of 0 through 63 and 
  6876.  transition types with Y delta values as listed above.  The following code 
  6877.  fragment illustrates how these combinations are enumerated: 
  6878.  
  6879.  
  6880.      for (Y1 = 0, Y1 <= 63, Y1++) {
  6881.         for (Y2 = Y1, Y2 <= 63, Y2++) {
  6882.            Ydelta = Y2 - Y1;
  6883.            if (Ydelta == <valid linear transition Y delta value>)
  6884.               <enumerate linear transition>;
  6885.            if (Ydelta == <valid low-contrast edge transition Y delta value>)
  6886.            {
  6887.               <enumerate low-contrast edge at 1/4 transition>;
  6888.               <enumerate low-contrast edge at 1/2 transition>;
  6889.               <enumerate low-contrast edge at 3/4 transition>;
  6890.            }
  6891.            if (Ydelta == <valid high-contrast edge transition Y delta value>)
  6892.            {
  6893.               <enumerate high-contrast edge at 1/4 transition>;
  6894.               <enumerate high-contrast edge at 1/2 transition>;
  6895.               <enumerate high-contrast edge at 3/4 transition>;
  6896.            }
  6897.         }
  6898.      }
  6899.  
  6900.  
  6901. ΓòÉΓòÉΓòÉ 12.4. Data Stream Escape Value Constants ΓòÉΓòÉΓòÉ
  6902.  
  6903. Escape values defined in the data stream are one-byte values, in the range 70H 
  6904. - 77H  (01110xxx). 
  6905.  
  6906.  
  6907. ΓòÉΓòÉΓòÉ 12.4.1. General Stream Control Escape - 70H ΓòÉΓòÉΓòÉ
  6908.  
  6909. This escape is used to imbed control information in the stream.  It is followed 
  6910. by a single byte value containing the control information. 
  6911.  
  6912. Stream control byte values 
  6913.  
  6914.    o  Set stream interpretation mode 0 - 00H 
  6915.  
  6916.       Stream interpretation mode 0 block header quadrant decomposition cases: 
  6917.  
  6918.         1. 00: Unchanged quadrant 
  6919.  
  6920.         2. 01: Homogenous/shallow LTC quadrant 
  6921.  
  6922.         3. 10: Luminance transition coding (LTC) quadrant 
  6923.  
  6924.         4. 11: Statistical/extended LTC quadrant 
  6925.  
  6926.    o  Set stream interpretation mode 1 - 01H 
  6927.  
  6928.       Stream interpretation mode 1 block header quadrant decomposition cases: 
  6929.  
  6930.         1. 00: Unchanged quadrant 
  6931.  
  6932.         2. 01: Homogenous/shallow LTC quadrant 
  6933.  
  6934.         3. 10: Subsampled 4-luminance quadrant 
  6935.  
  6936.         4. 11: 16-luminance quadrant 
  6937.  
  6938.  
  6939. ΓòÉΓòÉΓòÉ 12.4.2. Single Unique Chrominance Block Escape - 71H ΓòÉΓòÉΓòÉ
  6940.  
  6941. This escape signals that the next block contains unique chrominance values. The 
  6942. chrominance mode (normal or unique) is unchanged.  If the current chrominance 
  6943. mode is unique, this escape has no effect and is ignored. 
  6944.  
  6945.  
  6946. ΓòÉΓòÉΓòÉ 12.4.3. Normal/Unique Chrominance Mode Toggle Escape - 72H ΓòÉΓòÉΓòÉ
  6947.  
  6948. This escape causes normal chrominance mode to be entered if the current mode is 
  6949. unique chrominance mode, and causes unique chrominance mode to be entered if 
  6950. the current mode is normal chrominance mode. 
  6951.  
  6952.  
  6953. ΓòÉΓòÉΓòÉ 12.4.4. Frame Guard Byte Value - 73H ΓòÉΓòÉΓòÉ
  6954.  
  6955. This escape assists the decoder in determining if invalid data has been 
  6956. encountered in the input stream.  See Escape Values for a more detailed 
  6957. explanation. 
  6958.  
  6959.  
  6960. ΓòÉΓòÉΓòÉ 12.4.5. Unchanged Block Run Escape - 74H ΓòÉΓòÉΓòÉ
  6961.  
  6962. This escape value indicates some number of completely unchanged blocks. The 
  6963. number of unchanged blocks follows the escape in a single byte, and as such, is 
  6964. limited to 255. 
  6965.  
  6966.  
  6967. ΓòÉΓòÉΓòÉ 12.4.6. Reserved Escape Values - 75H, 76H, 77H ΓòÉΓòÉΓòÉ
  6968.  
  6969. These escape values are reserved. 
  6970.  
  6971.  
  6972. ΓòÉΓòÉΓòÉ 13. DDCMD Messages ΓòÉΓòÉΓòÉ
  6973.  
  6974. The device driver commands are an interface used by a stream handler to 
  6975. communicate with a physical device driver.  This interface uses the 
  6976. inter-device driver communication (IDC) mechanism provided by OS/2 AttachDD 
  6977. DevHelp.  The stream handler must attach to the device driver using AttachDD 
  6978. DevHelp to receive the DDCMD entry point address of the device driver.  This 
  6979. must be done prior to issuing any DDCMDs.  Some device drivers also might 
  6980. require that a DosOpen call be used to open the device driver before it can be 
  6981. used through the AttachDD entry point. 
  6982.  
  6983. The DDCMDs are provided through a single entry point, DDCMDEntryPoint, which 
  6984. accepts a parameter structure on input. 
  6985.  
  6986.  typedef ULONG (FAR*PSHDFN)        (PVOID pParmIn);
  6987.  typedef ULONG (FAR*PDDCMDFN)      (PVOID pParmIn);
  6988.  
  6989. For the Ring 3 DLL interface, all pointers are 0:32 linear; for Ring 0 stream 
  6990. handlers all pointers are 16:16 far pointers to enable the 16-bit device driver 
  6991. model to be used. The following list contains the message numbers for all 
  6992. DDCMDs.  It should be used in the ulFunction field, of the parameter structure 
  6993. passed on the call, to indicate which function is being requested by the stream 
  6994. handler. 
  6995.  
  6996. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6997. ΓöéMessage ΓöéMessage                   ΓöéDescription               Γöé
  6998. ΓöéNumbers Γöé                          Γöé                          Γöé
  6999. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7000. Γöé4L      ΓöéDDCMD_CONTROL             ΓöéPerforms a device-specificΓöé
  7001. Γöé        Γöé                          Γöécommand.                  Γöé
  7002. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7003. Γöé6L      ΓöéDDCMD_DEREG_STREAM        ΓöéRemoves a stream instance Γöé
  7004. Γöé        Γöé                          Γöéfrom a device driver.     Γöé
  7005. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7006. Γöé1L      ΓöéDDCMD_READ                ΓöéPerforms a read from the  Γöé
  7007. Γöé        Γöé                          Γöédevice into a buffer.     Γöé
  7008. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7009. Γöé5L      ΓöéDDCMD_REG_STREAM          ΓöéRegisters a stream        Γöé
  7010. Γöé        Γöé                          Γöéinstance with a device    Γöé
  7011. Γöé        Γöé                          Γöédriver.                   Γöé
  7012. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7013. Γöé0L      ΓöéDDCMD_SETUP               ΓöéPerforms a device-specificΓöé
  7014. Γöé        Γöé                          Γöéstream instance setup.    Γöé
  7015. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7016. Γöé3L      ΓöéDDCMD_STATUS              ΓöéRequests status from the  Γöé
  7017. Γöé        Γöé                          Γöédevice.                   Γöé
  7018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7019. Γöé2L      ΓöéDDCMD_WRITE               ΓöéPerforms a write from a   Γöé
  7020. Γöé        Γöé                          Γöébuffer to the device.     Γöé
  7021. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7022.  
  7023.  
  7024. ΓòÉΓòÉΓòÉ 13.1. DDCMDEntryPoint ΓòÉΓòÉΓòÉ
  7025.  
  7026.  
  7027. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint - Syntax ΓòÉΓòÉΓòÉ
  7028.  
  7029. /*******************************************/
  7030. /* This function enables device driver     */
  7031. /* stream handlers to interface with the   */
  7032. /* hardware physical device driver (PDD).  */
  7033. /*******************************************/
  7034. #include <os2me.h>
  7035.  
  7036. PDDCMDCOMMON    pParmIn;  /*  Pointer to DDCMDCOMMON. */
  7037. ULONG           rc;       /*  Return codes. */
  7038.  
  7039. rc = DDCMDEntryPoint(pParmIn);
  7040.  
  7041.  
  7042. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7043.  
  7044.  pParmIn (PDDCMDCOMMON) - input 
  7045.     A pointer to a DDCMD message-specific input parameter block.  See 
  7046.     DDCMDCOMMON. 
  7047.  
  7048.  
  7049. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint Return Value - rc ΓòÉΓòÉΓòÉ
  7050.  
  7051.  rc (ULONG) - returns 
  7052.     Return codes indicating success or the type of failure: 
  7053.  
  7054.       NO_ERROR 
  7055.          Successful. 
  7056.  
  7057.       ERROR_INVALID_FUNCTION 
  7058.          Invalid function requested. 
  7059.  
  7060.       FAILURE 
  7061.          A DDCMD message-specific error return code. 
  7062.  
  7063.  
  7064. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint - Parameters ΓòÉΓòÉΓòÉ
  7065.  
  7066.  pParmIn (PDDCMDCOMMON) - input 
  7067.     A pointer to a DDCMD message-specific input parameter block.  See 
  7068.     DDCMDCOMMON. 
  7069.  
  7070.  rc (ULONG) - returns 
  7071.     Return codes indicating success or the type of failure: 
  7072.  
  7073.       NO_ERROR 
  7074.          Successful. 
  7075.  
  7076.       ERROR_INVALID_FUNCTION 
  7077.          Invalid function requested. 
  7078.  
  7079.       FAILURE 
  7080.          A DDCMD message-specific error return code. 
  7081.  
  7082.  
  7083. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint - Remarks ΓòÉΓòÉΓòÉ
  7084.  
  7085. Device driver stream handlers communicate with the hardware PDD through the 
  7086. DDCmdEntryPoint.  This is accomplished through the use of Device Driver Command 
  7087. (DDCMD) messages, which enable a stream handler to request a PDD to perform 
  7088. functions such as starting, stopping, or resuming operation of a device.  This 
  7089. interface uses the IDC mechanism provided by the ATTACHDD DevHelp function. 
  7090. The stream handler must attach to the device driver to receive the DDCMD entry 
  7091. point address of the device driver.  This function is performed prior to 
  7092. issuing device driver command messages. 
  7093.  
  7094.  
  7095. ΓòÉΓòÉΓòÉ <hidden> DDCMDEntryPoint - Topics ΓòÉΓòÉΓòÉ
  7096.  
  7097. Select an item: 
  7098.  
  7099. Syntax
  7100. Parameters
  7101. Returns
  7102. Remarks
  7103. Glossary
  7104.  
  7105.  
  7106. ΓòÉΓòÉΓòÉ 13.2. DDCMD_CONTROL ΓòÉΓòÉΓòÉ
  7107.  
  7108.  
  7109. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL - Syntax ΓòÉΓòÉΓòÉ
  7110.  
  7111. This message performs a device-specific command. 
  7112.  
  7113.  
  7114. pParmIn
  7115.      PDDCMDCONTROL  pParmIn  /*  Input. */
  7116.  
  7117. returns
  7118.      ULONG          rc       /*  Return codes. */
  7119.  
  7120.  
  7121. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7122.  
  7123.  pParmIn (PDDCMDCONTROL) 
  7124.     A pointer to a DDCMDCONTROL data structure.  The pParm and ulParmSize 
  7125.     fields refer to the CONTROL_PARM data structure. Values for ulCmd include: 
  7126.  
  7127.       DDCMD_START 
  7128.          Start a device. 
  7129.  
  7130.       DDCMD_STOP 
  7131.          Stop a device and return current position. 
  7132.  
  7133.       DDCMD_PAUSE 
  7134.          Pause a device and return current position. 
  7135.  
  7136.       DDCMD_RESUME 
  7137.          Resume a paused device 
  7138.  
  7139.       DDCMD_ENABLE_EVENT 
  7140.          Enable event detection. 
  7141.  
  7142.       DDCMD_DISABLE_EVENT 
  7143.          Disable event detection in the device driver. 
  7144.  
  7145.       DDCMD_PAUSE_TIME 
  7146.          Pause time but do not pause stream. 
  7147.  
  7148.       DDCMD_RESUME_TIME 
  7149.          Resume time. 
  7150.  
  7151.  
  7152. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL Return Value - rc ΓòÉΓòÉΓòÉ
  7153.  
  7154.  rc (ULONG) 
  7155.     Error code indicating success or the type of failure: 
  7156.  
  7157.       NO_ERROR 
  7158.          Success. 
  7159.  
  7160.       ERROR_INVALID_FUNCTION 
  7161.          Illegal function requested. 
  7162.  
  7163.       ERROR_INVALID_REQUEST 
  7164.          Device driver does not support events. (Returned when ulCmd of 
  7165.          DDCMDCONTROL is set to DDCMD_ENABLE_EVENT.) 
  7166.  
  7167.       ERROR_INVALID_STREAM 
  7168.          Invalid stream handle. 
  7169.  
  7170.       ERROR_INVALID_SEQUENCE 
  7171.          Invalid device control command. 
  7172.  
  7173.       ERROR_INSUFF_BUFFER 
  7174.          The device driver does not have buffers to perform the requested 
  7175.          action. 
  7176.  
  7177.       ERROR_STREAM_NOT_STARTED 
  7178.          The stream cannot perform the requested action unless the stream has 
  7179.          been started. 
  7180.  
  7181.       ERROR_TOO_MANY_EVENTS 
  7182.          The stream handler attempted to enable too many events. 
  7183.  
  7184.       FAILURE 
  7185.          Device driver-specific error return code. 
  7186.  
  7187.  
  7188. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL - Parameters ΓòÉΓòÉΓòÉ
  7189.  
  7190.  pParmIn (PDDCMDCONTROL) 
  7191.     A pointer to a DDCMDCONTROL data structure.  The pParm and ulParmSize 
  7192.     fields refer to the CONTROL_PARM data structure. Values for ulCmd include: 
  7193.  
  7194.       DDCMD_START 
  7195.          Start a device. 
  7196.  
  7197.       DDCMD_STOP 
  7198.          Stop a device and return current position. 
  7199.  
  7200.       DDCMD_PAUSE 
  7201.          Pause a device and return current position. 
  7202.  
  7203.       DDCMD_RESUME 
  7204.          Resume a paused device 
  7205.  
  7206.       DDCMD_ENABLE_EVENT 
  7207.          Enable event detection. 
  7208.  
  7209.       DDCMD_DISABLE_EVENT 
  7210.          Disable event detection in the device driver. 
  7211.  
  7212.       DDCMD_PAUSE_TIME 
  7213.          Pause time but do not pause stream. 
  7214.  
  7215.       DDCMD_RESUME_TIME 
  7216.          Resume time. 
  7217.  
  7218.  rc (ULONG) 
  7219.     Error code indicating success or the type of failure: 
  7220.  
  7221.       NO_ERROR 
  7222.          Success. 
  7223.  
  7224.       ERROR_INVALID_FUNCTION 
  7225.          Illegal function requested. 
  7226.  
  7227.       ERROR_INVALID_REQUEST 
  7228.          Device driver does not support events. (Returned when ulCmd of 
  7229.          DDCMDCONTROL is set to DDCMD_ENABLE_EVENT.) 
  7230.  
  7231.       ERROR_INVALID_STREAM 
  7232.          Invalid stream handle. 
  7233.  
  7234.       ERROR_INVALID_SEQUENCE 
  7235.          Invalid device control command. 
  7236.  
  7237.       ERROR_INSUFF_BUFFER 
  7238.          The device driver does not have buffers to perform the requested 
  7239.          action. 
  7240.  
  7241.       ERROR_STREAM_NOT_STARTED 
  7242.          The stream cannot perform the requested action unless the stream has 
  7243.          been started. 
  7244.  
  7245.       ERROR_TOO_MANY_EVENTS 
  7246.          The stream handler attempted to enable too many events. 
  7247.  
  7248.       FAILURE 
  7249.          Device driver-specific error return code. 
  7250.  
  7251.  
  7252. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL - Remarks ΓòÉΓòÉΓòÉ
  7253.  
  7254. The stream handler uses this command to control the actions of the physical 
  7255. device driver. 
  7256.  
  7257.  
  7258. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL - Example Code ΓòÉΓòÉΓòÉ
  7259.  
  7260. The following code illustrates the stream handler requesting the PDD to stop 
  7261. its current task, for example, the PDD stops playing audio. 
  7262.  
  7263. #include        "os2.h"
  7264. #include        "os2me.h"
  7265. #include        "shdd.h"
  7266.  
  7267.   ULONG         ulRC;                      /* Error return code      */
  7268.   HSTREAM       hstream;                   /* Stream handle          */
  7269.   DDCMDCONTROL  ddcmdpb;                   /* Parameter block        */
  7270.   PDDCMDFN      pddcmdfn;                  /* Pointer to DDCMD entry
  7271.                                               point                  */
  7272.                             .
  7273.                             .
  7274.                             .
  7275. /*-------------------------------------------------------------------*/
  7276. /*  The stream handler directs the physical device driver to stop.   */
  7277. /*-------------------------------------------------------------------*/
  7278.   ddcmdpb.ulFunction = DDCMD_CONTROL;
  7279.   ddcmdpb.hstream = hstream;
  7280.   ddcmdpb.pParm = NULL;
  7281.   ddcmdpb.ulParmSize = NULL;
  7282.   ddcmdpb.ulCmd = DDCMD_STOP;
  7283.  
  7284.    if (ulRC = pddcmdfn (&ddcmdpb))
  7285.      return (ulRC);    /* error!  */
  7286.  
  7287.  
  7288. ΓòÉΓòÉΓòÉ <hidden> DDCMD_CONTROL - Topics ΓòÉΓòÉΓòÉ
  7289.  
  7290. Select an item: 
  7291.  
  7292. Syntax
  7293. Parameters
  7294. Returns
  7295. Remarks
  7296. Example Code
  7297. Glossary
  7298.  
  7299.  
  7300. ΓòÉΓòÉΓòÉ 13.3. DDCMD_DEREG_STREAM ΓòÉΓòÉΓòÉ
  7301.  
  7302.  
  7303. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM - Syntax ΓòÉΓòÉΓòÉ
  7304.  
  7305. This message removes a stream instance from a device driver.  The stream 
  7306. handler directs the device driver to deregister the stream-destroy the stream 
  7307. and all associated data. 
  7308.  
  7309.  
  7310. pParmIn
  7311.      PDDCMDDEREGISTER  pParmIn  /*  Input. */
  7312.  
  7313. returns
  7314.      ULONG             rc       /*  Return codes. */
  7315.  
  7316.  
  7317. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7318.  
  7319.  pParmIn (PDDCMDDEREGISTER) 
  7320.     A pointer to a DDCMDDEREGISTER data structure. 
  7321.  
  7322.  
  7323. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM Return Value - rc ΓòÉΓòÉΓòÉ
  7324.  
  7325.  rc (ULONG) 
  7326.     Error code indicating success or the type of failure: 
  7327.  
  7328.       NO_ERROR 
  7329.          Success. 
  7330.  
  7331.       ERROR_INVALID_FUNCTION 
  7332.          Illegal function requested. 
  7333.  
  7334.       ERROR_INVALID_STREAM 
  7335.          Invalid stream handle. 
  7336.  
  7337.       FAILURE 
  7338.          Device-driver-specific error. 
  7339.  
  7340.  
  7341. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM - Parameters ΓòÉΓòÉΓòÉ
  7342.  
  7343.  pParmIn (PDDCMDDEREGISTER) 
  7344.     A pointer to a DDCMDDEREGISTER data structure. 
  7345.  
  7346.  rc (ULONG) 
  7347.     Error code indicating success or the type of failure: 
  7348.  
  7349.       NO_ERROR 
  7350.          Success. 
  7351.  
  7352.       ERROR_INVALID_FUNCTION 
  7353.          Illegal function requested. 
  7354.  
  7355.       ERROR_INVALID_STREAM 
  7356.          Invalid stream handle. 
  7357.  
  7358.       FAILURE 
  7359.          Device-driver-specific error. 
  7360.  
  7361.  
  7362. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM - Remarks ΓòÉΓòÉΓòÉ
  7363.  
  7364.    o  This message removes the communication link between the physical device 
  7365.       driver and the stream handler for a particular stream instance. The only 
  7366.       input is the stream handle, which indicates to the device driver which 
  7367.       stream to destroy. 
  7368.  
  7369.    o  After a deregister, the VSD (or device driver) no longer has access to 
  7370.       any buffers, and the buffers will be returned to SSM by the stream 
  7371.       handler. The VSD does not have to return the buffers; they are returned 
  7372.       for the it. The VSD should not return from the destroy until it has 
  7373.       stopped using all buffers. 
  7374.  
  7375.  
  7376. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM - Example Code ΓòÉΓòÉΓòÉ
  7377.  
  7378. The following code illustrates the stream handler requesting the stream to be 
  7379. de-registered. 
  7380.  
  7381. #include        "os2.h"
  7382. #include        "os2me.h"
  7383. #include        "shdd.h"
  7384.  
  7385.   ULONG           ulRC;                    /* Error return code      */
  7386.   HSTREAM         hstream;                 /* Stream handle          */
  7387.   DDCMDDEREGISTER ddcmdpb;                 /* Parameter block        */
  7388.   PDDCMDFN        pddcmdfn;                /* Pointer to DDCMD entry */
  7389.                                            /* point                  */
  7390.                             .
  7391.                             .
  7392.                             .
  7393. /*-------------------------------------------------------------------*/
  7394. /*   The stream handler deregisters with the physical device driver. */
  7395. /*-------------------------------------------------------------------*/
  7396.   ddcmdpb.ulFunction = DDCMD_DEREG_STREAM;
  7397.   ddcmdpb.hstream = hstream;
  7398.  
  7399.   if (ulRC = pddcmdfn (&ddcmdpb))
  7400.     return (ulRC);    /* error! */
  7401.  
  7402.  
  7403. ΓòÉΓòÉΓòÉ <hidden> DDCMD_DEREG_STREAM - Topics ΓòÉΓòÉΓòÉ
  7404.  
  7405. Select an item: 
  7406.  
  7407. Syntax
  7408. Parameters
  7409. Returns
  7410. Remarks
  7411. Example Code
  7412. Glossary
  7413.  
  7414.  
  7415. ΓòÉΓòÉΓòÉ 13.4. DDCMD_READ ΓòÉΓòÉΓòÉ
  7416.  
  7417.  
  7418. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ - Syntax ΓòÉΓòÉΓòÉ
  7419.  
  7420. This message performs a read from the device into a buffer. 
  7421.  
  7422.  
  7423. pParmIn
  7424.      PDDCMDREADWRITE  pParmIn  /*  Input/Output. */
  7425.  
  7426. returns
  7427.      ULONG            rc       /*  Return codes. */
  7428.  
  7429.  
  7430. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7431.  
  7432.  pParmIn (PDDCMDREADWRITE) 
  7433.     A pointer to a DDCMDREADWRITE data structure. 
  7434.  
  7435.  
  7436. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ Return Value - rc ΓòÉΓòÉΓòÉ
  7437.  
  7438.  rc (ULONG) 
  7439.     Error code indicating success or the type of failure: 
  7440.  
  7441.       NO_ERROR 
  7442.          Success. 
  7443.  
  7444.       ERROR_INVALID_FUNCTION 
  7445.          Illegal function requested. 
  7446.  
  7447.       ERROR_INVALID_STREAM 
  7448.          Invalid stream handle. 
  7449.  
  7450.       ERROR_INVALID_BLOCK 
  7451.          Invalid address passed in parameter block. 
  7452.  
  7453.       FAILURE 
  7454.          Device-driver-specific error return code. 
  7455.  
  7456.  
  7457. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ - Parameters ΓòÉΓòÉΓòÉ
  7458.  
  7459.  pParmIn (PDDCMDREADWRITE) 
  7460.     A pointer to a DDCMDREADWRITE data structure. 
  7461.  
  7462.  rc (ULONG) 
  7463.     Error code indicating success or the type of failure: 
  7464.  
  7465.       NO_ERROR 
  7466.          Success. 
  7467.  
  7468.       ERROR_INVALID_FUNCTION 
  7469.          Illegal function requested. 
  7470.  
  7471.       ERROR_INVALID_STREAM 
  7472.          Invalid stream handle. 
  7473.  
  7474.       ERROR_INVALID_BLOCK 
  7475.          Invalid address passed in parameter block. 
  7476.  
  7477.       FAILURE 
  7478.          Device-driver-specific error return code. 
  7479.  
  7480.  
  7481. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ - Remarks ΓòÉΓòÉΓòÉ
  7482.  
  7483. This message is used by a stream handler to give an empty buffer to the 
  7484. physical device driver. An example would be in an audio recording, where the 
  7485. physical device driver fills the buffer it gets from the stream handler. The 
  7486. pBuffer parameter is a pointer to the buffer to be filled in by the physical 
  7487. device driver. This pointer is either a physical 0:32 pointer, 16:16 far 
  7488. pointer or a global linear pointer. This is defined when the stream handler 
  7489. registers a stream with the device driver using DDCMD_REG_STREAM. 
  7490.  
  7491. Many devices cannot handle a 0 length buffer. If the driver receives a 0 length 
  7492. buffer, it should not reject the buffer. The driver should do nothing with the 
  7493. buffer and return it in the same order in which it was sent. 
  7494.  
  7495.  
  7496. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ - Example Code ΓòÉΓòÉΓòÉ
  7497.  
  7498. The following code illustrates the PDD ready to receive an empty buffer from 
  7499. the stream handler. 
  7500.  
  7501. #include        "os2.h"
  7502. #include        "os2me.h"
  7503. #include        "shdd.h"
  7504.  
  7505.   ULONG           ulRC;              /* Error return code            */
  7506.   HSTREAM         hstream;           /* Stream handle                */
  7507.   DDCMDREADWRITE  ddcmdpb;           /* Parameter block              */
  7508.   PDDCMDFN        pddcmdfn;          /* Pointer to DDCMD entry point */
  7509.   PVOID           pBuffer;           /* Pointer to buffer            */
  7510.  
  7511.                             .
  7512.                             .
  7513.                             .
  7514. /*-------------------------------------------------------------------*/
  7515. /*  Perform a read from the physical device driver.                  */
  7516. /*-------------------------------------------------------------------*/
  7517.   ddcmdpb.ulFunction = DDCMD_READ;
  7518.   ddcmdpb.hstream = hstream;
  7519.   ddcmdpb.pBuffer = pBuffer;
  7520.   ddcmdpb.ulBufferSize = 32768;
  7521.  
  7522.   if (ulRC = pddcmdfn (&ddcmdpb))
  7523.     return (ulRC);    /* error!*/
  7524.  
  7525.  
  7526. ΓòÉΓòÉΓòÉ <hidden> DDCMD_READ - Topics ΓòÉΓòÉΓòÉ
  7527.  
  7528. Select an item: 
  7529.  
  7530. Syntax
  7531. Parameters
  7532. Returns
  7533. Remarks
  7534. Example Code
  7535. Glossary
  7536.  
  7537.  
  7538. ΓòÉΓòÉΓòÉ 13.5. DDCMD_REG_STREAM ΓòÉΓòÉΓòÉ
  7539.  
  7540.  
  7541. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM - Syntax ΓòÉΓòÉΓòÉ
  7542.  
  7543. This message registers a stream instance with a device driver for the first 
  7544. time. 
  7545.  
  7546.  
  7547. pParmIn
  7548.      PDDCMDREGISTER  pParmIn  /*  Input. */
  7549.  
  7550. returns
  7551.      ULONG           rc       /*  Return codes. */
  7552.  
  7553.  
  7554. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7555.  
  7556.  pParmIn (PDDCMDREGISTER) 
  7557.     A pointer to a DDCMDREGISTER data structure. 
  7558.  
  7559.     Values for ulStreamOperation include: 
  7560.  
  7561.    o  STREAM_OPERATION_CONSUME 
  7562.    o  STREAM_OPERATION_PRODUCE 
  7563.  
  7564.     Values for ulAddressType include: 
  7565.  
  7566.    o  ADDRESS_TYPE_VIRTUAL 
  7567.    o  ADDRESS_TYPE_PHYSICAL 
  7568.    o  ADDRESS_TYPE_LINEAR 
  7569.  
  7570.  
  7571. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM Return Value - rc ΓòÉΓòÉΓòÉ
  7572.  
  7573.  rc (ULONG) 
  7574.     Error code indicating success or the type of failure: 
  7575.  
  7576.       NO_ERROR 
  7577.          Success. 
  7578.  
  7579.       ERROR_INVALID_FUNCTION 
  7580.          Illegal function requested. 
  7581.  
  7582.       ERROR_INVALID_STREAM 
  7583.          Invalid stream handle. 
  7584.  
  7585.       ERROR_HNDLR_REGISTERED 
  7586.          Stream had already been registered with the Sync/Stream Manager. 
  7587.  
  7588.       ERROR_INVALID_SPCBKEY 
  7589.          Invalid SPCBKEY. 
  7590.  
  7591.       ERROR_INITIALIZATION 
  7592.          An error occurred during device initialization. 
  7593.  
  7594.       ERROR_STREAM_CREATION 
  7595.          An error occurred during the creation of this stream instance. 
  7596.  
  7597.       FAILURE 
  7598.          Device-driver-specific error return code. 
  7599.  
  7600.  
  7601. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM - Parameters ΓòÉΓòÉΓòÉ
  7602.  
  7603.  pParmIn (PDDCMDREGISTER) 
  7604.     A pointer to a DDCMDREGISTER data structure. 
  7605.  
  7606.     Values for ulStreamOperation include: 
  7607.  
  7608.    o  STREAM_OPERATION_CONSUME 
  7609.    o  STREAM_OPERATION_PRODUCE 
  7610.  
  7611.     Values for ulAddressType include: 
  7612.  
  7613.    o  ADDRESS_TYPE_VIRTUAL 
  7614.    o  ADDRESS_TYPE_PHYSICAL 
  7615.    o  ADDRESS_TYPE_LINEAR 
  7616.  
  7617.  rc (ULONG) 
  7618.     Error code indicating success or the type of failure: 
  7619.  
  7620.       NO_ERROR 
  7621.          Success. 
  7622.  
  7623.       ERROR_INVALID_FUNCTION 
  7624.          Illegal function requested. 
  7625.  
  7626.       ERROR_INVALID_STREAM 
  7627.          Invalid stream handle. 
  7628.  
  7629.       ERROR_HNDLR_REGISTERED 
  7630.          Stream had already been registered with the Sync/Stream Manager. 
  7631.  
  7632.       ERROR_INVALID_SPCBKEY 
  7633.          Invalid SPCBKEY. 
  7634.  
  7635.       ERROR_INITIALIZATION 
  7636.          An error occurred during device initialization. 
  7637.  
  7638.       ERROR_STREAM_CREATION 
  7639.          An error occurred during the creation of this stream instance. 
  7640.  
  7641.       FAILURE 
  7642.          Device-driver-specific error return code. 
  7643.  
  7644.  
  7645. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM - Remarks ΓòÉΓòÉΓòÉ
  7646.  
  7647. A stream handler must register its entry point with the device driver once for 
  7648. each stream instance.  This message sets up the communication link between the 
  7649. stream handler and the physical device driver. 
  7650.  
  7651.  
  7652. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM - Example Code ΓòÉΓòÉΓòÉ
  7653.  
  7654. The following code illustrates how to register a stream instance with a device 
  7655. driver. 
  7656.  
  7657.  #include        "os2.h"
  7658.  #include        "os2me.h"
  7659.  #include        "shdd.h"
  7660.  
  7661.    ULONG           ulRC;                    /* Error return code      */
  7662.    HSTREAM         hstream;                 /* Stream handle          */
  7663.    DDCMDREGISTER   ddcmdpb;                 /* Parameter block        */
  7664.    PDDCMDFN        pddcmdfn;                /* Pointer to DDCMD entry */
  7665.                                             /* point                  */
  7666.    ULONG           ulSysFileNum;            /* Global file handle     */
  7667.    PSHDFN          pshdfn;                  /* Pointer to SHD entry   */
  7668.                                             /* point                  */
  7669.    SPCBKEY         spcbkey;                 /* Stream protocol key    */
  7670.  
  7671.                              .
  7672.                              .
  7673.                              .
  7674.  /*-------------------------------------------------------------------*/
  7675.  /*  Register a stream instance with a physical device driver.        */
  7676.  /*-------------------------------------------------------------------*/
  7677.    ddcmdpb.ulFunction = DDCMD_REGISTER;
  7678.    ddcmdpb.hstream = hstream;
  7679.    ddcmdpb.ulSysFileNum = ulSysFileNum;
  7680.    ddcmdpb.pSHDEntryPoint = pshdfn;
  7681.    ddcmdpb.ulStreamOperation = STREAM_OPERATION_CONSUME;
  7682.    ddcmdpb.spcbkey = spcbkey;
  7683.  
  7684.   if (ulRC = pddcmdfn (&ddcmdpb))
  7685.     return (ulRC);    /* error!*/
  7686.  
  7687.  
  7688. ΓòÉΓòÉΓòÉ <hidden> DDCMD_REG_STREAM - Topics ΓòÉΓòÉΓòÉ
  7689.  
  7690. Select an item: 
  7691.  
  7692. Syntax
  7693. Parameters
  7694. Returns
  7695. Remarks
  7696. Example Code
  7697. Glossary
  7698.  
  7699.  
  7700. ΓòÉΓòÉΓòÉ 13.6. DDCMD_SETUP ΓòÉΓòÉΓòÉ
  7701.  
  7702.  
  7703. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP - Syntax ΓòÉΓòÉΓòÉ
  7704.  
  7705. This message performs device-specific stream instance setup. 
  7706.  
  7707.  
  7708. pParmIn
  7709.      PDDCMDSETUP  pParmIn  /*  Input. */
  7710.  
  7711. returns
  7712.      ULONG        rc       /*  Return codes. */
  7713.  
  7714.  
  7715. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7716.  
  7717.  pParmIn (PDDCMDSETUP) 
  7718.     A pointer to a DDCMDSETUP data structure.  The pSetupParm and 
  7719.     ulSetupParmSize fields refer to the SETUP_PARM data structure. 
  7720.  
  7721.  
  7722. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP Return Value - rc ΓòÉΓòÉΓòÉ
  7723.  
  7724.  rc (ULONG) 
  7725.     Error code indicating success or the type of failure: 
  7726.  
  7727.       NO_ERROR 
  7728.          Success. 
  7729.  
  7730.       ERROR_INVALID_FUNCTION 
  7731.          Illegal function requested. 
  7732.  
  7733.       ERROR_INVALID_STREAM 
  7734.          Invalid stream handle. 
  7735.  
  7736.       ERROR_INVALID_REQUEST 
  7737.          Invalid setup request. 
  7738.  
  7739.       ERROR_STREAM_NOT_STOP 
  7740.          The stream cannot perform the requested function unless the stream has 
  7741.          been stopped. 
  7742.  
  7743.       FAILURE 
  7744.          Device-driver-specific error return code. 
  7745.  
  7746.  
  7747. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP - Parameters ΓòÉΓòÉΓòÉ
  7748.  
  7749.  pParmIn (PDDCMDSETUP) 
  7750.     A pointer to a DDCMDSETUP data structure.  The pSetupParm and 
  7751.     ulSetupParmSize fields refer to the SETUP_PARM data structure. 
  7752.  
  7753.  rc (ULONG) 
  7754.     Error code indicating success or the type of failure: 
  7755.  
  7756.       NO_ERROR 
  7757.          Success. 
  7758.  
  7759.       ERROR_INVALID_FUNCTION 
  7760.          Illegal function requested. 
  7761.  
  7762.       ERROR_INVALID_STREAM 
  7763.          Invalid stream handle. 
  7764.  
  7765.       ERROR_INVALID_REQUEST 
  7766.          Invalid setup request. 
  7767.  
  7768.       ERROR_STREAM_NOT_STOP 
  7769.          The stream cannot perform the requested function unless the stream has 
  7770.          been stopped. 
  7771.  
  7772.       FAILURE 
  7773.          Device-driver-specific error return code. 
  7774.  
  7775.  
  7776. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP - Remarks ΓòÉΓòÉΓòÉ
  7777.  
  7778. This message indicates to the physical device driver that a specific stream 
  7779. instance will become the active stream instance.  The pSetupParm field is used 
  7780. for device-specific information.  Typically, it is used to pass the current 
  7781. stream time from the stream handler to the PDD because a seek might have been 
  7782. requested on the stream prior to the stream start; thus, the PDD should adjust 
  7783. its time to this new reference time.  Time is passed as a pointer to the time 
  7784. in milliseconds. 
  7785.  
  7786.  
  7787. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP - Example Code ΓòÉΓòÉΓòÉ
  7788.  
  7789. The following code illustrates how to perform device-specific stream instance 
  7790. setup. 
  7791.  
  7792.  #include        "os2.h"
  7793.  #include        "os2me.h"
  7794.  #include        "shdd.h"
  7795.  
  7796.    ULONG           ulRC;                    /* Error return code     */
  7797.    HSTREAM         hstream;                 /* Stream handle         */
  7798.    DDCMDSETUP      ddcmdpb;                 /* Parameter block       */
  7799.    PDDCMDFN        pddcmdfn;                /* Pointer to DDCMD entry*/
  7800.                                             /* point                 */
  7801.    ULONG           ulStreamTime             /* Stream time           */
  7802.    PVOID           pBuffer;                 /* Pointer to buffer     */
  7803.  
  7804.                              .
  7805.                              .
  7806.                              .
  7807.  /*------------------------------------------------------------------*/
  7808.  /*Activate a stream instance in a physical device driver (Switch    */
  7809.  /*                                                         context) */
  7810.  /*------------------------------------------------------------------*/
  7811.    ddcmdpb.ulFunction = DDCMD_SETUP;
  7812.    ddcmdpb.hstream = hstream;
  7813.    ddcmdpb.pSetupParm = &ulStreamTime;    /* Setting stream time */
  7814.    ddcmdpbp.ulSetupParmSize = sizeof(ulStreamTime);
  7815.  
  7816.    if (ulRC = pddcmdfn (&ddcmdpb))
  7817.      return (ulRC);    /* error!*/
  7818.  
  7819.  
  7820. ΓòÉΓòÉΓòÉ <hidden> DDCMD_SETUP - Topics ΓòÉΓòÉΓòÉ
  7821.  
  7822. Select an item: 
  7823.  
  7824. Syntax
  7825. Parameters
  7826. Returns
  7827. Remarks
  7828. Example Code
  7829. Glossary
  7830.  
  7831.  
  7832. ΓòÉΓòÉΓòÉ 13.7. DDCMD_STATUS ΓòÉΓòÉΓòÉ
  7833.  
  7834.  
  7835. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS - Syntax ΓòÉΓòÉΓòÉ
  7836.  
  7837. This message requests status from the device. 
  7838.  
  7839.  
  7840. pParmIn
  7841.      PDDCMDSTATUS  pParmIn  /*  Input/Output. */
  7842.  
  7843. returns
  7844.      ULONG         rc       /*  Return codes. */
  7845.  
  7846.  
  7847. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7848.  
  7849.  pParmIn (PDDCMDSTATUS) 
  7850.     A pointer to a DDCMDSTATUS data structure.  The pStatus and ulStatusSize 
  7851.     fields refer to the STATUS_PARM data structure. 
  7852.  
  7853.  
  7854. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS Return Value - rc ΓòÉΓòÉΓòÉ
  7855.  
  7856.  rc (ULONG) 
  7857.     Error code indicating success or the type of failure: 
  7858.  
  7859.       NO_ERROR 
  7860.          Success. 
  7861.  
  7862.       ERROR_INVALID_FUNCTION 
  7863.          Illegal function requested. 
  7864.  
  7865.       ERROR_INVALID_STREAM 
  7866.          Invalid stream handle. 
  7867.  
  7868.       FAILURE 
  7869.          Device-driver-specific error return code. 
  7870.  
  7871.  
  7872. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS - Parameters ΓòÉΓòÉΓòÉ
  7873.  
  7874.  pParmIn (PDDCMDSTATUS) 
  7875.     A pointer to a DDCMDSTATUS data structure.  The pStatus and ulStatusSize 
  7876.     fields refer to the STATUS_PARM data structure. 
  7877.  
  7878.  rc (ULONG) 
  7879.     Error code indicating success or the type of failure: 
  7880.  
  7881.       NO_ERROR 
  7882.          Success. 
  7883.  
  7884.       ERROR_INVALID_FUNCTION 
  7885.          Illegal function requested. 
  7886.  
  7887.       ERROR_INVALID_STREAM 
  7888.          Invalid stream handle. 
  7889.  
  7890.       FAILURE 
  7891.          Device-driver-specific error return code. 
  7892.  
  7893.  
  7894. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS - Remarks ΓòÉΓòÉΓòÉ
  7895.  
  7896. This message queries the status of physical device driver.  This message might 
  7897. not be supported by all physical device drivers.  It is commonly used by the 
  7898. stream handler to request the current stream time from the physical device 
  7899. driver. 
  7900.  
  7901.  
  7902. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS - Example Code ΓòÉΓòÉΓòÉ
  7903.  
  7904. The following code illustrates how to request status from the device. 
  7905.  
  7906. #include        "os2.h"
  7907. #include        "os2me.h"
  7908. #include        "shdd.h"
  7909.  
  7910.   ULONG           ulRC;                     /* Error return code      */
  7911.   HSTREAM         hstream;                  /* Stream handle          */
  7912.   DDCMDSTATUS     ddcmdpb;                  /* Parameter block        */
  7913.   PDDCMDFN        pddcmdfn;                 /* Pointer to DDCMD entry */
  7914.                                             /* point                  */
  7915.                             .
  7916.                             .
  7917.                             .
  7918. /*--------------------------------------------------------------------*/
  7919. /*  Get the current stream time from the physical device driver.      */
  7920. /*--------------------------------------------------------------------*/
  7921.   ddcmdpb.ulFunction = DDCMD_STATUS;
  7922.   ddcmdpb.hstream = hstream;
  7923.   ddcmdpb.pStatus =NULL;                    /* Return stream time*/
  7924.   ddcmdpb.ulStatusSize = 0;
  7925.  
  7926.  
  7927.   if (ulRC = pddcmdfn (&ddcmdpb))
  7928.     return (ulRC);    /* error!*/
  7929.  
  7930.  
  7931. ΓòÉΓòÉΓòÉ <hidden> DDCMD_STATUS - Topics ΓòÉΓòÉΓòÉ
  7932.  
  7933. Select an item: 
  7934.  
  7935. Syntax
  7936. Parameters
  7937. Returns
  7938. Remarks
  7939. Example Code
  7940. Glossary
  7941.  
  7942.  
  7943. ΓòÉΓòÉΓòÉ 13.8. DDCMD_WRITE ΓòÉΓòÉΓòÉ
  7944.  
  7945.  
  7946. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE - Syntax ΓòÉΓòÉΓòÉ
  7947.  
  7948. This message performs a write from the buffer to the device. 
  7949.  
  7950.  
  7951. pParmIn
  7952.      PDDCMDREADWRITE  pParmIn  /*  Input. */
  7953.  
  7954. returns
  7955.      ULONG            rc       /*  Return codes. */
  7956.  
  7957.  
  7958. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE Parameter - pParmIn ΓòÉΓòÉΓòÉ
  7959.  
  7960.  pParmIn (PDDCMDREADWRITE) 
  7961.     A pointer to a DDCMDREADWRITE data structure. 
  7962.  
  7963.  
  7964. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE Return Value - rc ΓòÉΓòÉΓòÉ
  7965.  
  7966.  rc (ULONG) 
  7967.     Error code indicating success or the type of failure: 
  7968.  
  7969.       NO_ERROR 
  7970.          Success. 
  7971.  
  7972.       ERROR_INVALID_FUNCTION 
  7973.          Illegal function requested. 
  7974.  
  7975.       ERROR_INVALID_STREAM 
  7976.          Invalid stream handle. 
  7977.  
  7978.       ERROR_INVALID_BLOCK 
  7979.          Invalid address passed in parameter block. 
  7980.  
  7981.       FAILURE 
  7982.          Device-driver-specific error return code. 
  7983.  
  7984.  
  7985. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE - Parameters ΓòÉΓòÉΓòÉ
  7986.  
  7987.  pParmIn (PDDCMDREADWRITE) 
  7988.     A pointer to a DDCMDREADWRITE data structure. 
  7989.  
  7990.  rc (ULONG) 
  7991.     Error code indicating success or the type of failure: 
  7992.  
  7993.       NO_ERROR 
  7994.          Success. 
  7995.  
  7996.       ERROR_INVALID_FUNCTION 
  7997.          Illegal function requested. 
  7998.  
  7999.       ERROR_INVALID_STREAM 
  8000.          Invalid stream handle. 
  8001.  
  8002.       ERROR_INVALID_BLOCK 
  8003.          Invalid address passed in parameter block. 
  8004.  
  8005.       FAILURE 
  8006.          Device-driver-specific error return code. 
  8007.  
  8008.  
  8009. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE - Remarks ΓòÉΓòÉΓòÉ
  8010.  
  8011. This message is used by a stream handler to give a full buffer to the physical 
  8012. device driver.  An example would be the case of audio playback, where the 
  8013. stream handler passes a buffer with data to the physical device driver. 
  8014.  
  8015. The pBuffer parameter is a pointer to the data buffer.  Note that this pointer 
  8016. is either a physical 0:32 pointer, 16:16 far pointer, or a global linear 
  8017. pointer.  The pointer type is defined when the stream registers a stream with 
  8018. the device driver (DDCMD_REG_STREAM). 
  8019.  
  8020. Many devices cannot handle a 0 length buffer. If the driver receives a 0 length 
  8021. buffer, it should not reject the buffer. The driver should do nothing with the 
  8022. buffer and return it in the same order in which it was sent. 
  8023.  
  8024.  
  8025. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE - Example Code ΓòÉΓòÉΓòÉ
  8026.  
  8027. The following code illustrates how to perform a write to the physical device 
  8028. driver. 
  8029.  
  8030.  #include        "os2.h"
  8031.  #include        "os2me.h"
  8032.  #include        "shdd.h"
  8033.  
  8034.    ULONG           ulRC;                     /* Error return code      */
  8035.    HSTREAM         hstream;                  /* Stream handle          */
  8036.    DDCMDREADWRITE  ddcmdpb;                  /* Parameter block        */
  8037.    PDDCMDFN        pddcmdfn;                 /* Pointer to DDCMD entry */
  8038.                                              /* point                  */
  8039.    PVOID           pBuffer;                  /* Pointer to buffer      */
  8040.  
  8041.                              .
  8042.                              .
  8043.                              .
  8044.  /*--------------------------------------------------------------------*/
  8045.  /*  Perform a write to the physical device driver.                    */
  8046.  /*--------------------------------------------------------------------*/
  8047.    ddcmdpb.ulFunction = DDCMD_WRITE;
  8048.    ddcmdpb.hstream = hstream;
  8049.    ddcmdpb.pBuffer = pBuffer;
  8050.    ddcmdpb.ulBufferSize = 32768;
  8051.  
  8052.    if (ulRC = pddcmdfn (&ddcmdpb))
  8053.      return (ulRC);    /* error! */
  8054.  
  8055.  
  8056. ΓòÉΓòÉΓòÉ <hidden> DDCMD_WRITE - Topics ΓòÉΓòÉΓòÉ
  8057.  
  8058. Select an item: 
  8059.  
  8060. Syntax
  8061. Parameters
  8062. Returns
  8063. Remarks
  8064. Example Code
  8065. Glossary
  8066.  
  8067.  
  8068. ΓòÉΓòÉΓòÉ 14. SHD Messages ΓòÉΓòÉΓòÉ
  8069.  
  8070. The stream handler device (SHD) messages are provided by a stream handler 
  8071. through a single entry point, SHDEntryPoint, to a physical device driver.  For 
  8072. this interface, all pointers are 16:16 pointers; this enables the current 
  8073. 16-bit device-driver model to be used for stream handlers.  There are two SHD 
  8074. messages.  The message number must be used in the ulFunction field, of the 
  8075. parameter structure passed in the call, to indicate which message is being 
  8076. requested by the stream handler. 
  8077.  
  8078. The following table lists the SHD messages: 
  8079.  
  8080. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8081. ΓöéMessaΓöéMessage             ΓöéDescription                        Γöé
  8082. ΓöéNumbeΓöé                    Γöé                                   Γöé
  8083. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8084. Γöé0L   ΓöéSHD_REPORT_EVENT    ΓöéReports an event to the stream     Γöé
  8085. Γöé     Γöé                    Γöéhandler.                           Γöé
  8086. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8087. Γöé1L   ΓöéSHD_REPORT_INT      ΓöéReports an interrupt from a device.Γöé
  8088. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8089.  
  8090.  
  8091. ΓòÉΓòÉΓòÉ 14.1. SHDEntryPoint ΓòÉΓòÉΓòÉ
  8092.  
  8093.  
  8094. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint - Syntax ΓòÉΓòÉΓòÉ
  8095.  
  8096. /*******************************************/
  8097. /* Each stream handler must provide this   */
  8098. /* entry point, which is used for the PDD  */
  8099. /* to communicate back to the stream       */
  8100. /* handler.                                */
  8101. /*******************************************/
  8102. #include <os2me.h>
  8103.  
  8104. PSHD_COMMON    ParmIn;  /*  Pointer to SHD_COMMON. */
  8105. ULONG          rc;      /*  Return codes. */
  8106.  
  8107. rc = SHDEntryPoint(ParmIn);
  8108.  
  8109.  
  8110. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint Parameter - ParmIn ΓòÉΓòÉΓòÉ
  8111.  
  8112.  ParmIn (PSHD_COMMON) - input 
  8113.     Pointer to SHD_COMMON. 
  8114.  
  8115.  
  8116. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint Return Value - rc ΓòÉΓòÉΓòÉ
  8117.  
  8118.  rc (ULONG) - returns 
  8119.     Return codes indicating success or the type of failure: 
  8120.  
  8121.       NO_ERROR 
  8122.          Successful. 
  8123.  
  8124.       ERROR_INVALID_FUNCTION 
  8125.          Invalid function requested. 
  8126.  
  8127.       FAILURE 
  8128.          An SHD message-specific error return code. 
  8129.  
  8130.  
  8131. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint - Parameters ΓòÉΓòÉΓòÉ
  8132.  
  8133.  ParmIn (PSHD_COMMON) - input 
  8134.     Pointer to SHD_COMMON. 
  8135.  
  8136.  rc (ULONG) - returns 
  8137.     Return codes indicating success or the type of failure: 
  8138.  
  8139.       NO_ERROR 
  8140.          Successful. 
  8141.  
  8142.       ERROR_INVALID_FUNCTION 
  8143.          Invalid function requested. 
  8144.  
  8145.       FAILURE 
  8146.          An SHD message-specific error return code. 
  8147.  
  8148.  
  8149. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint - Remarks ΓòÉΓòÉΓòÉ
  8150.  
  8151. Device driver stream handlers receive commands from PDDs to report events and 
  8152. interrupts.  These Stream Handler Device (SHD) helper commands are provided 
  8153. through the SHDEntryPoint.  This entry point is specifically used for the PDD 
  8154. to call back to the stream handler.  For example, the PDD can send an 
  8155. SHD_REPORT_INT command to the stream handler to report status, indicate that a 
  8156. buffer is full, or specify that an additional buffer is required. 
  8157.  
  8158.  
  8159. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint - Example Code ΓòÉΓòÉΓòÉ
  8160.  
  8161. The following code illustrates how to access this entry point, which is used 
  8162. for the PDD to communicate back to the stream handler. 
  8163.  
  8164. #include        "os2.h"
  8165. #include        "os2me.h"
  8166. #include        "shdd.h"
  8167.  
  8168.   ULONG           ulRC;                   /* Error return code          */
  8169.   HSTREAM         hstream;                /* Stream handle              */
  8170.   HEVENT          hevent;                 /* Event handle               */
  8171.   SHD_REPORTEVENT shdpb;                  /* Parameter block            */
  8172.   PSHDFN          pshdfn;                 /* Pointer to SHD entry point */
  8173.   ULONG           ulStreamTime;           /* Stream time                */
  8174.  
  8175.                             .
  8176.                             .
  8177.                             .
  8178. /*----------------------------------------------------------------------*/
  8179. /*  Report a cue point to the stream handler for a stream instance.     */
  8180. /*----------------------------------------------------------------------*/
  8181.   shdpb.ulFunction = SHD_REPORT_EVENT;
  8182.   shdpb.hstream = hstream;
  8183.   shdpb.hevent = hevent;
  8184.   shdpb.ulStreamTime = ulStreamTime;
  8185.  
  8186.   if (ulRC = pshdfn (&shdpb))
  8187.     return (ulRC);    /* error! */
  8188.  
  8189.  
  8190. ΓòÉΓòÉΓòÉ <hidden> SHDEntryPoint - Topics ΓòÉΓòÉΓòÉ
  8191.  
  8192. Select an item: 
  8193.  
  8194. Syntax
  8195. Parameters
  8196. Returns
  8197. Remarks
  8198. Example Code
  8199. Glossary
  8200.  
  8201.  
  8202. ΓòÉΓòÉΓòÉ 14.2. SHD_REPORT_EVENT ΓòÉΓòÉΓòÉ
  8203.  
  8204.  
  8205. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT - Syntax ΓòÉΓòÉΓòÉ
  8206.  
  8207. This message reports an event to the stream handler. 
  8208.  
  8209.  
  8210. pParmIn
  8211.      PSHD_REPORTEVENT  pParmIn  /*  Input. */
  8212.  
  8213. returns
  8214.      ULONG             rc       /*  Return codes. */
  8215.  
  8216.  
  8217. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT Parameter - pParmIn ΓòÉΓòÉΓòÉ
  8218.  
  8219.  pParmIn (PSHD_REPORTEVENT) 
  8220.     A pointer to an SHD_REPORTEVENT data structure. 
  8221.  
  8222.  
  8223. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT Return Value - rc ΓòÉΓòÉΓòÉ
  8224.  
  8225.  rc (ULONG) 
  8226.     Return codes indicating success or the type of failure: 
  8227.  
  8228.       NO_ERROR 
  8229.          Success. 
  8230.  
  8231.       ERROR_INVALID_FUNCTION 
  8232.          Illegal function requested. 
  8233.  
  8234.       ERROR_INVALID_STREAM 
  8235.          Invalid stream handle. 
  8236.  
  8237.       ERROR_INVALID_EVENT 
  8238.          Invalid event handle. 
  8239.  
  8240.       FAILURE 
  8241.          Stream-handler-specific error return code. 
  8242.  
  8243.  
  8244. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT - Parameters ΓòÉΓòÉΓòÉ
  8245.  
  8246.  pParmIn (PSHD_REPORTEVENT) 
  8247.     A pointer to an SHD_REPORTEVENT data structure. 
  8248.  
  8249.  rc (ULONG) 
  8250.     Return codes indicating success or the type of failure: 
  8251.  
  8252.       NO_ERROR 
  8253.          Success. 
  8254.  
  8255.       ERROR_INVALID_FUNCTION 
  8256.          Illegal function requested. 
  8257.  
  8258.       ERROR_INVALID_STREAM 
  8259.          Invalid stream handle. 
  8260.  
  8261.       ERROR_INVALID_EVENT 
  8262.          Invalid event handle. 
  8263.  
  8264.       FAILURE 
  8265.          Stream-handler-specific error return code. 
  8266.  
  8267.  
  8268. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT - Remarks ΓòÉΓòÉΓòÉ
  8269.  
  8270. This message is a mechanism for the physical device driver to report its own 
  8271. event (cue point) detection.  The stream handler will call the PDD with an 
  8272. event via DDCMD_CONTROL (DDCMD_ENABLE_EVENT) and the PDD will monitor the 
  8273. stream time for this event (if the PDD supports event detection).  When the 
  8274. event is detected, the PDD will call back the stream handler and report this 
  8275. event via this message.  The handle to the event and stream time must be set. 
  8276.  
  8277.  
  8278. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT - Example Code ΓòÉΓòÉΓòÉ
  8279.  
  8280. The following code illustrates how to report an event to the stream handler. 
  8281.  
  8282. #include        "os2.h"
  8283. #include        "os2me.h"
  8284. #include        "shdd.h"
  8285.  
  8286.   ULONG           ulRC;                   /* Error return code          */
  8287.   HSTREAM         hstream;                /* Stream handle              */
  8288.   HEVENT          hevent;                 /* Event handle               */
  8289.   SHD_REPORTEVENT shdpb;                  /* Parameter block            */
  8290.   PSHDFN          pshdfn;                 /* Pointer to SHD entry point */
  8291.   ULONG           ulStreamTime;           /* Stream time                */
  8292.  
  8293.                             .
  8294.                             .
  8295.                             .
  8296. /*----------------------------------------------------------------------*/
  8297. /*  Report a cue point to the stream handler for a stream instance.     */
  8298. /*----------------------------------------------------------------------*/
  8299.   shdpb.ulFunction = SHD_REPORT_EVENT;
  8300.   shdpb.hstream = hstream;
  8301.   shdpb.hevent = hevent;
  8302.   shdpb.ulStreamTime = ulStreamTime;
  8303.  
  8304.   if (ulRC = pshdfn (&shdpb))
  8305.     return (ulRC);    /* error! */
  8306.  
  8307.  
  8308. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_EVENT - Topics ΓòÉΓòÉΓòÉ
  8309.  
  8310. Select an item: 
  8311.  
  8312. Syntax
  8313. Parameters
  8314. Returns
  8315. Remarks
  8316. Example Code
  8317. Glossary
  8318.  
  8319.  
  8320. ΓòÉΓòÉΓòÉ 14.3. SHD_REPORT_INT ΓòÉΓòÉΓòÉ
  8321.  
  8322.  
  8323. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT - Syntax ΓòÉΓòÉΓòÉ
  8324.  
  8325. This message is used by the physical device driver to report interrupts from a 
  8326. device and indicate that a new buffer is needed for consumption. 
  8327.  
  8328.  
  8329. pParmIn
  8330.      PSHD_REPORTINT  pParmIn  /*  Input. */
  8331.  
  8332. returns
  8333.      ULONG           rc       /*  Return codes. */
  8334.  
  8335.  
  8336. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT Parameter - pParmIn ΓòÉΓòÉΓòÉ
  8337.  
  8338.  pParmIn (PSHD_REPORTINT) 
  8339.     A pointer to a SHD_REPORTINT data structure. 
  8340.  
  8341.  
  8342. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT Return Value - rc ΓòÉΓòÉΓòÉ
  8343.  
  8344.  rc (ULONG) 
  8345.     Return codes indicating success or type of failure: 
  8346.  
  8347.       NO_ERROR 
  8348.          Success. 
  8349.  
  8350.       ERROR_INVALID_FUNCTION 
  8351.          Illegal function requested. 
  8352.  
  8353.       ERROR_INVALID_STREAM 
  8354.          Invalid stream handle. 
  8355.  
  8356.       ERROR_DEVICE_UNDERRUN 
  8357.          There was a device data underrun. 
  8358.  
  8359.       ERROR_DEVICE_OVERRUN 
  8360.          There was a device data overrun. 
  8361.  
  8362.       FAILURE 
  8363.          Stream-handler-specific error return code. 
  8364.  
  8365.  
  8366. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT - Parameters ΓòÉΓòÉΓòÉ
  8367.  
  8368.  pParmIn (PSHD_REPORTINT) 
  8369.     A pointer to a SHD_REPORTINT data structure. 
  8370.  
  8371.  rc (ULONG) 
  8372.     Return codes indicating success or type of failure: 
  8373.  
  8374.       NO_ERROR 
  8375.          Success. 
  8376.  
  8377.       ERROR_INVALID_FUNCTION 
  8378.          Illegal function requested. 
  8379.  
  8380.       ERROR_INVALID_STREAM 
  8381.          Invalid stream handle. 
  8382.  
  8383.       ERROR_DEVICE_UNDERRUN 
  8384.          There was a device data underrun. 
  8385.  
  8386.       ERROR_DEVICE_OVERRUN 
  8387.          There was a device data overrun. 
  8388.  
  8389.       FAILURE 
  8390.          Stream-handler-specific error return code. 
  8391.  
  8392.  
  8393. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT - Remarks ΓòÉΓòÉΓòÉ
  8394.  
  8395. This message is a mechanism for the physical device driver to return status, 
  8396. indicate that the buffer has been consumed, or indicate that a new buffer is 
  8397. needed. 
  8398.  
  8399. When status is returned, you will know whether the playback or record was 
  8400. successful or if there was an error condition.  Error conditions for playback 
  8401. are known as underruns, which means the device is not getting data fast enough. 
  8402. Error conditions for records are called overruns, which means the device is 
  8403. generating data faster than empty buffers become available.  This might result 
  8404. in a data loss situation.  For example, the device is constantly bringing in 
  8405. data from the analog ports of the adapter and converting it to digital data. 
  8406. If the device does not have any empty buffers to store the digital data, the 
  8407. data is lost. 
  8408.  
  8409. The VSD must return buffers in the order they were sent and should not hold on 
  8410. to any buffers. Failure to return buffers could result in application hangs. 
  8411.  
  8412.  
  8413. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT - Example Code ΓòÉΓòÉΓòÉ
  8414.  
  8415. The following code illustrates how to report an interrupt from a device. 
  8416.  
  8417. #include        "os2.h"
  8418. #include        "os2me.h"
  8419. #include        "shdd.h"
  8420.  
  8421.   ULONG           ulRC;                   /* Error return code          */
  8422.   HSTREAM         hstream;                /* Stream handle              */
  8423.   SHD_REPORTINT   shdpb;                  /* Parameter block            */
  8424.   PSHDFN          pshdfn;                 /* Pointer to SHD entry point */
  8425.   PVOID           pBuffer;                /* Pointer to buffer          */
  8426.   ULONG           ulStreamTime;           /* Stream time in millisecs   */
  8427.  
  8428.                             .
  8429.                             .
  8430.                             .
  8431. /*----------------------------------------------------------------------*/
  8432. /*  Report a read has completed.                                        */
  8433. /*----------------------------------------------------------------------*/
  8434.   shdpb.ulFunction = SHD_REPORT_INT;
  8435.   shdpb.hstream = hstream;
  8436.   shdpb.pBuffer = pBuffer;
  8437.   shdpb.ulFlag = SHD_READ_COMPLETE;
  8438.   shdpb.ulStatus = LengthRecordedBuffer;
  8439.   shdpb.ulStreamTime = ulStreamTime;
  8440.  
  8441.   if (ulRC = pshdfn (&shdpb))
  8442.     return (ulRC);    /* error! */
  8443.  
  8444.  
  8445. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORT_INT - Topics ΓòÉΓòÉΓòÉ
  8446.  
  8447. Select an item: 
  8448.  
  8449. Syntax
  8450. Parameters
  8451. Returns
  8452. Remarks
  8453. Example Code
  8454. Glossary
  8455.  
  8456.  
  8457. ΓòÉΓòÉΓòÉ 15. Vendor-Specific Driver Commands ΓòÉΓòÉΓòÉ
  8458.  
  8459. The vendor-specific driver (VSD) commands enable communication between 
  8460. vendor-specific drivers (VSDs) and an application such as the user-level audio 
  8461. stream handler or amplifier mixer MCI driver. The interface to the VSD is 
  8462. DLL-based. First, a DosLoadModule function is issued for the VSD's DLL. The 
  8463. DosLoadModule function returns a handle for the VSD. Next, using the VSD 
  8464. handle, DosQueryProcAddr is issued to receive the VSD entry point address. This 
  8465. must be done prior to issuing any VSD commands. Once the entry point address is 
  8466. received, calls to the VSD are made to VSDEntry entry point. 
  8467.  
  8468.  
  8469. ΓòÉΓòÉΓòÉ 15.1. VSDEntry ΓòÉΓòÉΓòÉ
  8470.  
  8471.  
  8472. ΓòÉΓòÉΓòÉ <hidden> VSDEntry - Syntax ΓòÉΓòÉΓòÉ
  8473.  
  8474. /*******************************************/
  8475. /* This entry point enables communication  */
  8476. /* between vendor-specific drivers (VSDs)  */
  8477. /* and an application such as the          */
  8478. /* user-level audio stream handler or      */
  8479. /* amplifier mixer. For audio VSDs, be     */
  8480. /* sure to define INCL_AUDIO_VSD before    */
  8481. /* including the VSDCMDS.H header file.    */
  8482. /*******************************************/
  8483.  
  8484. #define INCL_AUDIO_VSD
  8485. #include <vsdcmds.h>
  8486. #include <os2mixer.h>
  8487.  
  8488. HVSD     hvsd;      /*  Handle to VSD instance. */
  8489. ULONG    ulFunc;    /*  Function code. */
  8490. ULONG    ulFlags;   /*  Flags for driver. */
  8491. PVOID    pRequest;  /*  Request parameter block value. */
  8492. ULONG    rc;        /*  Return codes. */
  8493.  
  8494. rc = VSDEntry(hvsd, ulFunc, ulFlags, pRequest);
  8495.  
  8496.  
  8497. ΓòÉΓòÉΓòÉ <hidden> VSDEntry Parameter - hvsd ΓòÉΓòÉΓòÉ
  8498.  
  8499.  hvsd (HVSD) - input 
  8500.     This parameter is the handle to the VSD instance. 
  8501.  
  8502.  
  8503. ΓòÉΓòÉΓòÉ <hidden> VSDEntry Parameter - ulFunc ΓòÉΓòÉΓòÉ
  8504.  
  8505.  ulFunc (ULONG) - input 
  8506.     The VSD command to be issued.  The following commands are supported for 
  8507.     audio VSDs. 
  8508.  
  8509.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8510.         ΓöéCommand                       ΓöéDescription                   Γöé
  8511.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8512.         ΓöéVSD_CLOSE                     ΓöéCloses the device. (Required) Γöé
  8513.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8514.         ΓöéVSD_DDCMD                     ΓöéAllows communication between  Γöé
  8515.         Γöé                              Γöéstream handlers and their     Γöé
  8516.         Γöé                              Γöéattached devices. (Required)  Γöé
  8517.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8518.         ΓöéVSD_ESCAPE                    ΓöéSends a buffer to the device. Γöé
  8519.         Γöé                              Γöé(Optional)                    Γöé
  8520.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8521.         ΓöéVSD_GETDEVCAPS                ΓöéRetrieves the device          Γöé
  8522.         Γöé                              Γöécapabilities. (Required)      Γöé
  8523.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8524.         ΓöéVSD_OPEN                      ΓöéOpens an instance of the      Γöé
  8525.         Γöé                              Γöédevice. (Required)            Γöé
  8526.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8527.         ΓöéVSD_QUERY                     ΓöéQueries the status of the     Γöé
  8528.         Γöé                              Γöédevice. (Required)            Γöé
  8529.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8530.         ΓöéVSD_RESOURCE                  ΓöéManages resources. (Required) Γöé
  8531.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8532.         ΓöéVSD_RESTORE                   ΓöéRestores device to a saved    Γöé
  8533.         Γöé                              Γöéstate. (Required)             Γöé
  8534.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8535.         ΓöéVSD_SAVE                      ΓöéSaves the current state of theΓöé
  8536.         Γöé                              Γöédevice instance. (Required)   Γöé
  8537.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8538.         ΓöéVSD_SET                       ΓöéModifies settings of the      Γöé
  8539.         Γöé                              Γöédevice. (Required)            Γöé
  8540.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8541.         ΓöéVSD_USER                      ΓöéAllows user-defined commands  Γöé
  8542.         Γöé                              Γöéto be passed into the VSD.    Γöé
  8543.         Γöé                              Γöé(Optional)                    Γöé
  8544.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8545.  
  8546.  
  8547. ΓòÉΓòÉΓòÉ <hidden> VSDEntry Parameter - ulFlags ΓòÉΓòÉΓòÉ
  8548.  
  8549.  ulFlags (ULONG) - input 
  8550.     The ulFlags parameter is used to further qualify the command specified in 
  8551.     ulFunc. In many cases it is used as a subcommand. For more information on 
  8552.     ulFlags, see the specific ulFunc parameter. 
  8553.  
  8554.  
  8555. ΓòÉΓòÉΓòÉ <hidden> VSDEntry Parameter - pRequest ΓòÉΓòÉΓòÉ
  8556.  
  8557.  pRequest (PVOID) - input 
  8558.     Specifies the pointer to the request packet.  The caller of the VSD 
  8559.     supplies all request buffers.  See individual commands for more detailed 
  8560.     information. 
  8561.  
  8562.  
  8563. ΓòÉΓòÉΓòÉ <hidden> VSDEntry Return Value - rc ΓòÉΓòÉΓòÉ
  8564.  
  8565.  rc (ULONG) - returns 
  8566.     The return codes are listed for each command and will vary based on the 
  8567.     command sent. 
  8568.  
  8569.  
  8570. ΓòÉΓòÉΓòÉ <hidden> VSDEntry - Parameters ΓòÉΓòÉΓòÉ
  8571.  
  8572.  hvsd (HVSD) - input 
  8573.     This parameter is the handle to the VSD instance. 
  8574.  
  8575.  ulFunc (ULONG) - input 
  8576.     The VSD command to be issued.  The following commands are supported for 
  8577.     audio VSDs. 
  8578.  
  8579.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8580.         ΓöéCommand                       ΓöéDescription                   Γöé
  8581.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8582.         ΓöéVSD_CLOSE                     ΓöéCloses the device. (Required) Γöé
  8583.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8584.         ΓöéVSD_DDCMD                     ΓöéAllows communication between  Γöé
  8585.         Γöé                              Γöéstream handlers and their     Γöé
  8586.         Γöé                              Γöéattached devices. (Required)  Γöé
  8587.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8588.         ΓöéVSD_ESCAPE                    ΓöéSends a buffer to the device. Γöé
  8589.         Γöé                              Γöé(Optional)                    Γöé
  8590.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8591.         ΓöéVSD_GETDEVCAPS                ΓöéRetrieves the device          Γöé
  8592.         Γöé                              Γöécapabilities. (Required)      Γöé
  8593.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8594.         ΓöéVSD_OPEN                      ΓöéOpens an instance of the      Γöé
  8595.         Γöé                              Γöédevice. (Required)            Γöé
  8596.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8597.         ΓöéVSD_QUERY                     ΓöéQueries the status of the     Γöé
  8598.         Γöé                              Γöédevice. (Required)            Γöé
  8599.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8600.         ΓöéVSD_RESOURCE                  ΓöéManages resources. (Required) Γöé
  8601.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8602.         ΓöéVSD_RESTORE                   ΓöéRestores device to a saved    Γöé
  8603.         Γöé                              Γöéstate. (Required)             Γöé
  8604.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8605.         ΓöéVSD_SAVE                      ΓöéSaves the current state of theΓöé
  8606.         Γöé                              Γöédevice instance. (Required)   Γöé
  8607.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8608.         ΓöéVSD_SET                       ΓöéModifies settings of the      Γöé
  8609.         Γöé                              Γöédevice. (Required)            Γöé
  8610.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8611.         ΓöéVSD_USER                      ΓöéAllows user-defined commands  Γöé
  8612.         Γöé                              Γöéto be passed into the VSD.    Γöé
  8613.         Γöé                              Γöé(Optional)                    Γöé
  8614.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8615.  
  8616.  ulFlags (ULONG) - input 
  8617.     The ulFlags parameter is used to further qualify the command specified in 
  8618.     ulFunc. In many cases it is used as a subcommand. For more information on 
  8619.     ulFlags, see the specific ulFunc parameter. 
  8620.  
  8621.  pRequest (PVOID) - input 
  8622.     Specifies the pointer to the request packet.  The caller of the VSD 
  8623.     supplies all request buffers.  See individual commands for more detailed 
  8624.     information. 
  8625.  
  8626.  rc (ULONG) - returns 
  8627.     The return codes are listed for each command and will vary based on the 
  8628.     command sent. 
  8629.  
  8630.  
  8631. ΓòÉΓòÉΓòÉ <hidden> VSDEntry - Topics ΓòÉΓòÉΓòÉ
  8632.  
  8633. Select an item: 
  8634.  
  8635. Syntax
  8636. Parameters
  8637. Returns
  8638. Glossary
  8639.  
  8640.  
  8641. ΓòÉΓòÉΓòÉ 15.2. VSD_CLOSE ΓòÉΓòÉΓòÉ
  8642.  
  8643.  
  8644. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE - Syntax ΓòÉΓòÉΓòÉ
  8645.  
  8646. This command closes the device. VSD_CLOSE is a required command and must be 
  8647. implemented by all VSD writers. 
  8648.  
  8649. This command is sent using VSDEntry as follows: 
  8650.  
  8651.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  8652.  
  8653.  
  8654. hvsd
  8655.      HVSD   hvsd      /*  Handle to the VSD. */
  8656.  
  8657. ulFunc
  8658.      ULONG  ulFunc    /*  VSD command. */
  8659.  
  8660. ulFlags
  8661.      ULONG  ulFlags   /*  Not used. */
  8662.  
  8663. pRequest
  8664.      PVOID  pRequest  /*  Not used. */
  8665.  
  8666. returns
  8667.      ULONG  rc        /*  Return codes. */
  8668.  
  8669.  
  8670. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE Parameter - hvsd ΓòÉΓòÉΓòÉ
  8671.  
  8672.  hvsd (HVSD) 
  8673.     Handle to the VSD to be closed. 
  8674.  
  8675.  
  8676. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  8677.  
  8678.  ulFunc (ULONG) 
  8679.     Set to VSD_CLOSE. 
  8680.  
  8681.  
  8682. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  8683.  
  8684.  ulFlags (ULONG) 
  8685.     No flags used for this command. 
  8686.  
  8687.  
  8688. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE Parameter - pRequest ΓòÉΓòÉΓòÉ
  8689.  
  8690.  pRequest (PVOID) 
  8691.     Not used for this command. 
  8692.  
  8693.  
  8694. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE Return Value - rc ΓòÉΓòÉΓòÉ
  8695.  
  8696.  rc (ULONG) 
  8697.     Error code indicating success or the type of failure: 
  8698.  
  8699.       VSDERR_SUCCESS 
  8700.          The command was successful. 
  8701.  
  8702.       VSDERR_CANNOT_CLOSE 
  8703.          VSD is unable to close the device. 
  8704.  
  8705.       VSDERR_HARDWARE 
  8706.          A hardware error occurred. 
  8707.  
  8708.  
  8709. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE - Parameters ΓòÉΓòÉΓòÉ
  8710.  
  8711.  hvsd (HVSD) 
  8712.     Handle to the VSD to be closed. 
  8713.  
  8714.  ulFunc (ULONG) 
  8715.     Set to VSD_CLOSE. 
  8716.  
  8717.  ulFlags (ULONG) 
  8718.     No flags used for this command. 
  8719.  
  8720.  pRequest (PVOID) 
  8721.     Not used for this command. 
  8722.  
  8723.  rc (ULONG) 
  8724.     Error code indicating success or the type of failure: 
  8725.  
  8726.       VSDERR_SUCCESS 
  8727.          The command was successful. 
  8728.  
  8729.       VSDERR_CANNOT_CLOSE 
  8730.          VSD is unable to close the device. 
  8731.  
  8732.       VSDERR_HARDWARE 
  8733.          A hardware error occurred. 
  8734.  
  8735.  
  8736. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE - Remarks ΓòÉΓòÉΓòÉ
  8737.  
  8738. The hvsd handle is no longer valid after this command is issued. 
  8739.  
  8740.  
  8741. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE - Example Code ΓòÉΓòÉΓòÉ
  8742.  
  8743. The following code illustrates how to close a VSD. 
  8744.  
  8745. HVSD     hvsd;
  8746.     ULONG    rc;
  8747.  
  8748.     rc = pInstance ->pfnAUDIOIF(  hvsd,
  8749.                                   VSD_CLOSE,
  8750.                                   0,
  8751.                                   0 );
  8752.     return (rc);
  8753.  
  8754.  
  8755. ΓòÉΓòÉΓòÉ <hidden> VSD_CLOSE - Topics ΓòÉΓòÉΓòÉ
  8756.  
  8757. Select an item: 
  8758.  
  8759. Syntax
  8760. Parameters
  8761. Returns
  8762. Remarks
  8763. Example Code
  8764. Glossary
  8765.  
  8766.  
  8767. ΓòÉΓòÉΓòÉ 15.3. VSD_DDCMD ΓòÉΓòÉΓòÉ
  8768.  
  8769.  
  8770. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD - Syntax ΓòÉΓòÉΓòÉ
  8771.  
  8772. Stream handlers can communicate to their attached devices using the VSD_DDCMD 
  8773. call. The DDCMD interface is the primary method of moving data to and from 
  8774. devices in OS/2 multimedia. See the OS/2 Multimedia Programming Reference for 
  8775. more detailed information on stream handler command (SHC) messages. 
  8776.  
  8777. This command is sent using VSDEntry as follows: 
  8778.  
  8779.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  8780.  
  8781.  
  8782. hvsd
  8783.      HVSD   hvsd      /*  Handle to VSD. */
  8784.  
  8785. ulFunc
  8786.      ULONG  ulFunc    /*  VSD command. */
  8787.  
  8788. ulFlags
  8789.      ULONG  ulFlags   /*  Flags for this command. */
  8790.  
  8791. pRequest
  8792.      PVOID  pRequest  /*  Pointer to data structure. */
  8793.  
  8794. returns
  8795.      ULONG  rc        /*  Return codes. */
  8796.  
  8797.  
  8798. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD Parameter - hvsd ΓòÉΓòÉΓòÉ
  8799.  
  8800.  hvsd (HVSD) 
  8801.     Handle to a VSD. 
  8802.  
  8803.  
  8804. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD Parameter - ulFunc ΓòÉΓòÉΓòÉ
  8805.  
  8806.  ulFunc (ULONG) 
  8807.     Set to VSD_DDCMD. 
  8808.  
  8809.  
  8810. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD Parameter - ulFlags ΓòÉΓòÉΓòÉ
  8811.  
  8812.  ulFlags (ULONG) 
  8813.     The following flags (subcommands) are defined for this command: 
  8814.  
  8815.       DDCMD_CONTROL 
  8816.          This subcommand of VSD_DDCMD performs a device-specific command. 
  8817.          pRequest is a pointer to the DDCMDCONTROL structure. 
  8818.  
  8819.       DDCMD_DEREG_STREAM 
  8820.          This subcommand of VSD_DDCMD deregisters a stream instance with the 
  8821.          device driver. pRequest is a pointer to DDCMDDEREGISTER structure. 
  8822.  
  8823.       DDCMD_READ 
  8824.          This subcommand of VSD_DDCMD is used by a stream handler to give an 
  8825.          empty buffer to the VSD (for example, during a record operation). When 
  8826.          the buffer has been filled, the VSD is responsible for communicating 
  8827.          to the caller that the buffer has been filled.  The VSD should pass a 
  8828.          MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to 
  8829.          inform the caller. 
  8830.  
  8831.          pRequest is a pointer to DDCMDREADWRITE structure. 
  8832.  
  8833.       DDCMD_REG_STREAM 
  8834.          This subcommand of VSD_DDCMD registers a stream instance with the 
  8835.          device driver. pRequest is a pointer to DDCMDREGISTER structure. 
  8836.  
  8837.       DDCMD_SETUP 
  8838.          This subcommand of VSD_DDCMD performs device-specific stream instance 
  8839.          setup. pRequest is a pointer to DDCMDSETUP structure. 
  8840.  
  8841.       DDCMD_STATUS 
  8842.          This VSD subcommand requests streaming status from a device. 
  8843.          Typically, it is called to request the current stream time. pRequest 
  8844.          is a pointer to DDCMDSTATUS structure. 
  8845.  
  8846.       DDCMD_WRITE 
  8847.          This VSD subcommand is used by a stream handler to give a full buffer 
  8848.          to the VSD (for example, during a playback operation).  When the 
  8849.          buffer has been consumed, the VSD is responsible for communicating to 
  8850.          the caller that the buffer has been used.  The VSD should pass a 
  8851.          MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to 
  8852.          inform the caller. 
  8853.  
  8854.          pRequest is a pointer to DDCMDREADWRITE structure. 
  8855.  
  8856.  
  8857. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD Parameter - pRequest ΓòÉΓòÉΓòÉ
  8858.  
  8859.  pRequest (PVOID) 
  8860.     The value of pRequest varies according to the ulFlags value.  See each 
  8861.     particular ulFlags value for the definition of pRequest. 
  8862.  
  8863.  
  8864. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD Return Value - rc ΓòÉΓòÉΓòÉ
  8865.  
  8866.  rc (ULONG) 
  8867.     Possible error codes vary according to the value of ulFlags. 
  8868.  
  8869.  
  8870. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD - Parameters ΓòÉΓòÉΓòÉ
  8871.  
  8872.  hvsd (HVSD) 
  8873.     Handle to a VSD. 
  8874.  
  8875.  ulFunc (ULONG) 
  8876.     Set to VSD_DDCMD. 
  8877.  
  8878.  ulFlags (ULONG) 
  8879.     The following flags (subcommands) are defined for this command: 
  8880.  
  8881.       DDCMD_CONTROL 
  8882.          This subcommand of VSD_DDCMD performs a device-specific command. 
  8883.          pRequest is a pointer to the DDCMDCONTROL structure. 
  8884.  
  8885.       DDCMD_DEREG_STREAM 
  8886.          This subcommand of VSD_DDCMD deregisters a stream instance with the 
  8887.          device driver. pRequest is a pointer to DDCMDDEREGISTER structure. 
  8888.  
  8889.       DDCMD_READ 
  8890.          This subcommand of VSD_DDCMD is used by a stream handler to give an 
  8891.          empty buffer to the VSD (for example, during a record operation). When 
  8892.          the buffer has been filled, the VSD is responsible for communicating 
  8893.          to the caller that the buffer has been filled.  The VSD should pass a 
  8894.          MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to 
  8895.          inform the caller. 
  8896.  
  8897.          pRequest is a pointer to DDCMDREADWRITE structure. 
  8898.  
  8899.       DDCMD_REG_STREAM 
  8900.          This subcommand of VSD_DDCMD registers a stream instance with the 
  8901.          device driver. pRequest is a pointer to DDCMDREGISTER structure. 
  8902.  
  8903.       DDCMD_SETUP 
  8904.          This subcommand of VSD_DDCMD performs device-specific stream instance 
  8905.          setup. pRequest is a pointer to DDCMDSETUP structure. 
  8906.  
  8907.       DDCMD_STATUS 
  8908.          This VSD subcommand requests streaming status from a device. 
  8909.          Typically, it is called to request the current stream time. pRequest 
  8910.          is a pointer to DDCMDSTATUS structure. 
  8911.  
  8912.       DDCMD_WRITE 
  8913.          This VSD subcommand is used by a stream handler to give a full buffer 
  8914.          to the VSD (for example, during a playback operation).  When the 
  8915.          buffer has been consumed, the VSD is responsible for communicating to 
  8916.          the caller that the buffer has been used.  The VSD should pass a 
  8917.          MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to 
  8918.          inform the caller. 
  8919.  
  8920.          pRequest is a pointer to DDCMDREADWRITE structure. 
  8921.  
  8922.  pRequest (PVOID) 
  8923.     The value of pRequest varies according to the ulFlags value.  See each 
  8924.     particular ulFlags value for the definition of pRequest. 
  8925.  
  8926.  rc (ULONG) 
  8927.     Possible error codes vary according to the value of ulFlags. 
  8928.  
  8929.  
  8930. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD - Remarks ΓòÉΓòÉΓòÉ
  8931.  
  8932. A user-level 32-bit buffer pointer is available in the pProcessLin field of the 
  8933. DDCMDREADWRITE structure. VSDs should use this pointer if they want to operate 
  8934. on the data while they are not in protect mode. The pBuffer field of the 
  8935. DDCMDREADWRITE structure contains a pointer whose address type was specified by 
  8936. the VSD on DDCMD_REG_STREAM. When the application returns a buffer, it must 
  8937. return the buffer specified by pBuffer and not by pProcessLin. 
  8938.  
  8939.  
  8940. ΓòÉΓòÉΓòÉ <hidden> VSD_DDCMD - Topics ΓòÉΓòÉΓòÉ
  8941.  
  8942. Select an item: 
  8943.  
  8944. Syntax
  8945. Parameters
  8946. Returns
  8947. Remarks
  8948. Glossary
  8949.  
  8950.  
  8951. ΓòÉΓòÉΓòÉ 15.4. VSD_GETDEVCAPS ΓòÉΓòÉΓòÉ
  8952.  
  8953.  
  8954. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS - Syntax ΓòÉΓòÉΓòÉ
  8955.  
  8956. This command queries the device capabilities. These values should be constants 
  8957. that describe the device and driver characteristics.  In general, the flags 
  8958. indicate what set of commands are supported. VSD_GETDEVCAPS is a required 
  8959. command and must be implemented by all VSD writers. 
  8960.  
  8961. This command is sent using VSDEntry as follows: 
  8962.  
  8963.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  8964.  
  8965.  
  8966. hvsd
  8967.      HVSD                   hvsd      /*  Handle to the VSD. */
  8968.  
  8969. ulFunc
  8970.      ULONG                  ulFunc    /*  VSD command. */
  8971.  
  8972. ulFlags
  8973.      ULONG                  ulFlags   /*  Not used. */
  8974.  
  8975. pRequest
  8976.      PVSD_GETDEVCAPS_PARMS  pRequest  /*  Pointer to VSD_GETDEVCAPS_PARMS */
  8977.  
  8978. returns
  8979.      ULONG                  rc        /*  Return codes. */
  8980.  
  8981.  
  8982. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS Parameter - hvsd ΓòÉΓòÉΓòÉ
  8983.  
  8984.  hvsd (HVSD) 
  8985.     Handle to a VSD. 
  8986.  
  8987.  
  8988. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS Parameter - ulFunc ΓòÉΓòÉΓòÉ
  8989.  
  8990.  ulFunc (ULONG) 
  8991.     Set to VSD_GETDEVCAPS. 
  8992.  
  8993.  
  8994. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  8995.  
  8996.  ulFlags (ULONG) 
  8997.     No flags used for this command. 
  8998.  
  8999.  
  9000. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS Parameter - pRequest ΓòÉΓòÉΓòÉ
  9001.  
  9002.  pRequest (PVSD_GETDEVCAPS_PARMS) 
  9003.     Pointer to the VSD_GETDEVCAPS_PARMS data structure. 
  9004.  
  9005.  
  9006. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS Return Value - rc ΓòÉΓòÉΓòÉ
  9007.  
  9008.  rc (ULONG) 
  9009.     Error code indicating success or the type of failure: 
  9010.  
  9011.       VSDERR_REQUEST_BUF_TOO_SMALL 
  9012.          The ulLength in the request packet is too small. 
  9013.  
  9014.       VSDERR_MISSING_PARAMETER 
  9015.          One or more parameters are missing. 
  9016.  
  9017.       VSDERR_HARDWARE 
  9018.          A hardare error occurred. 
  9019.  
  9020.  
  9021. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS - Parameters ΓòÉΓòÉΓòÉ
  9022.  
  9023.  hvsd (HVSD) 
  9024.     Handle to a VSD. 
  9025.  
  9026.  ulFunc (ULONG) 
  9027.     Set to VSD_GETDEVCAPS. 
  9028.  
  9029.  ulFlags (ULONG) 
  9030.     No flags used for this command. 
  9031.  
  9032.  pRequest (PVSD_GETDEVCAPS_PARMS) 
  9033.     Pointer to the VSD_GETDEVCAPS_PARMS data structure. 
  9034.  
  9035.  rc (ULONG) 
  9036.     Error code indicating success or the type of failure: 
  9037.  
  9038.       VSDERR_REQUEST_BUF_TOO_SMALL 
  9039.          The ulLength in the request packet is too small. 
  9040.  
  9041.       VSDERR_MISSING_PARAMETER 
  9042.          One or more parameters are missing. 
  9043.  
  9044.       VSDERR_HARDWARE 
  9045.          A hardare error occurred. 
  9046.  
  9047.  
  9048. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS - Remarks ΓòÉΓòÉΓòÉ
  9049.  
  9050. This command requires the device to be opened. A device might have several 
  9051. types of device units, so this command must know which instance is involved. 
  9052. Once the device is opened, the device capabilities should be constant. 
  9053.  
  9054. Each element in the bSupports[DC_MAX_DEVCAP] array of the VSD_GETDEVCAPS_PARMS 
  9055. structure is a boolean value that indicates if the capability is supported. 
  9056. TRUE indicates that it is supported. FALSE indicates that it is not supported. 
  9057.  
  9058.  
  9059. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS - Example Code ΓòÉΓòÉΓòÉ
  9060.  
  9061. The following code illustrates how to determine device capabilities for a VSD. 
  9062.  
  9063.   HVSD                   hvsd;
  9064.   VSD_GETDEVCAPS_PARMS   vsdDevCaps;
  9065.  
  9066.   rc = pInstance->pfnAUDIOIF(  hvsd,
  9067.                                VSD_GETDEVCAPS
  9068.                                0,
  9069.                                (PVOID) &vsdDevCaps );
  9070.  
  9071.   if (!rc)
  9072.      {
  9073.     /* If the VSD doesn't support volume  */
  9074.  
  9075.     if( !vsdDevCaps.bSupports[ DC_HASVOLUME] )
  9076.        {
  9077.        return ( rc );
  9078.        }
  9079.  
  9080.  
  9081. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS - Topics ΓòÉΓòÉΓòÉ
  9082.  
  9083. Select an item: 
  9084.  
  9085. Syntax
  9086. Parameters
  9087. Returns
  9088. Remarks
  9089. Example Code
  9090. Glossary
  9091.  
  9092.  
  9093. ΓòÉΓòÉΓòÉ 15.5. VSD_ESCAPE ΓòÉΓòÉΓòÉ
  9094.  
  9095.  
  9096. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE - Syntax ΓòÉΓòÉΓòÉ
  9097.  
  9098. This optional command sends a buffer to the driver. 
  9099.  
  9100. This command is sent using VSDEntry as follows: 
  9101.  
  9102.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9103.  
  9104.  
  9105. hvsd
  9106.      HVSD               hvsd      /*  Handle to the VSD. */
  9107.  
  9108. ulFunc
  9109.      ULONG              ulFunc    /*  VSD command. */
  9110.  
  9111. ulFlags
  9112.      ULONG              ulFlags   /*  Not used. */
  9113.  
  9114. pRequest
  9115.      PVSD_ESCAPE_PARMS  pRequest  /*  Pointer to VSD_ESCAPE_PARMS. */
  9116.  
  9117. returns
  9118.      ULONG              rc        /*  Return codes. */
  9119.  
  9120.  
  9121. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE Parameter - hvsd ΓòÉΓòÉΓòÉ
  9122.  
  9123.  hvsd (HVSD) 
  9124.     Handle to a VSD. 
  9125.  
  9126.  
  9127. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9128.  
  9129.  ulFunc (ULONG) 
  9130.     Set to VSD_ESCAPE. 
  9131.  
  9132.  
  9133. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9134.  
  9135.  ulFlags (ULONG) 
  9136.     No flags used for this command. 
  9137.  
  9138.  
  9139. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE Parameter - pRequest ΓòÉΓòÉΓòÉ
  9140.  
  9141.  pRequest (PVSD_ESCAPE_PARMS) 
  9142.     A pointer to the VSD_ESCAPE_PARMS structure. 
  9143.  
  9144.  
  9145. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE Return Value - rc ΓòÉΓòÉΓòÉ
  9146.  
  9147.  rc (ULONG) 
  9148.     Error code indicating success or the type of failure: 
  9149.  
  9150.       VSDERR_SUCCESS 
  9151.          The command was successful. 
  9152.  
  9153.       VSDERR_MISSING_PARAMETER 
  9154.          One or more parameters are missing. 
  9155.  
  9156.  
  9157. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE - Parameters ΓòÉΓòÉΓòÉ
  9158.  
  9159.  hvsd (HVSD) 
  9160.     Handle to a VSD. 
  9161.  
  9162.  ulFunc (ULONG) 
  9163.     Set to VSD_ESCAPE. 
  9164.  
  9165.  ulFlags (ULONG) 
  9166.     No flags used for this command. 
  9167.  
  9168.  pRequest (PVSD_ESCAPE_PARMS) 
  9169.     A pointer to the VSD_ESCAPE_PARMS structure. 
  9170.  
  9171.  rc (ULONG) 
  9172.     Error code indicating success or the type of failure: 
  9173.  
  9174.       VSDERR_SUCCESS 
  9175.          The command was successful. 
  9176.  
  9177.       VSDERR_MISSING_PARAMETER 
  9178.          One or more parameters are missing. 
  9179.  
  9180.  
  9181. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE - Topics ΓòÉΓòÉΓòÉ
  9182.  
  9183. Select an item: 
  9184.  
  9185. Syntax
  9186. Parameters
  9187. Returns
  9188. Glossary
  9189.  
  9190.  
  9191. ΓòÉΓòÉΓòÉ 15.6. VSD_INSERTSETTINGSPAGE ΓòÉΓòÉΓòÉ
  9192.  
  9193.  
  9194. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE - Syntax ΓòÉΓòÉΓòÉ
  9195.  
  9196. This command enables a VSD to insert device-specific settings pages into the 
  9197. system configuration application. 
  9198.  
  9199.  
  9200. hvsd
  9201.      HVSD                       hvsd      /*  Handle to VSD. */
  9202.  
  9203. ulFunc
  9204.      ULONG                      ulFunc    /*  VSD command. */
  9205.  
  9206. ulFlags
  9207.      ULONG                      ulFlags   /*  Not used. */
  9208.  
  9209. pRequest
  9210.      PMCI_DEVICESETTINGS_PARMS  pRequest  /*  Pointer to MCI_DEVICESETTINGS_PARMS */
  9211.  
  9212. returns
  9213.      HWND                       hwndRC    /*  Return codes. */
  9214.  
  9215.  
  9216. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE Parameter - hvsd ΓòÉΓòÉΓòÉ
  9217.  
  9218.  hvsd (HVSD) 
  9219.     Handle to a VSD instance. 
  9220.  
  9221.  
  9222. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9223.  
  9224.  ulFunc (ULONG) 
  9225.     Set to VSD_INSERTSETTINGSPAGE. 
  9226.  
  9227.  
  9228. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9229.  
  9230.  ulFlags (ULONG) 
  9231.     No flags used for this command. 
  9232.  
  9233.  
  9234. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE Parameter - pRequest ΓòÉΓòÉΓòÉ
  9235.  
  9236.  pRequest (PMCI_DEVICESETTINGS_PARMS) 
  9237.     Pointer to the MCI_DEVICESETTINGS_PARMS data structure. 
  9238.  
  9239.  
  9240. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE Return Value - hwndRC ΓòÉΓòÉΓòÉ
  9241.  
  9242.  hwndRC (HWND) 
  9243.     The return code contains the handle to a settings page or zero if no page 
  9244.     is inserted. 
  9245.  
  9246.  
  9247. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE - Parameters ΓòÉΓòÉΓòÉ
  9248.  
  9249.  hvsd (HVSD) 
  9250.     Handle to a VSD instance. 
  9251.  
  9252.  ulFunc (ULONG) 
  9253.     Set to VSD_INSERTSETTINGSPAGE. 
  9254.  
  9255.  ulFlags (ULONG) 
  9256.     No flags used for this command. 
  9257.  
  9258.  pRequest (PMCI_DEVICESETTINGS_PARMS) 
  9259.     Pointer to the MCI_DEVICESETTINGS_PARMS data structure. 
  9260.  
  9261.  hwndRC (HWND) 
  9262.     The return code contains the handle to a settings page or zero if no page 
  9263.     is inserted. 
  9264.  
  9265.  
  9266. ΓòÉΓòÉΓòÉ <hidden> VSD_INSERTSETTINGSPAGE - Topics ΓòÉΓòÉΓòÉ
  9267.  
  9268. Select an item: 
  9269.  
  9270. Syntax
  9271. Parameters
  9272. Returns
  9273. Glossary
  9274.  
  9275.  
  9276. ΓòÉΓòÉΓòÉ 15.7. VSD_OPEN ΓòÉΓòÉΓòÉ
  9277.  
  9278.  
  9279. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN - Syntax ΓòÉΓòÉΓòÉ
  9280.  
  9281. This command opens the device driver and returns a VSD handle or (HVSD). It 
  9282. should not allocate resources on the device (resource usage should be performed 
  9283. on the VSD restore). 
  9284.  
  9285. VSD_OPEN is a required command and must be implemented by all VSD writers. 
  9286.  
  9287. This command is sent using VSDEntry as follows: 
  9288.  
  9289.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9290.  
  9291.  
  9292. hvsd
  9293.      HVSD             hvsd      /*  Not used. */
  9294.  
  9295. ulFunc
  9296.      ULONG            ulFunc    /*  VSD command. */
  9297.  
  9298. ulFlags
  9299.      ULONG            ulFlags   /*  Not used. */
  9300.  
  9301. pRequest
  9302.      PVSD_OPEN_PARMS  pRequest  /*  Pointer to VSD_OPEN_PARMS */
  9303.  
  9304. returns
  9305.      ULONG            rc        /*  Return codes. */
  9306.  
  9307.  
  9308. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN Parameter - hvsd ΓòÉΓòÉΓòÉ
  9309.  
  9310.  hvsd (HVSD) 
  9311.     Not used. 
  9312.  
  9313.  
  9314. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9315.  
  9316.  ulFunc (ULONG) 
  9317.     Set to VSD_OPEN. 
  9318.  
  9319.  
  9320. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9321.  
  9322.  ulFlags (ULONG) 
  9323.     No flags used for this command. 
  9324.  
  9325.  
  9326. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN Parameter - pRequest ΓòÉΓòÉΓòÉ
  9327.  
  9328.  pRequest (PVSD_OPEN_PARMS) 
  9329.     Pointer to the VSD_OPEN_PARMS data structure. 
  9330.  
  9331.  
  9332. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN Return Value - rc ΓòÉΓòÉΓòÉ
  9333.  
  9334.  rc (ULONG) 
  9335.     Error code indicating success or the type of failure: 
  9336.  
  9337.       VSDERR_SUCCESS 
  9338.          Command completed successfully. 
  9339.  
  9340.       VSDERR_MISSING_PARAMETER 
  9341.          One or more parameters are missing. 
  9342.  
  9343.       VSDERR_NO_DEVICE_DRIVER 
  9344.          VSD is not connected to a device driver. 
  9345.  
  9346.       VSDERR_DEVICE_REJECTED 
  9347.          Device driver rejected the request. 
  9348.  
  9349.       VSDERR_HARDWARE 
  9350.          A hardware error occurred. 
  9351.  
  9352.       VSDERR_INVALID_BUFF 
  9353.          pRequest is not valid. 
  9354.  
  9355.  
  9356. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN - Parameters ΓòÉΓòÉΓòÉ
  9357.  
  9358.  hvsd (HVSD) 
  9359.     Not used. 
  9360.  
  9361.  ulFunc (ULONG) 
  9362.     Set to VSD_OPEN. 
  9363.  
  9364.  ulFlags (ULONG) 
  9365.     No flags used for this command. 
  9366.  
  9367.  pRequest (PVSD_OPEN_PARMS) 
  9368.     Pointer to the VSD_OPEN_PARMS data structure. 
  9369.  
  9370.  rc (ULONG) 
  9371.     Error code indicating success or the type of failure: 
  9372.  
  9373.       VSDERR_SUCCESS 
  9374.          Command completed successfully. 
  9375.  
  9376.       VSDERR_MISSING_PARAMETER 
  9377.          One or more parameters are missing. 
  9378.  
  9379.       VSDERR_NO_DEVICE_DRIVER 
  9380.          VSD is not connected to a device driver. 
  9381.  
  9382.       VSDERR_DEVICE_REJECTED 
  9383.          Device driver rejected the request. 
  9384.  
  9385.       VSDERR_HARDWARE 
  9386.          A hardware error occurred. 
  9387.  
  9388.       VSDERR_INVALID_BUFF 
  9389.          pRequest is not valid. 
  9390.  
  9391.  
  9392. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN - Remarks ΓòÉΓòÉΓòÉ
  9393.  
  9394. The installation name of the media control driver (MCD) is passed in so that 
  9395. the VSD can query device-specific parameters from the INI file. 
  9396.  
  9397. For an audio VSD, the pDevInfo pointer points to a VSD_AUDIOOPEN_PARMS 
  9398. structure.  This structure contains enough information to initialize the audio 
  9399. device. The VSD is responsible for filling in the ulDataSubType field of the 
  9400. VSD_AUDIOOPEN_PARMS structure with a valid data subtype. 
  9401.  
  9402.  
  9403. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN - Example Code ΓòÉΓòÉΓòÉ
  9404.  
  9405. The following code illustrates how to open an audio VSD. 
  9406.  
  9407.  
  9408.  VSD_OPEN_PARMS        vsdOpenParms;
  9409.  VSD_AUDIOOPEN_PARMS   vsdData;
  9410.  
  9411.  vsdData.ulLength = sizeof(VSD_AUDIOOPEN_PARMS);
  9412.  vsdData.ulFlags = 0;
  9413.  vsdData.ulSamplingRate       = pInstance->lSRate;
  9414.  vsdData.ulBitsPerSample      = pInstance->lBitsPerSRate;
  9415.  vsdData.ulChannels           = pInstance->sChannels;
  9416.  vsdData.ulDataType           = pInstance->sMode;
  9417.  vsdData.ulDeviceID           = pInstance->ulDeviceID;
  9418.  vsdData.ulOperation          = pInstance->ulOperation;
  9419.  vsdOpenParms.pDevInfo = (PVOID)&vsdData;
  9420.  
  9421.  
  9422.      vsdOpenParms.ulLength = sizeof(VSD_OPEN_PARMS);
  9423.      memmove(&vsdOpenParms.szPDDName,
  9424.              pInstance->szDeviceName,
  9425.              strlen(pInstance->szDeviceName));
  9426.        /* Open the audio VSD */
  9427.      rc = pInstance->pfnAUDIOIF(0,
  9428.                                 VSD_OPEN,
  9429.                                 0L
  9430.                                 (PVOID)&vsdOpenParms);
  9431.      if (!rc)
  9432.         }
  9433.         pInstance->hvsd = vsdOpenParms.hvsd;
  9434.         {
  9435.  
  9436.  
  9437. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN - Topics ΓòÉΓòÉΓòÉ
  9438.  
  9439. Select an item: 
  9440.  
  9441. Syntax
  9442. Parameters
  9443. Returns
  9444. Remarks
  9445. Example Code
  9446. Glossary
  9447.  
  9448.  
  9449. ΓòÉΓòÉΓòÉ 15.8. VSD_QUERY ΓòÉΓòÉΓòÉ
  9450.  
  9451.  
  9452. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY - Syntax ΓòÉΓòÉΓòÉ
  9453.  
  9454. This command allows an application to query the status of the VSD. 
  9455.  
  9456. This command is sent using VSDEntry as follows: 
  9457.  
  9458.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9459.  
  9460.  
  9461. hvsd
  9462.      HVSD   hvsd      /*  Handle to VSD. */
  9463.  
  9464. ulFunc
  9465.      ULONG  ulFunc    /*  VSD command. */
  9466.  
  9467. ulFlags
  9468.      ULONG  ulFlags   /*  Flags for this command. */
  9469.  
  9470. returns
  9471.      PVOID  pRequest  /*  Pointer varies according to ulFlags. */
  9472.  
  9473. returns
  9474.      ULONG  rc        /*  Return codes. */
  9475.  
  9476.  
  9477. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY Parameter - hvsd ΓòÉΓòÉΓòÉ
  9478.  
  9479.  hvsd (HVSD) 
  9480.     Handle to a VSD. 
  9481.  
  9482.  
  9483. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9484.  
  9485.  ulFunc (ULONG) 
  9486.     Set to VSD_QUERY. 
  9487.  
  9488.  
  9489. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9490.  
  9491.  ulFlags (ULONG) 
  9492.     The following flags can be used with VSD_QUERY: 
  9493.  
  9494.       VSD_QUERYAUDIOATTRIBUTES 
  9495.          See VSD_QUERYAUDIOATTRIBUTES. 
  9496.  
  9497.       VSD_QUERYCONNECTOR 
  9498.          See VSD_QUERYCONNECTOR. 
  9499.  
  9500.       VSD_QUERYDATATYPE 
  9501.          See VSD_QUERYDATATYPE. 
  9502.  
  9503.       VSD_QUERYMONITOR 
  9504.          See VSD_QUERYMONITOR. 
  9505.  
  9506.       VSD_QUERYVOLUME 
  9507.          See VSD_QUERYVOLUME. 
  9508.  
  9509.       VSD_QUERYMIXCONNECTIONS 
  9510.          See VSD_QUERYMIXCONNECTIONS. 
  9511.  
  9512.       VSD_QUERYMIXCONTROL 
  9513.          See VSD_QUERYMIXCONTROL. 
  9514.  
  9515.       VSD_QUERYMIXLINE 
  9516.          See VSD_QUERYMIXLINE. 
  9517.  
  9518.  
  9519. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY Return Value - pRequest ΓòÉΓòÉΓòÉ
  9520.  
  9521.  pRequest (PVOID) 
  9522.     Pointer varies according to ulFlags. 
  9523.  
  9524.  
  9525. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY Return Value - rc ΓòÉΓòÉΓòÉ
  9526.  
  9527.  rc (ULONG) 
  9528.     Error code indicating success or the type of failure: 
  9529.  
  9530.       VSDERR_SUCCESS 
  9531.          Command completed successfully. 
  9532.  
  9533.       VSDERR_MISSING_PARAMETER 
  9534.          One or more parameters are missing. 
  9535.  
  9536.  
  9537. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY - Parameters ΓòÉΓòÉΓòÉ
  9538.  
  9539.  hvsd (HVSD) 
  9540.     Handle to a VSD. 
  9541.  
  9542.  ulFunc (ULONG) 
  9543.     Set to VSD_QUERY. 
  9544.  
  9545.  ulFlags (ULONG) 
  9546.     The following flags can be used with VSD_QUERY: 
  9547.  
  9548.       VSD_QUERYAUDIOATTRIBUTES 
  9549.          See VSD_QUERYAUDIOATTRIBUTES. 
  9550.  
  9551.       VSD_QUERYCONNECTOR 
  9552.          See VSD_QUERYCONNECTOR. 
  9553.  
  9554.       VSD_QUERYDATATYPE 
  9555.          See VSD_QUERYDATATYPE. 
  9556.  
  9557.       VSD_QUERYMONITOR 
  9558.          See VSD_QUERYMONITOR. 
  9559.  
  9560.       VSD_QUERYVOLUME 
  9561.          See VSD_QUERYVOLUME. 
  9562.  
  9563.       VSD_QUERYMIXCONNECTIONS 
  9564.          See VSD_QUERYMIXCONNECTIONS. 
  9565.  
  9566.       VSD_QUERYMIXCONTROL 
  9567.          See VSD_QUERYMIXCONTROL. 
  9568.  
  9569.       VSD_QUERYMIXLINE 
  9570.          See VSD_QUERYMIXLINE. 
  9571.  
  9572.  pRequest (PVOID) 
  9573.     Pointer varies according to ulFlags. 
  9574.  
  9575.  rc (ULONG) 
  9576.     Error code indicating success or the type of failure: 
  9577.  
  9578.       VSDERR_SUCCESS 
  9579.          Command completed successfully. 
  9580.  
  9581.       VSDERR_MISSING_PARAMETER 
  9582.          One or more parameters are missing. 
  9583.  
  9584.  
  9585. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY - Remarks ΓòÉΓòÉΓòÉ
  9586.  
  9587. This command uses flags to indicate what information is queried. 
  9588.  
  9589.  
  9590. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERY - Topics ΓòÉΓòÉΓòÉ
  9591.  
  9592. Select an item: 
  9593.  
  9594. Syntax
  9595. Parameters
  9596. Returns
  9597. Remarks
  9598. Glossary
  9599.  
  9600.  
  9601. ΓòÉΓòÉΓòÉ 15.9. VSD_QUERYAUDIOATTRIBUTES ΓòÉΓòÉΓòÉ
  9602.  
  9603.  
  9604. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES - Syntax ΓòÉΓòÉΓòÉ
  9605.  
  9606. This subcommand of the VSD_QUERY command queries the current audio settings and 
  9607. capabilities. A valid length must be placed in the ulLength field of the 
  9608. VSD_AUDIOATTRIBUTES_PARMS structure and the audio setting (such as treble, 
  9609. bass, and so on) must be placed in the ulFlags field of the 
  9610. VSD_AUDIOATTRIBUTES_PARMS structure. 
  9611.  
  9612. This command is sent using VSDEntry as follows: 
  9613.  
  9614.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9615.  
  9616.  
  9617. hvsd
  9618.      HVSD                        hvsd      /*  Handle to VSD. */
  9619.  
  9620. ulFunc
  9621.      ULONG                       ulFunc    /*  VSD command. */
  9622.  
  9623. ulFlags
  9624.      ULONG                       ulFlags   /*  Flag for this command. */
  9625.  
  9626. pRequest
  9627.      PVSD_AUDIOATTRIBUTES_PARMS  pRequest  /*  Pointer to VSD_AUDIOATTRIBUTES_PARMS. */
  9628.  
  9629. returns
  9630.      ULONG                       rc        /*  Return codes. */
  9631.  
  9632.  
  9633. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES Parameter - hvsd ΓòÉΓòÉΓòÉ
  9634.  
  9635.  hvsd (HVSD) 
  9636.     Handle to a VSD. 
  9637.  
  9638.  
  9639. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9640.  
  9641.  ulFunc (ULONG) 
  9642.     Set to VSD_QUERY. 
  9643.  
  9644.  
  9645. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9646.  
  9647.  ulFlags (ULONG) 
  9648.     Set to VSD_QUERYAUDIOATTRIBUTES. 
  9649.  
  9650.  
  9651. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES Parameter - pRequest ΓòÉΓòÉΓòÉ
  9652.  
  9653.  pRequest (PVSD_AUDIOATTRIBUTES_PARMS) 
  9654.     Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure. 
  9655.  
  9656.  
  9657. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES Return Value - rc ΓòÉΓòÉΓòÉ
  9658.  
  9659.  rc (ULONG) 
  9660.     Error code indicating success or the type of failure: 
  9661.  
  9662.       VSDERR_SUCCESS 
  9663.          The command was successful. 
  9664.  
  9665.       VSDERR_MISSING_PARAMETER 
  9666.          One or more parameters are missing. 
  9667.  
  9668.  
  9669. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES - Parameters ΓòÉΓòÉΓòÉ
  9670.  
  9671.  hvsd (HVSD) 
  9672.     Handle to a VSD. 
  9673.  
  9674.  ulFunc (ULONG) 
  9675.     Set to VSD_QUERY. 
  9676.  
  9677.  ulFlags (ULONG) 
  9678.     Set to VSD_QUERYAUDIOATTRIBUTES. 
  9679.  
  9680.  pRequest (PVSD_AUDIOATTRIBUTES_PARMS) 
  9681.     Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure. 
  9682.  
  9683.  rc (ULONG) 
  9684.     Error code indicating success or the type of failure: 
  9685.  
  9686.       VSDERR_SUCCESS 
  9687.          The command was successful. 
  9688.  
  9689.       VSDERR_MISSING_PARAMETER 
  9690.          One or more parameters are missing. 
  9691.  
  9692.  
  9693. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES - Remarks ΓòÉΓòÉΓòÉ
  9694.  
  9695. All values are returned in the ulValue field and can range from 0 - 100. 
  9696.  
  9697.  
  9698. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES - Example Code ΓòÉΓòÉΓòÉ
  9699.  
  9700. The following code illustrates how to query audio attribute information from 
  9701. the VSD. 
  9702.  
  9703. HVSD                        hvsd;
  9704. VSD_AUDIOATTRIBUTES_PARMS   vsdAttr;
  9705.  
  9706.     /* Prime the structure with necessary values */
  9707. vsdAttr.ulLength = sizeof (VSD_AUDIOATTRIBUTES_PARMS);
  9708. vsdAttr.ulFlags = VSD_BASS;
  9709.  
  9710.     /*---------------------------------------------
  9711.      * Ask the VSD to either set or query an audio
  9712.      * attribute.  The caller determines whether
  9713.      * to set or query via the command variable.
  9714.      *---------------------------------------------*/
  9715.  
  9716.      rc = pInstance->pfnAUDIOIF(hvsd,
  9717.                                 VSD_QUERY,
  9718.                                 VSD_QUERYAUDIOATTRIBUTES,
  9719.                                 (PVOID)&vsdAttr);
  9720.  
  9721.     /* If Bass value is too high then...*/
  9722.     if (!rc)
  9723.        {
  9724.        if (vsdAttr.ulValue > 70)
  9725.        {
  9726.        }
  9727.  
  9728.  
  9729. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYAUDIOATTRIBUTES - Topics ΓòÉΓòÉΓòÉ
  9730.  
  9731. Select an item: 
  9732.  
  9733. Syntax
  9734. Parameters
  9735. Returns
  9736. Remarks
  9737. Example Code
  9738. Glossary
  9739.  
  9740.  
  9741. ΓòÉΓòÉΓòÉ 15.10. VSD_QUERYCONNECTOR ΓòÉΓòÉΓòÉ
  9742.  
  9743.  
  9744. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR - Syntax ΓòÉΓòÉΓòÉ
  9745.  
  9746. This subcommand of the VSD_QUERY command queries the state of the connector. (A 
  9747. connector can be a hardware or software connection on the device the VSD is 
  9748. controlling.) If the connector is enabled, the fEnabled field of the 
  9749. VSD_CONNECTOR_PARMS structure will contain MCI_TRUE, otherwise it will contain 
  9750. MCI_FALSE. For further information regarding connectors, refer to the MCI 
  9751. connector command in the OS/2 Multimedia Programming Reference. Valid 
  9752. connectors can be found in MCIOS2.H. 
  9753.  
  9754. This command is sent using VSDEntry as follows: 
  9755.  
  9756.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9757.  
  9758.  
  9759. hvsd
  9760.      HVSD                  hvsd      /*  Handle to VSD. */
  9761.  
  9762. ulFunc
  9763.      ULONG                 ulFunc    /*  VSD command. */
  9764.  
  9765. ulFlags
  9766.      ULONG                 ulFlags   /*  Flag indicating subcommand. */
  9767.  
  9768. pRequest
  9769.      PVSD_CONNECTOR_PARMS  pRequest  /*  Pointer to VSD_CONNECTOR_PARMS. */
  9770.  
  9771. returns
  9772.      ULONG                 rc        /*  Return codes. */
  9773.  
  9774.  
  9775. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR Parameter - hvsd ΓòÉΓòÉΓòÉ
  9776.  
  9777.  hvsd (HVSD) 
  9778.     Handle to a VSD. 
  9779.  
  9780.  
  9781. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9782.  
  9783.  ulFunc (ULONG) 
  9784.     Set to VSD_QUERY. 
  9785.  
  9786.  
  9787. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9788.  
  9789.  ulFlags (ULONG) 
  9790.     Set to VSD_QUERYCONNECTOR. 
  9791.  
  9792.  
  9793. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR Parameter - pRequest ΓòÉΓòÉΓòÉ
  9794.  
  9795.  pRequest (PVSD_CONNECTOR_PARMS) 
  9796.     A pointer to the VSD_CONNECTOR_PARMS structure. 
  9797.  
  9798.  
  9799. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR Return Value - rc ΓòÉΓòÉΓòÉ
  9800.  
  9801.  rc (ULONG) 
  9802.     Error code indicating success or the type of failure: 
  9803.  
  9804.       VSDERR_UNSUPPORTED_CONN_TYPE 
  9805.          Connector type not supported. 
  9806.  
  9807.       VSDERR_INVALID_CONNECTOR_TYPE 
  9808.          Invalid connector type. 
  9809.  
  9810.       VSDERR_INVALID_CONNECTOR_INDEX 
  9811.          Invalid connector index. 
  9812.  
  9813.       VSDERR_CANNOT_MODIFY_CONNECTOR 
  9814.          Cannot enable or disable this connector. 
  9815.  
  9816.       VSDERR_INVALID_CONNECTOR 
  9817.          Invalid connector. 
  9818.  
  9819.       VSDERR_UNSUPPORTED_CONNECTOR 
  9820.          Unsupported connector. 
  9821.  
  9822.       VSDERR_MISSING_PARAMETER 
  9823.          One or more parameters are missing. 
  9824.  
  9825.  
  9826. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR - Parameters ΓòÉΓòÉΓòÉ
  9827.  
  9828.  hvsd (HVSD) 
  9829.     Handle to a VSD. 
  9830.  
  9831.  ulFunc (ULONG) 
  9832.     Set to VSD_QUERY. 
  9833.  
  9834.  ulFlags (ULONG) 
  9835.     Set to VSD_QUERYCONNECTOR. 
  9836.  
  9837.  pRequest (PVSD_CONNECTOR_PARMS) 
  9838.     A pointer to the VSD_CONNECTOR_PARMS structure. 
  9839.  
  9840.  rc (ULONG) 
  9841.     Error code indicating success or the type of failure: 
  9842.  
  9843.       VSDERR_UNSUPPORTED_CONN_TYPE 
  9844.          Connector type not supported. 
  9845.  
  9846.       VSDERR_INVALID_CONNECTOR_TYPE 
  9847.          Invalid connector type. 
  9848.  
  9849.       VSDERR_INVALID_CONNECTOR_INDEX 
  9850.          Invalid connector index. 
  9851.  
  9852.       VSDERR_CANNOT_MODIFY_CONNECTOR 
  9853.          Cannot enable or disable this connector. 
  9854.  
  9855.       VSDERR_INVALID_CONNECTOR 
  9856.          Invalid connector. 
  9857.  
  9858.       VSDERR_UNSUPPORTED_CONNECTOR 
  9859.          Unsupported connector. 
  9860.  
  9861.       VSDERR_MISSING_PARAMETER 
  9862.          One or more parameters are missing. 
  9863.  
  9864.  
  9865. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR - Example Code ΓòÉΓòÉΓòÉ
  9866.  
  9867. The following code illustrates how to query the state of the connector. 
  9868.  
  9869.     HVSD                   hvsd;
  9870.     VSD_CONNECTOR_PARMS    vsdConn;
  9871.  
  9872.     vsdConn.ulConn_Type = pConnector->ulConnectorType;
  9873.     vsdConn.ulIndex = pConnector->ulConnectorIndex;
  9874.  
  9875.     lError = pInstance->pfnNewVSD(hvsd,
  9876.                                   VSD_QUERY,
  9877.                                   VSD_QUERYCONNECTOR,
  9878.                                   (PVOID)&vsdConn);
  9879.  
  9880.     prConnector->ulReturn = vsdConn.fEnabled;
  9881.  
  9882.  
  9883. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYCONNECTOR - Topics ΓòÉΓòÉΓòÉ
  9884.  
  9885. Select an item: 
  9886.  
  9887. Syntax
  9888. Parameters
  9889. Returns
  9890. Example Code
  9891. Glossary
  9892.  
  9893.  
  9894. ΓòÉΓòÉΓòÉ 15.11. VSD_QUERYDATATYPE ΓòÉΓòÉΓòÉ
  9895.  
  9896.  
  9897. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE - Syntax ΓòÉΓòÉΓòÉ
  9898.  
  9899. This subcommand of the VSD_QUERY command queries if a particular set of data 
  9900. types are supported. The ulSamplingRate, ulBitsPerSample, ulChannels, and 
  9901. ulDataType will be filled in on input. The ulDataSubType is filled in by the 
  9902. VSD on output. 
  9903.  
  9904. This command is sent using VSDEntry as follows: 
  9905.  
  9906.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  9907.  
  9908.  
  9909. hvsd
  9910.      HVSD                      hvsd      /*  Handle to VSD. */
  9911.  
  9912. ulFunc
  9913.      ULONG                     ulFunc    /*  VSD command. */
  9914.  
  9915. ulFlags
  9916.      ULONG                     ulFlags   /*  Flag indicating subcommand. */
  9917.  
  9918. pRequest
  9919.      PVSD_AUDIODATATYPE_PARMS  pRequest  /*  Output. */
  9920.  
  9921. returns
  9922.      ULONG                     rc        /*  Return codes. */
  9923.  
  9924.  
  9925. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE Parameter - hvsd ΓòÉΓòÉΓòÉ
  9926.  
  9927.  hvsd (HVSD) 
  9928.     Handle to a VSD. 
  9929.  
  9930.  
  9931. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  9932.  
  9933.  ulFunc (ULONG) 
  9934.     Set to VSD_QUERY. 
  9935.  
  9936.  
  9937. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  9938.  
  9939.  ulFlags (ULONG) 
  9940.     Set to VSD_QUERYDATATYPE. 
  9941.  
  9942.  
  9943. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE Parameter - pRequest ΓòÉΓòÉΓòÉ
  9944.  
  9945.  pRequest (PVSD_AUDIODATATYPE_PARMS) 
  9946.     Pointer to the VSD_AUDIODATATYPE_PARMS structure. 
  9947.  
  9948.  
  9949. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE Return Value - rc ΓòÉΓòÉΓòÉ
  9950.  
  9951.  rc (ULONG) 
  9952.     Error code indicating success or the type of failure: 
  9953.  
  9954.       VSDERR_SUCCESS 
  9955.          The command was successful. 
  9956.  
  9957.       VSDERR_MISSING_PARAMETER 
  9958.          One or more parameters are missing. 
  9959.  
  9960.  
  9961. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE - Parameters ΓòÉΓòÉΓòÉ
  9962.  
  9963.  hvsd (HVSD) 
  9964.     Handle to a VSD. 
  9965.  
  9966.  ulFunc (ULONG) 
  9967.     Set to VSD_QUERY. 
  9968.  
  9969.  ulFlags (ULONG) 
  9970.     Set to VSD_QUERYDATATYPE. 
  9971.  
  9972.  pRequest (PVSD_AUDIODATATYPE_PARMS) 
  9973.     Pointer to the VSD_AUDIODATATYPE_PARMS structure. 
  9974.  
  9975.  rc (ULONG) 
  9976.     Error code indicating success or the type of failure: 
  9977.  
  9978.       VSDERR_SUCCESS 
  9979.          The command was successful. 
  9980.  
  9981.       VSDERR_MISSING_PARAMETER 
  9982.          One or more parameters are missing. 
  9983.  
  9984.  
  9985. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE - Remarks ΓòÉΓòÉΓòÉ
  9986.  
  9987. This command is typically sent by applications which need to determine if the 
  9988. VSD supports a particular datatype. 
  9989.  
  9990.  
  9991. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE - Example Code ΓòÉΓòÉΓòÉ
  9992.  
  9993. The following code illustrates the use of VSD_QUERYDATATYPE: 
  9994.  
  9995.  HVSD                       hvsd;
  9996.  VSD_AUDIODATATYPE_PARMS    AudioCaps;
  9997.  
  9998.    /*---------------------------------------
  9999.    * Tell the VSD that we want to enable a
  10000.    * connector.
  10001.    *---------------------------------------*/
  10002.    rc =  pInstance->pfnNewVSD( hvsd ,
  10003.                                VSD_QUERY,
  10004.                                VSD_QUERYDATATYPE,
  10005.                                (PVOID ) &AudioCaps );
  10006.  
  10007.    if ( rc )
  10008.       {
  10009.         rc = MCIERR_INVALID_CONNECTION ;
  10010.       return (rc);
  10011.       }
  10012.    else
  10013.       {
  10014.       rc = MCIERR_SUCCESS;
  10015.       }
  10016.  
  10017.    return ( rc );
  10018.  
  10019.       } /* TestConnection */
  10020.  
  10021.  
  10022. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYDATATYPE - Topics ΓòÉΓòÉΓòÉ
  10023.  
  10024. Select an item: 
  10025.  
  10026. Syntax
  10027. Parameters
  10028. Returns
  10029. Remarks
  10030. Example Code
  10031. Glossary
  10032.  
  10033.  
  10034. ΓòÉΓòÉΓòÉ 15.12. VSD_QUERYMIXCONNECTIONS ΓòÉΓòÉΓòÉ
  10035.  
  10036.  
  10037. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS - Syntax ΓòÉΓòÉΓòÉ
  10038.  
  10039. This subcommand of the VSD_QUERY command queries the output that a particular 
  10040. VSD line (or connector) is routed to. For further information about VSD mixer 
  10041. support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer 
  10042. IOCtl Functions Introduction 
  10043.  
  10044. This command is sent using VSDEntry as follows: 
  10045.  
  10046.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10047.  
  10048.  
  10049. hvsd
  10050.      HVSD              hvsd      /*  Handle to VSD. */
  10051.  
  10052. ulFunc
  10053.      ULONG             ulFunc    /*  VSD command. */
  10054.  
  10055. ulFlags
  10056.      ULONG             ulFlags   /*  Flag indicating subcommand. */
  10057.  
  10058. pRequest
  10059.      PLINECONNECTIONS  pRequest  /*  Pointer LINECONNECTIONS. */
  10060.  
  10061. returns
  10062.      ULONG             rc        /*  Return codes. */
  10063.  
  10064.  
  10065. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS Parameter - hvsd ΓòÉΓòÉΓòÉ
  10066.  
  10067.  hvsd (HVSD) 
  10068.     Handle to a VSD. 
  10069.  
  10070.  
  10071. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10072.  
  10073.  ulFunc (ULONG) 
  10074.     Set to VSD_QUERY. 
  10075.  
  10076.  
  10077. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10078.  
  10079.  ulFlags (ULONG) 
  10080.     Set to VSD_QUERYMIXCONNECTIONS. 
  10081.  
  10082.  
  10083. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS Parameter - pRequest ΓòÉΓòÉΓòÉ
  10084.  
  10085.  pRequest (PLINECONNECTIONS) 
  10086.     A pointer to the LINECONNECTIONS structure. 
  10087.  
  10088.  
  10089. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS Return Value - rc ΓòÉΓòÉΓòÉ
  10090.  
  10091.  rc (ULONG) 
  10092.     Error code indicating success or the type of failure: 
  10093.  
  10094.       VSDERR_MISSING_PARAMETER 
  10095.          One or more parameters are missing. 
  10096.  
  10097.       VSDERR_INVALID_SOURCE 
  10098.          Invalid source. 
  10099.  
  10100.       VSDERR_INVALID_SINK 
  10101.          Invalid sink. 
  10102.  
  10103.       VSDERR_INVALID_CONNECTION 
  10104.          Invalid connection. 
  10105.  
  10106.  
  10107. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS - Parameters ΓòÉΓòÉΓòÉ
  10108.  
  10109.  hvsd (HVSD) 
  10110.     Handle to a VSD. 
  10111.  
  10112.  ulFunc (ULONG) 
  10113.     Set to VSD_QUERY. 
  10114.  
  10115.  ulFlags (ULONG) 
  10116.     Set to VSD_QUERYMIXCONNECTIONS. 
  10117.  
  10118.  pRequest (PLINECONNECTIONS) 
  10119.     A pointer to the LINECONNECTIONS structure. 
  10120.  
  10121.  rc (ULONG) 
  10122.     Error code indicating success or the type of failure: 
  10123.  
  10124.       VSDERR_MISSING_PARAMETER 
  10125.          One or more parameters are missing. 
  10126.  
  10127.       VSDERR_INVALID_SOURCE 
  10128.          Invalid source. 
  10129.  
  10130.       VSDERR_INVALID_SINK 
  10131.          Invalid sink. 
  10132.  
  10133.       VSDERR_INVALID_CONNECTION 
  10134.          Invalid connection. 
  10135.  
  10136.  
  10137. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS - Remarks ΓòÉΓòÉΓòÉ
  10138.  
  10139. The ulConnections field of the LINECONNECTIONS structure returns the particular 
  10140. output that a line is routed to. The ulLine field of the LINECONNECTIONS 
  10141. structure must contain a valid line on input. For more information on the 
  10142. values for ulLine and ulConnections, see the LINECONNECTIONS structure. 
  10143.  
  10144.  
  10145. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS - Example Code ΓòÉΓòÉΓòÉ
  10146.  
  10147. The following code illustrates how to query the output that a particular line 
  10148. is routed to. 
  10149.  
  10150.  
  10151.   HVSD              hvsd;
  10152.   LINECONNECTIONS   LineCon;
  10153.  
  10154.  /* Find out the setting for the synth. */
  10155.  
  10156.   LineCon.ulLine = SOURCE_SYNTHESIZER;
  10157.  
  10158.   LineCon.ulLength = sizeof(MIXERLINEINFO);
  10159.  /* Ask VSD for the capabilities of this line. */
  10160.  
  10161.   rc = pInstance->(hvsd,
  10162.                    VSD_QUERY,
  10163.                    VSD_QUERYMIXCONNECTIONS,
  10164.                    (PVOID)&LineCon);
  10165.  
  10166.  /* Are we connected to the amp or record outputs... */
  10167.  
  10168.   if (LineCon.ulConnection & (SINK_SPEAKERS))
  10169.      {
  10170.      pMixParms->ulReturn = MCI_OUTPUT_AMP;
  10171.      }
  10172.   else
  10173.      {
  10174.      pMixParms->ulReturn = MCI_OUTPUT_DIGITALAUDIO;
  10175.      }
  10176.  
  10177.  
  10178. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONNECTIONS - Topics ΓòÉΓòÉΓòÉ
  10179.  
  10180. Select an item: 
  10181.  
  10182. Syntax
  10183. Parameters
  10184. Returns
  10185. Remarks
  10186. Example Code
  10187. Glossary
  10188.  
  10189.  
  10190. ΓòÉΓòÉΓòÉ 15.13. VSD_QUERYMIXCONTROL ΓòÉΓòÉΓòÉ
  10191.  
  10192.  
  10193. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL - Syntax ΓòÉΓòÉΓòÉ
  10194.  
  10195. This subcommand of the VSD_QUERY command queries the audio attributes for an 
  10196. audio VSD connector (for example, the treble setting on a microphone 
  10197. connector). For further information about VSD mixer support and functions, see 
  10198. Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction 
  10199.  
  10200. This command is sent using VSDEntry as follows: 
  10201.  
  10202.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10203.  
  10204.  
  10205. hvsd
  10206.      HVSD           hvsd      /*  Handle to VSD. */
  10207.  
  10208. ulFunc
  10209.      ULONG          ulFunc    /*  VSD command. */
  10210.  
  10211. ulFlags
  10212.      ULONG          ulFlags   /*  Flag indicating subcommand. */
  10213.  
  10214. pRequest
  10215.      PMIXERCONTROL  pRequest  /*  Pointer MIXERCONTROL. */
  10216.  
  10217. returns
  10218.      ULONG          rc        /*  Return codes. */
  10219.  
  10220.  
  10221. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL Parameter - hvsd ΓòÉΓòÉΓòÉ
  10222.  
  10223.  hvsd (HVSD) 
  10224.     Handle to a VSD. 
  10225.  
  10226.  
  10227. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10228.  
  10229.  ulFunc (ULONG) 
  10230.     Set to VSD_QUERY. 
  10231.  
  10232.  
  10233. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10234.  
  10235.  ulFlags (ULONG) 
  10236.     Set to VSD_QUERYMIXCONTROL. 
  10237.  
  10238.  
  10239. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL Parameter - pRequest ΓòÉΓòÉΓòÉ
  10240.  
  10241.  pRequest (PMIXERCONTROL) 
  10242.     A pointer to the MIXERCONTROL structure. 
  10243.  
  10244.  
  10245. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL Return Value - rc ΓòÉΓòÉΓòÉ
  10246.  
  10247.  rc (ULONG) 
  10248.     Error code indicating success or the type of failure: 
  10249.  
  10250.       VSDERR_MISSING_PARAMETER 
  10251.          One or more parameters are missing. 
  10252.  
  10253.       VSDERR_INVALID_SOURCE 
  10254.          Invalid source. 
  10255.  
  10256.       VSDERR_INVALID_SINK 
  10257.          Invalid sink. 
  10258.  
  10259.       VSDERR_INVALID_CONNECTION 
  10260.          Invalid connection. 
  10261.  
  10262.  
  10263. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL - Parameters ΓòÉΓòÉΓòÉ
  10264.  
  10265.  hvsd (HVSD) 
  10266.     Handle to a VSD. 
  10267.  
  10268.  ulFunc (ULONG) 
  10269.     Set to VSD_QUERY. 
  10270.  
  10271.  ulFlags (ULONG) 
  10272.     Set to VSD_QUERYMIXCONTROL. 
  10273.  
  10274.  pRequest (PMIXERCONTROL) 
  10275.     A pointer to the MIXERCONTROL structure. 
  10276.  
  10277.  rc (ULONG) 
  10278.     Error code indicating success or the type of failure: 
  10279.  
  10280.       VSDERR_MISSING_PARAMETER 
  10281.          One or more parameters are missing. 
  10282.  
  10283.       VSDERR_INVALID_SOURCE 
  10284.          Invalid source. 
  10285.  
  10286.       VSDERR_INVALID_SINK 
  10287.          Invalid sink. 
  10288.  
  10289.       VSDERR_INVALID_CONNECTION 
  10290.          Invalid connection. 
  10291.  
  10292.  
  10293. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL - Remarks ΓòÉΓòÉΓòÉ
  10294.  
  10295. The ulLine field of the MIXERCONTROL structure must be filled in with one of 
  10296. the VSD sources/sinks in the low-order byte of the low word. 
  10297.  
  10298. The ulControl field of the MIXERCONTROL structure must be filled in with the 
  10299. desired setting.  For stereo controls, the high-order word of this field 
  10300. contains the left channel setting and the low-order word contains the right 
  10301. channel setting. A value of 0xFFFF represents full intensity and a value of 
  10302. 0x0000 is full cutout. 
  10303.  
  10304.  
  10305. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL - Example Code ΓòÉΓòÉΓòÉ
  10306.  
  10307. The following code illustrates how to query the settings of audio attributes 
  10308. for a particular connector. 
  10309.  
  10310.  
  10311.   HVSD           hvsd;
  10312.   MIXERCONTROL   MixerControl;
  10313.   USHORT         usBass;
  10314.  
  10315.  /* Find out the setting for the synth. */
  10316.  
  10317.   MixerControl.ulLine = SOURCE_SYNTHESIZER;
  10318.  
  10319.  /* Ask VSD what is the current setting of the connector. */
  10320.  
  10321.   MixerControl.ulControl = MIX_BASS;
  10322.   rc = pInstance->(hvsd,
  10323.                    VSD_QUERY,
  10324.                    VSD_QUERYMIXCONTROL,
  10325.                    (PVOID)&MixerControl);
  10326.  
  10327.      usBass = (MixControl.ulSetting)
  10328.  
  10329.      }
  10330.  
  10331.  
  10332. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXCONTROL - Topics ΓòÉΓòÉΓòÉ
  10333.  
  10334. Select an item: 
  10335.  
  10336. Syntax
  10337. Parameters
  10338. Returns
  10339. Remarks
  10340. Example Code
  10341. Glossary
  10342.  
  10343.  
  10344. ΓòÉΓòÉΓòÉ 15.14. VSD_QUERYMIXLINE ΓòÉΓòÉΓòÉ
  10345.  
  10346.  
  10347. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE - Syntax ΓòÉΓòÉΓòÉ
  10348.  
  10349. This subcommand of the VSD_QUERY command queries the audio attributes that are 
  10350. supported for the given VSD connector. For further information about VSD mixer 
  10351. support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer 
  10352. IOCtl Functions Introduction 
  10353.  
  10354. This command is sent using VSDEntry as follows: 
  10355.  
  10356.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10357.  
  10358.  
  10359. hvsd
  10360.      HVSD            hvsd      /*  Handle to VSD. */
  10361.  
  10362. ulFunc
  10363.      ULONG           ulFunc    /*  VSD command. */
  10364.  
  10365. ulFlags
  10366.      ULONG           ulFlags   /*  Flag indicating subcommand. */
  10367.  
  10368. pRequest
  10369.      PMIXERLINEINFO  pRequest  /*  A pointer to the MIXERLINEINFO structure. */
  10370.  
  10371. returns
  10372.      ULONG           rc        /*  Return codes. */
  10373.  
  10374.  
  10375. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE Parameter - hvsd ΓòÉΓòÉΓòÉ
  10376.  
  10377.  hvsd (HVSD) 
  10378.     Handle to a VSD. 
  10379.  
  10380.  
  10381. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10382.  
  10383.  ulFunc (ULONG) 
  10384.     Set to VSD_QUERY. 
  10385.  
  10386.  
  10387. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10388.  
  10389.  ulFlags (ULONG) 
  10390.     Set to VSD_QUERYMIXLINE. 
  10391.  
  10392.  
  10393. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE Parameter - pRequest ΓòÉΓòÉΓòÉ
  10394.  
  10395.  pRequest (PMIXERLINEINFO) 
  10396.     A pointer to the MIXERLINEINFO structure. The ulSupport field will be 
  10397.     filled by the VSD with the supported setting or settings if the line 
  10398.     supports multiple settings. The ulLine field must be filled in by the 
  10399.     caller. 
  10400.  
  10401.  
  10402. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE Return Value - rc ΓòÉΓòÉΓòÉ
  10403.  
  10404.  rc (ULONG) 
  10405.     Error code indicating success or the type of failure: 
  10406.  
  10407.       VSDERR_INVALID_SOURCE 
  10408.          Invalid source. 
  10409.  
  10410.       VSDERR_INVALID_SINK 
  10411.          Invalid sink. 
  10412.  
  10413.       VSDERR_INVALID_CONNECTION 
  10414.          Invalid connection. 
  10415.  
  10416.  
  10417. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE - Parameters ΓòÉΓòÉΓòÉ
  10418.  
  10419.  hvsd (HVSD) 
  10420.     Handle to a VSD. 
  10421.  
  10422.  ulFunc (ULONG) 
  10423.     Set to VSD_QUERY. 
  10424.  
  10425.  ulFlags (ULONG) 
  10426.     Set to VSD_QUERYMIXLINE. 
  10427.  
  10428.  pRequest (PMIXERLINEINFO) 
  10429.     A pointer to the MIXERLINEINFO structure. The ulSupport field will be 
  10430.     filled by the VSD with the supported setting or settings if the line 
  10431.     supports multiple settings. The ulLine field must be filled in by the 
  10432.     caller. 
  10433.  
  10434.  rc (ULONG) 
  10435.     Error code indicating success or the type of failure: 
  10436.  
  10437.       VSDERR_INVALID_SOURCE 
  10438.          Invalid source. 
  10439.  
  10440.       VSDERR_INVALID_SINK 
  10441.          Invalid sink. 
  10442.  
  10443.       VSDERR_INVALID_CONNECTION 
  10444.          Invalid connection. 
  10445.  
  10446.  
  10447. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE - Example Code ΓòÉΓòÉΓòÉ
  10448.  
  10449. The following code illustrates how to query the supported audio attributes from 
  10450. a mixer connector. 
  10451.  
  10452.  
  10453. HVSD               hvsd;
  10454. MIXERLINEINFO      mixerinfo;
  10455.   mixerinfo.ulLine = SYNTHESIZER_INPUT;
  10456.   mixerinfo.ulLength = sizeof(MIXERLINEINFO);
  10457.       rc = pInstance->pfnAUDIOIF( hsvd,
  10458.                                   VSD_QUERY,
  10459.                                   VSD_QUERYMIXLINE,
  10460.                                   (PVOID) &mixerinfo);
  10461.  
  10462.    if(!rc)
  10463.       if(mixerinfo.ulSupport & MIX_VOLUME)
  10464.           {
  10465.           /* process volume */
  10466.           }
  10467.  
  10468.         }  /* If no errors */
  10469.  
  10470.  
  10471. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMIXLINE - Topics ΓòÉΓòÉΓòÉ
  10472.  
  10473. Select an item: 
  10474.  
  10475. Syntax
  10476. Parameters
  10477. Returns
  10478. Example Code
  10479. Glossary
  10480.  
  10481.  
  10482. ΓòÉΓòÉΓòÉ 15.15. VSD_QUERYMONITOR ΓòÉΓòÉΓòÉ
  10483.  
  10484.  
  10485. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR - Syntax ΓòÉΓòÉΓòÉ
  10486.  
  10487. This subcommand of the VSD_QUERY command queries the device to determine if 
  10488. audio monitoring is enabled.  The VSD returns TRUE if the monitor is enabled 
  10489. and FALSE if it is disabled. 
  10490.  
  10491. This command is sent using VSDEntry as follows: 
  10492.  
  10493.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10494.  
  10495.  
  10496. hvsd
  10497.      HVSD    hvsd      /*  Handle to VSD. */
  10498.  
  10499. ulFunc
  10500.      ULONG   ulFunc    /*  VSD command. */
  10501.  
  10502. ulFlags
  10503.      ULONG   ulFlags   /*  Flag indicating subcommand. */
  10504.  
  10505. pRequest
  10506.      PULONG  pRequest  /*  Output. */
  10507.  
  10508. returns
  10509.      ULONG   rc        /*  Return codes. */
  10510.  
  10511.  
  10512. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR Parameter - hvsd ΓòÉΓòÉΓòÉ
  10513.  
  10514.  hvsd (HVSD) 
  10515.     Handle to a VSD instance. 
  10516.  
  10517.  
  10518. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10519.  
  10520.  ulFunc (ULONG) 
  10521.     Set to VSD_QUERY. 
  10522.  
  10523.  
  10524. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10525.  
  10526.  ulFlags (ULONG) 
  10527.     Set to VSD_QUERYMONITOR. 
  10528.  
  10529.  
  10530. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR Parameter - pRequest ΓòÉΓòÉΓòÉ
  10531.  
  10532.  pRequest (PULONG) 
  10533.     Output. 
  10534.  
  10535.  
  10536. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR Return Value - rc ΓòÉΓòÉΓòÉ
  10537.  
  10538.  rc (ULONG) 
  10539.     VSD returns TRUE if the monitor is enabled and FALSE if it is disabled. 
  10540.  
  10541.  
  10542. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR - Parameters ΓòÉΓòÉΓòÉ
  10543.  
  10544.  hvsd (HVSD) 
  10545.     Handle to a VSD instance. 
  10546.  
  10547.  ulFunc (ULONG) 
  10548.     Set to VSD_QUERY. 
  10549.  
  10550.  ulFlags (ULONG) 
  10551.     Set to VSD_QUERYMONITOR. 
  10552.  
  10553.  pRequest (PULONG) 
  10554.     Output. 
  10555.  
  10556.  rc (ULONG) 
  10557.     VSD returns TRUE if the monitor is enabled and FALSE if it is disabled. 
  10558.  
  10559.  
  10560. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR - Example Code ΓòÉΓòÉΓòÉ
  10561.  
  10562. The following code illustrates how to query the state of monitoring. 
  10563.  
  10564. rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
  10565.                            VSD_QUERY,
  10566.                            VSD_QUERYMONITOR,
  10567.                            (PVOID)&pStat->ulReturn);
  10568.  
  10569.  
  10570. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYMONITOR - Topics ΓòÉΓòÉΓòÉ
  10571.  
  10572. Select an item: 
  10573.  
  10574. Syntax
  10575. Parameters
  10576. Returns
  10577. Example Code
  10578. Glossary
  10579.  
  10580.  
  10581. ΓòÉΓòÉΓòÉ 15.16. VSD_QUERYSTATUSLEVEL ΓòÉΓòÉΓòÉ
  10582.  
  10583.  
  10584. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL - Syntax ΓòÉΓòÉΓòÉ
  10585.  
  10586. This subcommand of the VSD_QUERY command queries the status of the audio input 
  10587. level (percentage). This command is optional. 
  10588.  
  10589. This command is sent using VSDEntry as follows: 
  10590.  
  10591.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10592.  
  10593.  
  10594. hvsd
  10595.      HVSD    hvsd      /*  Handle to VSD. */
  10596.  
  10597. ulFunc
  10598.      ULONG   ulFunc    /*  VSD command. */
  10599.  
  10600. ulFlags
  10601.      ULONG   ulFlags   /*  Flag indicating subcommand. */
  10602.  
  10603. pRequest
  10604.      PULONG  pRequest  /*  Output. */
  10605.  
  10606. returns
  10607.      ULONG   rc        /*  Return codes. */
  10608.  
  10609.  
  10610. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL Parameter - hvsd ΓòÉΓòÉΓòÉ
  10611.  
  10612.  hvsd (HVSD) 
  10613.     Handle to a VSD. 
  10614.  
  10615.  
  10616. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10617.  
  10618.  ulFunc (ULONG) 
  10619.     Set to VSD_QUERY. 
  10620.  
  10621.  
  10622. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10623.  
  10624.  ulFlags (ULONG) 
  10625.     Set to VSD_QUERYSTATUSLEVEL. 
  10626.  
  10627.  
  10628. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL Parameter - pRequest ΓòÉΓòÉΓòÉ
  10629.  
  10630.  pRequest (PULONG) 
  10631.     Current level of device. 
  10632.  
  10633.  
  10634. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL Return Value - rc ΓòÉΓòÉΓòÉ
  10635.  
  10636.  rc (ULONG) 
  10637.     Error code indicating success or the type of failure: 
  10638.  
  10639.       VSDERR_SUCCESS 
  10640.          The command was successful. 
  10641.  
  10642.  
  10643. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL - Parameters ΓòÉΓòÉΓòÉ
  10644.  
  10645.  hvsd (HVSD) 
  10646.     Handle to a VSD. 
  10647.  
  10648.  ulFunc (ULONG) 
  10649.     Set to VSD_QUERY. 
  10650.  
  10651.  ulFlags (ULONG) 
  10652.     Set to VSD_QUERYSTATUSLEVEL. 
  10653.  
  10654.  pRequest (PULONG) 
  10655.     Current level of device. 
  10656.  
  10657.  rc (ULONG) 
  10658.     Error code indicating success or the type of failure: 
  10659.  
  10660.       VSDERR_SUCCESS 
  10661.          The command was successful. 
  10662.  
  10663.  
  10664. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYSTATUSLEVEL - Topics ΓòÉΓòÉΓòÉ
  10665.  
  10666. Select an item: 
  10667.  
  10668. Syntax
  10669. Parameters
  10670. Returns
  10671. Glossary
  10672.  
  10673.  
  10674. ΓòÉΓòÉΓòÉ 15.17. VSD_QUERYVOLUME ΓòÉΓòÉΓòÉ
  10675.  
  10676.  
  10677. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME - Syntax ΓòÉΓòÉΓòÉ
  10678.  
  10679. This subcommand of the VSD_QUERY command queries the volume level. The volume 
  10680. is returned as a percentage between 0% and 100% 
  10681.  
  10682. This command is sent using VSDEntry as follows: 
  10683.  
  10684.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10685.  
  10686.  
  10687. hvsd
  10688.      HVSD               hvsd      /*  Handle to VSD. */
  10689.  
  10690. ulFunc
  10691.      ULONG              ulFunc    /*  VSD command. */
  10692.  
  10693. ulFlags
  10694.      ULONG              ulFlags   /*  Flag for this command. */
  10695.  
  10696. pRequest
  10697.      PVSD_VOLUME_PARMS  pRequest  /*  Pointer to VSD_VOLUME_PARMS. */
  10698.  
  10699. returns
  10700.      ULONG              rc        /*  Return codes. */
  10701.  
  10702.  
  10703. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME Parameter - hvsd ΓòÉΓòÉΓòÉ
  10704.  
  10705.  hvsd (HVSD) 
  10706.     Handle to a VSD. 
  10707.  
  10708.  
  10709. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10710.  
  10711.  ulFunc (ULONG) 
  10712.     Set to VSD_QUERY. 
  10713.  
  10714.  
  10715. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10716.  
  10717.  ulFlags (ULONG) 
  10718.     Set to VSD_QUERYVOLUME. 
  10719.  
  10720.  
  10721. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME Parameter - pRequest ΓòÉΓòÉΓòÉ
  10722.  
  10723.  pRequest (PVSD_VOLUME_PARMS) 
  10724.     Pointer to the VSD_VOLUME_PARMS structure. 
  10725.  
  10726.  
  10727. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME Return Value - rc ΓòÉΓòÉΓòÉ
  10728.  
  10729.  rc (ULONG) 
  10730.     Error code indicating success or the type of failure: 
  10731.  
  10732.       VSDERR_SUCCESS 
  10733.          The command was successful. field. 
  10734.  
  10735.  
  10736. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME - Parameters ΓòÉΓòÉΓòÉ
  10737.  
  10738.  hvsd (HVSD) 
  10739.     Handle to a VSD. 
  10740.  
  10741.  ulFunc (ULONG) 
  10742.     Set to VSD_QUERY. 
  10743.  
  10744.  ulFlags (ULONG) 
  10745.     Set to VSD_QUERYVOLUME. 
  10746.  
  10747.  pRequest (PVSD_VOLUME_PARMS) 
  10748.     Pointer to the VSD_VOLUME_PARMS structure. 
  10749.  
  10750.  rc (ULONG) 
  10751.     Error code indicating success or the type of failure: 
  10752.  
  10753.       VSDERR_SUCCESS 
  10754.          The command was successful. field. 
  10755.  
  10756.  
  10757. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME - Remarks ΓòÉΓòÉΓòÉ
  10758.  
  10759. On return, the VSD will fill in the ulVolume field of the VSD_VOLUME_PARMS 
  10760. structure. 
  10761.  
  10762.  
  10763. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME - Example Code ΓòÉΓòÉΓòÉ
  10764.  
  10765. The following code illustrates how to query audio volume from the VSD. 
  10766.  
  10767. VSD_VOLUME_PARMS   vsdVol;
  10768. ULONG              ulVol;
  10769.    vsdVol.ulLength = sizeof(VSD_VOLUME_PARMS);
  10770.    vsdVol.ulFlags  = ulFlags;
  10771.  
  10772.  /*------------------------------------------
  10773.   *  Ask the VSD to query audio volume.
  10774.   *------------------------------------------*/
  10775.  
  10776. rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
  10777.                            VSD_QUERY,
  10778.                            VSD_QUERYVOLUME,
  10779.                            (PVOID)&vsdVol);
  10780. ulVol = vsdvol.ulVolume;
  10781.  
  10782.  
  10783. ΓòÉΓòÉΓòÉ <hidden> VSD_QUERYVOLUME - Topics ΓòÉΓòÉΓòÉ
  10784.  
  10785. Select an item: 
  10786.  
  10787. Syntax
  10788. Parameters
  10789. Returns
  10790. Remarks
  10791. Example Code
  10792. Glossary
  10793.  
  10794.  
  10795. ΓòÉΓòÉΓòÉ 15.18. VSD_RESOURCE ΓòÉΓòÉΓòÉ
  10796.  
  10797.  
  10798. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE - Syntax ΓòÉΓòÉΓòÉ
  10799.  
  10800. This command can be issued only when the device is opened and is used for 
  10801. resource management. 
  10802.  
  10803. VSD_RESOURCE is a required command and must be implemented by all VSD writers. 
  10804.  
  10805. This command is sent using VSDEntry as follows: 
  10806.  
  10807.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10808.  
  10809.  
  10810. hvsd
  10811.      HVSD                 hvsd      /*  Handle to VSD. */
  10812.  
  10813. ulFunc
  10814.      ULONG                ulFunc    /*  VSD command. */
  10815.  
  10816. ulFlags
  10817.      ULONG                ulFlags   /*  Not used. */
  10818.  
  10819. pRequest
  10820.      PVSD_RESOURCE_PARMS  pRequest  /*  Pointer to VSD_RESOURCE_PARMS. */
  10821.  
  10822. returns
  10823.      ULONG                rc        /*  Return codes. */
  10824.  
  10825.  
  10826. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE Parameter - hvsd ΓòÉΓòÉΓòÉ
  10827.  
  10828.  hvsd (HVSD) 
  10829.     Handle to a VSD. 
  10830.  
  10831.  
  10832. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10833.  
  10834.  ulFunc (ULONG) 
  10835.     Set to VSD_RESOURCE. 
  10836.  
  10837.  
  10838. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10839.  
  10840.  ulFlags (ULONG) 
  10841.     No flags used for this command. 
  10842.  
  10843.  
  10844. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE Parameter - pRequest ΓòÉΓòÉΓòÉ
  10845.  
  10846.  pRequest (PVSD_RESOURCE_PARMS) 
  10847.     Pointer to the VSD_RESOURCE_PARMS data structure. 
  10848.  
  10849.     The driver is responsible for filling in the ulResUnits and ulClass fields. 
  10850.     The caller is responsible for filling in the ulDataType field. 
  10851.  
  10852.  
  10853. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE Return Value - rc ΓòÉΓòÉΓòÉ
  10854.  
  10855.  rc (ULONG) 
  10856.     Error code indicating success or the type of failure: 
  10857.  
  10858.       VSDERR_SUCCESS 
  10859.          Command completed successfully. 
  10860.  
  10861.       VSDERR_MISSING_PARAMETER 
  10862.          One or more parameters is missing. 
  10863.  
  10864.  
  10865. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE - Parameters ΓòÉΓòÉΓòÉ
  10866.  
  10867.  hvsd (HVSD) 
  10868.     Handle to a VSD. 
  10869.  
  10870.  ulFunc (ULONG) 
  10871.     Set to VSD_RESOURCE. 
  10872.  
  10873.  ulFlags (ULONG) 
  10874.     No flags used for this command. 
  10875.  
  10876.  pRequest (PVSD_RESOURCE_PARMS) 
  10877.     Pointer to the VSD_RESOURCE_PARMS data structure. 
  10878.  
  10879.     The driver is responsible for filling in the ulResUnits and ulClass fields. 
  10880.     The caller is responsible for filling in the ulDataType field. 
  10881.  
  10882.  rc (ULONG) 
  10883.     Error code indicating success or the type of failure: 
  10884.  
  10885.       VSDERR_SUCCESS 
  10886.          Command completed successfully. 
  10887.  
  10888.       VSDERR_MISSING_PARAMETER 
  10889.          One or more parameters is missing. 
  10890.  
  10891.  
  10892. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE - Remarks ΓòÉΓòÉΓòÉ
  10893.  
  10894. When an audio device driver is installed in MMPM/2, the installation routines 
  10895. place the following three keywords in the MMPM2.INI file: 
  10896.  
  10897.    o  RESOURCEUNITS= 
  10898.  
  10899.    o  RESOURCECLASS= 
  10900.  
  10901.    o  VALIDCOMBINATIONS= 
  10902.  
  10903.  Because MMPM/2 allows many applications to simultaneously open the audio card, 
  10904.  it uses these keywords to determine which applications can simultaneously use 
  10905.  the audio device.  All of the numbers are arbitrary and are defined on a 
  10906.  device-by-device basis.  However, device driver writers should use the 
  10907.  numbering scheme defined below: 
  10908.  
  10909.  The keyword RESOURCECLASSES indicates the different resource types available 
  10910.  on the audio device. The first parameter is the number of classes and it is 
  10911.  followed by a listing of classes. A vendor should provide a class for each 
  10912.  data type that they support. For instance, if the XYZ audio card can only play 
  10913.  PCM files, it would only have one resource class - the PCM class. However, if 
  10914.  the ABC audio card can play PCM, MIDI, and ADPCM, then it would have three 
  10915.  classes. The VSD should fill in the ulClass field with the class that is 
  10916.  appropriate for this mode. 
  10917.  
  10918.  The keyword RESOURCEUNITS indicates the maximum number of instances that can 
  10919.  be active on the card at any particular time. For example, if the XYZ card 
  10920.  mentioned above had the ability to play three PCM files at the same time, the 
  10921.  RESOURCEUNITS for this card would be three. In contrast, the ABC card can only 
  10922.  play one PCM file and one MIDI file at any one time. Therefore, its resource 
  10923.  units should be two. The VSD should fill in the ulResUnits field with the 
  10924.  correct number of resources for the current mode (typically, one). 
  10925.  
  10926.  
  10927. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE - Example Code ΓòÉΓòÉΓòÉ
  10928.  
  10929. The following code illustrates how to determine the number of resources 
  10930. consumed for a particular mode on an audio VSD. 
  10931.  
  10932.  
  10933.  HVSD   hvsd;
  10934.   rc = pInstance->pfnAUDIOIF( hvsd,
  10935.                               VSD_RESOURCE,
  10936.                               0L,
  10937.                               (PVOID)&vsdResourceParms );
  10938.  
  10939.   pInstance->ulResourcesUsed = vsdResourceParms.ulResUnits;
  10940.   pInstance->ulClass = vsdResourceParms.ulClass;
  10941.  
  10942.  
  10943. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE - Topics ΓòÉΓòÉΓòÉ
  10944.  
  10945. Select an item: 
  10946.  
  10947. Syntax
  10948. Parameters
  10949. Returns
  10950. Remarks
  10951. Example Code
  10952. Glossary
  10953.  
  10954.  
  10955. ΓòÉΓòÉΓòÉ 15.19. VSD_RESTORE ΓòÉΓòÉΓòÉ
  10956.  
  10957.  
  10958. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE - Syntax ΓòÉΓòÉΓòÉ
  10959.  
  10960. This command restores the current state of the device. VSD_RESTORE is a 
  10961. required function and must be implemented by all VSD writers. 
  10962.  
  10963. This command is sent using VSDEntry as follows: 
  10964.  
  10965.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  10966.  
  10967.  
  10968. hvsd
  10969.      HVSD   hvsd      /*  Handle to VSD. */
  10970.  
  10971. ulFunc
  10972.      ULONG  ulFunc    /*  VSD command. */
  10973.  
  10974. ulFlags
  10975.      ULONG  ulFlags   /*  Not used. */
  10976.  
  10977. pRequest
  10978.      PVOID  pRequest  /*  Not used. */
  10979.  
  10980. returns
  10981.      ULONG  rc        /*  Return codes. */
  10982.  
  10983.  
  10984. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE Parameter - hvsd ΓòÉΓòÉΓòÉ
  10985.  
  10986.  hvsd (HVSD) 
  10987.     Handle to a VSD. 
  10988.  
  10989.  
  10990. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  10991.  
  10992.  ulFunc (ULONG) 
  10993.     Set to VSD_RESTORE. 
  10994.  
  10995.  
  10996. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  10997.  
  10998.  ulFlags (ULONG) 
  10999.     No flags used for this command. 
  11000.  
  11001.  
  11002. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE Parameter - pRequest ΓòÉΓòÉΓòÉ
  11003.  
  11004.  pRequest (PVOID) 
  11005.     Not used with this command. 
  11006.  
  11007.  
  11008. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE Return Value - rc ΓòÉΓòÉΓòÉ
  11009.  
  11010.  rc (ULONG) 
  11011.     Error code indicating success or the type of failure: 
  11012.  
  11013.       VSDERR_SUCCESS 
  11014.          The command completed successfully. 
  11015.  
  11016.  
  11017. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE - Parameters ΓòÉΓòÉΓòÉ
  11018.  
  11019.  hvsd (HVSD) 
  11020.     Handle to a VSD. 
  11021.  
  11022.  ulFunc (ULONG) 
  11023.     Set to VSD_RESTORE. 
  11024.  
  11025.  ulFlags (ULONG) 
  11026.     No flags used for this command. 
  11027.  
  11028.  pRequest (PVOID) 
  11029.     Not used with this command. 
  11030.  
  11031.  rc (ULONG) 
  11032.     Error code indicating success or the type of failure: 
  11033.  
  11034.       VSDERR_SUCCESS 
  11035.          The command completed successfully. 
  11036.  
  11037.  
  11038. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE - Remarks ΓòÉΓòÉΓòÉ
  11039.  
  11040. MMPM/2 supports the concept of suspending and resuming the state of a device at 
  11041. any point in time.  Unlike other environments, multiple applications can 
  11042. simultaneously have a device open and the Media Device Manager will cooperate 
  11043. with the VSD in order to manage the device.  The VSD is responsible for saving 
  11044. and restoring the actual hardware device. For further information, see the OS/2 
  11045. Multimedia Programming Reference (MCI_RESTORE). 
  11046.  
  11047.  
  11048. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE - Example Code ΓòÉΓòÉΓòÉ
  11049.  
  11050. The following code illustrates how to activate an audio VSD using VSD_RESTORE. 
  11051.  
  11052.    ULONG   rc;
  11053.    HVSD    hvsd;
  11054.  
  11055.        rc = pInstance->pfnAUDIOIF( hvsd,
  11056.                                    VSD_RESTORE,
  11057.                                    0L,
  11058.                                    0 );
  11059.        return(rc)
  11060.  
  11061.  
  11062. ΓòÉΓòÉΓòÉ <hidden> VSD_RESTORE - Topics ΓòÉΓòÉΓòÉ
  11063.  
  11064. Select an item: 
  11065.  
  11066. Syntax
  11067. Parameters
  11068. Returns
  11069. Remarks
  11070. Example Code
  11071. Glossary
  11072.  
  11073.  
  11074. ΓòÉΓòÉΓòÉ 15.20. VSD_SAVE ΓòÉΓòÉΓòÉ
  11075.  
  11076.  
  11077. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE - Syntax ΓòÉΓòÉΓòÉ
  11078.  
  11079. This command saves the current state of the device. VSD_SAVE is a required 
  11080. function and must be implemented by all VSD writers. 
  11081.  
  11082. This command is sent using VSDEntry as follows: 
  11083.  
  11084.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11085.  
  11086.  
  11087. hvsd
  11088.      HVSD   hvsd      /*  Handle to VSD. */
  11089.  
  11090. ulFunc
  11091.      ULONG  ulFunc    /*  VSD command. */
  11092.  
  11093. ulFlags
  11094.      ULONG  ulFlags   /*  Not used. */
  11095.  
  11096. pRequest
  11097.      PVOID  pRequest  /*  Not used. */
  11098.  
  11099. returns
  11100.      ULONG  rc        /*  Return codes. */
  11101.  
  11102.  
  11103. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE Parameter - hvsd ΓòÉΓòÉΓòÉ
  11104.  
  11105.  hvsd (HVSD) 
  11106.     Handle to a VSD. 
  11107.  
  11108.  
  11109. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11110.  
  11111.  ulFunc (ULONG) 
  11112.     Set to VSD_SAVE. 
  11113.  
  11114.  
  11115. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11116.  
  11117.  ulFlags (ULONG) 
  11118.     No flags used for this command. 
  11119.  
  11120.  
  11121. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE Parameter - pRequest ΓòÉΓòÉΓòÉ
  11122.  
  11123.  pRequest (PVOID) 
  11124.     Not used with this command. 
  11125.  
  11126.  
  11127. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE Return Value - rc ΓòÉΓòÉΓòÉ
  11128.  
  11129.  rc (ULONG) 
  11130.     Error code indicating success or the type of failure: 
  11131.  
  11132.       VSDERR_SUCCESS 
  11133.          The command was successful. 
  11134.  
  11135.  
  11136. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE - Parameters ΓòÉΓòÉΓòÉ
  11137.  
  11138.  hvsd (HVSD) 
  11139.     Handle to a VSD. 
  11140.  
  11141.  ulFunc (ULONG) 
  11142.     Set to VSD_SAVE. 
  11143.  
  11144.  ulFlags (ULONG) 
  11145.     No flags used for this command. 
  11146.  
  11147.  pRequest (PVOID) 
  11148.     Not used with this command. 
  11149.  
  11150.  rc (ULONG) 
  11151.     Error code indicating success or the type of failure: 
  11152.  
  11153.       VSDERR_SUCCESS 
  11154.          The command was successful. 
  11155.  
  11156.  
  11157. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE - Remarks ΓòÉΓòÉΓòÉ
  11158.  
  11159. MMPM/2 supports the concept of suspending and resuming the state of a device at 
  11160. any point in time. Unlike other environments, multiple applications can 
  11161. simultaneously have a device open and the Media Device Manager will cooperate 
  11162. with the VSD in order to manage the device.  The VSD is responsible for saving 
  11163. and restoring the actual hardware device. For further information, see the OS/2 
  11164. Multimedia Programming Reference (MCIDRV_SAVE). 
  11165.  
  11166.  
  11167. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE - Example Code ΓòÉΓòÉΓòÉ
  11168.  
  11169. The following code illustrates how to deactivate an audio VSD using VSD_SAVE. 
  11170.  
  11171.    ULONG    rc;
  11172.    HVSD    hvsd;
  11173.  
  11174.      rc = pInstance->pfnAUDIOIF( hvsd,
  11175.                                  VSD_SAVE,
  11176.                                  0L,
  11177.                                  0 );
  11178.  
  11179.      return(rc);
  11180.  
  11181.  
  11182. ΓòÉΓòÉΓòÉ <hidden> VSD_SAVE - Topics ΓòÉΓòÉΓòÉ
  11183.  
  11184. Select an item: 
  11185.  
  11186. Syntax
  11187. Parameters
  11188. Returns
  11189. Remarks
  11190. Example Code
  11191. Glossary
  11192.  
  11193.  
  11194. ΓòÉΓòÉΓòÉ 15.21. VSD_SET ΓòÉΓòÉΓòÉ
  11195.  
  11196.  
  11197. ΓòÉΓòÉΓòÉ <hidden> VSD_SET - Syntax ΓòÉΓòÉΓòÉ
  11198.  
  11199. This command allows an application to modify the settings of the VSD. 
  11200.  
  11201. This command is sent using VSDEntry as follows: 
  11202.  
  11203.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11204.  
  11205.  
  11206. hvsd
  11207.      HVSD   hvsd      /*  Handle to VSD. */
  11208.  
  11209. ulFunc
  11210.      ULONG  ulFunc    /*  VSD command message. */
  11211.  
  11212. ulFlags
  11213.      ULONG  ulFlags   /*  Flags for this message. */
  11214.  
  11215. pRequest
  11216.      PVOID  pRequest  /*  Pointer value that varies according to */
  11217.  
  11218. returns
  11219.      ULONG  rc        /*  Return codes. */
  11220.  
  11221.  
  11222. ΓòÉΓòÉΓòÉ <hidden> VSD_SET Parameter - hvsd ΓòÉΓòÉΓòÉ
  11223.  
  11224.  hvsd (HVSD) 
  11225.     Handle to VSD. 
  11226.  
  11227.  
  11228. ΓòÉΓòÉΓòÉ <hidden> VSD_SET Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11229.  
  11230.  ulFunc (ULONG) 
  11231.     Set to VSD_SET. 
  11232.  
  11233.  
  11234. ΓòÉΓòÉΓòÉ <hidden> VSD_SET Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11235.  
  11236.  ulFlags (ULONG) 
  11237.     The following flags can be used with VSD_SET. 
  11238.  
  11239.       VSD_SETAUDIOATTRIBUTES 
  11240.          See VSD_SETAUDIOATTRIBUTES 
  11241.  
  11242.       VSD_SETCONNECTOR 
  11243.          See VSD_SETCONNECTOR 
  11244.  
  11245.       VSD_SETDATATYPE 
  11246.          See VSD_SETDATATYPE 
  11247.  
  11248.       VSD_SETMIXCONNECTIONS 
  11249.          See VSD_SETMIXCONNECTIONS 
  11250.  
  11251.       VSD_SETMIXCONTROL 
  11252.          See VSD_SETMIXCONTROL 
  11253.  
  11254.       VSD_SETMONITOR 
  11255.          See VSD_SETMONITOR 
  11256.  
  11257.       VSD_SETVOLUME 
  11258.          See VSD_SETVOLUME 
  11259.  
  11260.  
  11261. ΓòÉΓòÉΓòÉ <hidden> VSD_SET Parameter - pRequest ΓòÉΓòÉΓòÉ
  11262.  
  11263.  pRequest (PVOID) 
  11264.     Pointer value varies according to the value of ulFlags. 
  11265.  
  11266.  
  11267. ΓòÉΓòÉΓòÉ <hidden> VSD_SET Return Value - rc ΓòÉΓòÉΓòÉ
  11268.  
  11269.  rc (ULONG) 
  11270.     Error code indicating success or the type of failure: 
  11271.  
  11272.       VSDERR_INVALID_HVSD 
  11273.          The hvsd (VSD handle) is not valid.  Verify that the hvsd matches the 
  11274.          one provided on the VSD_OPEN. 
  11275.  
  11276.  
  11277. ΓòÉΓòÉΓòÉ <hidden> VSD_SET - Parameters ΓòÉΓòÉΓòÉ
  11278.  
  11279.  hvsd (HVSD) 
  11280.     Handle to VSD. 
  11281.  
  11282.  ulFunc (ULONG) 
  11283.     Set to VSD_SET. 
  11284.  
  11285.  ulFlags (ULONG) 
  11286.     The following flags can be used with VSD_SET. 
  11287.  
  11288.       VSD_SETAUDIOATTRIBUTES 
  11289.          See VSD_SETAUDIOATTRIBUTES 
  11290.  
  11291.       VSD_SETCONNECTOR 
  11292.          See VSD_SETCONNECTOR 
  11293.  
  11294.       VSD_SETDATATYPE 
  11295.          See VSD_SETDATATYPE 
  11296.  
  11297.       VSD_SETMIXCONNECTIONS 
  11298.          See VSD_SETMIXCONNECTIONS 
  11299.  
  11300.       VSD_SETMIXCONTROL 
  11301.          See VSD_SETMIXCONTROL 
  11302.  
  11303.       VSD_SETMONITOR 
  11304.          See VSD_SETMONITOR 
  11305.  
  11306.       VSD_SETVOLUME 
  11307.          See VSD_SETVOLUME 
  11308.  
  11309.  pRequest (PVOID) 
  11310.     Pointer value varies according to the value of ulFlags. 
  11311.  
  11312.  rc (ULONG) 
  11313.     Error code indicating success or the type of failure: 
  11314.  
  11315.       VSDERR_INVALID_HVSD 
  11316.          The hvsd (VSD handle) is not valid.  Verify that the hvsd matches the 
  11317.          one provided on the VSD_OPEN. 
  11318.  
  11319.  
  11320. ΓòÉΓòÉΓòÉ <hidden> VSD_SET - Remarks ΓòÉΓòÉΓòÉ
  11321.  
  11322. This messages uses flags to specify what to set on the adapter. 
  11323.  
  11324.  
  11325. ΓòÉΓòÉΓòÉ <hidden> VSD_SET - Topics ΓòÉΓòÉΓòÉ
  11326.  
  11327. Select an item: 
  11328.  
  11329. Syntax
  11330. Parameters
  11331. Returns
  11332. Remarks
  11333. Glossary
  11334.  
  11335.  
  11336. ΓòÉΓòÉΓòÉ 15.22. VSD_SETAUDIOATTRIBUTES ΓòÉΓòÉΓòÉ
  11337.  
  11338.  
  11339. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES - Syntax ΓòÉΓòÉΓòÉ
  11340.  
  11341. This subcommand of the VSD_SET command sets the audio attribute settings. A 
  11342. valid length must be placed in the ulLength field of the 
  11343. VSD_AUDIOATTRIBUTES_PARMS structure. The audio setting to modify (such as 
  11344. treble, bass, and so on) must be placed in the ulFlags field of the 
  11345. VSD_AUDIOATTRIBUTES_PARMS structure with the actual corresponding setting in 
  11346. the ulValue field. The value should be between 0 and 100. The ulDelay indicates 
  11347. the length of time over which this effect should take place. 
  11348.  
  11349. This command is sent using VSDEntry as follows: 
  11350.  
  11351.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11352.  
  11353.  
  11354. hvsd
  11355.      HVSD                        hvsd      /*  Handle to VSD. */
  11356.  
  11357. ulFunc
  11358.      ULONG                       ulFunc    /*  VSD command. */
  11359.  
  11360. ulFlags
  11361.      ULONG                       ulFlags   /*  Flag for this command. */
  11362.  
  11363. pRequest
  11364.      PVSD_AUDIOATTRIBUTES_PARMS  pRequest  /*  Pointer to VSD_AUDIOATTRIBUTES_PARMS. */
  11365.  
  11366. returns
  11367.      ULONG                       rc        /*  Return codes. */
  11368.  
  11369.  
  11370. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES Parameter - hvsd ΓòÉΓòÉΓòÉ
  11371.  
  11372.  hvsd (HVSD) 
  11373.     Handle to a VSD. 
  11374.  
  11375.  
  11376. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11377.  
  11378.  ulFunc (ULONG) 
  11379.     Set to VSD_SET. 
  11380.  
  11381.  
  11382. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11383.  
  11384.  ulFlags (ULONG) 
  11385.     Set to VSD_SETAUDIOATTRIBUTES. 
  11386.  
  11387.  
  11388. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES Parameter - pRequest ΓòÉΓòÉΓòÉ
  11389.  
  11390.  pRequest (PVSD_AUDIOATTRIBUTES_PARMS) 
  11391.     Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure. 
  11392.  
  11393.  
  11394. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES Return Value - rc ΓòÉΓòÉΓòÉ
  11395.  
  11396.  rc (ULONG) 
  11397.     Error code indicating success or the type of failure: 
  11398.  
  11399.       VSDERR_SUCCESS 
  11400.          The command was successful. 
  11401.  
  11402.       VSDERR_MISSING_PARAMETER 
  11403.          One or more parameters are missing. 
  11404.  
  11405.  
  11406. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES - Parameters ΓòÉΓòÉΓòÉ
  11407.  
  11408.  hvsd (HVSD) 
  11409.     Handle to a VSD. 
  11410.  
  11411.  ulFunc (ULONG) 
  11412.     Set to VSD_SET. 
  11413.  
  11414.  ulFlags (ULONG) 
  11415.     Set to VSD_SETAUDIOATTRIBUTES. 
  11416.  
  11417.  pRequest (PVSD_AUDIOATTRIBUTES_PARMS) 
  11418.     Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure. 
  11419.  
  11420.  rc (ULONG) 
  11421.     Error code indicating success or the type of failure: 
  11422.  
  11423.       VSDERR_SUCCESS 
  11424.          The command was successful. 
  11425.  
  11426.       VSDERR_MISSING_PARAMETER 
  11427.          One or more parameters are missing. 
  11428.  
  11429.  
  11430. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES - Example Code ΓòÉΓòÉΓòÉ
  11431.  
  11432. The following code illustrates how to set audio attribute information. 
  11433.  
  11434. VSD_AUDIOATTRIBUTES_PARMS   vsdAttr;
  11435.  
  11436.     /* Prime the structure with necessary values */
  11437. vsdAttr.ulLength = sizeof (VSD_AUDIOATTRIBUTES_PARMS);
  11438. vsdAttr.ulFlags = VSD_BASS;
  11439. vsdAttr.ulValue = 100;
  11440.  
  11441.     /*---------------------------------------------
  11442.      * Ask the VSD to either set or query an audio
  11443.      * attribute.  The caller determines whether
  11444.      * to set or query via the command variable.
  11445.      *---------------------------------------------*/
  11446.  
  11447.      rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
  11448.                                 VSD_SET,
  11449.                                 VSD_SETAUDIOATTRIBUTES,
  11450.                                 (PVOID)&vsdAttr);
  11451.  
  11452.  
  11453. ΓòÉΓòÉΓòÉ <hidden> VSD_SETAUDIOATTRIBUTES - Topics ΓòÉΓòÉΓòÉ
  11454.  
  11455. Select an item: 
  11456.  
  11457. Syntax
  11458. Parameters
  11459. Returns
  11460. Example Code
  11461. Glossary
  11462.  
  11463.  
  11464. ΓòÉΓòÉΓòÉ 15.23. VSD_SETCONNECTOR ΓòÉΓòÉΓòÉ
  11465.  
  11466.  
  11467. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR - Syntax ΓòÉΓòÉΓòÉ
  11468.  
  11469. This subcommand of the VSD_SET command enables or disables a connector. (A 
  11470. connector can be a hardware or software connection on the device the VSD is 
  11471. controlling.) Note that enabling a connector can by default, disable another 
  11472. connector. For further information regarding connectors, refer to the 
  11473. MCI_CONNECTOR command in the OS/2 Multimedia Programming Reference. Additional 
  11474. connectors can be found in MCIOS2.H. 
  11475.  
  11476. This command is sent using VSDEntry as follows: 
  11477.  
  11478.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11479.  
  11480.  
  11481. hvsd
  11482.      HVSD                  hvsd      /*  Handle to VSD. */
  11483.  
  11484. ulFunc
  11485.      ULONG                 ulFunc    /*  VSD command. */
  11486.  
  11487. ulFlags
  11488.      ULONG                 ulFlags   /*  Flag indicating subcommand. */
  11489.  
  11490. pRequest
  11491.      PVSD_CONNECTOR_PARMS  pRequest  /*  Pointer to VSD_CONNECTOR_PARMS. */
  11492.  
  11493. returns
  11494.      ULONG                 rc        /*  Return codes. */
  11495.  
  11496.  
  11497. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR Parameter - hvsd ΓòÉΓòÉΓòÉ
  11498.  
  11499.  hvsd (HVSD) 
  11500.     Handle to a VSD. 
  11501.  
  11502.  
  11503. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11504.  
  11505.  ulFunc (ULONG) 
  11506.     Set to VSD_SET. 
  11507.  
  11508.  
  11509. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11510.  
  11511.  ulFlags (ULONG) 
  11512.     Set to VSD_SETCONNECTOR. 
  11513.  
  11514.  
  11515. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR Parameter - pRequest ΓòÉΓòÉΓòÉ
  11516.  
  11517.  pRequest (PVSD_CONNECTOR_PARMS) 
  11518.     A pointer to the VSD_CONNECTOR_PARMS structure. 
  11519.  
  11520.     The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) 
  11521.     must be indicated in the fEnabled field.  A valid connector must be placed 
  11522.     in the ulConn_Type field and a valid index in the ulIndex field. 
  11523.  
  11524.  
  11525. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR Return Value - rc ΓòÉΓòÉΓòÉ
  11526.  
  11527.  rc (ULONG) 
  11528.     Error code indicating success or the type of failure: 
  11529.  
  11530.       VSDERR_SUCCESS 
  11531.          The command was successful. 
  11532.  
  11533.       VSDERR_UNSUPPORTED_CONNECTOR 
  11534.          Connector setting is not supported. 
  11535.  
  11536.       VSDERR_INVALID_CONNECTOR 
  11537.          Connector setting is invalid. 
  11538.  
  11539.  
  11540. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR - Parameters ΓòÉΓòÉΓòÉ
  11541.  
  11542.  hvsd (HVSD) 
  11543.     Handle to a VSD. 
  11544.  
  11545.  ulFunc (ULONG) 
  11546.     Set to VSD_SET. 
  11547.  
  11548.  ulFlags (ULONG) 
  11549.     Set to VSD_SETCONNECTOR. 
  11550.  
  11551.  pRequest (PVSD_CONNECTOR_PARMS) 
  11552.     A pointer to the VSD_CONNECTOR_PARMS structure. 
  11553.  
  11554.     The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) 
  11555.     must be indicated in the fEnabled field.  A valid connector must be placed 
  11556.     in the ulConn_Type field and a valid index in the ulIndex field. 
  11557.  
  11558.  rc (ULONG) 
  11559.     Error code indicating success or the type of failure: 
  11560.  
  11561.       VSDERR_SUCCESS 
  11562.          The command was successful. 
  11563.  
  11564.       VSDERR_UNSUPPORTED_CONNECTOR 
  11565.          Connector setting is not supported. 
  11566.  
  11567.       VSDERR_INVALID_CONNECTOR 
  11568.          Connector setting is invalid. 
  11569.  
  11570.  
  11571. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR - Example Code ΓòÉΓòÉΓòÉ
  11572.  
  11573. The following code illustrates how to set the state of the connector. 
  11574.  
  11575.     HVSD                   hvsd;
  11576.     VSD_CONNECTOR_PARMS    vsdConn;
  11577.  
  11578.     vsdConn.ulConn_Type = pConnector->ulConnectorType;
  11579.     vsdConn.ulIndex = pConnector->ulConnectorIndex;
  11580.     vsdConn.fEnabled = VSD_DISABLE;
  11581.  
  11582.     /*--------------------------------------------------
  11583.      * Tell the VSD that we want to disable a connector.
  11584.      *--------------------------------------------------*/
  11585.     lError = pInstance->pfnNewVSD(hvsd,
  11586.                                   VSD_SET,
  11587.                                   VSD_SETCONNECTOR,
  11588.                                   (PVOID)&vsdConn);
  11589.  
  11590.  
  11591. ΓòÉΓòÉΓòÉ <hidden> VSD_SETCONNECTOR - Topics ΓòÉΓòÉΓòÉ
  11592.  
  11593. Select an item: 
  11594.  
  11595. Syntax
  11596. Parameters
  11597. Returns
  11598. Example Code
  11599. Glossary
  11600.  
  11601.  
  11602. ΓòÉΓòÉΓòÉ 15.24. VSD_SETDATATYPE ΓòÉΓòÉΓòÉ
  11603.  
  11604.  
  11605. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE - Syntax ΓòÉΓòÉΓòÉ
  11606.  
  11607. This subcommand of the VSD_SET command sets the current data type that the 
  11608. device is dealing with. 
  11609.  
  11610. This command is sent using VSDEntry as follows: 
  11611.  
  11612.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11613.  
  11614.  
  11615. hvsd
  11616.      HVSD                      hvsd      /*  Handle to VSD. */
  11617.  
  11618. ulFunc
  11619.      ULONG                     ulFunc    /*  VSD command. */
  11620.  
  11621. ulFlags
  11622.      ULONG                     ulFlags   /*  Flag indicating subcommand. */
  11623.  
  11624. pRequest
  11625.      PVSD_AUDIODATATYPE_PARMS  pRequest  /*  Input. */
  11626.  
  11627. returns
  11628.      ULONG                     rc        /*  Return codes. */
  11629.  
  11630.  
  11631. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE Parameter - hvsd ΓòÉΓòÉΓòÉ
  11632.  
  11633.  hvsd (HVSD) 
  11634.     Handle to a VSD. 
  11635.  
  11636.  
  11637. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11638.  
  11639.  ulFunc (ULONG) 
  11640.     Set to VSD_SET. 
  11641.  
  11642.  
  11643. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11644.  
  11645.  ulFlags (ULONG) 
  11646.     Set to VSD_SETDATATYPE. 
  11647.  
  11648.  
  11649. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE Parameter - pRequest ΓòÉΓòÉΓòÉ
  11650.  
  11651.  pRequest (PVSD_AUDIODATATYPE_PARMS) 
  11652.     Input.  Pointer to a VSD_AUDIODATATYPE_PARMS structure. 
  11653.  
  11654.     Note:  Every field in the VSD_AUDIODATATYPE_PARMS structure contains a 
  11655.            numeric value except for ulOperation. This field contains either 
  11656.            VSD_PRODUCE for recording or VSD_CONSUME for playback. The VSD is 
  11657.            responsible for filling in the ulBlockAlignment, ulDataSubType, and 
  11658.            ulAverageBytesPerSec fields in the VSD_AUDIODATATYPE_PARMS 
  11659.            structure. 
  11660.  
  11661.     The ulFlags field of the VSD_AUDIODATATYPE_PARMS structure contains a flag 
  11662.     for each field in the structure that can be set. Every field has a flag 
  11663.     except for the ulOperation field. The ulOperation field is valid for every 
  11664.     call. 
  11665.  
  11666.     The VSD_AUDIODATATYPE_PARMS structure must contain at least one of the 
  11667.     following flags: 
  11668.  
  11669.    o  VSD_MODE 
  11670.  
  11671.    o  VSD_CHANNELS 
  11672.  
  11673.    o  VSD_SAMPLESPERSEC 
  11674.  
  11675.    o  VSD_OPERATION 
  11676.  
  11677.    o  VSD_BITSPERSAMPLE 
  11678.  
  11679.  
  11680. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE Return Value - rc ΓòÉΓòÉΓòÉ
  11681.  
  11682.  rc (ULONG) 
  11683.     Error code indicating success or the type of failure: 
  11684.  
  11685.       VSDERR_SUCCESS 
  11686.          The command was successful. 
  11687.  
  11688.  
  11689. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE - Parameters ΓòÉΓòÉΓòÉ
  11690.  
  11691.  hvsd (HVSD) 
  11692.     Handle to a VSD. 
  11693.  
  11694.  ulFunc (ULONG) 
  11695.     Set to VSD_SET. 
  11696.  
  11697.  ulFlags (ULONG) 
  11698.     Set to VSD_SETDATATYPE. 
  11699.  
  11700.  pRequest (PVSD_AUDIODATATYPE_PARMS) 
  11701.     Input.  Pointer to a VSD_AUDIODATATYPE_PARMS structure. 
  11702.  
  11703.     Note:  Every field in the VSD_AUDIODATATYPE_PARMS structure contains a 
  11704.            numeric value except for ulOperation. This field contains either 
  11705.            VSD_PRODUCE for recording or VSD_CONSUME for playback. The VSD is 
  11706.            responsible for filling in the ulBlockAlignment, ulDataSubType, and 
  11707.            ulAverageBytesPerSec fields in the VSD_AUDIODATATYPE_PARMS 
  11708.            structure. 
  11709.  
  11710.     The ulFlags field of the VSD_AUDIODATATYPE_PARMS structure contains a flag 
  11711.     for each field in the structure that can be set. Every field has a flag 
  11712.     except for the ulOperation field. The ulOperation field is valid for every 
  11713.     call. 
  11714.  
  11715.     The VSD_AUDIODATATYPE_PARMS structure must contain at least one of the 
  11716.     following flags: 
  11717.  
  11718.    o  VSD_MODE 
  11719.  
  11720.    o  VSD_CHANNELS 
  11721.  
  11722.    o  VSD_SAMPLESPERSEC 
  11723.  
  11724.    o  VSD_OPERATION 
  11725.  
  11726.    o  VSD_BITSPERSAMPLE 
  11727.  
  11728.  
  11729.  rc (ULONG) 
  11730.     Error code indicating success or the type of failure: 
  11731.  
  11732.       VSDERR_SUCCESS 
  11733.          The command was successful. 
  11734.  
  11735.  
  11736. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE - Example Code ΓòÉΓòÉΓòÉ
  11737.  
  11738. The following code illustrates how to set the data type, sampling rate, 
  11739. channels, and bitspersample for an audio VSD. 
  11740.  
  11741. HVSD                     hvsd;
  11742. VSD_AUDIODATATYPE_PARMS  AudioDatatype;
  11743. PMMAUDIOHEADER           pmmaudioheader;
  11744. AudioDatatype.ulDataType = pmmaudioheader->mmXWAVHeader.WAVEHeader.usFormatTag;
  11745. AudioDatatype.ulBitsPerSample = pmmaudioheader->mmXWAVHeader.WAVEHeader.usBitsPerSample;
  11746. AudioDatatype.ulSamplingRate = pmmaudioheader->mmXWAVHeader.WAVEHeader.usSamplesPerSec;
  11747. AudioDatatype.ulChannels = pmmaudioheader->mmXWAVHeader.WAVEHeader.usChannels;
  11748. AudioDatatype.ulOperation = VSD_PLAY;
  11749. AudioDatatype.ulFlags = VSD_MODE|VSD_CHANNELS|VSD_SAMPLESPERSEC|
  11750.                         VSD_OPERATION|VSD_BITSPERSAMPLE;
  11751.  
  11752.    rc = pInstance->pfnNewVSD(hvsd,
  11753.                              VSD_SET,
  11754.                              VSD_SETDATATYPE,
  11755.                     (PVOID)&AudioDatatype);
  11756.    if(rc)
  11757.      {
  11758.      return(rc)
  11759.      }
  11760.  
  11761.  
  11762. ΓòÉΓòÉΓòÉ <hidden> VSD_SETDATATYPE - Topics ΓòÉΓòÉΓòÉ
  11763.  
  11764. Select an item: 
  11765.  
  11766. Syntax
  11767. Parameters
  11768. Returns
  11769. Example Code
  11770. Glossary
  11771.  
  11772.  
  11773. ΓòÉΓòÉΓòÉ 15.25. VSD_SETMIXCONNECTIONS ΓòÉΓòÉΓòÉ
  11774.  
  11775.  
  11776. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS - Syntax ΓòÉΓòÉΓòÉ
  11777.  
  11778. This subcommand of the VSD_SET command routes the audio output of a connector 
  11779. to a particular output circuitry (that is, pass thru, internal mixer circuitry, 
  11780. and so on). For further information about VSD mixer support and functions, see 
  11781. Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction 
  11782.  
  11783. This command is sent using VSDEntry as follows: 
  11784.  
  11785.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11786.  
  11787.  
  11788. hvsd
  11789.      HVSD              hvsd      /*  Handle to VSD. */
  11790.  
  11791. ulFunc
  11792.      ULONG             ulFunc    /*  VSD command. */
  11793.  
  11794. ulFlags
  11795.      ULONG             ulFlags   /*  Flag indicating subcommand. */
  11796.  
  11797. pRequest
  11798.      PLINECONNECTIONS  pRequest  /*  Pointer LINECONNECTIONS. */
  11799.  
  11800. returns
  11801.      ULONG             rc        /*  Return codes. */
  11802.  
  11803.  
  11804. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS Parameter - hvsd ΓòÉΓòÉΓòÉ
  11805.  
  11806.  hvsd (HVSD) 
  11807.     Handle to a VSD. 
  11808.  
  11809.  
  11810. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11811.  
  11812.  ulFunc (ULONG) 
  11813.     Set to VSD_SET. 
  11814.  
  11815.  
  11816. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11817.  
  11818.  ulFlags (ULONG) 
  11819.     Set to VSD_SETMIXCONNECTIONS. 
  11820.  
  11821.  
  11822. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS Parameter - pRequest ΓòÉΓòÉΓòÉ
  11823.  
  11824.  pRequest (PLINECONNECTIONS) 
  11825.     A pointer to the LINECONNECTIONS structure. 
  11826.  
  11827.     The caller must fill in the ulLine and the ulLine fields of the 
  11828.     LINECONNECTIONS structure. 
  11829.  
  11830.  
  11831. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS Return Value - rc ΓòÉΓòÉΓòÉ
  11832.  
  11833.  rc (ULONG) 
  11834.     Error code indicating success or the type of failure: 
  11835.  
  11836.       VSDERR_SUCCESS 
  11837.          The command was successful. 
  11838.  
  11839.       VSDERR_INVALID_SOURCE 
  11840.          Invalid source. 
  11841.  
  11842.       VSDERR_INVALID_SINK 
  11843.          Invalid sink. 
  11844.  
  11845.       VSDERR_INVALID_CONNECTION 
  11846.          Invalid connection. 
  11847.  
  11848.  
  11849. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS - Parameters ΓòÉΓòÉΓòÉ
  11850.  
  11851.  hvsd (HVSD) 
  11852.     Handle to a VSD. 
  11853.  
  11854.  ulFunc (ULONG) 
  11855.     Set to VSD_SET. 
  11856.  
  11857.  ulFlags (ULONG) 
  11858.     Set to VSD_SETMIXCONNECTIONS. 
  11859.  
  11860.  pRequest (PLINECONNECTIONS) 
  11861.     A pointer to the LINECONNECTIONS structure. 
  11862.  
  11863.     The caller must fill in the ulLine and the ulLine fields of the 
  11864.     LINECONNECTIONS structure. 
  11865.  
  11866.  rc (ULONG) 
  11867.     Error code indicating success or the type of failure: 
  11868.  
  11869.       VSDERR_SUCCESS 
  11870.          The command was successful. 
  11871.  
  11872.       VSDERR_INVALID_SOURCE 
  11873.          Invalid source. 
  11874.  
  11875.       VSDERR_INVALID_SINK 
  11876.          Invalid sink. 
  11877.  
  11878.       VSDERR_INVALID_CONNECTION 
  11879.          Invalid connection. 
  11880.  
  11881.  
  11882. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS - Example Code ΓòÉΓòÉΓòÉ
  11883.  
  11884. The following code illustrates how to route the output of a connector to the 
  11885. internal mixer circuitry. 
  11886.  
  11887.  
  11888.   LINECONNECTIONS   mixinfo;
  11889.  
  11890.   mixinfo.ulLine = SOURCE_SYNTHESIZER;
  11891.   mixinfo.ulConnection = SINK_SPEAKER;
  11892.   rc = pInstance->((HVSD)pInstance->hvsd,
  11893.                    VSD_SET,
  11894.                    VSD_SETMIXCONNECTIONS,
  11895.                    (PVOID)&mixinfo);
  11896.  
  11897.   return(rc);
  11898.  
  11899.  
  11900. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONNECTIONS - Topics ΓòÉΓòÉΓòÉ
  11901.  
  11902. Select an item: 
  11903.  
  11904. Syntax
  11905. Parameters
  11906. Returns
  11907. Example Code
  11908. Glossary
  11909.  
  11910.  
  11911. ΓòÉΓòÉΓòÉ 15.26. VSD_SETMIXCONTROL ΓòÉΓòÉΓòÉ
  11912.  
  11913.  
  11914. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL - Syntax ΓòÉΓòÉΓòÉ
  11915.  
  11916. This subcommand of the VSD_SET command enables an application to set the 
  11917. current state of a particular line. For further information about VSD mixer 
  11918. support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer 
  11919. IOCtl Functions Introduction 
  11920.  
  11921. This command is sent using VSDEntry as follows: 
  11922.  
  11923.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  11924.  
  11925.  
  11926. hvsd
  11927.      HVSD           hvsd      /*  Handle to VSD. */
  11928.  
  11929. ulFunc
  11930.      ULONG          ulFunc    /*  VSD command. */
  11931.  
  11932. ulFlags
  11933.      ULONG          ulFlags   /*  Flag indicating subcommand. */
  11934.  
  11935. pRequest
  11936.      PMIXERCONTROL  pRequest  /*  Pointer to MIXERCONTROL. */
  11937.  
  11938. returns
  11939.      ULONG          rc        /*  Return codes. */
  11940.  
  11941.  
  11942. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL Parameter - hvsd ΓòÉΓòÉΓòÉ
  11943.  
  11944.  hvsd (HVSD) 
  11945.     Handle to a VSD. 
  11946.  
  11947.  
  11948. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL Parameter - ulFunc ΓòÉΓòÉΓòÉ
  11949.  
  11950.  ulFunc (ULONG) 
  11951.     Set to VSD_SET. 
  11952.  
  11953.  
  11954. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL Parameter - ulFlags ΓòÉΓòÉΓòÉ
  11955.  
  11956.  ulFlags (ULONG) 
  11957.     Set to VSD_SETMIXCONTROL. 
  11958.  
  11959.  
  11960. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL Parameter - pRequest ΓòÉΓòÉΓòÉ
  11961.  
  11962.  pRequest (PMIXERCONTROL) 
  11963.     A pointer to the MIXERCONTROL structure. 
  11964.  
  11965.     The ulControl field of the MIXERCONTROL structure must be filled in with 
  11966.     the desired setting.  For stereo controls, the high-order word of this 
  11967.     field contains the left channel setting and the low-order word contains the 
  11968.     right channel setting. A value of 0xFFFF represents full intensity and a 
  11969.     value of 0x0000 is full cutout. The ulLine field must also be filled in. 
  11970.  
  11971.  
  11972. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL Return Value - rc ΓòÉΓòÉΓòÉ
  11973.  
  11974.  rc (ULONG) 
  11975.     Error code indicating success or the type of failure: 
  11976.  
  11977.       VSDERR_MISSING_PARAMETER 
  11978.          One or more parameters are missing. 
  11979.  
  11980.       VSDERR_INVALID_SOURCE 
  11981.          Invalid source. 
  11982.  
  11983.       VSDERR_INVALID_SINK 
  11984.          Invalid sink. 
  11985.  
  11986.       VSDERR_INVALID_CONNECTION 
  11987.          Invalid connection. 
  11988.  
  11989.  
  11990. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL - Parameters ΓòÉΓòÉΓòÉ
  11991.  
  11992.  hvsd (HVSD) 
  11993.     Handle to a VSD. 
  11994.  
  11995.  ulFunc (ULONG) 
  11996.     Set to VSD_SET. 
  11997.  
  11998.  ulFlags (ULONG) 
  11999.     Set to VSD_SETMIXCONTROL. 
  12000.  
  12001.  pRequest (PMIXERCONTROL) 
  12002.     A pointer to the MIXERCONTROL structure. 
  12003.  
  12004.     The ulControl field of the MIXERCONTROL structure must be filled in with 
  12005.     the desired setting.  For stereo controls, the high-order word of this 
  12006.     field contains the left channel setting and the low-order word contains the 
  12007.     right channel setting. A value of 0xFFFF represents full intensity and a 
  12008.     value of 0x0000 is full cutout. The ulLine field must also be filled in. 
  12009.  
  12010.  rc (ULONG) 
  12011.     Error code indicating success or the type of failure: 
  12012.  
  12013.       VSDERR_MISSING_PARAMETER 
  12014.          One or more parameters are missing. 
  12015.  
  12016.       VSDERR_INVALID_SOURCE 
  12017.          Invalid source. 
  12018.  
  12019.       VSDERR_INVALID_SINK 
  12020.          Invalid sink. 
  12021.  
  12022.       VSDERR_INVALID_CONNECTION 
  12023.          Invalid connection. 
  12024.  
  12025.  
  12026. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL - Example Code ΓòÉΓòÉΓòÉ
  12027.  
  12028. The following code illustrates how to query the settings of an audio attributes 
  12029. for a particular connector. 
  12030.  
  12031.  
  12032.   MIXERCONTROL   MixerControl;
  12033.   USHORT         usBass;
  12034.  
  12035.  
  12036.   MixerControl.ulControl = MIX_SUPPORT_VOLUME;
  12037.   MixerControl.ulLine = SINK_LINE_OUT;
  12038.   MixerControl.ulSetting = 100;
  12039.  
  12040.   lError = pInstance->((HVSD)pInstance->hvsd,
  12041.                       VSD_SET,
  12042.                       VSD_SETMIXCONTROL,
  12043.                       (PVOID)&MixerControl);
  12044.  
  12045.    return(lError);
  12046.  
  12047.  
  12048. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMIXCONTROL - Topics ΓòÉΓòÉΓòÉ
  12049.  
  12050. Select an item: 
  12051.  
  12052. Syntax
  12053. Parameters
  12054. Returns
  12055. Example Code
  12056. Glossary
  12057.  
  12058.  
  12059. ΓòÉΓòÉΓòÉ 15.27. VSD_SETMONITOR ΓòÉΓòÉΓòÉ
  12060.  
  12061.  
  12062. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR - Syntax ΓòÉΓòÉΓòÉ
  12063.  
  12064. This subcommand of the VSD_SET command enables (MCI_TRUE) or disables 
  12065. (MCI_FALSE) the audio monitor feature of the device. 
  12066.  
  12067. This command is sent using VSDEntry as follows: 
  12068.  
  12069.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  12070.  
  12071.  
  12072. hvsd
  12073.      HVSD    hvsd      /*  Handle to VSD. */
  12074.  
  12075. ulFunc
  12076.      ULONG   ulFunc    /*  VSD command. */
  12077.  
  12078. ulFlags
  12079.      ULONG   ulFlags   /*  Flag indicating subcommand. */
  12080.  
  12081. pRequest
  12082.      PULONG  pRequest  /*  Input. */
  12083.  
  12084. returns
  12085.      ULONG   rc        /*  Return codes. */
  12086.  
  12087.  
  12088. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR Parameter - hvsd ΓòÉΓòÉΓòÉ
  12089.  
  12090.  hvsd (HVSD) 
  12091.     Handle to a VSD. 
  12092.  
  12093.  
  12094. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR Parameter - ulFunc ΓòÉΓòÉΓòÉ
  12095.  
  12096.  ulFunc (ULONG) 
  12097.     Set to VSD_SET. 
  12098.  
  12099.  
  12100. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR Parameter - ulFlags ΓòÉΓòÉΓòÉ
  12101.  
  12102.  ulFlags (ULONG) 
  12103.     Set to VSD_SETMONITOR. 
  12104.  
  12105.  
  12106. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR Parameter - pRequest ΓòÉΓòÉΓòÉ
  12107.  
  12108.  pRequest (PULONG) 
  12109.     Input. Set to MCI_TRUE or MCI_FALSE. 
  12110.  
  12111.  
  12112. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR Return Value - rc ΓòÉΓòÉΓòÉ
  12113.  
  12114.  rc (ULONG) 
  12115.     Error code indicating success. 
  12116.  
  12117.       VSDERR_SUCCESS 
  12118.          The command was successful. 
  12119.  
  12120.  
  12121. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR - Parameters ΓòÉΓòÉΓòÉ
  12122.  
  12123.  hvsd (HVSD) 
  12124.     Handle to a VSD. 
  12125.  
  12126.  ulFunc (ULONG) 
  12127.     Set to VSD_SET. 
  12128.  
  12129.  ulFlags (ULONG) 
  12130.     Set to VSD_SETMONITOR. 
  12131.  
  12132.  pRequest (PULONG) 
  12133.     Input. Set to MCI_TRUE or MCI_FALSE. 
  12134.  
  12135.  rc (ULONG) 
  12136.     Error code indicating success. 
  12137.  
  12138.       VSDERR_SUCCESS 
  12139.          The command was successful. 
  12140.  
  12141.  
  12142. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR - Example Code ΓòÉΓòÉΓòÉ
  12143.  
  12144. The following code illustrates how to set the state of the VSD monitor. 
  12145.  
  12146.  
  12147. ULONG    ulSetOn;
  12148.  
  12149.    ulSetOn = MCI_TRUE;
  12150.  
  12151.    /* Tell the VSD to change monitor status */
  12152.  
  12153.    lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
  12154.                            VSD_SET,
  12155.                            VSD_SETMONITOR,
  12156.                            (PVOID)lSetOn);
  12157.  
  12158.  
  12159. ΓòÉΓòÉΓòÉ <hidden> VSD_SETMONITOR - Topics ΓòÉΓòÉΓòÉ
  12160.  
  12161. Select an item: 
  12162.  
  12163. Syntax
  12164. Parameters
  12165. Returns
  12166. Example Code
  12167. Glossary
  12168.  
  12169.  
  12170. ΓòÉΓòÉΓòÉ 15.28. VSD_SETVOLUME ΓòÉΓòÉΓòÉ
  12171.  
  12172.  
  12173. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME - Syntax ΓòÉΓòÉΓòÉ
  12174.  
  12175. This subcommand of the VSD_SET command sets the volume level as a percentage (0 
  12176. - 100). If the value is not one of the supported volume levels, it is rounded 
  12177. up to the nearest supported level. The ulFlags field indicates which fields are 
  12178. to be used. 
  12179.  
  12180. This command is sent using VSDEntry as follows: 
  12181.  
  12182.     VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
  12183.  
  12184.  
  12185. hvsd
  12186.      HVSD               hvsd      /*  Handle to VSD. */
  12187.  
  12188. ulFunc
  12189.      ULONG              ulFunc    /*  VSD command. */
  12190.  
  12191. ulFlags
  12192.      ULONG              ulFlags   /*  Flag for this command. */
  12193.  
  12194. pRequest
  12195.      PVSD_VOLUME_PARMS  pRequest  /*  Pointer to VSD_VOLUME_PARMS. */
  12196.  
  12197. returns
  12198.      ULONG              rc        /*  Return codes. */
  12199.  
  12200.  
  12201. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME Parameter - hvsd ΓòÉΓòÉΓòÉ
  12202.  
  12203.  hvsd (HVSD) 
  12204.     Handle to a VSD. 
  12205.  
  12206.  
  12207. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME Parameter - ulFunc ΓòÉΓòÉΓòÉ
  12208.  
  12209.  ulFunc (ULONG) 
  12210.     Set to VSD_SET. 
  12211.  
  12212.  
  12213. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME Parameter - ulFlags ΓòÉΓòÉΓòÉ
  12214.  
  12215.  ulFlags (ULONG) 
  12216.     Set to VSD_SETVOLUME. 
  12217.  
  12218.  
  12219. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME Parameter - pRequest ΓòÉΓòÉΓòÉ
  12220.  
  12221.  pRequest (PVSD_VOLUME_PARMS) 
  12222.     Pointer to the VSD_VOLUME_PARMS structure. 
  12223.  
  12224.     The caller must fill in the ulVolume field if VSD_VOLUME is specified. The 
  12225.     caller must fill in the ulMasterAudio field if VSD_MASTERVOLUME is 
  12226.     specified. The caller must fill in the fMute field with a boolean if 
  12227.     VSD_MUTE is specified. TRUE mutes the device; FALSE unmutes the device. 
  12228.  
  12229.  
  12230. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME Return Value - rc ΓòÉΓòÉΓòÉ
  12231.  
  12232.  rc (ULONG) 
  12233.     Error codes indicating success or the type of failure: 
  12234.  
  12235.       VSDERR_SUCCESS 
  12236.          The command was successful. 
  12237.  
  12238.       VSDERR_VOL_OUT_OF_RANGE 
  12239.          Invalid volume level. 
  12240.  
  12241.  
  12242. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME - Parameters ΓòÉΓòÉΓòÉ
  12243.  
  12244.  hvsd (HVSD) 
  12245.     Handle to a VSD. 
  12246.  
  12247.  ulFunc (ULONG) 
  12248.     Set to VSD_SET. 
  12249.  
  12250.  ulFlags (ULONG) 
  12251.     Set to VSD_SETVOLUME. 
  12252.  
  12253.  pRequest (PVSD_VOLUME_PARMS) 
  12254.     Pointer to the VSD_VOLUME_PARMS structure. 
  12255.  
  12256.     The caller must fill in the ulVolume field if VSD_VOLUME is specified. The 
  12257.     caller must fill in the ulMasterAudio field if VSD_MASTERVOLUME is 
  12258.     specified. The caller must fill in the fMute field with a boolean if 
  12259.     VSD_MUTE is specified. TRUE mutes the device; FALSE unmutes the device. 
  12260.  
  12261.  rc (ULONG) 
  12262.     Error codes indicating success or the type of failure: 
  12263.  
  12264.       VSDERR_SUCCESS 
  12265.          The command was successful. 
  12266.  
  12267.       VSDERR_VOL_OUT_OF_RANGE 
  12268.          Invalid volume level. 
  12269.  
  12270.  
  12271. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME - Example Code ΓòÉΓòÉΓòÉ
  12272.  
  12273. The following code illustrates how to set the volume on an audio VSD. 
  12274.  
  12275. VSD_VOLUME_PARMS   vsdVol;
  12276.    vsdVol.ulVolume = pInstance->ulVolume;
  12277.    vsdVol.ulMasterAudio  = pInstance->ulMasterVolume;
  12278.    vsdVol.fMute = pInstance->fMute;
  12279.    vsdVol.ulVectoredVolume  = pInstance->ulTime;
  12280.    vsdVol.ulFlags  = VSD_VOLUME | VSD_MASTERVOLUME;
  12281.  
  12282.  
  12283.    lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
  12284.                            VSD_SET,
  12285.                            VSD_SETVOLUME,
  12286.                            (PVOID)&vsdVol);
  12287.  
  12288.  
  12289. ΓòÉΓòÉΓòÉ <hidden> VSD_SETVOLUME - Topics ΓòÉΓòÉΓòÉ
  12290.  
  12291. Select an item: 
  12292.  
  12293. Syntax
  12294. Parameters
  12295. Returns
  12296. Example Code
  12297. Glossary
  12298.  
  12299.  
  12300. ΓòÉΓòÉΓòÉ 16. IOCtl Functions ΓòÉΓòÉΓòÉ
  12301.  
  12302. OS/2 device drivers are used to access the I/O hardware.  The IOCtl functions 
  12303. provide a method for an application, or subsystem, to send device-specific 
  12304. control commands to a physical device driver. These IOCtls are subfunctions 
  12305. that are issued through the DosDevIOCtl function request.  The DosDevIOCtl 
  12306. request can be used only by OS/2 applications; the INT 21h IOCtl request can be 
  12307. used only by DOS applications. 
  12308.  
  12309. This reference describes audio (category 80h) and video (category 140h) IOCtls. 
  12310.  
  12311.  
  12312. ΓòÉΓòÉΓòÉ 16.1. Audio IOCtl Functions ΓòÉΓòÉΓòÉ
  12313.  
  12314. Audio device drivers are controlled through input/output control (IOCtl) calls, 
  12315. which are used to instruct the audio device driver on the type of audio to use 
  12316. (for example, MIDI, 8- or 16-bit PCM, and so forth) and which operation to 
  12317. perform (for example, record, play, start, or pause).  During audio playback, 
  12318. data is written to an audio device driver using standard file I/O functions. 
  12319. MIDI data is written in blocks containing timing information that enables the 
  12320. device driver to synchronize the data with its internal time base.  Sampled 
  12321. audio data is output, sample-by-sample, at the specified sample rate. 
  12322. Therefore, data written to the device driver is queued until the correct time 
  12323. for it to be processed. 
  12324.  
  12325. It is in the best interest of OS/2, MMPM/2, and the application that the audio 
  12326. IOCtls be used only for setting audio attributes and not for passing audio data 
  12327. from an MMPM/2 application to the PDD.  The preferred method of passing audio 
  12328. data is for the application to issue play and record commands using the media 
  12329. control interface.  A logical media device is called, which in turn calls the 
  12330. stream programming interface.  Data transfer takes place between a stream 
  12331. handler device driver and the PDD by means of the inter-device driver 
  12332. communications (IDC) interface. 
  12333.  
  12334. Using the IDC method of data transfer relieves applications from the burden of 
  12335. allocating data buffer memory and monitoring the flow of data.  The messages 
  12336. that comprise the IDC interface can be found in DDCMD Messages and SHD 
  12337. Messages. 
  12338.  
  12339. Audio IOCtl parameters are passed to and from a device driver in a data area 
  12340. containing one or more 16-bit USHORT parameters.  The first parameter always is 
  12341. the Request ID.  Subsequent USHORTs pass data to, or receive data from, the 
  12342. device driver. The generic IOCtl interface uses two data-passing parameters, 
  12343. the parameter packet and the data packet.  For audio IOCtls, the data packet 
  12344. parameter is a pointer to a data structure containing the data necessary to 
  12345. perform the command.  The parameter packet is not used. 
  12346.  
  12347. The audio IOCtls listed in the following table are category 80h (user defined): 
  12348.  
  12349. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12350. ΓöéFunction No.  ΓöéFunction             ΓöéDescription                 Γöé
  12351. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12352. Γöé40h           ΓöéAUDIO_INIT           ΓöéInitialize audio device     Γöé
  12353. Γöé              Γöé                     Γöédriver.                     Γöé
  12354. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12355. Γöé41h           ΓöéAUDIO_STATUS         ΓöéObtain status of audio      Γöé
  12356. Γöé              Γöé                     Γöéhardware.                   Γöé
  12357. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12358. Γöé42h           ΓöéAUDIO_CONTROL        ΓöéControl audio adapter.      Γöé
  12359. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12360. Γöé43h           ΓöéAUDIO_BUFFER         ΓöéDetermine buffer status.    Γöé
  12361. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12362. Γöé44h           ΓöéAUDIO_LOAD           ΓöéLoad DSP code.              Γöé
  12363. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12364. Γöé45h           ΓöéAUDIO_WAIT           ΓöéSuspend program operation.  Γöé
  12365. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12366. Γöé46h           ΓöéAUDIO_HPI            ΓöéAccess high-performance     Γöé
  12367. Γöé              Γöé                     Γöéinterface.                  Γöé
  12368. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12369. Γöé47h           ΓöéAUDIO_UPDATE         ΓöéUpdate buffer information.  Γöé
  12370. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12371. Γöé48H           ΓöéAUDIO_CAPABILITY     ΓöéDetermine supported audio   Γöé
  12372. Γöé              Γöé                     Γöésettings.                   Γöé
  12373. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12374. Γöé52H           Γöé                     Γöéreserved                    Γöé
  12375. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12376. Γöé53H           Γöé                     Γöéreserved                    Γöé
  12377. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12378. Γöé54H           Γöé                     Γöéreserved                    Γöé
  12379. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12380. Γöé55H           Γöé                     Γöéreserved                    Γöé
  12381. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12382. Γöé60H           ΓöéMIX_GETCONNECTIONS   ΓöéDetermine if line is        Γöé
  12383. Γöé              Γöé                     Γöéenabled.                    Γöé
  12384. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12385. Γöé61H           ΓöéMIX_SETCONNECTIONS   ΓöéEnable a line to the        Γöé
  12386. Γöé              Γöé                     ΓöéRecord/monitor circuitry.   Γöé
  12387. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12388. Γöé62H           ΓöéMIX_GETLINEINFO      ΓöéDetermine line capabilities.Γöé
  12389. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12390. Γöé63H           ΓöéMIX_GETCONTROL       ΓöéGet current state of a line.Γöé
  12391. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12392. Γöé64H           ΓöéMIX_SETCONTROL       ΓöéSet current state of a line.Γöé
  12393. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12394.  
  12395. Note:  This chapter documents AudioDD IOCTLs that could be sent to MMPM/2 
  12396.        device drivers. 
  12397.  
  12398. To support MMPM/2 the following IOCTLs are necessary: 
  12399.  
  12400.  AUDIO_INIT Required for all MMPM/2 device drivers. 
  12401.  AUDIO_CONTROL Required for all MMPM/2 device drivers. 
  12402.  AUDIO_LOAD Optional, used to load DSP tasks. 
  12403.  
  12404.  
  12405.  MIXDM_GETCONNECTIONS Enhanced mixing IOCTLs (new) 
  12406.  MIXDM_SETCONNECTIONS 
  12407.  MIXDM_GETLINEONFO 
  12408.  MIXDM_GETCONTROL 
  12409.  MIXDM_SETCONTROL 
  12410.  
  12411.  
  12412.  AUDIO_CAPABILITY Used to simplify install (new) 
  12413.  
  12414.  The remaining IOCtls documented in this chapter are provided as reference for 
  12415.  device driver writers who wish to support AudioDD knowledgeable applications. 
  12416.  These applications include IBM Linkway Live and early versions of IBM AVC 
  12417.  (Audio Visual Connection). 
  12418.  
  12419.  
  12420. ΓòÉΓòÉΓòÉ 16.1.1. AUDIO_INIT (40h) - Initialize Audio Device Driver ΓòÉΓòÉΓòÉ
  12421.  
  12422.  
  12423. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Description ΓòÉΓòÉΓòÉ
  12424.  
  12425. This IOCtl enables an application to tell the audio device driver which 
  12426. operation and audio type to use.  It does this by initializing the appropriate 
  12427. MCI_AUDIO_INIT fields to the desired values and calling AUDIO_INIT. 
  12428.  
  12429.  
  12430. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12431.  
  12432. Not used.  The packet pointer must be NULL. 
  12433.  
  12434.  
  12435. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12436.  
  12437.  Pointer to structure 
  12438.       The data packet parameter is a pointer to the following data structure. 
  12439.  
  12440.             typedef struct _init {
  12441.             LONG           lSRate;
  12442.             LONG           lBitsPerSRate;
  12443.             LONG           lBsize;
  12444.             SHORT          sMode;
  12445.             SHORT          sChannels;
  12446.             LONG           lResolution;
  12447.             CHAR           abLoadPath[LOAD_PATH];
  12448.             ULONG          ulFlags;
  12449.             ULONG          ulOperation;
  12450.             SHORT          sReturnCode;
  12451.             SHORT          sSlotNumber;
  12452.             SHORT          sDeviceID;
  12453.             VOID FAR      *pvReserved;
  12454.             ULONG          ulVersionLevel;
  12455.              } MCI_AUDIO_INIT;
  12456.  
  12457.             typedef MCI_AUDIO_INIT FAR *LPMCI_AUDIO_INIT;
  12458.  
  12459.  
  12460. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12461.  
  12462. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12463. ΓöéField                    C Datatype          Γöé
  12464. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12465. ΓöéPointer to structure     LPMCI_AUDIO_INIT    Γöé
  12466. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12467.  
  12468.  
  12469. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Returns ΓòÉΓòÉΓòÉ
  12470.  
  12471. If the audio device driver can satisfy the request as specified, it returns 0. 
  12472. If the request cannot be performed as specified, the audio device driver fills 
  12473. in the MCI_AUDIO_INIT fields with the supported values that most closely 
  12474. approximate the values specified by the user, sets the BESTFIT_PROVIDED bit in 
  12475. ulFlags, and returns 0 to the application. 
  12476.  
  12477. Refer to the OS/2 Control Program Guide and Reference for more information on 
  12478. the return code for DosDevIOCtl. 
  12479.  
  12480.  
  12481. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - Remarks ΓòÉΓòÉΓòÉ
  12482.  
  12483. Before calling AUDIO_INIT, the application must have opened the audio device 
  12484. driver.  If the application specifies invalid data in the MCI_AUDIO_INIT, the 
  12485. device driver probably will not return an error.  Instead, one of its supported 
  12486. modes will return with the BESTFIT_PROVIDED bit set in ulFlags of the 
  12487. MCI_AUDIO_INIT structure and the fields filled in.  If, after examination of 
  12488. the returned values, the application is satisfied with the approximation, it 
  12489. can continue.  Otherwise, it should use other values and reissue AUDIO_INIT. 
  12490.  
  12491. Some audio devices are capable of performing more than one audio operation at a 
  12492. time.  Therefore, the device driver for such devices can permit more than one 
  12493. application to use the device at one time by allowing multiple Opens to be 
  12494. active.  If the device can perform the operations requested by two applications 
  12495. at the same time, it will appear to be two different audio devices.  If the 
  12496. device cannot perform a requested operation because that operation is being 
  12497. performed for another application, it will return the OVERLOADED flag set in 
  12498. the sReturnCode field. 
  12499.  
  12500. Note:  It is critical that the application check the returned ulFlags and 
  12501.        sReturnCode fields before proceeding. 
  12502.  
  12503.  If an application is going to perform audio simultaneously on more than one 
  12504.  track, the application should perform OPENs and AUDIO_INITs for both devices 
  12505.  before issuing AUDIO_START for either device.  This enables the device to 
  12506.  select the correct DSP load module to support both tasks, when possible. 
  12507.  
  12508.  
  12509. ΓòÉΓòÉΓòÉ <hidden> AUDIO_INIT (40h) - ΓòÉΓòÉΓòÉ
  12510.  
  12511. Category: 
  12512.    AUDIO_IOCTL_CAT (80h) 
  12513.  Function: 
  12514.    AUDIO_INIT (40h) 
  12515.  Description: 
  12516.    Initialize Audio Device Driver 
  12517.  
  12518.  Select an item: 
  12519.  
  12520.   Description
  12521.   Parameter Packet Format
  12522.   Data Packet Format
  12523.   Returns
  12524.   Remarks
  12525.  
  12526.  
  12527. ΓòÉΓòÉΓòÉ 16.1.2. AUDIO_STATUS (41h) - Obtain Status of Audio Hardware ΓòÉΓòÉΓòÉ
  12528.  
  12529.  
  12530. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - Description ΓòÉΓòÉΓòÉ
  12531.  
  12532. This IOCtl is not required for MMPM/2. It is part of the AudioDD specification 
  12533. and is provided for reference. 
  12534.  
  12535. This IOCtl enables an application to obtain the current state of the audio 
  12536. hardware for a particular track. 
  12537.  
  12538.  
  12539. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12540.  
  12541. Not used.  The packet pointer must be NULL. 
  12542.  
  12543.  
  12544. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12545.  
  12546.  Pointer to structure 
  12547.       The data packet parameter is a pointer to the following data structure. 
  12548.  
  12549.             typedef struct _stat {
  12550.             LONG                   lSRate;
  12551.             LONG                   lBitsPerSRate;
  12552.             LONG                   lBsize;
  12553.             SHORT                  sMode;
  12554.             SHORT                  sChannels;
  12555.             ULONG                  ulFlags;
  12556.             ULONG                  ulOperation;
  12557.             MCI_AUDIO_CHANGE       rAudioChange;
  12558.              } MCI_AUDIO_STATUS;
  12559.  
  12560.             typedef MCI_AUDIO_STATUS FAR *LPMCI_AUDIO_STATUS;
  12561.  
  12562.  
  12563. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12564.  
  12565. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12566. ΓöéField                    C Datatype            Γöé
  12567. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12568. ΓöéPointer to structure     LPMCI_AUDIO_STATUS    Γöé
  12569. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12570.  
  12571.  
  12572. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - Returns ΓòÉΓòÉΓòÉ
  12573.  
  12574. The values associated with the current audio mode are returned in the fields, 
  12575. lSRate, lBitsPerSRate, lBsize, sMode, sChannels, and ulFlags of the 
  12576. MCI_AUDIO_STATUS structure. The MCI_AUDIO_CHANGE data structure contains the 
  12577. current input, output, monitor, volume, balance, and tone control settings. 
  12578.  
  12579. Refer to the OS/2 Control Program Guide and Reference for more information on 
  12580. the return code for DosDevIOCtl. 
  12581.  
  12582.  
  12583. ΓòÉΓòÉΓòÉ <hidden> AUDIO_STATUS (41h) - ΓòÉΓòÉΓòÉ
  12584.  
  12585. Category: 
  12586.    AUDIO_IOCTL_CAT (80h) 
  12587.  Function: 
  12588.    AUDIO_STATUS (41h) 
  12589.  Description: 
  12590.    Obtain Status of Audio Hardware 
  12591.  
  12592.  Select an item: 
  12593.  
  12594.   Description
  12595.   Parameter Packet Format
  12596.   Data Packet Format
  12597.   Returns
  12598.  
  12599.  
  12600. ΓòÉΓòÉΓòÉ 16.1.3. AUDIO_CONTROL (42h) - Control Audio Adapter ΓòÉΓòÉΓòÉ
  12601.  
  12602.  
  12603. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Description ΓòÉΓòÉΓòÉ
  12604.  
  12605. This IOCtl is used to change the state of the adapter or selected 
  12606. characteristics of the adapter.  The adapter state is changed by the following 
  12607. usIOCtlRequest values: 
  12608.  
  12609.    o  AUDIO_START 
  12610.    o  AUDIO_STOP 
  12611.    o  AUDIO_PAUSE 
  12612.    o  AUDIO_RESUME 
  12613.  
  12614.  Adapter characteristics are changed by the usIOCtlRequest value AUDIO_CHANGE. 
  12615.  
  12616.  
  12617. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12618.  
  12619. Not used.  The packet pointer must be NULL. 
  12620.  
  12621.  
  12622. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12623.  
  12624.  Pointer to structure 
  12625.       The data packet parameter is a pointer to the following data structure. 
  12626.  
  12627.             typedef struct _MCI_AUDIO_CONTROL {
  12628.             USHORT       usIOCtlRequest;
  12629.             VOID        *pbRequestInfo;
  12630.             ULONG        ulPosition;
  12631.             SHORT        sReturnCode;
  12632.              } MCI_AUDIO_CONTROL;
  12633.  
  12634.             typedef MCI_AUDIO_CONTROL FAR *LPMCI_AUDIO_CONTROL
  12635.  
  12636.  
  12637. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12638.  
  12639. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12640. ΓöéField                    C Datatype             Γöé
  12641. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12642. ΓöéPointer to structure     LPMCI_AUDIO_CONTROL    Γöé
  12643. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12644.  
  12645.  
  12646. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Returns ΓòÉΓòÉΓòÉ
  12647.  
  12648. If a requested input or output device is not supported by the audio device, 
  12649. sReturnCode is set and an error returned. 
  12650.  
  12651. Refer to the OS/2 Control Program Guide and Reference for more information on 
  12652. the return code for DosDevIOCtl. 
  12653.  
  12654.  
  12655. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - Remarks ΓòÉΓòÉΓòÉ
  12656.  
  12657. The K12 version does not support ulPosition values except for 0.  Any pending 
  12658. AUDIO_CHANGE requests are discarded when AUDIO_INIT is issued. 
  12659.  
  12660.  
  12661. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CONTROL (42h) - ΓòÉΓòÉΓòÉ
  12662.  
  12663. Category: 
  12664.    AUDIO_IOCTL_CAT (80h) 
  12665.  Function: 
  12666.    AUDIO_CONTROL (42h) 
  12667.  Description: 
  12668.    Control Audio Adapter 
  12669.  
  12670.  Select an item: 
  12671.  
  12672.   Description
  12673.   Parameter Packet Format
  12674.   Data Packet Format
  12675.   Returns
  12676.   Remarks
  12677.  
  12678.  
  12679. ΓòÉΓòÉΓòÉ 16.1.4. AUDIO_BUFFER (43h) - Determine Buffer Status ΓòÉΓòÉΓòÉ
  12680.  
  12681.  
  12682. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Description ΓòÉΓòÉΓòÉ
  12683.  
  12684. This IOCtl is not required for MMPM/2. It is part of the AudioDD specification 
  12685. and is provided for reference. 
  12686.  
  12687. This IOCtl is used to determine the amount of data currently queued, device 
  12688. driver internal queue sizes, and whether an overrun or underrun has occurred. 
  12689. If either state has occurred, its respective bit is turned on in the ulFlags 
  12690. field. 
  12691.  
  12692.  
  12693. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12694.  
  12695. Not used.  The packet pointer must be NULL. 
  12696.  
  12697.  
  12698. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12699.  
  12700.  Pointer to structure 
  12701.       The data packet parameter is a pointer to the following data structure. 
  12702.  
  12703.             typedef struct _buffer {
  12704.             ULONG       ulFlags;
  12705.             ULONG       ulReadBufSize;
  12706.             ULONG       ulWriteBufSize;
  12707.             ULONG       ulReadBufTime;
  12708.             ULONG       ulWriteBufTime;
  12709.             ULONG       ulReadBufMax;
  12710.             ULONG       ulWriteBufMax;
  12711.             ULONG       ulPosition;
  12712.             ULONG       ulPositionType;
  12713.             LONG        lReadBufCap;
  12714.             LONG        lWriteBufCap;
  12715.             LONG        lRequestBufCap;
  12716.              } MCI_AUDIO_BUFFER;
  12717.  
  12718.             typedef MCI_AUDIO_BUFFER FAR *LPMCI_AUDIO_BUFFER;
  12719.  
  12720.  
  12721. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12722.  
  12723. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12724. ΓöéField                    C Datatype            Γöé
  12725. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12726. ΓöéPointer to structure     LPMCI_AUDIO_BUFFER    Γöé
  12727. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12728.  
  12729.  
  12730. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Returns ΓòÉΓòÉΓòÉ
  12731.  
  12732. The amount of data is expressed as the number of bytes currently in the queues. 
  12733. Notice that the amount of queue data that this IOCtl returns is accurate only 
  12734. at the point in time this value is determined. The amount of queued data can be 
  12735. different at any other point in time. 
  12736.  
  12737. If the size of the buffer contents can be represented as an amount of time, 
  12738. that amount of time is returned in the fields ulReadBufTime and ulWriteBufTime. 
  12739. If not, the values returned are -1.  To help determine the optimal size of the 
  12740. Read and Write kernel buffer queues, the maximum number of bytes that these 
  12741. queues have ever contained is returned in ulReadBufMax and ulWriteBufMax. 
  12742.  
  12743. Refer to the OS/2 Control Program Guide and Reference for more information on 
  12744. the return code for DosDevIOCtl. 
  12745.  
  12746.  
  12747. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - Remarks ΓòÉΓòÉΓòÉ
  12748.  
  12749. This IOCtl is used to return data from the device driver and cannot be used to 
  12750. pass data to the device driver. 
  12751.  
  12752.  
  12753. ΓòÉΓòÉΓòÉ <hidden> AUDIO_BUFFER (43h) - ΓòÉΓòÉΓòÉ
  12754.  
  12755. Category: 
  12756.    AUDIO_IOCTL_CAT (80h) 
  12757.  Function: 
  12758.    AUDIO_BUFFER (43h) 
  12759.  Description: 
  12760.    Determine Buffer Status 
  12761.  
  12762.  Select an item: 
  12763.  
  12764.   Description
  12765.   Parameter Packet Format
  12766.   Data Packet Format
  12767.   Returns
  12768.   Remarks
  12769.  
  12770.  
  12771. ΓòÉΓòÉΓòÉ 16.1.5. AUDIO_LOAD (44h) - Load DSP Code ΓòÉΓòÉΓòÉ
  12772.  
  12773.  
  12774. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - Description ΓòÉΓòÉΓòÉ
  12775.  
  12776. If the LOAD_CODE bit is set in the ulFlags field of the MCI_AUDIO_INIT 
  12777. structure on an AUDIO_INIT request, the application must load the DSP code 
  12778. (specified by the device driver in the abLoadPath field of MCI_AUDIO_INIT) into 
  12779. a buffer and issue an AUDIO_LOAD IOCtl request. 
  12780.  
  12781.  
  12782. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12783.  
  12784. Not used.  The packet pointer must be NULL. 
  12785.  
  12786.  
  12787. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12788.  
  12789.  Pointer to structure 
  12790.       The data packet parameter is a pointer to the following data structure. 
  12791.  
  12792.             typedef struct _load {
  12793.             CHAR FAR      *pbBuffer;
  12794.             ULONG          ulSize;
  12795.             ULONG          ulFlags;
  12796.              } MCI_AUDIO_LOAD;
  12797.  
  12798.             typedef MCI_AUDIO_LOAD FAR *LPMCI_AUDIO_LOAD;
  12799.  
  12800.  
  12801. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12802.  
  12803. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12804. ΓöéField                    C Datatype          Γöé
  12805. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12806. ΓöéPointer to structure     LPMCI_AUDIO_LOAD    Γöé
  12807. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12808.  
  12809.  
  12810. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - Remarks ΓòÉΓòÉΓòÉ
  12811.  
  12812. The pbBuffer field of the MCI_AUDIO_LOAD structure must point to the start of 
  12813. the buffer where the code is loaded.  The ulSize field must be set to the 
  12814. number of bytes of loaded code (which is the size of the file).  The ulFlags 
  12815. field permits loading the file in multiple pieces. To do this, the first piece 
  12816. is written with the LOAD_START flag set and the last piece with the LOAD_END 
  12817. flag set.  All intermediate pieces have both flags cleared.  To load the file 
  12818. in a single piece, both flags are set.  Notice that the first buffer written 
  12819. must be at least 128 bytes in length. 
  12820.  
  12821.  
  12822. ΓòÉΓòÉΓòÉ <hidden> AUDIO_LOAD (44h) - ΓòÉΓòÉΓòÉ
  12823.  
  12824. Category: 
  12825.    AUDIO_IOCTL_CAT (80h) 
  12826.  Function: 
  12827.    AUDIO_LOAD (44h) 
  12828.  Description: 
  12829.    Load DSP Code 
  12830.  
  12831.  Select an item: 
  12832.  
  12833.   Description
  12834.   Parameter Packet Format
  12835.   Data Packet Format
  12836.   Remarks
  12837.  
  12838.  
  12839. ΓòÉΓòÉΓòÉ 16.1.6. AUDIO_WAIT (45h) - Suspend program operation ΓòÉΓòÉΓòÉ
  12840.  
  12841.  
  12842. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - Description ΓòÉΓòÉΓòÉ
  12843.  
  12844. This IOCtl is not required for MMPM/2. It is part of the AudioDD specification 
  12845. and is provided for reference. 
  12846.  
  12847. This IOCtl is used to suspend program operation until all previously written 
  12848. data is played by the device. 
  12849.  
  12850.  
  12851. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12852.  
  12853. Not used.  The packet pointer must be NULL. 
  12854.  
  12855.  
  12856. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12857.  
  12858. There are no parameters for AUDIO_WAIT.  The packet pointer must be NULL. 
  12859.  
  12860.  
  12861. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - Returns ΓòÉΓòÉΓòÉ
  12862.  
  12863. Refer to the OS/2 Control Program Guide and Reference for a description of the 
  12864. return code for DosDevIOCtl. 
  12865.  
  12866.  
  12867. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - Remarks ΓòÉΓòÉΓòÉ
  12868.  
  12869. The actual playing of audio data by the audio device can occur after the Write 
  12870. call is returned to the caller.  If the caller does not want to continue 
  12871. program execution until all data is actually played by the device, it can issue 
  12872. AUDIO_WAIT.  Some audio devices play audio data in discrete blocks.  Data is 
  12873. not played unless at least a full block of data is available.  If less than a 
  12874. block of data remains to be played, AUDIO_WAIT can be called, which causes the 
  12875. audio device driver to pad the data with silence, thus permitting the data to 
  12876. be played. The amount of data in the buffers can be determined using 
  12877. AUDIO_BUFFER. 
  12878.  
  12879. AUDIO_WAIT does nothing if there are no prior calls to Write or AUDIO_HPI. 
  12880. Instead, it returns immediately to the caller. 
  12881.  
  12882.  
  12883. ΓòÉΓòÉΓòÉ <hidden> AUDIO_WAIT (45h) - ΓòÉΓòÉΓòÉ
  12884.  
  12885. Category: 
  12886.    AUDIO_IOCTL_CAT (80h) 
  12887.  Function: 
  12888.    AUDIO_WAIT (45h) 
  12889.  Description: 
  12890.    Suspend program operation 
  12891.  
  12892.  Select an item: 
  12893.  
  12894.   Description
  12895.   Parameter Packet Format
  12896.   Data Packet Format
  12897.   Returns
  12898.   Remarks
  12899.  
  12900.  
  12901. ΓòÉΓòÉΓòÉ 16.1.7. AUDIO_HPI (46h) - Access high-performance interface ΓòÉΓòÉΓòÉ
  12902.  
  12903.  
  12904. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - Description ΓòÉΓòÉΓòÉ
  12905.  
  12906. This IOCtl is not required for MMPM/2. It is part of the AudioDD specification 
  12907. and is provided for reference. 
  12908.  
  12909. This IOCtl provides several high-performance interface functions and can be 
  12910. used to increase the size of the deivce driver's internal input and output 
  12911. buffers for higher bandwidth audio modes. 
  12912.  
  12913.  
  12914. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12915.  
  12916. Not used.  The packet pointer must be NULL. 
  12917.  
  12918.  
  12919. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12920.  
  12921.  Pointer to structure 
  12922.       The data packet parameter is a pointer to the following data structure. 
  12923.  
  12924.             typedef struct _hpi {
  12925.             VOID FAR                  *pvEntry ();
  12926.             VOID FAR                  *pvCallBack ();
  12927.             LPMCI_AUDIO_IOBUFFER       prXBuff;
  12928.             LPMCI_AUDIO_IOBUFFER       prRBuff;
  12929.             USHORT                     usFlags;
  12930.              } MCI_AUDIO_HPI;
  12931.  
  12932.             typedef MCI_AUDIO_HPI FAR *LPMCI_AUDIO_HPI;
  12933.  
  12934.  
  12935. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - Data Packet Format ΓòÉΓòÉΓòÉ
  12936.  
  12937. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12938. ΓöéField                    C Datatype         Γöé
  12939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12940. ΓöéPointer to structure     LPMCI_AUDIO_HPI    Γöé
  12941. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12942.  
  12943.  
  12944. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - Returns ΓòÉΓòÉΓòÉ
  12945.  
  12946. An address is returned in pvEntry () in the MCI_AUDIO_HPI structure that can be 
  12947. used to invoke audio device driver functions directly.  NULL is returned if 
  12948. this function is not available in the current environment. 
  12949.  
  12950. Refer to the OS/2 Control Program Guide and Reference for more information on 
  12951. the return code for DosDevIOCtl. 
  12952.  
  12953.  
  12954. ΓòÉΓòÉΓòÉ <hidden> AUDIO_HPI (46h) - ΓòÉΓòÉΓòÉ
  12955.  
  12956. Category: 
  12957.    AUDIO_IOCTL_CAT (80h) 
  12958.  Function: 
  12959.    AUDIO_HPI (46h) 
  12960.  Description: 
  12961.    Access high-performance interface 
  12962.  
  12963.  Select an item: 
  12964.  
  12965.   Description
  12966.   Parameter Packet Format
  12967.   Data Packet Format
  12968.   Returns
  12969.  
  12970.  
  12971. ΓòÉΓòÉΓòÉ 16.1.8. AUDIO_UPDATE (47h) - Update Buffer Information ΓòÉΓòÉΓòÉ
  12972.  
  12973.  
  12974. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Description ΓòÉΓòÉΓòÉ
  12975.  
  12976. This IOCtl is not required for MMPM/2. It is part of the AudioDD specification 
  12977. and is provided for reference. 
  12978.  
  12979. This IOCtl has two purposes: 
  12980.  
  12981.    o  To condense the array of buffers by removing all buffers that have been 
  12982.       processed from the array of buffers in the MCI_AUDIO_IOBUFFER data 
  12983.       structure. 
  12984.  
  12985.    o  To add a buffer to the list.  The address and length of the buffer is 
  12986.       passed down to the device driver in the audio_update structure. 
  12987.  
  12988.  
  12989. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  12990.  
  12991. Not used.  The packet pointer must be NULL. 
  12992.  
  12993.  
  12994. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Pointer to structure ΓòÉΓòÉΓòÉ
  12995.  
  12996.  Pointer to structure 
  12997.       The data packet parameter is a pointer to the following data structure. 
  12998.  
  12999.             typedef struct _audio_update {
  13000.             CHAR           iobuf_type;
  13001.             CHAR FAR      *buffer_address;
  13002.             ULONG          buffer_length;
  13003.             USHORT         rc;
  13004.             void FAR      *reserved;
  13005.              } audio_update;
  13006.  
  13007.             typedef struct audio_update FAR *UPDATE;
  13008.  
  13009.  
  13010. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13011.  
  13012. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13013. ΓöéField                    C Datatype  Γöé
  13014. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13015. ΓöéPointer to structure     UPDATE      Γöé
  13016. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13017.  
  13018.  
  13019. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Returns ΓòÉΓòÉΓòÉ
  13020.  
  13021. On exit, rc of the audio_update structure contains an error code if one of the 
  13022. DevHlp calls failed or the maximum number of buffers have already been queued. 
  13023.  
  13024. Refer to the OS/2 Control Program Guide and Reference for more information on 
  13025. the return code for DosDevIOCtl. 
  13026.  
  13027.  
  13028. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - Remarks ΓòÉΓòÉΓòÉ
  13029.  
  13030. To use this IOCtl, the application must use the high-performance interface. 
  13031. When AUDIO_HPI calls the device driver, an MCI_AUDIO_IOBUFFER structure with 
  13032. the maximum number of buffers that can be present must be passed.  The 
  13033. iobuf->num_buffers field should have the maximum number of buffers in it. 
  13034. Notice that there is a limit of 16 buffers that can be present. 
  13035.  
  13036. It is not necessary for buffers passed in the buffer array of the 
  13037. MCI_AUDIO_IOBUFFER structure to contain addresses to buffers.  Any or all of 
  13038. the buffers can point to NULL addresses and have lengths of 0.  The device 
  13039. driver searches the list of the buffers, counts the number of non-NULL buffers, 
  13040. and sets the iobuf->num_buffers to this number.  All internal variables are 
  13041. initialized to allow access to that number of buffers. AUDIO_HPI must be called 
  13042. again if this number changes. 
  13043.  
  13044. When AUDIO_UPDATE is called, it removes all buffers in the current 
  13045. MCI_AUDIO_IOBUFFER buffer array that have been processed.  It then recalculates 
  13046. iobuf->num_buffers and iobuf->size (the total of all the buffer lengths). 
  13047. Notice that the buffer size must be an even number of bytes and less than 64KB 
  13048. in length. 
  13049.  
  13050. If the MCI_AUDIO_IOBUFFER structure to be updated is to be transmitted, it is 
  13051. assumed that the buffer passed is full of data to be played.  The pHead pointer 
  13052. is updated to point to the beginning of the buffer following the buffer just 
  13053. added to the chain.  The lCount field is also updated by the device driver to 
  13054. include this buffer of data. 
  13055.  
  13056. If buffer_address is NULL, this IOCtl simply frees processed buffers and 
  13057. returns.  To free a buffer, the device driver unlocks it if it is locked and 
  13058. sets the length to 0. 
  13059.  
  13060.  
  13061. ΓòÉΓòÉΓòÉ <hidden> AUDIO_UPDATE (47h) - ΓòÉΓòÉΓòÉ
  13062.  
  13063. Category: 
  13064.    AUDIO_IOCTL_CAT (80h) 
  13065.  Function: 
  13066.    AUDIO_UPDATE (47h) 
  13067.  Description: 
  13068.    Update Buffer Information 
  13069.  
  13070.  Select an item: 
  13071.  
  13072.   Description
  13073.   Parameter Packet Format
  13074.   Data Packet Format
  13075.   Returns
  13076.   Remarks
  13077.  
  13078.  
  13079. ΓòÉΓòÉΓòÉ 16.1.9. AUDIO_CAPABILITY (48h) - Determine If a Group of Audio Settings is Supported ΓòÉΓòÉΓòÉ
  13080.  
  13081.  
  13082. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Description ΓòÉΓòÉΓòÉ
  13083.  
  13084. This IOCtl enables an application to determine if a particular group of audio 
  13085. settings can be supported.  If the mode is supported, resource management 
  13086. information will be returned to the caller. 
  13087.  
  13088.  
  13089. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13090.  
  13091. Not used.  The packet pointer must be NULL. 
  13092.  
  13093.  
  13094. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13095.  
  13096.  Pointer to structure 
  13097.       The data packet parameter is a pointer to the following data structure. 
  13098.  
  13099.             typedef struct _MCI_AUDIO_CAPS {
  13100.             ULONG       ulLength;
  13101.             ULONG       ulSamplingRate;
  13102.             ULONG       ulChannels;
  13103.             ULONG       ulBitsPerSample;
  13104.             ULONG       ulDataType;
  13105.             ULONG       ulOperation;
  13106.             ULONG       ulSupport;
  13107.             ULONG       ulDataSubType;
  13108.             ULONG       ulResourceUnits;
  13109.             ULONG       ulResourceClass;
  13110.             ULONG       ulBlockAlign;
  13111.             BOOL        fCanRecord;
  13112.             ULONG       ulFlags;
  13113.             ULONG       ulCapability;
  13114.              } MCI_AUDIO_CAPS;
  13115.  
  13116.             typedef MCI_AUDIO_CAPS FAR *PAUDIO_CAPS;
  13117.  
  13118.  
  13119. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13120.  
  13121. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13122. ΓöéField                    C Datatype     Γöé
  13123. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13124. ΓöéPointer to structure     PAUDIO_CAPS    Γöé
  13125. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13126.  
  13127.  
  13128. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Returns ΓòÉΓòÉΓòÉ
  13129.  
  13130.       SUPPORT_SUCCESS 
  13131.  
  13132.       UNSUPPORTED_RATE 
  13133.  
  13134.       UNSUPPORTED_CHANNELS 
  13135.  
  13136.       UNSUPPORTED_BPS 
  13137.  
  13138.       UNSUPPORTED_DATATYPE 
  13139.  
  13140.       UNSUPPORTED_OPERATION 
  13141.  
  13142.  
  13143. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Example Code ΓòÉΓòÉΓòÉ
  13144.  
  13145. The following example code illustrates an application querying the audio device 
  13146. driver for its capabilities. If the device supports the desired mode, the 
  13147. application saves the information. 
  13148.  
  13149.   AUDIOCAPS   audiocaps;
  13150.  
  13151.   audiocaps.ulSamplingRate = 11025;
  13152.   audiocaps.ulBitsPerSample = 16;
  13153.   audiocaps.ulChannels = 2;
  13154.   audiocaps.ulDataType = DATATYPE_WAVEFORM;
  13155.   MAKE1616(&audiocaps);
  13156.      rc = DosDevIOCtl(  handle,
  13157.                        AUDIO_IOCTL_CAT,
  13158.                        AUDIO_CAPABILITY,
  13159.                        0,
  13160.                        0,
  13161.                        0,
  13162.                        sizeof (audiocaps),
  13163.                        &audiocaps,
  13164.                        (PVOID) &ulParmLengthMax);
  13165.   if ( audiocaps.ulReturn )
  13166.     {
  13167.      // process success
  13168.      }
  13169.   else
  13170.      // process failure
  13171.  
  13172.  
  13173. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - Remarks ΓòÉΓòÉΓòÉ
  13174.  
  13175. This information supercedes the information found in the VSD resource file.  If 
  13176. this IOCtl is supported, a VSD resource DLL is not necessary. 
  13177.  
  13178. The ulSamplingRate, ulChannels, ulBitsPerSample, and ulDataType fields of the 
  13179. MCI_AUDIO_CAPS structure must be filled in by the caller.  The device driver 
  13180. will return SUPPORT_SUCCESS in the ulSupport field if it supports the 
  13181. combination and non-zero if it does not.  If SUPPORT_SUCCESS is returned, the 
  13182. driver must also fill in the following fields of the MCI_AUDIO_CAPS structure: 
  13183.  
  13184.  ulDataSubType.    See valid subtypes in os2medef.h. 
  13185.  
  13186.  ulResourceClass.  See Resource Classes and Resource Units for more 
  13187.                    information. 
  13188.  
  13189.  ulResourceUnits.  See Resource Classes and Resource Units for more 
  13190.                    information. 
  13191.  
  13192.  ulBlockAlign.     Block alignment of the data. 
  13193.  
  13194.  If ulSupport contains a non-zero value, the driver should fill in the 
  13195.  MCI_AUDIO_CAPS structure with the nearest mode that matches the user's request 
  13196.  (e.g. best-fit). The following fields must be updated for a best-fit: 
  13197.  
  13198.    o  ulSamplingRate 
  13199.  
  13200.    o  ulChannels 
  13201.  
  13202.    o  ulBitsPerSample 
  13203.  
  13204.    o  ulDataType 
  13205.  
  13206.  Resource Classes and Resource Units 
  13207.  
  13208.  When each audio device driver is installed in MMPM/2, the following three 
  13209.  keywords are placed in the MMPM/2 INI file by the install routines: 
  13210.  
  13211.    o  RESOURCEUNITS= 
  13212.  
  13213.    o  RESOURCECLASSES= 
  13214.  
  13215.    o  VALIDCOMBINATIONS= 
  13216.  
  13217.  Because MMPM/2 allows many applications to simultaneously open the audio card, 
  13218.  it uses the following keywords to determine which applications can 
  13219.  simultaneously use the audio device. Although the numbers are arbitrary and 
  13220.  are defined on a device-by-device basis, device driver writers should use the 
  13221.  numbering scheme described below: 
  13222.  
  13223.  The keyword RESOURCECLASSES indicates the different resource types available 
  13224.  on the audio device. Vendors should provide a class for each data type that 
  13225.  they support. For example, if the XYZ audio card can only play only PCM files, 
  13226.  it would only have one resource class in the MMPM2.INI file, the PCM class. 
  13227.  However, if the ABC card could play PCM, MIDI and ADPCM, it would have three 
  13228.  classes in the MMPM2.INI file. The device driver should fill in the 
  13229.  ulResourceClass field with the correct class for the current mode. 
  13230.  
  13231.  The keyword RESOURCEUNITS indicates the maximum number of instances that can 
  13232.  be active on the card at any particular time. For example, if the XYZ card 
  13233.  mentioned above had the ability to play three PCM files at the same time, the 
  13234.  RESOURCEUNITS in the MMPM2.INI file for this card would be three. In contrast, 
  13235.  the ABC card can only play one PCM and one MIDI at any one time. Therefore, 
  13236.  its resource units should be two in the MMPM2.INI file. The device driver 
  13237.  should fill in the ulResourceUnits field of the AUDIO_CAPABILITY structure 
  13238.  with the correct number of resources for the current mode (typically, one). 
  13239.  
  13240.  The keyword VALIDCOMBINATIONS informs MMPM/2 which RESOURCECLASS can be active 
  13241.  at the same time on the audio device. For example, the XYZ card mentioned 
  13242.  above can only play PCM files so it has no valid combinations. By contrast, 
  13243.  the ABC card can play MDI and PCM at the same time; therefore, the 
  13244.  VALIDCOMBINATIONS statement would state that the MIDI class could be active at 
  13245.  the same time the PCM class is active and vise-versa. The valid combinations 
  13246.  information is static and does not need to be returned by the device driver. 
  13247.  
  13248.  
  13249. ΓòÉΓòÉΓòÉ <hidden> AUDIO_CAPABILITY (48h) - ΓòÉΓòÉΓòÉ
  13250.  
  13251. Category: 
  13252.    AUDIO_IOCTL_CAT (80h) 
  13253.  Function: 
  13254.    AUDIO_CAPABILITY (48h) 
  13255.  Description: 
  13256.    Determine If a Group of Audio Settings is Supported 
  13257.  
  13258.  Select an item: 
  13259.  
  13260.   Description
  13261.   Parameter Packet Format
  13262.   Data Packet Format
  13263.   Returns
  13264.   Example Code
  13265.   Remarks
  13266.  
  13267.  
  13268. ΓòÉΓòÉΓòÉ 16.1.10. Mixer IOCtl Functions Introduction ΓòÉΓòÉΓòÉ
  13269.  
  13270. The model of this mixer interface is based on a mixer device with a number of 
  13271. sources (such as microphone, PCM playback, and internal CD connector) which can 
  13272. be routed to a number of sinks or outputs (such as the recording circuitry or 
  13273. monitoring circuitry). The settings for the sources or sinks can be queried and 
  13274. set and the capabilities of each input/output line can easily be determined. 
  13275.  
  13276.  
  13277.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13278.      Γöé                                    Γöé
  13279.      Γöé    Sources          Sinks          Γöé
  13280.      Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  13281.      Γöé Γöé               Γöé                Γöé Γöé
  13282.      Γöé Γöé   Synth       Γöé   Line Out     Γöé Γöé
  13283.      Γöé Γöé               Γöé                Γöé Γöé
  13284.      Γöé Γöé   Line In     Γöé   Speaker Out  Γöé Γöé
  13285.      Γöé Γöé               Γöé                Γöé Γöé
  13286.      Γöé Γöé   Wave Data   Γöé   Head Phones  Γöé Γöé
  13287.      Γöé Γöé               Γöé                Γöé Γöé
  13288.      Γöé Γöé   Internal    Γöé   Generic Out  Γöé Γöé
  13289.      Γöé Γöé   Audio       Γöé                Γöé Γöé
  13290.      Γöé Γöé               Γöé   Wave         Γöé Γöé
  13291.      Γöé Γöé   Microphone  Γöé                Γöé Γöé
  13292.      Γöé Γöé               Γöé   NULL         Γöé Γöé
  13293.      Γöé Γöé   PC Speaker  Γöé                Γöé Γöé
  13294.      Γöé Γöé               Γöé                Γöé Γöé
  13295.      Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  13296.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13297.  
  13298.  
  13299.      Standard sources are listed on the left.
  13300.      Standard sinks are listed on the right.
  13301.      The Generic Out includes line out, speaker
  13302.      out, head phones).
  13303.  
  13304. The following IOCtls are new additions to the AUDIO IOCTL category: 
  13305.  
  13306.    o  MIX_GETCONNECTIONS 
  13307.    o  MIX_SETCONNECTIONS 
  13308.    o  MIX_GETLINEINFO 
  13309.    o  MIX_GETCONTROL 
  13310.    o  MIX_SETCONTROL 
  13311.  
  13312.  
  13313. ΓòÉΓòÉΓòÉ 16.1.11. MIX_GETCONNECTIONS (60h) - Determine if Line is Enabled ΓòÉΓòÉΓòÉ
  13314.  
  13315.  
  13316. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Description ΓòÉΓòÉΓòÉ
  13317.  
  13318. This IOCtl enables an application to determine if a particular mixer line is 
  13319. enabled. 
  13320.  
  13321.  
  13322. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13323.  
  13324. Not used.  The packet pointer must be NULL. 
  13325.  
  13326.  
  13327. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13328.  
  13329.  Pointer to structure 
  13330.       The data packet parameter is a pointer to the following data structure. 
  13331.  
  13332.             typedef struct _LINECONNECTIONS {
  13333.             ULONG       ulLength;
  13334.             ULONG       ulConnections;
  13335.             ULONG       ulLine;
  13336.              } LINECONNECTIONS;
  13337.  
  13338.             typedef LINECONNECTIONS FAR *PLINECONNECTIONS;
  13339.  
  13340.       The caller is responsible for filling in the ulLine field of the 
  13341.       LINECONNECTIONS structure. 
  13342.  
  13343.       A bitmap describing the current connection structure will be returned in 
  13344.       the ulConnections field. Each on bit indicates a connector which is 
  13345.       enabled. For example, if the input line to be queried was set to 0 (i.e. 
  13346.       the first line) and if that input line is connected to output line #0, 
  13347.       bit 0 of ulConnections will be set. Logically, connection information can 
  13348.       only be maintained for a mixer with a maximum of 32 inputs and 32 
  13349.       outputs. 
  13350.  
  13351.  
  13352. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13353.  
  13354. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13355. ΓöéField                    C Datatype          Γöé
  13356. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13357. ΓöéPointer to structure     PLINECONNECTIONS    Γöé
  13358. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13359.  
  13360.  
  13361. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Returns ΓòÉΓòÉΓòÉ
  13362.  
  13363.  MIX_SUCCESS                        Successful operation. 
  13364.  
  13365.  MIXERR_INVALIDSOURCE               Invalid source specified. 
  13366.  
  13367.  MIXERR_INVALIDSINK                 Invalid sink specified. 
  13368.  
  13369.  MIXERR_INVALIDHANDLE               Invalid handle specified. 
  13370.  
  13371.  
  13372. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - Example Code ΓòÉΓòÉΓòÉ
  13373.  
  13374. The following code illustrates how to use MIX_GETCONNECTIONS. 
  13375.  
  13376.     HMIXER   hMix;
  13377.    LINECONNECTIONS  LineCon;
  13378.    /*-----------------------------------------
  13379.    * Find out the setting for the synth.
  13380.    *-----------------------------------------*/
  13381.    LineCon.ulLine = SOURCE_SYNTHESIZER;
  13382.    LineCon.ulLength = sizeof( LINECONNECTIONS);
  13383.     rc = DosDevIOCtl( hMix,
  13384.                       AUDIO_IOCTL_CATEGORY,
  13385.                       MIX_GETCONNECTIONS,
  13386.                       0,
  13387.                       0,
  13388.                       0,
  13389.                       sizeof (LINECONNECTIONS),
  13390.                       &LineCon,
  13391.                       &ulDataLengthOut);
  13392.  
  13393.  
  13394. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONNECTIONS (60h) - ΓòÉΓòÉΓòÉ
  13395.  
  13396. Category: 
  13397.    AUDIO_IOCTL_CAT (80h) 
  13398.  Function: 
  13399.    MIX_GETCONNECTIONS (60h) 
  13400.  Description: 
  13401.    Determine if Line is Enabled 
  13402.  
  13403.  Select an item: 
  13404.  
  13405.   Description
  13406.   Parameter Packet Format
  13407.   Data Packet Format
  13408.   Returns
  13409.   Example Code
  13410.  
  13411.  
  13412. ΓòÉΓòÉΓòÉ 16.1.12. MIX_SETCONNECTIONS (61h) - Connect an Input Line to an Output Line ΓòÉΓòÉΓòÉ
  13413.  
  13414.  
  13415. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Description ΓòÉΓòÉΓòÉ
  13416.  
  13417. This IOCtl enables an application to connect an input line to an output line. 
  13418.  
  13419.  
  13420. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13421.  
  13422. Not used.  The packet pointer must be NULL. 
  13423.  
  13424.  
  13425. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13426.  
  13427.  Pointer to structure 
  13428.       The data packet parameter is a pointer to the following data structure. 
  13429.  
  13430.             typedef struct _LINECONNECTIONS {
  13431.             ULONG       ulLength;
  13432.             ULONG       ulConnections;
  13433.             ULONG       ulLine;
  13434.              } LINECONNECTIONS;
  13435.  
  13436.             typedef LINECONNECTIONS FAR *PLINECONNECTIONS;
  13437.  
  13438.       The caller is responsible for filling in the ulLine and ulConnections 
  13439.       fields of the LINECONNECTIONS structure. 
  13440.  
  13441.  
  13442. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13443.  
  13444. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13445. ΓöéField                    C Datatype          Γöé
  13446. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13447. ΓöéPointer to structure     PLINECONNECTIONS    Γöé
  13448. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13449.  
  13450.  
  13451. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Returns ΓòÉΓòÉΓòÉ
  13452.  
  13453.  MIX_SUCCESS                        Successful operation. 
  13454.  
  13455.  MIXERR_INVALIDSOURCE               Invalid source specified. 
  13456.  
  13457.  MIXERR_INVALIDSINK                 Invalid sink specified. 
  13458.  
  13459.  
  13460. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - Example Code ΓòÉΓòÉΓòÉ
  13461.  
  13462. The following code illustrates how to use MIX_SETCONNECTIONS. 
  13463.  
  13464. HMIXER   hMix;
  13465.     LINECONNECTIONS     mixinfo;
  13466.     PVOID     p16Info;
  13467.   /*-------------------------------------------
  13468.    * Find out the setting for the synth.
  13469.    *-----------------------------------------*/
  13470.    mixinfo.ulLine = SOURCE_SYNTHESIZER;
  13471.    mixinfo.ulConnection = SINK_SPEAKER;
  13472.       rc = DosDevIOCtl( hMix,
  13473.                         AUDIO_IOCTL_CATEGORY,
  13474.                         MIX_SETCONNECTIONS,
  13475.                         0,
  13476.                         0,
  13477.                         0,
  13478.                         sizeof (LINECONNECTIONS),
  13479.                         &mixinfo,
  13480.                         &ulDataLengthOut);
  13481.  
  13482.  
  13483. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONNECTIONS (61h) - ΓòÉΓòÉΓòÉ
  13484.  
  13485. Category: 
  13486.    AUDIO_IOCTL_CAT (80h) 
  13487.  Function: 
  13488.    MIX_SETCONNECTIONS (61h) 
  13489.  Description: 
  13490.    Connect an Input Line to an Output Line 
  13491.  
  13492.  Select an item: 
  13493.  
  13494.   Description
  13495.   Parameter Packet Format
  13496.   Data Packet Format
  13497.   Returns
  13498.   Example Code
  13499.  
  13500.  
  13501. ΓòÉΓòÉΓòÉ 16.1.13. MIX_GETLINEINFO (62h) - Determine the Capabilities of a Line ΓòÉΓòÉΓòÉ
  13502.  
  13503.  
  13504. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Description ΓòÉΓòÉΓòÉ
  13505.  
  13506. This IOCtl enables an application to determine the capabilities of a particular 
  13507. line. For instance, an application will call this function to determine if an 
  13508. individual line (for example, the microphone) allows adjustments for volume or 
  13509. balance. 
  13510.  
  13511.  
  13512. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13513.  
  13514. Not used.  The packet pointer must be NULL. 
  13515.  
  13516.  
  13517. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13518.  
  13519.  Pointer to structure 
  13520.       The data packet parameter is a pointer to the following data structure. 
  13521.  
  13522.             typedef struct _MIXERLINEINFO {
  13523.             ULONG       ulLength;
  13524.             ULONG       ulNumChannels;
  13525.             ULONG       ulSupport;
  13526.             ULONG       ulConnectionsPossible;
  13527.             ULONG       ulLine;
  13528.              } MIXERLINEINFO;
  13529.  
  13530.             typedef MIXERLINEINFO FAR *PMIXERLINEINFO;
  13531.  
  13532.       The caller is responsible for filling in the ulLine field of the 
  13533.       MIXERLINEINFO structure. 
  13534.  
  13535.  
  13536. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13537.  
  13538. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13539. ΓöéField                    C Datatype       Γöé
  13540. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13541. ΓöéPointer to structure     MIXERLINEINFO    Γöé
  13542. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13543.  
  13544.  
  13545. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Returns ΓòÉΓòÉΓòÉ
  13546.  
  13547.  MIX_SUCCESS                        Successful operation. 
  13548.  
  13549.  MIXERR_INVALIDSOURCE               Invalid source specified. 
  13550.  
  13551.  MIXERR_INVALIDSINK                 Invalid sink specified. 
  13552.  
  13553.  
  13554. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - Example Code ΓòÉΓòÉΓòÉ
  13555.  
  13556. The following code illustrates how to use MIX_GETCONNECTIONS. 
  13557.  
  13558.    HMIXER   hMix;
  13559.    LINECONNECTIONS     mixinfo;
  13560.    /*-------------------------------------------
  13561.    * Find out the capabilities for setting the
  13562.    * synth input.
  13563.    *-----------------------------------------*/
  13564.    mixinfo.ulLine = SOURCE_SYNTHESIZER;
  13565.    rc = DosDevIOCtl( hMix,
  13566.                      AUDIO_IOCTL_CATEGORY,
  13567.                      MIX_GETLINEINFO,
  13568.                      0,
  13569.                      0,
  13570.                      0,
  13571.                      sizeof (LINECONNECTIONS),
  13572.                      &mixinfo,
  13573.                      &ulDataLengthOut);
  13574.  
  13575.  
  13576. ΓòÉΓòÉΓòÉ <hidden> MIX_GETLINEINFO (62h) - ΓòÉΓòÉΓòÉ
  13577.  
  13578. Category: 
  13579.    AUDIO_IOCTL_CAT (80h) 
  13580.  Function: 
  13581.    MIX_GETLINEINFO (62h) 
  13582.  Description: 
  13583.    Determine the Capabilities of a Line 
  13584.  
  13585.  Select an item: 
  13586.  
  13587.   Description
  13588.   Parameter Packet Format
  13589.   Data Packet Format
  13590.   Returns
  13591.   Example Code
  13592.  
  13593.  
  13594. ΓòÉΓòÉΓòÉ 16.1.14. MIX_GETCONTROL (63h) - Get Current State of a Line ΓòÉΓòÉΓòÉ
  13595.  
  13596.  
  13597. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Description ΓòÉΓòÉΓòÉ
  13598.  
  13599. This IOCtl enables an application to get the current state of a particular 
  13600. line. 
  13601.  
  13602.  
  13603. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13604.  
  13605. Not used.  The packet pointer must be NULL. 
  13606.  
  13607.  
  13608. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13609.  
  13610.  Pointer to structure 
  13611.       The data packet parameter is a pointer to the following data structure. 
  13612.  
  13613.             typedef struct _MIXERCONTROL {
  13614.             ULONG       ulLength;
  13615.             ULONG       ulLine;
  13616.             ULONG       ulControl;
  13617.             ULONG       ulSetting;
  13618.              } MIXERCONTROL;
  13619.  
  13620.             typedef MIXERCONTROL FAR *PMIXERCONTROL;
  13621.  
  13622.       The caller is responsible for filling in the ulLine field of the 
  13623.       MIXERCONTROL structure. 
  13624.  
  13625.       The device driver should return the current setting of the line in the 
  13626.       ulSetting field of the MIXERCONTROL structure. For stereo controls, the 
  13627.       high-order word should contain information for the left-channel and the 
  13628.       low-order word contains the right channel setting. A value of 0xFFFF 
  13629.       represents full intensity and a value of 0x0000 is full cutout. 
  13630.  
  13631.  
  13632. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13633.  
  13634. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13635. ΓöéField                    C Datatype       Γöé
  13636. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13637. ΓöéPointer to structure     PMIXERCONTROL    Γöé
  13638. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13639.  
  13640.  
  13641. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Returns ΓòÉΓòÉΓòÉ
  13642.  
  13643.  MIX_SUCCESS                        Successful operation. 
  13644.  
  13645.  MIXERR_INVALIDSOURCE               Invalid source specified. 
  13646.  
  13647.  MIXERR_INVALIDSINK                 Invalid sink specified. 
  13648.  
  13649.  
  13650. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - Example Code ΓòÉΓòÉΓòÉ
  13651.  
  13652. The following code illustrates how to use MIX_GETCONNECTIONS. 
  13653.  
  13654.    HMIXER   hMix;
  13655.    MIXERCONTROL        MixerControl;
  13656.    /*-------------------------------------------
  13657.    * Find out the setting for the synth.
  13658.    *-----------------------------------------*/
  13659.    MixerControl.ulLine= SOURCE_SYNTHESIZER;
  13660.    /* Ask vsd what is the current setting of the connector */
  13661.    MixerControl.ulControl = MIX_VOLUME;
  13662.    /* The controls current setting will be returned here */
  13663.          rc = DosDevIOCtl( hMix,
  13664.                      AUDIO_IOCTL_CATEGORY,
  13665.                      MIX_GETCONTROL,
  13666.                      MixerControl,
  13667.                      0,
  13668.                      0,
  13669.                      sizeof (MIXERCONTROL),
  13670.                      (PVOID) &ulParmLengthMax,
  13671.                      &ulDataLengthOut);
  13672.  
  13673.  
  13674. ΓòÉΓòÉΓòÉ <hidden> MIX_GETCONTROL (63h) - ΓòÉΓòÉΓòÉ
  13675.  
  13676. Category: 
  13677.    AUDIO_IOCTL_CAT (80h) 
  13678.  Function: 
  13679.    MIX_GETCONTROL (63h) 
  13680.  Description: 
  13681.    Get Current State of a Line 
  13682.  
  13683.  Select an item: 
  13684.  
  13685.   Description
  13686.   Parameter Packet Format
  13687.   Data Packet Format
  13688.   Returns
  13689.   Example Code
  13690.  
  13691.  
  13692. ΓòÉΓòÉΓòÉ 16.1.15. MIX_SETCONTROL (64h) - Set State of a Mixer Line ΓòÉΓòÉΓòÉ
  13693.  
  13694.  
  13695. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Description ΓòÉΓòÉΓòÉ
  13696.  
  13697. This IOCtl enables an application to set the current state of a particular 
  13698. line. 
  13699.  
  13700.  
  13701. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  13702.  
  13703. Not used.  The packet pointer must be NULL. 
  13704.  
  13705.  
  13706. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Pointer to structure ΓòÉΓòÉΓòÉ
  13707.  
  13708.  Pointer to structure 
  13709.       The data packet parameter is a pointer to the following data structure. 
  13710.  
  13711.             typedef struct _MIXERCONTROL {
  13712.             ULONG       ulLength;
  13713.             ULONG       ulLine;
  13714.             ULONG       ulControl;
  13715.             ULONG       ulSetting;
  13716.              } MIXERCONTROL;
  13717.  
  13718.             typedef MIXERCONTROL FAR *PMIXERCONTROL;
  13719.  
  13720.       The caller is responsible for filling in the ulControl, the ulLine, and 
  13721.       the ulSetting, fields of the MIXERCONTROL. 
  13722.  
  13723.       The device driver should return the current setting of the line in 
  13724.       ulSetting of the MIXERCONTROL structure. For stereo controls, the 
  13725.       high-order word should contain information for the left-channel and the 
  13726.       low-order word contains the right channel setting. A value of 0xFFFF 
  13727.       represents full intensity and a value of 0x0000 is full cutout. 
  13728.  
  13729.  
  13730. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Data Packet Format ΓòÉΓòÉΓòÉ
  13731.  
  13732. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13733. ΓöéField                    C Datatype       Γöé
  13734. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13735. ΓöéPointer to structure     PMIXERCONTROL    Γöé
  13736. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13737.  
  13738.  
  13739. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Returns ΓòÉΓòÉΓòÉ
  13740.  
  13741.  MIX_SUCCESS                        Successful operation. 
  13742.  
  13743.  MIXERR_INVALIDSOURCE               Invalid source specified. 
  13744.  
  13745.  MIXERR_INVALIDSINK                 Invalid sink specified. 
  13746.  
  13747.  
  13748. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - Example Code ΓòÉΓòÉΓòÉ
  13749.  
  13750. The following code illustrates how to use MIX_GETCONNECTIONS. 
  13751.  
  13752.    HMIXER   hMix;
  13753.    MIXERCONTROL        MixerControl;
  13754.  
  13755.    /* Set the volume for the output device */
  13756.  
  13757.    MixerControl.ulControl = MIX__VOLUME;
  13758.    MixerControl.ulLine = SINK_LINE_OUT;
  13759.    MixerControl.ulSetting = 100;
  13760.      rc = DosDevIOCtl( hMix,
  13761.                      AUDIO_IOCTL_CATEGORY,
  13762.                      MIX_SETCONTROL,
  13763.                      0,
  13764.                      0,
  13765.                      0,
  13766.                      sizeof (MIXERCONTROL),
  13767.                      &MixerControl,
  13768.                      &ulDataLengthOut);
  13769.  
  13770.  
  13771. ΓòÉΓòÉΓòÉ <hidden> MIX_SETCONTROL (64h) - ΓòÉΓòÉΓòÉ
  13772.  
  13773. Category: 
  13774.    AUDIO_IOCTL_CAT (80h) 
  13775.  Function: 
  13776.    MIX_SETCONTROL (64h) 
  13777.  Description: 
  13778.    Set State of a Mixer Line 
  13779.  
  13780.  Select an item: 
  13781.  
  13782.   Description
  13783.   Parameter Packet Format
  13784.   Data Packet Format
  13785.   Returns
  13786.   Example Code
  13787.  
  13788.  
  13789. ΓòÉΓòÉΓòÉ 16.2. IOCtl Examples ΓòÉΓòÉΓòÉ
  13790.  
  13791. Examples of how IOCtls are used to communicate with an audio device driver are 
  13792. shown in this section for C programs running under OS/2, and for assembler 
  13793. language programs running under DOS. The following example is a pseudocode 
  13794. example that shows how an application records or plays back audio data. 
  13795.  
  13796.  Open audio device driver.
  13797.  If error opening driver:
  13798.      then end with error message.
  13799.  Issue AUDIO_INIT IOCtl to set type of audio data to play or record.
  13800.  If BESTFIT_PROVIDED flag set:
  13801.      check audio parameters returned by AUDIO_INIT IOCtl
  13802.      if returned parameters not acceptable:
  13803.          then end with message.
  13804.  If LOAD_CODE flag set:
  13805.      load file name returned in loadpath and issue AUDIO_LOAD IOCtl.
  13806.  
  13807.  Issue AUDIO_CONTROL CHANGE to initialize connections and control values.
  13808.  
  13809.  If recording:
  13810.      Open new file to write audio data to issue AUDIO_CONTROL START IOCtl.
  13811.      Do until Stop key pressed:
  13812. 10
  13813.      Issue Read to get data.
  13814.      Write data to file.
  13815.      Do user interface or other processing.
  13816.      End Do.
  13817.  Issue AUDIO_CONTROL STOP IOCtl (optional).
  13818.  
  13819.  Else if playback:
  13820.      Open file containing data to play back.
  13821.      Issue AUDIO_BUFFER IOCtl to determine size of buffers.
  13822.      Read data from file and write data to fill audio DD buffer.
  13823.      Issue AUDIO_CONTROL START IOCtl.
  13824.      Do until end of file or Stop key pressed:
  13825.        Issue AUDIO_BUFFER IOCtl to determine free space in audio DD buffer.
  13826.        Read data from file.
  13827.        Write data to audio DD to fill audio DD buffer.
  13828.        Do user interface or other processing.
  13829.        End Do.
  13830.      Issue AUDIO_CONTROL STOP IOCtl (optional).
  13831.  Close data file.
  13832.  Close audio DD.
  13833.  
  13834. Under OS/2, IOCtls are called using the DosDevIOCtl function. The following 
  13835. example is an OS/2 AUDIO_INIT example. 
  13836.  
  13837. #define   INCL_DOSDEVICES
  13838.  
  13839. #include  <os2.h>
  13840. #include  <io.h>
  13841. #include  <audiodd.h>                 /* Defines for flags, and
  13842.                                          so forth                */
  13843.  
  13844. init_adpcmv(Handle)                   /* Initialize to record
  13845.                                          ADPCM voice             */
  13846.  
  13847. HFILE Handle;                         /* Handle returned from
  13848.                                          DosOpen()               */
  13849. {
  13850.    struct audio_init buffer;          /* I/O buffer (defined in
  13851.                                          audiodd.h)              */
  13852.    USHORT rc;
  13853.  
  13854.    buffer.srate = 11025;              /* Set rate = Voice mode   */
  13855.    buffer.bits_per_sample = 16;       /* 16-bits per sample       */
  13856.    buffer.bsize = 576;                /* Size of Voice mode data
  13857.                                          block                   */
  13858.    buffer.mode = ADPCM;               /* ADPCM mode              */
  13859.    buffer.channels = 1;               /* Mono                    */
  13860.    buffer.flags = FIXED;              /* Fixed block size data   */
  13861.    buffer.operation = RECORD;         /* Set up to record        */
  13862.    buffer.version_level = 0x01000018; /* Set version level       */
  13863.  
  13864.    rc = DosDevIOCtl(Handle, AUDIO_IOCTL_CAT, AUDIO_INIT, NULL, 0L,
  13865.         &ParmLengthInOut, &buffer, (LONG)sizeof(buffer),
  13866.         &lDataLengthInOut);
  13867.  
  13868.    if(rc)
  13869.       return(rc);
  13870. }
  13871.  
  13872. Under DOS, IOCtls are called by using INT 21h Function 44h. The following is a 
  13873. DOS IOCtl example. 
  13874.  
  13875. INCLUDE AUDIODD.INC             ; Audio DD equates
  13876. /abort
  13877. ; Read the queue status using AUDIO_BUFFER IOCtl
  13878.  
  13879. Handle  DW  ?                   ; Handle to open device (MIDIn$)
  13880. Buffer                          ; I/O Buffer
  13881. FLAGS           DD  0           ; Error condition flags
  13882. READ_BUF_SIZE   DD  0           ; Number of bytes currently in
  13883.                                 ; Receive queue
  13884. WRITE_BUF_SIZE  DD  0           ; Number of bytes currently in
  13885.                                 ; Transmit queue
  13886. READ_BUF_TIME   DD  0           ; Amount of data in Receive queue
  13887.                                 ; in millisecs
  13888. WRITE_BUF_TIME  DD  0           ; Amount of data in Transmit queue
  13889.                                 ; in millisecs
  13890. READ_BUF_MAX    DD  0           ; Maximum number of bytes ever in
  13891.                                 ; Read queue
  13892. WRITE_BUF_MAX   DD  0           ; Maximum number of bytes ever in
  13893.                                 ; Write queue
  13894. POSITION        DD  0           ; Time count since beginning of
  13895.                                 ; operation
  13896. POSITION_TYPE   DD  0           ; Specifies the type of position
  13897.                                 ; units
  13898. READ_BUF_CAP    DD  0           ; Capacity of Receive queue; -1 if
  13899.                                 ; variable
  13900. WRITE_BUF_CAP   DD  0           ; Capacity of Write queue; -1 if
  13901.                                 ; variable
  13902. REQUEST_BUF_CAP DD  0           ; Maximum number of requests that
  13903.                                 ; can be queued
  13904. Query_Q_Status:
  13905.  
  13906.     MOV AH,44h                  ; Function call - IOCtl
  13907.     MOV AL,0Ch                  ; Indicate generic IOCtl request
  13908.     MOV BX,Handle               ; Select audio device handle (from
  13909.                                 ; previous OPEN)
  13910.     MOV CH,80h                  ; Generic IOCtl category
  13911.     MOV CL,40h+AUDIO_BUFFER     ; Generic IOCtl Function ID
  13912.     MOV DX,Offset Buffer        ; DS:DX points to buffer
  13913.     INT 21h                     ; Issue request to DOS
  13914.     JC  Error                   ; Error code in AX if C set
  13915.     .
  13916.     .
  13917.     .
  13918.  
  13919.  
  13920. ΓòÉΓòÉΓòÉ 16.3. M-Audio MCI_AUDIO_INIT Parameters ΓòÉΓòÉΓòÉ
  13921.  
  13922. The following table lists the MCI_AUDIO_INIT parameters for the operating modes 
  13923. currently supported by the IBM M-Audio Capture and Playback Adapter. 
  13924.  
  13925. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  13926. ΓöéDescription    ΓöéMode           ΓöéBitsΓöéSample rate    ΓöéNo.ΓöéBlock ΓöéFlags     Γöé
  13927. Γöé               Γöé               Γöéper Γöé               ΓöéChaΓöésize  Γöé          Γöé
  13928. Γöé               Γöé               ΓöéSampΓöé               Γöé   Γöé      Γöé          Γöé
  13929. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13930. ΓöéMIDI           ΓöéMIDI           Γöé-   Γöé-              Γöé-  Γöé-     Γöé-         Γöé
  13931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13932. ΓöéAVC Voice      ΓöéADPCM          Γöé16  Γöé11025          Γöé1  Γöé576   ΓöéFixed     Γöé
  13933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13934. ΓöéAVC Music      ΓöéADPCM          Γöé16  Γöé22050          Γöé1  Γöé1128  ΓöéFixed     Γöé
  13935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13936. ΓöéAVC Stereo     ΓöéADPCM          Γöé16  Γöé22050          Γöé2  Γöé2256  ΓöéFixed     Γöé
  13937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13938. ΓöéAVC High       ΓöéADPCM          Γöé16  Γöé44100          Γöé1  Γöé1128  ΓöéFixed     Γöé
  13939. ΓöéQuality        Γöé               Γöé    Γöé               Γöé   Γöé      Γöé          Γöé
  13940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13941. Γöé8 bit PCM      ΓöéPCM            Γöé8   Γöé8000, 11025,   Γöé1  Γöé560   Γöé0         Γöé
  13942. Γöé               Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      Γöé          Γöé
  13943. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13944. Γöé8 bit PCM      ΓöéPCM            Γöé8   Γöé8000, 11025,   Γöé2  Γöé560   Γöé0         Γöé
  13945. Γöéstereo         Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      Γöé          Γöé
  13946. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13947. Γöé16 bit PCM monoΓöéPCM            Γöé16  Γöé8000, 11025,   Γöé1  Γöé560   ΓöéTWOS_     Γöé
  13948. Γöé               Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      ΓöéCOMPLEMENTΓöé
  13949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13950. Γöé16 bit PCM     ΓöéPCM            Γöé16  Γöé8000, 11025,   Γöé2  Γöé560   ΓöéTWOS_     Γöé
  13951. Γöéstereo         Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      ΓöéCOMPLEMENTΓöé
  13952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13953. Γöé8 bit mu-law   ΓöéMU_LAW         Γöé8   Γöé8000, 11025,   Γöé1  Γöé560   Γöé0         Γöé
  13954. Γöémono           Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      Γöé          Γöé
  13955. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13956. Γöé8 bit mu-law   ΓöéMU_LAW         Γöé8   Γöé8000, 11025,   Γöé2  Γöé560   Γöé0         Γöé
  13957. Γöéstereo         Γöé               Γöé    Γöé22050          Γöé   Γöé      Γöé          Γöé
  13958. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13959. Γöé8 bit A-law    ΓöéA_LAW          Γöé8   Γöé8000, 11025,   Γöé1  Γöé560   Γöé0         Γöé
  13960. Γöémono           Γöé               Γöé    Γöé22050, 44100   Γöé   Γöé      Γöé          Γöé
  13961. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13962. Γöé8 bit A-law    ΓöéA_LAW          Γöé8   Γöé8000, 11025,   Γöé2  Γöé560   Γöé0         Γöé
  13963. Γöéstereo         Γöé               Γöé    Γöé22050          Γöé   Γöé      Γöé          Γöé
  13964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13965. ΓöéClaim Hardware ΓöéCLAIM_HDWR     Γöé-   Γöé-              Γöé-  Γöé-     Γöé-         Γöé
  13966. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13967. ΓöéSource Mix     ΓöéSOURCE_MIX     Γöé-   Γöé-              Γöé-  Γöé-     Γöé-         Γöé
  13968. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13969. ΓöéSpeech Viewer/2ΓöéSPV2BCPCM      Γöé16  Γöé14700          Γöé-  Γöé426 txΓöé0         Γöé
  13970. ΓöéBCPCM          Γöé               Γöé    Γöé               Γöé   Γöé/ 426 Γöé          Γöé
  13971. Γöé               Γöé               Γöé    Γöé               Γöé   Γöérx    Γöé          Γöé
  13972. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13973. ΓöéSpeech Viewer/2ΓöéSPV2PCM        Γöé16  Γöé14700          Γöé-  Γöé964 txΓöé0         Γöé
  13974. ΓöéPCM            Γöé               Γöé    Γöé               Γöé   Γöé/ 2 rxΓöé          Γöé
  13975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13976. ΓöéSpeech Viewer/2ΓöéSPV2NONE       Γöé-   Γöé-              Γöé-  Γöé256 txΓöé-         Γöé
  13977. ΓöéComputations   Γöé               Γöé    Γöé               Γöé   Γöé/ 138 Γöé          Γöé
  13978. Γöé               Γöé               Γöé    Γöé               Γöé   Γöérx    Γöé          Γöé
  13979. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13980. ΓöéADPCM XA mono  ΓöéADPCMXA        Γöé16  Γöé18900, 37800   Γöé1  Γöé1304  Γöé0         Γöé
  13981. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  13982. ΓöéADPCM XA stereoΓöéADPCMXA        Γöé16  Γöé18900, 37800   Γöé2  Γöé1304  Γöé0         Γöé
  13983. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  13984.  
  13985.  
  13986. ΓòÉΓòÉΓòÉ 16.4. Video IOCtl Functions ΓòÉΓòÉΓòÉ
  13987.  
  13988. The video IOCtls are used to set video attributes (such as brightness, hue, and 
  13989. saturation). Video IOCtl parameters are passed to and from a device driver in a 
  13990. data area containing one or more 16-bit USHORT parameters. The first parameter 
  13991. is always the Request ID. Subsequent USHORTs are used to pass data to, or 
  13992. receive data from, the device driver. The generic IOCtl interface uses two 
  13993. parameters for passing data, the parameter packet and the data packet. For 
  13994. video IOCtls, the data packet parameter is a pointer to a data structure 
  13995. containing the data necessary to perform the command. The parameter packet is 
  13996. not used. 
  13997.  
  13998. Video images can be captured one frame at a time when directed by the 
  13999. application. This type of capture mode is referred to as asymmetric capture 
  14000. because the time between successive frames is not constant. The frame rate is 
  14001. determined by the length of time that the application delays between taking 
  14002. image snapshots. Asymmetric capture is performed with IOCtls only; the MMPM/2 
  14003. streaming mechanism is not used. 
  14004.  
  14005. Typically, a stream is established to read a series of moving images from the 
  14006. device. This continuous capture mode is called symmetric or real-time capture, 
  14007. and is done at a constant frame rate and constant frame size. When established, 
  14008. a stream captures images continuously without assistance from the application 
  14009. code. A running stream cannot dynamically alter frame rate or size, but video 
  14010. quality attributes such as brightness, hue, and contrast can be altered 
  14011. dynamically. 
  14012.  
  14013. Streaming capture is used to make real-time movies and to monitor live video on 
  14014. frame-grabber cards. 
  14015.  
  14016. The video IOCtls listed in the following table are category 140 (user defined). 
  14017.  
  14018. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14019. ΓöéFunction      ΓöéFunction             ΓöéDescription                Γöé
  14020. ΓöéNumber        Γöé                     Γöé                           Γöé
  14021. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14022. Γöé60h           ΓöéVCAI_INIINFO         ΓöéSetup Information          Γöé
  14023. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14024. Γöé61h           ΓöéVCAI_SAVE            ΓöéSave Device State          Γöé
  14025. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14026. Γöé62h           ΓöéVCAI_RESTORE         ΓöéRestore Device State       Γöé
  14027. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14028. Γöé63h           ΓöéVCAI_LOAD_MICROCODE  ΓöéQuery/Load/Unload MicrocodeΓöé
  14029. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14030. Γöé64h           ΓöéVCAI_RESTORE_FORMAT  ΓöéSet/Query Image Restore    Γöé
  14031. Γöé              Γöé                     ΓöéFormat                     Γöé
  14032. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14033. Γöé65h           ΓöéVCAI_CAPTURE_FORMAT  ΓöéSet/Query Image Capture    Γöé
  14034. Γöé              Γöé                     ΓöéFormat                     Γöé
  14035. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14036. Γöé67h           ΓöéVCAI_PLAY            ΓöéRestore Image to the DeviceΓöé
  14037. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14038. Γöé68h           ΓöéVCAI_QUERYVIDEOSIGNALΓöéQuery Video Input          Γöé
  14039. Γöé              Γöé                     ΓöéConnector's Signal         Γöé
  14040. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14041. Γöé69h           ΓöéVCAI_TUNERCHANNEL    ΓöéSet/Query Tuner Channel    Γöé
  14042. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14043. Γöé6Ah           ΓöéVCAI_VIDEOINPUT      ΓöéSet/Query Video Input      Γöé
  14044. Γöé              Γöé                     ΓöéSource Connector           Γöé
  14045. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14046. Γöé6Bh           ΓöéVCAI_SETCAPTRECT     ΓöéSet Source and Destination Γöé
  14047. Γöé              Γöé                     ΓöéCapture Rectangles         Γöé
  14048. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14049. Γöé6Ch           ΓöéVCAI_GETIMAGESCALE   ΓöéGet Image and Scale into   Γöé
  14050. Γöé              Γöé                     ΓöéRAM Buffer                 Γöé
  14051. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14052. Γöé6Dh           ΓöéVCAI_GETDEVINFO      ΓöéGet Device Information     Γöé
  14053. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14054. Γöé6Eh           ΓöéVCAI_VALIDRECT       ΓöéValidate Video Rectangle   Γöé
  14055. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14056. Γöé72h           ΓöéVCAI_UNFREEZE        ΓöéUnfreeze Image Digitizer   Γöé
  14057. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14058. Γöé74h           ΓöéVCAI_FREEZE          ΓöéFreeze Image Digitizer     Γöé
  14059. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14060. Γöé75h           ΓöéVCAI_VIDEOADJ        ΓöéSet/Query Video AdjustmentsΓöé
  14061. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14062. Γöé76h           ΓöéVCAI_SETFPS          ΓöéSet Frame Rate for         Γöé
  14063. Γöé              Γöé                     ΓöéStreaming                  Γöé
  14064. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14065. Γöé79h           ΓöéVCAI_USER            ΓöéDevice Specific Commands   Γöé
  14066. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14067. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14068. Γöé80h           ΓöéVCAI_SETMONITOR      ΓöéEnable/Disable Overlay     Γöé
  14069. Γöé              Γöé                     ΓöéMonitor Function           Γöé
  14070. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14071. Γöé81h           ΓöéVCAI_EDCOLORKEY      ΓöéEnable/Disable Transparent Γöé
  14072. Γöé              Γöé                     ΓöéColor                      Γöé
  14073. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14074. Γöé82h           ΓöéVCAI_SETCOLORKEY     ΓöéSet Color Key/Transparent  Γöé
  14075. Γöé              Γöé                     ΓöéColor                      Γöé
  14076. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14077.  
  14078. Note:  Functions 68h, 69h, 80h, 81h, and 82h provide support for overlay 
  14079.        devices. 
  14080.  
  14081.  
  14082. ΓòÉΓòÉΓòÉ 16.4.1. VCAI_INIINFO (60h) - Setup Information from INI file ΓòÉΓòÉΓòÉ
  14083.  
  14084.  
  14085. ΓòÉΓòÉΓòÉ <hidden> VCAI_INIINFO (60h) - Description ΓòÉΓòÉΓòÉ
  14086.  
  14087. This IOCtl provides the device driver with the data from the device driver's 
  14088. INI file. The name of this file is based on the device driver installation 
  14089. name. For example, the INI file for the first VCA adapter would be VIDVCI1.INI 
  14090. and the second would be VIDVCI2.INI. The VSD reads the INI file and passes 
  14091. information to the PDD as a part of the open processing. The PDDName is 
  14092. obtained from the digital-video device's 
  14093.  
  14094. PDDNAME=
  14095.  
  14096. line in the MMPM2.INI file. 
  14097.  
  14098.  
  14099. ΓòÉΓòÉΓòÉ <hidden> VCAI_INIINFO (60h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14100.  
  14101. Not used.  The packet pointer must be NULL. 
  14102.  
  14103.  
  14104. ΓòÉΓòÉΓòÉ <hidden> VCAI_INIINFO (60h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14105.  
  14106. The data packet parameter is a pointer to device-specific structure. 
  14107.  
  14108.  
  14109. ΓòÉΓòÉΓòÉ <hidden> VCAI_INIINFO (60h) - ΓòÉΓòÉΓòÉ
  14110.  
  14111. Category: 
  14112.    VIDEO_IOCTL_CAT (140) 
  14113.  Function: 
  14114.    VCAI_INIINFO (60h) 
  14115.  Description: 
  14116.    Setup Information from INI file 
  14117.  
  14118.  Select an item: 
  14119.  
  14120.   Description
  14121.   Parameter Packet Format
  14122.   Data Packet Format
  14123.  
  14124.  
  14125. ΓòÉΓòÉΓòÉ 16.4.2. VCAI_SAVE (61h) - Save Device State ΓòÉΓòÉΓòÉ
  14126.  
  14127.  
  14128. ΓòÉΓòÉΓòÉ <hidden> VCAI_SAVE (61h) - Description ΓòÉΓòÉΓòÉ
  14129.  
  14130. This IOCtl saves the current state of the video device. The video device can be 
  14131. shared among several processes that might gain or lose ownership of the device 
  14132. at any time. This IOCtl is issued when a process is about to lose ownership of 
  14133. the device and needs to save the state of the device before relinquishing 
  14134. ownership. 
  14135.  
  14136.  
  14137. ΓòÉΓòÉΓòÉ <hidden> VCAI_SAVE (61h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14138.  
  14139. Not used.  The packet pointer must be NULL. 
  14140.  
  14141.  
  14142. ΓòÉΓòÉΓòÉ <hidden> VCAI_SAVE (61h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14143.  
  14144. Not used. 
  14145.  
  14146.  
  14147. ΓòÉΓòÉΓòÉ <hidden> VCAI_SAVE (61h) - ΓòÉΓòÉΓòÉ
  14148.  
  14149. Category: 
  14150.    VIDEO_IOCTL_CAT (140) 
  14151.  Function: 
  14152.    VCAI_SAVE (61h) 
  14153.  Description: 
  14154.    Save Device State 
  14155.  
  14156.  Select an item: 
  14157.  
  14158.   Description
  14159.   Parameter Packet Format
  14160.   Data Packet Format
  14161.  
  14162.  
  14163. ΓòÉΓòÉΓòÉ 16.4.3. VCAI_RESTORE (62h) - Restore Device State ΓòÉΓòÉΓòÉ
  14164.  
  14165.  
  14166. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE (62h) - Description ΓòÉΓòÉΓòÉ
  14167.  
  14168. This IOCtl restores a previously saved state to the video capture device. This 
  14169. call is issued when a process that owned (but relinquished) the video device is 
  14170. regaining control of the device. The device is set to the state it was in the 
  14171. last time the process was active (save device state was issued), or if the 
  14172. device was not previously active, the device is set to the defaults. 
  14173.  
  14174.  
  14175. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE (62h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14176.  
  14177. Not used.  The packet pointer must be NULL. 
  14178.  
  14179.  
  14180. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE (62h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14181.  
  14182. Not used. 
  14183.  
  14184.  
  14185. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE (62h) - ΓòÉΓòÉΓòÉ
  14186.  
  14187. Category: 
  14188.    VIDEO_IOCTL_CAT (140) 
  14189.  Function: 
  14190.    VCAI_RESTORE (62h) 
  14191.  Description: 
  14192.    Restore Device State 
  14193.  
  14194.  Select an item: 
  14195.  
  14196.   Description
  14197.   Parameter Packet Format
  14198.   Data Packet Format
  14199.  
  14200.  
  14201. ΓòÉΓòÉΓòÉ 16.4.4. VCAI_LOAD_MICROCODE (63h) - Query/Load/Unload Microcode ΓòÉΓòÉΓòÉ
  14202.  
  14203.  
  14204. ΓòÉΓòÉΓòÉ <hidden> VCAI_LOAD_MICROCODE (63h) - Description ΓòÉΓòÉΓòÉ
  14205.  
  14206. This IOCtl allows the device to be loaded with micro code, if needed. As soon 
  14207. as the current image format is set via VCAI_RESTORE_FORMAT and/or 
  14208. VCAI_CAPTURE_FORMAT, the device may require micro code to be loaded onto the 
  14209. card. The command allows the micro code's file name to be queried and the micro 
  14210. code to be loaded and later unloaded, if needed. The VSD (Ring 3 code) will 
  14211. read in the file for the DD (Ring 0 code) because Ring 0 code cannot perform 
  14212. file I/O. 
  14213.  
  14214.  
  14215. ΓòÉΓòÉΓòÉ <hidden> VCAI_LOAD_MICROCODE (63h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14216.  
  14217. Not used.  The packet pointer must be NULL. 
  14218.  
  14219.  
  14220. ΓòÉΓòÉΓòÉ <hidden> VCAI_LOAD_MICROCODE (63h) - Pointer to structure ΓòÉΓòÉΓòÉ
  14221.  
  14222.  Pointer to structure 
  14223.       The data packet parameter is a pointer to the following data structure. 
  14224.  
  14225.             typedef struct _VCALOAD {
  14226.             ULONG       ulflags;
  14227.             CHAR        ProdInfo[256];
  14228.             LONG        ulLoadID;
  14229.             ULONG       ulLength;
  14230.             PVOID       pLoadData;
  14231.              } VCALOAD;
  14232.  
  14233.             typedef VCALOAD FAR * PVCALOAD;
  14234.  
  14235.  
  14236. ΓòÉΓòÉΓòÉ <hidden> VCAI_LOAD_MICROCODE (63h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14237.  
  14238. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14239. ΓöéField                    C Datatype  Γöé
  14240. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14241. ΓöéPointer to structure     PVCALOAD    Γöé
  14242. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14243.  
  14244.  
  14245. ΓòÉΓòÉΓòÉ <hidden> VCAI_LOAD_MICROCODE (63h) - ΓòÉΓòÉΓòÉ
  14246.  
  14247. Category: 
  14248.    VIDEO_IOCTL_CAT (140) 
  14249.  Function: 
  14250.    VCAI_LOAD_MICROCODE (63h) 
  14251.  Description: 
  14252.    Query/Load/Unload Microcode 
  14253.  
  14254.  Select an item: 
  14255.  
  14256.   Description
  14257.   Parameter Packet Format
  14258.   Data Packet Format
  14259.  
  14260.  
  14261. ΓòÉΓòÉΓòÉ 16.4.5. VCAI_RESTORE_FORMAT (64h) - Query/Set Image Restore Format ΓòÉΓòÉΓòÉ
  14262.  
  14263.  
  14264. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE_FORMAT (64h) - Description ΓòÉΓòÉΓòÉ
  14265.  
  14266. This IOCtl is used to query the image formats supported by the device and to 
  14267. query the current image format. It may also be used to set the current image 
  14268. format. 
  14269.  
  14270. Note:  Image format (fourCC) refers to the type of data that will be passed to 
  14271.        the device on the VCAI_PLAY IOCtl. 
  14272.  
  14273.  
  14274. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE_FORMAT (64h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14275.  
  14276. Not used.  The packet pointer must be NULL. 
  14277.  
  14278.  
  14279. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE_FORMAT (64h) - Pointer to structure ΓòÉΓòÉΓòÉ
  14280.  
  14281.  Pointer to structure 
  14282.       The data packet parameter is a pointer to the following data structure. 
  14283.  
  14284.             typedef struct _VCAIMAGERF {
  14285.             ULONG       ulFlags;
  14286.             ULONG       ulNumFormats;
  14287.             ULONG       ulCurIndex;
  14288.             ULONG       FourCC[64];
  14289.              } VCAIMAGERF;
  14290.  
  14291.             typedef VCAIMAGERF FAR * PVCAIMAGERF;
  14292.  
  14293.  
  14294. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE_FORMAT (64h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14295.  
  14296. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14297. ΓöéField                    C Datatype     Γöé
  14298. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14299. ΓöéPointer to structure     PVCAIMAGERF    Γöé
  14300. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14301.  
  14302.  
  14303. ΓòÉΓòÉΓòÉ <hidden> VCAI_RESTORE_FORMAT (64h) - ΓòÉΓòÉΓòÉ
  14304.  
  14305. Category: 
  14306.    VIDEO_IOCTL_CAT (140) 
  14307.  Function: 
  14308.    VCAI_RESTORE_FORMAT (64h) 
  14309.  Description: 
  14310.    Query/Set Image Restore Format 
  14311.  
  14312.  Select an item: 
  14313.  
  14314.   Description
  14315.   Parameter Packet Format
  14316.   Data Packet Format
  14317.  
  14318.  
  14319. ΓòÉΓòÉΓòÉ 16.4.6. VCAI_CAPTURE_FORMAT (65h) - Query/Set Image Capture Format ΓòÉΓòÉΓòÉ
  14320.  
  14321.  
  14322. ΓòÉΓòÉΓòÉ <hidden> VCAI_CAPTURE_FORMAT (65h) - Description ΓòÉΓòÉΓòÉ
  14323.  
  14324. This IOCtl is used to query the devices supported image capture formats, query 
  14325. the current image capture format, and set the current image capture format. 
  14326. This image format will be returned on VCAI_GETIMAGESCALE and on the 
  14327. SHD_READ_COMPLETE flag (of the ulFlag parameter of the SHD_REPORTINT structure) 
  14328. through the IDC streaming interface. 
  14329.  
  14330.  
  14331. ΓòÉΓòÉΓòÉ <hidden> VCAI_CAPTURE_FORMAT (65h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14332.  
  14333. Not used.  The packet pointer must be NULL. 
  14334.  
  14335.  
  14336. ΓòÉΓòÉΓòÉ <hidden> VCAI_CAPTURE_FORMAT (65h) - Pointer to structure ΓòÉΓòÉΓòÉ
  14337.  
  14338.  Pointer to structure 
  14339.       The data packet parameter is a pointer to the following data structure. 
  14340.  
  14341.             typedef struct _VCAIMAGECF {
  14342.             ULONG       ulFlags;
  14343.             ULONG       ulNumFormats;
  14344.             ULONG       ulCurIndex;
  14345.             ULONG       FourCC[64];
  14346.              } VCAIMAGECF;
  14347.  
  14348.             typedef VCAIMAGECF FAR * PVCAIMAGECF;
  14349.  
  14350.  
  14351. ΓòÉΓòÉΓòÉ <hidden> VCAI_CAPTURE_FORMAT (65h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14352.  
  14353. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14354. ΓöéField                    C Datatype     Γöé
  14355. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14356. ΓöéPointer to structure     PVCAIMAGECF    Γöé
  14357. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14358.  
  14359.  
  14360. ΓòÉΓòÉΓòÉ <hidden> VCAI_CAPTURE_FORMAT (65h) - ΓòÉΓòÉΓòÉ
  14361.  
  14362. Category: 
  14363.    VIDEO_IOCTL_CAT (140) 
  14364.  Function: 
  14365.    VCAI_CAPTURE_FORMAT (65h) 
  14366.  Description: 
  14367.    Query/Set Image Capture Format 
  14368.  
  14369.  Select an item: 
  14370.  
  14371.   Description
  14372.   Parameter Packet Format
  14373.   Data Packet Format
  14374.  
  14375.  
  14376. ΓòÉΓòÉΓòÉ 16.4.7. VCAI_PLAY (67h) - Restore/Play Image to the Screen ΓòÉΓòÉΓòÉ
  14377.  
  14378.  
  14379. ΓòÉΓòÉΓòÉ <hidden> VCAI_PLAY (67h) - Description ΓòÉΓòÉΓòÉ
  14380.  
  14381. This IOCtl is used to play back and restore images to a device. The format of 
  14382. the image data pointed to by pImageData is determined by the 
  14383. VCAI_RESTORE_FORMAT IOCtl and the source and destination image size is 
  14384. determined by the VCAI_SETCAPTRECT If the device supports this command, the 
  14385. CanRestore flag in the VCADEVINFO structure should be set to 1. 
  14386.  
  14387.  
  14388. ΓòÉΓòÉΓòÉ <hidden> VCAI_PLAY (67h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14389.  
  14390. Not used.  The packet pointer must be NULL. 
  14391.  
  14392.  
  14393. ΓòÉΓòÉΓòÉ <hidden> VCAI_PLAY (67h) - Pointer to structure ΓòÉΓòÉΓòÉ
  14394.  
  14395.  Pointer to structure 
  14396.       The data packet parameter is a pointer to the following structure. 
  14397.  
  14398.             typedef struct _VCASTREAM {
  14399.             ULONG       ulLength;
  14400.             PVOID       pImageData;
  14401.             ULONG       ulFlags;
  14402.             ULONG       ulSCR;
  14403.             ULONG       ulPTS;
  14404.             ULONG       ulAudioTime;
  14405.              } VCASTREAM;
  14406.  
  14407.             typedef VCASTREAM FAR * PVCASTREAM;
  14408.  
  14409.  
  14410. ΓòÉΓòÉΓòÉ <hidden> VCAI_PLAY (67h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14411.  
  14412. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14413. ΓöéField                    C Datatype    Γöé
  14414. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14415. ΓöéPointer to structure     PVCASTREAM    Γöé
  14416. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14417.  
  14418.  
  14419. ΓòÉΓòÉΓòÉ <hidden> VCAI_PLAY (67h) - ΓòÉΓòÉΓòÉ
  14420.  
  14421. Category: 
  14422.    VIDEO_IOCTL_CAT (140) 
  14423.  Function: 
  14424.    VCAI_PLAY (67h) 
  14425.  Description: 
  14426.    Restore/Play Image to the Screen 
  14427.  
  14428.  Select an item: 
  14429.  
  14430.   Description
  14431.   Parameter Packet Format
  14432.   Data Packet Format
  14433.  
  14434.  
  14435. ΓòÉΓòÉΓòÉ 16.4.8. VCAI_QUERYVIDEOSIGNAL (68h) - Query Video Input Connector's Signal ΓòÉΓòÉΓòÉ
  14436.  
  14437.  
  14438. ΓòÉΓòÉΓòÉ <hidden> VCAI_QUERYVIDEOSIGNAL (68h) - Description ΓòÉΓòÉΓòÉ
  14439.  
  14440. This IOCtl is used to determine if the current video input connector has a 
  14441. valid video signal present. For example, this IOCtl could be used to help 
  14442. automatically detect which video input has a camera attached and turned on. 
  14443.  
  14444.  
  14445. ΓòÉΓòÉΓòÉ <hidden> VCAI_QUERYVIDEOSIGNAL (68h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14446.  
  14447. Not used.  The packet pointer must be NULL. 
  14448.  
  14449.  
  14450. ΓòÉΓòÉΓòÉ <hidden> VCAI_QUERYVIDEOSIGNAL (68h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14451.  
  14452. Not used. 
  14453.  
  14454.  
  14455. ΓòÉΓòÉΓòÉ <hidden> VCAI_QUERYVIDEOSIGNAL (68h) - Returns ΓòÉΓòÉΓòÉ
  14456.  
  14457. This IOCtl returns a status value equal to one of the following. 
  14458.  
  14459. VCAERR_SIGNAL_LOCKED          10
  14460. VCAERR_SIGNAL_NOT_LOCKED      11
  14461. VCAERR_SIGNAL_INDETERMINATE   12
  14462.  
  14463.  
  14464. ΓòÉΓòÉΓòÉ <hidden> VCAI_QUERYVIDEOSIGNAL (68h) - ΓòÉΓòÉΓòÉ
  14465.  
  14466. Category: 
  14467.    VIDEO_IOCTL_CAT (140) 
  14468.  Function: 
  14469.    VCAI_QUERYVIDEOSIGNAL (68h) 
  14470.  Description: 
  14471.    Query Video Input Connector's Signal 
  14472.  
  14473.  Select an item: 
  14474.  
  14475.   Description
  14476.   Parameter Packet Format
  14477.   Data Packet Format
  14478.   Returns
  14479.  
  14480.  
  14481. ΓòÉΓòÉΓòÉ 16.4.9. VCAI_TUNERCHANNEL (69h) - Set/Query Tuner Channel ΓòÉΓòÉΓòÉ
  14482.  
  14483.  
  14484. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - Description ΓòÉΓòÉΓòÉ
  14485.  
  14486. This IOCtl is used to change channels on the TV tuner or query the correct 
  14487. tuner frequency. If the device support TV tuner functions, the HasTuner flag 
  14488. should be set to 1 in the VCADEVINFO structure. 
  14489.  
  14490.  
  14491. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14492.  
  14493. Not used.  The packet pointer must be NULL. 
  14494.  
  14495.  
  14496. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - Pointer to structure ΓòÉΓòÉΓòÉ
  14497.  
  14498.  Pointer to structure 
  14499.       The data packet parameter is a pointer to the following structure. 
  14500.  
  14501.             typedef struct _VCATUNCHAN {
  14502.             ULONG        ulFlags;
  14503.             ULONG        ulOptions;
  14504.             USHORT       usResv01;
  14505.             USHORT       usResv02;
  14506.             LONG         lFineTune;
  14507.             ULONG        ulFrequency;
  14508.              } VCATUNCHAN;
  14509.  
  14510.             typedef VCATUNCHAN FAR * PVCATUNCHAN;
  14511.  
  14512.  
  14513. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14514.  
  14515. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14516. ΓöéField                    C Datatype     Γöé
  14517. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14518. ΓöéPointer to structure     PVCATUNCHAN    Γöé
  14519. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14520.  
  14521.  
  14522. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - Returns ΓòÉΓòÉΓòÉ
  14523.  
  14524. The following status values are returned by VCAI_TUNERCHANNEL. 
  14525.  
  14526. VCAERR_CHANNEL_TOO_LOW     6
  14527. VCAERR_CHANNEL_TOO_HIGH    7
  14528. VCAERR_CHANNEL_SKIP        8
  14529. VCAERR_CHANNEL_NO_TUNER    9
  14530.  
  14531.  
  14532. ΓòÉΓòÉΓòÉ <hidden> VCAI_TUNERCHANNEL (69h) - ΓòÉΓòÉΓòÉ
  14533.  
  14534. Category: 
  14535.    VIDEO_IOCTL_CAT (140) 
  14536.  Function: 
  14537.    VCAI_TUNERCHANNEL (69h) 
  14538.  Description: 
  14539.    Set/Query Tuner Channel 
  14540.  
  14541.  Select an item: 
  14542.  
  14543.   Description
  14544.   Parameter Packet Format
  14545.   Data Packet Format
  14546.   Returns
  14547.  
  14548.  
  14549. ΓòÉΓòÉΓòÉ 16.4.10. VCAI_VIDEOINPUT (6Ah) - Set/Query Video Input Source Connector ΓòÉΓòÉΓòÉ
  14550.  
  14551.  
  14552. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOINPUT (6Ah) - Description ΓòÉΓòÉΓòÉ
  14553.  
  14554. This IOCtl sets or queries the video input source connector. 
  14555.  
  14556.  
  14557. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOINPUT (6Ah) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14558.  
  14559. Not used.  The packet pointer must be NULL. 
  14560.  
  14561.  
  14562. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOINPUT (6Ah) - Pointer to structure ΓòÉΓòÉΓòÉ
  14563.  
  14564.  Pointer to structure 
  14565.       The data packet parameter is a pointer to the following data structure. 
  14566.  
  14567.             typedef struct _VCASETVIDEOINPUT {
  14568.             ULONG       INPUT_CONNECTOR;
  14569.              } VCASETVIDEOINPUT;
  14570.  
  14571.             typedef VCASETVIDEOINPUT FAR * PVCASETVIDEOINPUT;
  14572.  
  14573.  
  14574. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOINPUT (6Ah) - Data Packet Format ΓòÉΓòÉΓòÉ
  14575.  
  14576. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14577. ΓöéField                    C Datatype           Γöé
  14578. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14579. ΓöéPointer to structure     PVCASETVIDEOINPUT    Γöé
  14580. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14581.  
  14582.  
  14583. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOINPUT (6Ah) - ΓòÉΓòÉΓòÉ
  14584.  
  14585. Category: 
  14586.    VIDEO_IOCTL_CAT (140) 
  14587.  Function: 
  14588.    VCAI_VIDEOINPUT (6Ah) 
  14589.  Description: 
  14590.    Set/Query Video Input Source Connector 
  14591.  
  14592.  Select an item: 
  14593.  
  14594.   Description
  14595.   Parameter Packet Format
  14596.   Data Packet Format
  14597.  
  14598.  
  14599. ΓòÉΓòÉΓòÉ 16.4.11. VCAI_SETCAPTRECT (6Bh) - Set Source and Destination Capture/Restore Rectangles ΓòÉΓòÉΓòÉ
  14600.  
  14601.  
  14602. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCAPTRECT (6Bh) - Description ΓòÉΓòÉΓòÉ
  14603.  
  14604. This IOCtl sets up streaming capture of images from the video capture device to 
  14605. buffers provided by the DDCMD_READ message. The portion of the source image to 
  14606. be captured is determined by the size of the destination image. 
  14607.  
  14608. This command does not start the capture. It specifies the source and 
  14609. destination. Streaming capture is started using the DDCMD_START flag of the 
  14610. ulCmd parameter of the DDCMDCONTROL structure. 
  14611.  
  14612. The destination X_LEFT and Y_TOP are used only for overlay adapters to control 
  14613. where the overlay image is placed on the screen. 
  14614.  
  14615. If the device is being used for play back instead of capture as discussed 
  14616. above, source refers to the size of the image that is to be restored and dest 
  14617. (destination) refers to where the image is to be placed. Instead of the DDCMD 
  14618. message discussed above, the image data is passed to the device driver via the 
  14619. VCAI_PLAY IOCtl. 
  14620.  
  14621.  
  14622. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCAPTRECT (6Bh) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14623.  
  14624. Not used.  The packet pointer must be NULL. 
  14625.  
  14626.  
  14627. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCAPTRECT (6Bh) - Pointer to structure ΓòÉΓòÉΓòÉ
  14628.  
  14629.  Pointer to structure 
  14630.       The data packet parameter is a pointer to the following data structure. 
  14631.  
  14632.             typedef struct _VCASETCAPTURERECT {
  14633.             ULONG       Source_X_Left;
  14634.             ULONG       Source_Y_Top;
  14635.             ULONG       Source_Y_Height;
  14636.             ULONG       Source_X_Width;
  14637.             ULONG       Dest_X_Left;
  14638.             ULONG       Dest_Y_Top;
  14639.             ULONG       Dest_Y_Height;
  14640.             ULONG       Dest_X_Width;
  14641.              } VCASETCAPTURERECT;
  14642.  
  14643.             typedef VCASETCAPTURERECT FAR * PVCASETCAPTURERECT;
  14644.  
  14645.  
  14646. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCAPTRECT (6Bh) - Data Packet Format ΓòÉΓòÉΓòÉ
  14647.  
  14648. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14649. ΓöéField                    C Datatype            Γöé
  14650. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14651. ΓöéPointer to structure     PVCASETCAPTURERECT    Γöé
  14652. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14653.  
  14654.  
  14655. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCAPTRECT (6Bh) - ΓòÉΓòÉΓòÉ
  14656.  
  14657. Category: 
  14658.    VIDEO_IOCTL_CAT (140) 
  14659.  Function: 
  14660.    VCAI_SETCAPTRECT (6Bh) 
  14661.  Description: 
  14662.    Set Source and Destination Capture/Restore Rectangles 
  14663.  
  14664.  Select an item: 
  14665.  
  14666.   Description
  14667.   Parameter Packet Format
  14668.   Data Packet Format
  14669.  
  14670.  
  14671. ΓòÉΓòÉΓòÉ 16.4.12. VCAI_GETIMAGESCALE (6Ch) - Get Image and Scale into RAM Buffer ΓòÉΓòÉΓòÉ
  14672.  
  14673.  
  14674. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Description ΓòÉΓòÉΓòÉ
  14675.  
  14676. This IOCtl is used to capture a single frame of data from the video capture 
  14677. device to a buffer provided by the calling application. 
  14678.  
  14679. The video capture device has a capture frame buffer, which contains the 
  14680. current, full sized image captured (or digitized) by the device. The portion of 
  14681. the full sized image that is to be copied to the calling applications buffer is 
  14682. indicated by the source frame, which describes a window in the captured frame. 
  14683. The source frame can encompass part or all of the captured frame. The image 
  14684. data contained in the source frame dimensions are copied to a destination 
  14685. frame. The following figure illustrates this. 
  14686.  
  14687.         0,0                       0,0
  14688.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14689.         Γöé   64               Γöé    Γöé                    Γöé
  14690.    32   Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   Γöé    Γöé                    Γöé
  14691.         Γöé  ΓöéSource   240 Γöé ΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇ>Γöé  Destination       Γöé
  14692.         Γöé  Γöé             Γöé   Γöé    Γöé                    Γöé
  14693.         Γöé  Γöé   320       Γöé   Γöé    Γöé                    Γöé
  14694.         Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   Γöé    Γöé                    Γöé
  14695.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14696.                     640,480                      160,120
  14697.  
  14698.   X-Left    32
  14699.   Y-Top     64
  14700.   X-Width  320
  14701.   Y-Height 240
  14702.  
  14703. If the destination frame is not the same size as the source frame, the source 
  14704. image is scaled down to fit into the destination frame. This allows the image 
  14705. to be reduced to fit in a specific window. It also allows for a change in the 
  14706. aspect ratio. 
  14707.  
  14708. For better performance, this IOCtl does not validate that the source and 
  14709. destination frames are equal to or smaller than the full sized capture frame. 
  14710. The caller of this function must ensure that the source and destination frame 
  14711. dimensions are less than or equal to the maximum size of the capture frame. Use 
  14712. VCAI_GETDEVINFO to determine the maximum image extents. 
  14713.  
  14714. Specific device drivers might place restrictions on how scaling from the source 
  14715. frame to the destination frame can occur. 
  14716.  
  14717.  
  14718. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14719.  
  14720. Not used.  The packet pointer must be NULL. 
  14721.  
  14722.  
  14723. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Pointer to structure ΓòÉΓòÉΓòÉ
  14724.  
  14725.  Pointer to structure 
  14726.       The data packet parameter is a pointer to the following structure. 
  14727.  
  14728.             typedef struct _VCAGETIMAGESCALE {
  14729.             ULONG       Capture_Buf_Len;
  14730.             ULONG       Capture_Buf_Ptr;
  14731.             ULONG       Source_X_Left;
  14732.             ULONG       Source_Y_Top;
  14733.             ULONG       Source_Y_Height;
  14734.             ULONG       Source_X_Width;
  14735.             ULONG       Dest_X_Left;
  14736.             ULONG       Dest_Y_Top;
  14737.             ULONG       Dest_Y_Height;
  14738.             ULONG       Dest_X_Width;
  14739.              } VCAGETIMAGESCALE;
  14740.  
  14741.             typedef VCAGETIMAGESCLAE FAR * PVCAGETIMAGESCALE;
  14742.  
  14743.  
  14744. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Data Packet Format ΓòÉΓòÉΓòÉ
  14745.  
  14746. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14747. ΓöéField                    C Datatype           Γöé
  14748. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14749. ΓöéPointer to structure     PVCAGETIMAGESCALE    Γöé
  14750. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14751.  
  14752.  
  14753. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Returns ΓòÉΓòÉΓòÉ
  14754.  
  14755. If the video device driver can satisfy the request as specified, it returns 0 
  14756. (VCAERR_SUCCESS). Otherwise, an error code is returned that indicates what 
  14757. caused the failure (VCAERR_INVALID_BUFFER, VCAERR_INVALID_RECT). 
  14758.  
  14759.  
  14760. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - Remarks ΓòÉΓòÉΓòÉ
  14761.  
  14762. This IOCtl captures one single video image per call. To perform streaming 
  14763. (continuous, multiple image capturing), use the stream programming interface to 
  14764. create a stream and record from the video capture device. 
  14765.  
  14766. Note:  Most video device drivers do not support all the transposition and 
  14767.        scaling possibilities supported with this IOCtl. Consult the specific 
  14768.        device driver's documentation for limitations, or use VCAI_GETDEVINFO to 
  14769.        determine its capabilities. 
  14770.  
  14771.  
  14772. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETIMAGESCALE (6Ch) - ΓòÉΓòÉΓòÉ
  14773.  
  14774. Category: 
  14775.    VIDEO_IOCTL_CAT (140) 
  14776.  Function: 
  14777.    VCAI_GETIMAGESCALE (6Ch) 
  14778.  Description: 
  14779.    Get Image and Scale into RAM Buffer 
  14780.  
  14781.  Select an item: 
  14782.  
  14783.   Description
  14784.   Parameter Packet Format
  14785.   Data Packet Format
  14786.   Returns
  14787.   Remarks
  14788.  
  14789.  
  14790. ΓòÉΓòÉΓòÉ 16.4.13. VCAI_GETDEVINFO (6Dh) - Get Device Information ΓòÉΓòÉΓòÉ
  14791.  
  14792.  
  14793. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETDEVINFO (6Dh) - Description ΓòÉΓòÉΓòÉ
  14794.  
  14795. This IOCtl returns device-specific information about a video capture device. 
  14796. The information returned is the default state of the device. It does not 
  14797. reflect changes that might have been made to the defaults since initialization. 
  14798.  
  14799.  
  14800. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETDEVINFO (6Dh) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14801.  
  14802. Not used.  The packet pointer must be NULL. 
  14803.  
  14804.  
  14805. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETDEVINFO (6Dh) - Pointer to structure ΓòÉΓòÉΓòÉ
  14806.  
  14807.  Pointer to structure 
  14808.       The data packet parameter is a pointer to the following data structure. 
  14809.  
  14810.             typedef struct _vcadevinfo {
  14811.             ULONG        Length;
  14812.             CHAR         ProdInfo[30];
  14813.             CHAR         ManInfo[30];
  14814.             CHAR         Version[10];
  14815.             ULONG        ImgFormat;
  14816.             USHORT       BitsPerPEL;
  14817.             USHORT       Overlay;
  14818.             ULONG        Brightness;
  14819.             ULONG        hue;
  14820.             ULONG        saturation;
  14821.             ULONG        contrast;
  14822.             ULONG        Sharpness;
  14823.             ULONG        unused1;
  14824.             ULONG        S_X_Left;
  14825.             ULONG        S_Y_Top;
  14826.             ULONG        S_Y_Height;
  14827.             ULONG        S_X_Width;
  14828.             ULONG        D_X_Left;
  14829.             ULONG        D_Y_Top;
  14830.             ULONG        D_Y_Height;
  14831.             ULONG        D_X_Width;
  14832.             ULONG        D_ScaleFactor;
  14833.             ULONG        S_X_MAX;
  14834.             ULONG        S_Y_MAX;
  14835.             ULONG        D_X_MAX;
  14836.             ULONG        D_Y_MAX;
  14837.             ULONG        O_X_MAX;
  14838.             ULONG        O_Y_MAX;
  14839.             USHORT       VideoInputs;
  14840.             USHORT       CanRestore;
  14841.             USHORT       CanStretch;
  14842.             USHORT       CanDistort;
  14843.             USHORT       HasVolume;
  14844.             USHORT       HasBalance;
  14845.             USHORT       CanScale;
  14846.             USHORT       CanStream;
  14847.             ULONG        DI_ulFilenum;
  14848.             BYTE         HasTuner;
  14849.             BYTE         HasTeleTex;
  14850.             LONG         Delay_Time;
  14851.             BYTE         HasAFC;
  14852.             BYTE         HasPolarization;
  14853.              } VCADEVINFO;
  14854.  
  14855.             typedef VCADEVINFO FAR * PVCADEVINFO;
  14856.  
  14857.  
  14858. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETDEVINFO (6Dh) - Data Packet Format ΓòÉΓòÉΓòÉ
  14859.  
  14860. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14861. ΓöéField                    C Datatype     Γöé
  14862. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14863. ΓöéPointer to structure     PVCADEVINFO    Γöé
  14864. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14865.  
  14866.  
  14867. ΓòÉΓòÉΓòÉ <hidden> VCAI_GETDEVINFO (6Dh) - ΓòÉΓòÉΓòÉ
  14868.  
  14869. Category: 
  14870.    VIDEO_IOCTL_CAT (140) 
  14871.  Function: 
  14872.    VCAI_GETDEVINFO (6Dh) 
  14873.  Description: 
  14874.    Get Device Information 
  14875.  
  14876.  Select an item: 
  14877.  
  14878.   Description
  14879.   Parameter Packet Format
  14880.   Data Packet Format
  14881.  
  14882.  
  14883. ΓòÉΓòÉΓòÉ 16.4.14. VCAI_VALIDRECT (6Eh) - Validate Video Rectangle ΓòÉΓòÉΓòÉ
  14884.  
  14885.  
  14886. ΓòÉΓòÉΓòÉ <hidden> VCAI_VALIDRECT (6Eh) - Description ΓòÉΓòÉΓòÉ
  14887.  
  14888. This IOCtl modifies the source X_Width and source Y_Height to a valid size 
  14889. determined by the destination rectangle information.  This IOCtl compensates 
  14890. for video capture adapters that do not support scaling images from a given 
  14891. source destination rectangle. The media control driver uses this information to 
  14892. center the source rectangle on the area in the original source rectangle. 
  14893.  
  14894.  
  14895. ΓòÉΓòÉΓòÉ <hidden> VCAI_VALIDRECT (6Eh) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14896.  
  14897. Not used.  The packet pointer must be NULL. 
  14898.  
  14899.  
  14900. ΓòÉΓòÉΓòÉ <hidden> VCAI_VALIDRECT (6Eh) - Pointer to structure ΓòÉΓòÉΓòÉ
  14901.  
  14902.  Pointer to structure 
  14903.       The data packet parameter is a pointer to the following structure. 
  14904.  
  14905.             typedef struct _VCACAPISIZE {
  14906.             ULONG       X_Left;
  14907.             ULONG       Y_Top;
  14908.             ULONG       Y_Height;
  14909.             ULONG       X_Width;
  14910.             ULONG       ScaleFactor;
  14911.              } VCACAPISIZE;
  14912.  
  14913.             typedef VCACAPISIZE FAR * PVCACAPISIZE;
  14914.  
  14915.  
  14916. ΓòÉΓòÉΓòÉ <hidden> VCAI_VALIDRECT (6Eh) - Data Packet Format ΓòÉΓòÉΓòÉ
  14917.  
  14918. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  14919. ΓöéField                    C Datatype      Γöé
  14920. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  14921. ΓöéPointer to structure     PVCACAPISIZE    Γöé
  14922. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  14923.  
  14924.  
  14925. ΓòÉΓòÉΓòÉ <hidden> VCAI_VALIDRECT (6Eh) - ΓòÉΓòÉΓòÉ
  14926.  
  14927. Category: 
  14928.    VIDEO_IOCTL_CAT (140) 
  14929.  Function: 
  14930.    VCAI_VALIDRECT (6Eh) 
  14931.  Description: 
  14932.    Validate Video Rectangle 
  14933.  
  14934.  Select an item: 
  14935.  
  14936.   Description
  14937.   Parameter Packet Format
  14938.   Data Packet Format
  14939.  
  14940.  
  14941. ΓòÉΓòÉΓòÉ 16.4.15. VCAI_UNFREEZE (72h) - Unfreeze the Image Digitizer ΓòÉΓòÉΓòÉ
  14942.  
  14943.  
  14944. ΓòÉΓòÉΓòÉ <hidden> VCAI_UNFREEZE (72h) - Description ΓòÉΓòÉΓòÉ
  14945.  
  14946. This IOCtl tells the video device to continuously digitize the incoming video 
  14947. source. 
  14948.  
  14949.  
  14950. ΓòÉΓòÉΓòÉ <hidden> VCAI_UNFREEZE (72h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14951.  
  14952. Not used.  The packet pointer must be NULL. 
  14953.  
  14954.  
  14955. ΓòÉΓòÉΓòÉ <hidden> VCAI_UNFREEZE (72h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14956.  
  14957. Not used. 
  14958.  
  14959.  
  14960. ΓòÉΓòÉΓòÉ <hidden> VCAI_UNFREEZE (72h) - ΓòÉΓòÉΓòÉ
  14961.  
  14962. Category: 
  14963.    VIDEO_IOCTL_CAT (140) 
  14964.  Function: 
  14965.    VCAI_UNFREEZE (72h) 
  14966.  Description: 
  14967.    Unfreeze the Image Digitizer 
  14968.  
  14969.  Select an item: 
  14970.  
  14971.   Description
  14972.   Parameter Packet Format
  14973.   Data Packet Format
  14974.  
  14975.  
  14976. ΓòÉΓòÉΓòÉ 16.4.16. VCAI_FREEZE (74h) - Freeze the Image Digitizer ΓòÉΓòÉΓòÉ
  14977.  
  14978.  
  14979. ΓòÉΓòÉΓòÉ <hidden> VCAI_FREEZE (74h) - Description ΓòÉΓòÉΓòÉ
  14980.  
  14981. This IOCtl tells the video device to capture/freeze the current digitized 
  14982. image. This freezes the capture card digitizer to produce a stable image. 
  14983. However, it is typically very slow because the device might have to wait for 
  14984. one or more video field times to pass to make sure the digitizer has come to a 
  14985. complete stop. 
  14986.  
  14987.  
  14988. ΓòÉΓòÉΓòÉ <hidden> VCAI_FREEZE (74h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  14989.  
  14990. Not used.  The packet pointer must be NULL. 
  14991.  
  14992.  
  14993. ΓòÉΓòÉΓòÉ <hidden> VCAI_FREEZE (74h) - Data Packet Format ΓòÉΓòÉΓòÉ
  14994.  
  14995. Not used. 
  14996.  
  14997.  
  14998. ΓòÉΓòÉΓòÉ <hidden> VCAI_FREEZE (74h) - ΓòÉΓòÉΓòÉ
  14999.  
  15000. Category: 
  15001.    VIDEO_IOCTL_CAT (140) 
  15002.  Function: 
  15003.    VCAI_FREEZE (74h) 
  15004.  Description: 
  15005.    Freeze the Image Digitizer 
  15006.  
  15007.  Select an item: 
  15008.  
  15009.   Description
  15010.   Parameter Packet Format
  15011.   Data Packet Format
  15012.  
  15013.  
  15014. ΓòÉΓòÉΓòÉ 16.4.17. VCAI_VIDEOADJ (75h) - Set/Query Video Adjustments ΓòÉΓòÉΓòÉ
  15015.  
  15016.  
  15017. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - Description ΓòÉΓòÉΓòÉ
  15018.  
  15019. This IOCtl allows the caller to set and query the value of attributes 
  15020. controlling the behavior (and thus the image) of the video device. Typical 
  15021. video image adjustments, such as those found on television sets, including 
  15022. brightness, contrast, and hue, can be queried and set with this call. 
  15023.  
  15024.  
  15025. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15026.  
  15027. Not used.  The packet pointer must be NULL. 
  15028.  
  15029.  
  15030. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - Pointer to structure ΓòÉΓòÉΓòÉ
  15031.  
  15032.  Pointer to structure 
  15033.       The data packet parameter is a pointer to the following structure. 
  15034.  
  15035.             typedef struct _VCASETVIDEO {
  15036.             ULONG       set_brightness;
  15037.             ULONG       set_hue;
  15038.             ULONG       set_saturation;
  15039.             ULONG       set_contrast;
  15040.             ULONG       ret_brightness;
  15041.             ULONG       ret_hue;
  15042.             ULONG       ret_saturation;
  15043.             ULONG       ret_contrast;
  15044.              } VCASETVIDEO;
  15045.  
  15046.             typedef VCASETVIDEO FAR * PVCASETVIDEO;
  15047.  
  15048.  
  15049. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15050.  
  15051. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15052. ΓöéField                    C Datatype      Γöé
  15053. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15054. ΓöéPointer to structure     PVCASETVIDEO    Γöé
  15055. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15056.  
  15057.  
  15058. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - Remarks ΓòÉΓòÉΓòÉ
  15059.  
  15060. When setting a value, put the value desired (in the range of 0 to 255) into the 
  15061. value's field. If resetting the value to the defaults, put DEFAULT into the 
  15062. value's field. If no change is desired for a particular value, put NO_CHANGE in 
  15063. the value's field. The call always returns the current value or NOT_SUPPORTED 
  15064. for each setting after the value has been updated. 
  15065.  
  15066.  
  15067. ΓòÉΓòÉΓòÉ <hidden> VCAI_VIDEOADJ (75h) - ΓòÉΓòÉΓòÉ
  15068.  
  15069. Category: 
  15070.    VIDEO_IOCTL_CAT (140) 
  15071.  Function: 
  15072.    VCAI_VIDEOADJ (75h) 
  15073.  Description: 
  15074.    Set/Query Video Adjustments 
  15075.  
  15076.  Select an item: 
  15077.  
  15078.   Description
  15079.   Parameter Packet Format
  15080.   Data Packet Format
  15081.   Remarks
  15082.  
  15083.  
  15084. ΓòÉΓòÉΓòÉ 16.4.18. VCAI_SETFPS (76h) - Set Frame Rate for Streaming ΓòÉΓòÉΓòÉ
  15085.  
  15086.  
  15087. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETFPS (76h) - Description ΓòÉΓòÉΓòÉ
  15088.  
  15089. This IOCtl allows the caller to set the frame rate, in frames per second or in 
  15090. microseconds per frame, that the device driver will use to capture images from 
  15091. the device.  This call does not initiate video capture, it only sets the frame 
  15092. rate.  The frame rate cannot 
  15093.  
  15094.  
  15095. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETFPS (76h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15096.  
  15097. Not used.  The packet pointer must be NULL. 
  15098.  
  15099.  
  15100. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETFPS (76h) - Pointer to structure ΓòÉΓòÉΓòÉ
  15101.  
  15102.  Pointer to structure 
  15103.       The data packet parameter is a pointer to the following structure. 
  15104.  
  15105.             typedef struct _VCASETFPS {
  15106.             ULONG       set_FPS;
  15107.             ULONG       ulFlags;
  15108.              } VCASETFPS;
  15109.  
  15110.             typedef VCASETFPS FAR * PVCASETFPS;
  15111.  
  15112.  
  15113. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETFPS (76h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15114.  
  15115. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15116. ΓöéField                    C Datatype    Γöé
  15117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15118. ΓöéPointer to structure     PVCASETFPS    Γöé
  15119. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15120.  
  15121.  
  15122. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETFPS (76h) - ΓòÉΓòÉΓòÉ
  15123.  
  15124. Category: 
  15125.    VIDEO_IOCTL_CAT (140) 
  15126.  Function: 
  15127.    VCAI_SETFPS (76h) 
  15128.  Description: 
  15129.    Set Frame Rate for Streaming 
  15130.  
  15131.  Select an item: 
  15132.  
  15133.   Description
  15134.   Parameter Packet Format
  15135.   Data Packet Format
  15136.  
  15137.  
  15138. ΓòÉΓòÉΓòÉ 16.4.19. VCAI_USER (79h) - Pass Device-Specific Commands to Device Driver ΓòÉΓòÉΓòÉ
  15139.  
  15140.  
  15141. ΓòÉΓòÉΓòÉ <hidden> VCAI_USER (79h) - Description ΓòÉΓòÉΓòÉ
  15142.  
  15143. This IOCtl is the result of a MCI_DEV_ESCAPE COMMAND. It allows an application 
  15144. to pass device-specific commands to the device driver. This will allow for new 
  15145. commands specific to a device to be supported without impact to the MCD/MCI. 
  15146.  
  15147.  
  15148. ΓòÉΓòÉΓòÉ <hidden> VCAI_USER (79h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15149.  
  15150. Not used.  The packet pointer must be NULL. 
  15151.  
  15152.  
  15153. ΓòÉΓòÉΓòÉ <hidden> VCAI_USER (79h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15154.  
  15155. Application Dependent. 
  15156.  
  15157.  
  15158. ΓòÉΓòÉΓòÉ <hidden> VCAI_USER (79h) - ΓòÉΓòÉΓòÉ
  15159.  
  15160. Category: 
  15161.    VIDEO_IOCTL_CAT (140) 
  15162.  Function: 
  15163.    VCAI_USER (79h) 
  15164.  Description: 
  15165.    Pass Device-Specific Commands to Device Driver 
  15166.  
  15167.  Select an item: 
  15168.  
  15169.   Description
  15170.   Parameter Packet Format
  15171.   Data Packet Format
  15172.  
  15173.  
  15174. ΓòÉΓòÉΓòÉ 16.4.20. VCAI_SETMONITOR (80h) - Enable/Disable Overlay Monitor ΓòÉΓòÉΓòÉ
  15175.  
  15176.  
  15177. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETMONITOR (80h) - Description ΓòÉΓòÉΓòÉ
  15178.  
  15179. This IOCtl enables or disables display of live video on the display device. 
  15180.  
  15181.  
  15182. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETMONITOR (80h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15183.  
  15184. Not used.  The packet pointer must be NULL. 
  15185.  
  15186.  
  15187. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETMONITOR (80h) - Pointer to structure ΓòÉΓòÉΓòÉ
  15188.  
  15189.  Pointer to structure 
  15190.       The data packet parameter is a pointer to the following structure. 
  15191.  
  15192.             typedef struct _VCASETMONITOR {
  15193.             BOOL       bMonitor;
  15194.              } VCASETMONITOR;
  15195.  
  15196.             typedef VCASETMONITOR FAR * PVCASETMONITOR;
  15197.  
  15198.  
  15199. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETMONITOR (80h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15200.  
  15201. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15202. ΓöéField                    C Datatype        Γöé
  15203. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15204. ΓöéPointer to structure     PVCASETMONITOR    Γöé
  15205. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15206.  
  15207.  
  15208. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETMONITOR (80h) - ΓòÉΓòÉΓòÉ
  15209.  
  15210. Category: 
  15211.    VIDEO_IOCTL_CAT (140) 
  15212.  Function: 
  15213.    VCAI_SETMONITOR (80h) 
  15214.  Description: 
  15215.    Enable/Disable Overlay Monitor 
  15216.  
  15217.  Select an item: 
  15218.  
  15219.   Description
  15220.   Parameter Packet Format
  15221.   Data Packet Format
  15222.  
  15223.  
  15224. ΓòÉΓòÉΓòÉ 16.4.21. VCAI_EDCOLORKEY (81h) - Enable/Disable Transparent Color ΓòÉΓòÉΓòÉ
  15225.  
  15226.  
  15227. ΓòÉΓòÉΓòÉ <hidden> VCAI_EDCOLORKEY (81h) - Description ΓòÉΓòÉΓòÉ
  15228.  
  15229. This IOCtl enables video to show through a specific color determined by the 
  15230. transparent-color key when the overlay monitor is enabled.  If color keying is 
  15231. not enabled and the monitor is enabled, video will show through even if the 
  15232. transparent color is not present. 
  15233.  
  15234.  
  15235. ΓòÉΓòÉΓòÉ <hidden> VCAI_EDCOLORKEY (81h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15236.  
  15237. Not used.  The packet pointer must be NULL. 
  15238.  
  15239.  
  15240. ΓòÉΓòÉΓòÉ <hidden> VCAI_EDCOLORKEY (81h) - Pointer to structure ΓòÉΓòÉΓòÉ
  15241.  
  15242.  Pointer to structure 
  15243.       The data packet parameter is a pointer to the following structure. 
  15244.  
  15245.             typedef struct _VCAEDCOLORKEY {
  15246.             BOOL       bColorKeying;
  15247.              } VCAEDCOLORKEY;
  15248.  
  15249.             typedef VCAEDCOLORKEY FAR * PVCAEDCOLORKEY;
  15250.  
  15251.  
  15252. ΓòÉΓòÉΓòÉ <hidden> VCAI_EDCOLORKEY (81h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15253.  
  15254. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15255. ΓöéField                    C Datatype        Γöé
  15256. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15257. ΓöéPointer to structure     PVCAEDCOLORKEY    Γöé
  15258. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15259.  
  15260.  
  15261. ΓòÉΓòÉΓòÉ <hidden> VCAI_EDCOLORKEY (81h) - ΓòÉΓòÉΓòÉ
  15262.  
  15263. Category: 
  15264.    VIDEO_IOCTL_CAT (140) 
  15265.  Function: 
  15266.    VCAI_EDCOLORKEY (81h) 
  15267.  Description: 
  15268.    Enable/Disable Transparent Color 
  15269.  
  15270.  Select an item: 
  15271.  
  15272.   Description
  15273.   Parameter Packet Format
  15274.   Data Packet Format
  15275.  
  15276.  
  15277. ΓòÉΓòÉΓòÉ 16.4.22. VCAI_SETCOLORKEY (82h) - Set Color Key/Transparent Color ΓòÉΓòÉΓòÉ
  15278.  
  15279.  
  15280. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCOLORKEY (82h) - Description ΓòÉΓòÉΓòÉ
  15281.  
  15282. This IOCtl sets the colors that video replaces when color keying is enabled and 
  15283. the monitor is enabled. 
  15284.  
  15285.  
  15286. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCOLORKEY (82h) - Parameter Packet Format ΓòÉΓòÉΓòÉ
  15287.  
  15288. Not used.  The packet pointer must be NULL. 
  15289.  
  15290.  
  15291. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCOLORKEY (82h) - Pointer to structure ΓòÉΓòÉΓòÉ
  15292.  
  15293.  Pointer to structure 
  15294.       The data packet parameter is a pointer to the following structure. 
  15295.  
  15296.             typedef struct _VCASETCOLORKEY {
  15297.             ULONG       ulColorKey;
  15298.              } VCASETCOLORKEY;
  15299.  
  15300.             typedef VCASETCOLORKEY FAR * PVCASETCOLORKEY;
  15301.  
  15302.  
  15303. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCOLORKEY (82h) - Data Packet Format ΓòÉΓòÉΓòÉ
  15304.  
  15305. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  15306. ΓöéField                    C Datatype         Γöé
  15307. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  15308. ΓöéPointer to structure     PVCASETCOLORKEY    Γöé
  15309. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  15310.  
  15311.  
  15312. ΓòÉΓòÉΓòÉ <hidden> VCAI_SETCOLORKEY (82h) - ΓòÉΓòÉΓòÉ
  15313.  
  15314. Category: 
  15315.    VIDEO_IOCTL_CAT (140) 
  15316.  Function: 
  15317.    VCAI_SETCOLORKEY (82h) 
  15318.  Description: 
  15319.    Set Color Key/Transparent Color 
  15320.  
  15321.  Select an item: 
  15322.  
  15323.   Description
  15324.   Parameter Packet Format
  15325.   Data Packet Format
  15326.  
  15327.  
  15328. ΓòÉΓòÉΓòÉ 17. Data Types ΓòÉΓòÉΓòÉ
  15329.  
  15330. This section describes data types in C language. 
  15331.  
  15332.  
  15333. ΓòÉΓòÉΓòÉ 17.1. audio_update ΓòÉΓòÉΓòÉ
  15334.  
  15335. This structure contains fields for the AUDIO_UPDATE IOCtl. 
  15336.  
  15337. typedef struct _audio_update {
  15338. CHAR         iobuf_type;      /*  Transmit or receive. */
  15339. CHAR FAR    *buffer_address;  /*  Address of buffer be added. */
  15340. ULONG        buffer_length;   /*  Length of buffer to be added. */
  15341. USHORT       rc;              /*  Return code. */
  15342. void FAR    *reserved;        /*  Reserved. */
  15343.  } audio_update;
  15344.  
  15345. typedef struct audio_update FAR *UPDATE;
  15346.  
  15347.  
  15348. ΓòÉΓòÉΓòÉ <hidden> audio_update Parameter - iobuf_type ΓòÉΓòÉΓòÉ
  15349.  
  15350.  iobuf_type (CHAR) 
  15351.     Transmit or receive iobuf.  The defined values for this field are: 
  15352.  
  15353.         XMIT_IOBUF   0
  15354.         REC_IOBUF    1
  15355.  
  15356.  
  15357. ΓòÉΓòÉΓòÉ <hidden> audio_update Parameter - buffer_address ΓòÉΓòÉΓòÉ
  15358.  
  15359.  buffer_address (CHAR FAR *) 
  15360.     Address of buffer be added. 
  15361.  
  15362.  
  15363. ΓòÉΓòÉΓòÉ <hidden> audio_update Parameter - buffer_length ΓòÉΓòÉΓòÉ
  15364.  
  15365.  buffer_length (ULONG) 
  15366.     Length of buffer to be added. 
  15367.  
  15368.  
  15369. ΓòÉΓòÉΓòÉ <hidden> audio_update Parameter - rc ΓòÉΓòÉΓòÉ
  15370.  
  15371.  rc (USHORT) 
  15372.     Return code.  The following values are defined for rc. 
  15373.  
  15374.         MAX_NUM_BUFFERS_REACHED          9
  15375.         UPDATE_GENERAL_FAILURE          10
  15376.         INVALID_BUFFER_LENGTH           11
  15377.  
  15378.  
  15379. ΓòÉΓòÉΓòÉ <hidden> audio_update Parameter - reserved ΓòÉΓòÉΓòÉ
  15380.  
  15381.  reserved (void FAR *) 
  15382.     Reserved. 
  15383.  
  15384.  
  15385. ΓòÉΓòÉΓòÉ 17.2. BOOL ΓòÉΓòÉΓòÉ
  15386.  
  15387. Boolean. 
  15388.  
  15389. Valid values are FALSE, which is 0, and TRUE, which is 1. 
  15390.  
  15391. typedef unsigned long BOOL;
  15392.  
  15393.  
  15394. ΓòÉΓòÉΓòÉ 17.3. BYTE ΓòÉΓòÉΓòÉ
  15395.  
  15396. A byte. 
  15397.  
  15398. typedef unsigned char BYTE;
  15399.  
  15400.  
  15401. ΓòÉΓòÉΓòÉ 17.4. CHAR ΓòÉΓòÉΓòÉ
  15402.  
  15403. Single-byte character. 
  15404.  
  15405. #define CHAR char
  15406.  
  15407.  
  15408. ΓòÉΓòÉΓòÉ 17.5. CONTROL_PARM ΓòÉΓòÉΓòÉ
  15409.  
  15410. This data structure contains fields for the pParm and ulParmSize fields of the 
  15411. DDCMDCONTROL data structure. 
  15412.  
  15413. typedef struct _CONTROL_PARM {
  15414. ULONG   ulTime;  /*  Time in milliseconds. */
  15415.  } CONTROL_PARM;
  15416.  
  15417.  
  15418. ΓòÉΓòÉΓòÉ <hidden> CONTROL_PARM Parameter - ulTime ΓòÉΓòÉΓòÉ
  15419.  
  15420.  ulTime (ULONG) 
  15421.     Specifies the time in milliseconds.  The stream handler sets the cue time 
  15422.     when the ulCmd field of the DDCMDCONTROL data structure is 
  15423.     DDCMD_ENABLE_EVENT.  The PDD returns the current time for DDCMD_STOP and 
  15424.     DDCMD_PAUSE. 
  15425.  
  15426.  
  15427. ΓòÉΓòÉΓòÉ 17.6. DDCMDCOMMON ΓòÉΓòÉΓòÉ
  15428.  
  15429. This data structure contains common fields between all DDCMD data structures. 
  15430.  
  15431. typedef struct _ddcmd_common_parm {
  15432. ULONG     ulFunction;  /*  Function requested by stream handler. */
  15433. HSTREAM   hStream;     /*  Data stream instance. */
  15434.  } DDCMDCOMMON;
  15435.  
  15436.  
  15437. ΓòÉΓòÉΓòÉ <hidden> DDCMDCOMMON Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15438.  
  15439.  ulFunction (ULONG) 
  15440.     Specifies the function requested by the stream handler. 
  15441.  
  15442.  
  15443. ΓòÉΓòÉΓòÉ <hidden> DDCMDCOMMON Parameter - hStream ΓòÉΓòÉΓòÉ
  15444.  
  15445.  hStream (HSTREAM) 
  15446.     Specifies the data stream instance for this event. 
  15447.  
  15448.  
  15449. ΓòÉΓòÉΓòÉ 17.7. DDCMDCONTROL ΓòÉΓòÉΓòÉ
  15450.  
  15451. This data structure contains fields for the DDCMD_CONTROL message. 
  15452.  
  15453. typedef struct _ddcmd_control_parm {
  15454. ULONG     ulFunction;  /*  Function requested. */
  15455. HSTREAM   hStream;     /*  Stream handle. */
  15456. HEVENT    hEvent;      /*  Event handle. */
  15457. ULONG     ulCmd;       /*  Flags. */
  15458. PVOID     pParm;       /*  Pointer to CONTROL_PARM. */
  15459. ULONG     ulParmSize;  /*  See CONTROL_PARM. */
  15460.  } DDCMDCONTROL;
  15461.  
  15462.  
  15463. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15464.  
  15465.  ulFunction (ULONG) 
  15466.     Specifies the function requested by the stream handler. 
  15467.  
  15468.  
  15469. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - hStream ΓòÉΓòÉΓòÉ
  15470.  
  15471.  hStream (HSTREAM) 
  15472.     Specifies the stream handle that identifies the stream instance for this 
  15473.     event. 
  15474.  
  15475.  
  15476. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - hEvent ΓòÉΓòÉΓòÉ
  15477.  
  15478.  hEvent (HEVENT) 
  15479.     Event handle. 
  15480.  
  15481.  
  15482. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - ulCmd ΓòÉΓòÉΓòÉ
  15483.  
  15484.  ulCmd (ULONG) 
  15485.     Defines the following flags: 
  15486.  
  15487.       DDCMD_START 
  15488.          Starts a device. 
  15489.  
  15490.       DDCMD_STOP 
  15491.          Stops a device and returns the current stream time in milliseconds. 
  15492.          All buffers in the PDD are flushed and everything is reset to 0.  The 
  15493.          device driver sends the current stream time back to the stream handler 
  15494.          in milliseconds (using the pParm and ulParmSize fields).  For example, 
  15495.          return a ULONG of stream time (in milliseconds) and the ULONG of 4 
  15496.          bytes is input in the ulParmSize field. 
  15497.  
  15498.       DDCMD_PAUSE 
  15499.          Pauses the device and returns the current stream time in milliseconds. 
  15500.          Unlike DDCMD_STOP, DDCMD_PAUSE is not destructive.  The device driver 
  15501.          is able to resume its function at a later time, exactly where it was 
  15502.          paused.  DDCMD_ PAUSE returns the current stream time in milliseconds 
  15503.          within the pParm field. 
  15504.  
  15505.       DDCMD_RESUME 
  15506.          Resumes a currently paused stream.  DDCMD_RESUME is only honored if 
  15507.          the stream was paused previously.  If the stream was stopped and the 
  15508.          stream handler issues DDCMD_RESUME, an ERROR_INVALID_SEQUENCE is 
  15509.          returned. 
  15510.  
  15511.       DDCMD_ENABLE_EVENT 
  15512.          Enables event detection if your PDD supports events.  The event 
  15513.          message is sent to the device driver and reviews the structure.  The 
  15514.          hEvent field is a unique handle that signifies the event. pParm 
  15515.          contains the stream time with which the event should be detected. 
  15516.          This command would be honored whether currently in a streaming state, 
  15517.          pause, or stop. 
  15518.  
  15519.          For example, a stream handler is programmed to be detected at 1000 
  15520.          milliseconds in the stream.  It sends a DDCMD_ENABLE_EVENT to the 
  15521.          device driver with a unique handle event (hEvent) and 1000 
  15522.          milliseconds stated in the pParm field.  The device driver obtains the 
  15523.          handle event, makes sure there are no duplicate entries, and adds the 
  15524.          hEvent to a link list or array (depending on how the device driver is 
  15525.          implemented).  The device driver now knows it must report an event 
  15526.          back to the stream handler when 1000 milliseconds has been reached in 
  15527.          the stream.  See SHD_REPORT_EVENT for further information. 
  15528.  
  15529.       DDCMD_DISABLE_EVENT 
  15530.          Disables event detection in the device driver.  An event handle is 
  15531.          passed from the structure.  The device driver searchs its linked list 
  15532.          or array to find the matching event handle and deletes it from the 
  15533.          list. 
  15534.  
  15535.       DDCMD_PAUSE_TIME 
  15536.          Pauses the time but not the stream. 
  15537.  
  15538.       DDCMD_RESUME_TIME 
  15539.          Resumes the time. 
  15540.  
  15541.  
  15542. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - pParm ΓòÉΓòÉΓòÉ
  15543.  
  15544.  pParm (PVOID) 
  15545.     Pointer to the CONTROL_PARM data structure. 
  15546.  
  15547.  
  15548. ΓòÉΓòÉΓòÉ <hidden> DDCMDCONTROL Parameter - ulParmSize ΓòÉΓòÉΓòÉ
  15549.  
  15550.  ulParmSize (ULONG) 
  15551.     Size of the CONTROL_PARM data structure. 
  15552.  
  15553.  
  15554. ΓòÉΓòÉΓòÉ 17.8. DDCMDDEREGISTER ΓòÉΓòÉΓòÉ
  15555.  
  15556. This data structure contains fields for the DDCMD_DEREG_STREAM message. 
  15557.  
  15558. typedef struct _ddcmd_deregister_parm {
  15559. ULONG     ulFunction;  /*  Function requested by stream handler. */
  15560. HSTREAM   hStream;     /*  Stream handle. */
  15561.  } DDCMDDEREGISTER;
  15562.  
  15563.  
  15564. ΓòÉΓòÉΓòÉ <hidden> DDCMDDEREGISTER Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15565.  
  15566.  ulFunction (ULONG) 
  15567.     Specifies the function requested by the stream handler. 
  15568.  
  15569.  
  15570. ΓòÉΓòÉΓòÉ <hidden> DDCMDDEREGISTER Parameter - hStream ΓòÉΓòÉΓòÉ
  15571.  
  15572.  hStream (HSTREAM) 
  15573.     Specifies the stream handle needed at interrupt time. 
  15574.  
  15575.  
  15576. ΓòÉΓòÉΓòÉ 17.9. DDCMDREADWRITE ΓòÉΓòÉΓòÉ
  15577.  
  15578. This data structure contains fields for the DDCMD_READ and DDCMD_WRITE 
  15579. messages. 
  15580.  
  15581. typedef struct _ddcmd_readwrite_parm {
  15582. ULONG     ulFunction;    /*  Function requested by stream handler. */
  15583. HSTREAM   hStream;       /*  Stream handle. */
  15584. PVOID     pBuffer;       /*  Buffer pointer. */
  15585. ULONG     ulBufferSize;  /*  Buffer size. */
  15586. PVOID     pProcessLin;   /*  Process linear record pointer. */
  15587.  } DDCMDREADWRITE;
  15588.  
  15589.  
  15590. ΓòÉΓòÉΓòÉ <hidden> DDCMDREADWRITE Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15591.  
  15592.  ulFunction (ULONG) 
  15593.     Specifies the function requested by the stream handler. 
  15594.  
  15595.  
  15596. ΓòÉΓòÉΓòÉ <hidden> DDCMDREADWRITE Parameter - hStream ΓòÉΓòÉΓòÉ
  15597.  
  15598.  hStream (HSTREAM) 
  15599.     Specifies the stream handle that identifies the stream instance for this 
  15600.     event. 
  15601.  
  15602.  
  15603. ΓòÉΓòÉΓòÉ <hidden> DDCMDREADWRITE Parameter - pBuffer ΓòÉΓòÉΓòÉ
  15604.  
  15605.  pBuffer (PVOID) 
  15606.     Buffer pointer of the empty buffer that the device driver fills from its 
  15607.     record operation. 
  15608.  
  15609.  
  15610. ΓòÉΓòÉΓòÉ <hidden> DDCMDREADWRITE Parameter - ulBufferSize ΓòÉΓòÉΓòÉ
  15611.  
  15612.  ulBufferSize (ULONG) 
  15613.     Specifies the buffer size of the empty buffer. 
  15614.  
  15615.  
  15616. ΓòÉΓòÉΓòÉ <hidden> DDCMDREADWRITE Parameter - pProcessLin ΓòÉΓòÉΓòÉ
  15617.  
  15618.  pProcessLin (PVOID) 
  15619.     Provides the 32-bit process linear address to a Ring 3 stream handler so 
  15620.     the stream handler will have access to the buffers if a GDT or physical 
  15621.     address is requested. 
  15622.  
  15623.  
  15624. ΓòÉΓòÉΓòÉ 17.10. DDCMDREGISTER ΓòÉΓòÉΓòÉ
  15625.  
  15626. This data structure contains fields for the DDCMD_REG_STREAM message. 
  15627.  
  15628. typedef struct _ddcmd_register_parm {
  15629. ULONG     ulFunction;         /*  Function requested by stream handler. */
  15630. HSTREAM   hStream;            /*  Stream handle. */
  15631. ULONG     ulSysFileNum;       /*  Device handle. */
  15632. PSHDFN    pSHDEntryPoint;     /*  Stream handler entry point. */
  15633. ULONG     ulStreamOperation;  /*  Stream operation. */
  15634. SPCBKEY   spcbkey;            /*  Input to the VSD or PDD (optional) buffer size. */
  15635. ULONG     ulBufSize;          /*  VSD or PDD output (optional) buffer size in bytes. */
  15636. ULONG     ulNumBufs;          /*  VSD or PDD output (optional) # of buffers for SPCB. */
  15637. ULONG     ulAddressType;      /*  VSD or PDD output (required) addr ptr type to data buffer. */
  15638. ULONG     ulBytesPerUnit;     /*  VSD or PDD output (unused, set to zero). */
  15639. MMTIME    mmtimePerUnit;      /*  VSD or PDD output (Unused, set to zero). */
  15640. E_DCB     dcbAudio;           /*  Stream handler DCB. */
  15641. HID       hid;                /*  Stream handler ID. */
  15642.  } DDCMDREGISTER;
  15643.  
  15644.  
  15645. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15646.  
  15647.  ulFunction (ULONG) 
  15648.     Specifies the function requested by the stream handler. 
  15649.  
  15650.  
  15651. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - hStream ΓòÉΓòÉΓòÉ
  15652.  
  15653.  hStream (HSTREAM) 
  15654.     Specifies the stream handle needed at interrupt time. 
  15655.  
  15656.  
  15657. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulSysFileNum ΓòÉΓòÉΓòÉ
  15658.  
  15659.  ulSysFileNum (ULONG) 
  15660.     Specifies the device handle so the VSD or PDD can map the device instance 
  15661.     to hStream.  This field has to map with how the device has been initialized 
  15662.     during AUDIO_INIT. 
  15663.  
  15664.  
  15665. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - pSHDEntryPoint ΓòÉΓòÉΓòÉ
  15666.  
  15667.  pSHDEntryPoint (PSHDFN) 
  15668.     Specifies the stream handler entry point so that the device driver can call 
  15669.     back into the stream handler during streaming time to report interrupts and 
  15670.     events. 
  15671.  
  15672.  
  15673. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulStreamOperation ΓòÉΓòÉΓòÉ
  15674.  
  15675.  ulStreamOperation (ULONG) 
  15676.     Specifies the stream operation (record or playback).  The device driver 
  15677.     should verify with how it has been initialized through IOCtls.  The 
  15678.     following stream operations are defined (VSDs should verify with VSD_SET or 
  15679.     VSD_OPEN settings): 
  15680.  
  15681.       STREAM_OPERATION_CONSUME 
  15682.          Playback. 
  15683.       STREAM_OPERATION_PRODUCE 
  15684.          Record. 
  15685.  
  15686.  
  15687. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - spcbkey ΓòÉΓòÉΓòÉ
  15688.  
  15689.  spcbkey (SPCBKEY) 
  15690.     Specifies input to the VSD or PDD (optional) buffer size. 
  15691.  
  15692.  
  15693. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulBufSize ΓòÉΓòÉΓòÉ
  15694.  
  15695.  ulBufSize (ULONG) 
  15696.     Specifies VSD or PDD output (optional) buffer size in bytes for SPCB. 
  15697.  
  15698.  
  15699. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulNumBufs ΓòÉΓòÉΓòÉ
  15700.  
  15701.  ulNumBufs (ULONG) 
  15702.     Specifies VSD or PDD output (optional) number of buffers for SPCB. 
  15703.  
  15704.  
  15705. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulAddressType ΓòÉΓòÉΓòÉ
  15706.  
  15707.  ulAddressType (ULONG) 
  15708.     Specifies VSD or PDD output (required) address pointer type to data buffer. 
  15709.     The VSD or PDD tells the stream handler what type of address pointer it 
  15710.     expects the data buffer to be.  The stream handler then requests this 
  15711.     address type to the SSM, so that the Sync/Stream Manager will send the 
  15712.     correct type for each buffer request. 
  15713.  
  15714.       ADDRESS_TYPE_VIRTUAL 
  15715.          0 
  15716.       ADDRESS_TYPE_PHYSICAL 
  15717.          1 
  15718.       ADDRESS_TYPE_LINEAR 
  15719.          2 
  15720.  
  15721.  
  15722. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - ulBytesPerUnit ΓòÉΓòÉΓòÉ
  15723.  
  15724.  ulBytesPerUnit (ULONG) 
  15725.     Specifies VSD or PDD output (unused, set to zero).  Device driver timing. 
  15726.  
  15727.  
  15728. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - mmtimePerUnit ΓòÉΓòÉΓòÉ
  15729.  
  15730.  mmtimePerUnit (MMTIME) 
  15731.     Specifies VSD or PDD output.  Device driver timing.  (Unused, set to zero.) 
  15732.  
  15733.  
  15734. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - dcbAudio ΓòÉΓòÉΓòÉ
  15735.  
  15736.  dcbAudio (E_DCB) 
  15737.     Specifies the input stream handler device control block (DCB). 
  15738.  
  15739.  
  15740. ΓòÉΓòÉΓòÉ <hidden> DDCMDREGISTER Parameter - hid ΓòÉΓòÉΓòÉ
  15741.  
  15742.  hid (HID) 
  15743.     Specifies the input stream handler ID. 
  15744.  
  15745.  
  15746. ΓòÉΓòÉΓòÉ 17.11. DDCMDSETUP ΓòÉΓòÉΓòÉ
  15747.  
  15748. This data structure contains fields for the DDCMD_SETUP message. 
  15749.  
  15750. typedef struct _ddcmd_setup_parm {
  15751. ULONG         ulFunction;       /*  Function requested by stream handler. */
  15752. HSTREAM       hStream;          /*  Stream handle. */
  15753. PSETUP_PARM   pSetupParm;       /*  Pointer to SETUP_PARM. */
  15754. ULONG         ulSetupParmSize;  /*  Size of SETUP_PARM. */
  15755.  } DDCMDSETUP;
  15756.  
  15757.  
  15758. ΓòÉΓòÉΓòÉ <hidden> DDCMDSETUP Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15759.  
  15760.  ulFunction (ULONG) 
  15761.     Specifies the function requested by the stream handler. 
  15762.  
  15763.  
  15764. ΓòÉΓòÉΓòÉ <hidden> DDCMDSETUP Parameter - hStream ΓòÉΓòÉΓòÉ
  15765.  
  15766.  hStream (HSTREAM) 
  15767.     Specifies the stream handle that identifies the stream instance for this 
  15768.     event. 
  15769.  
  15770.  
  15771. ΓòÉΓòÉΓòÉ <hidden> DDCMDSETUP Parameter - pSetupParm ΓòÉΓòÉΓòÉ
  15772.  
  15773.  pSetupParm (PSETUP_PARM) 
  15774.     Points to the SETUP_PARM data structure. 
  15775.  
  15776.  
  15777. ΓòÉΓòÉΓòÉ <hidden> DDCMDSETUP Parameter - ulSetupParmSize ΓòÉΓòÉΓòÉ
  15778.  
  15779.  ulSetupParmSize (ULONG) 
  15780.     The size of the SETUP_PARM data structure. 
  15781.  
  15782.  
  15783. ΓòÉΓòÉΓòÉ 17.12. DDCMDSTATUS ΓòÉΓòÉΓòÉ
  15784.  
  15785. This data structure contains fields for the DDCMD_STATUS message. 
  15786.  
  15787. typedef struct _ddcmd_status_parm {
  15788. ULONG          ulFunction;    /*  Function requested by stream handler. */
  15789. HSTREAM        hStream;       /*  Stream handle. */
  15790. PSTATUS_PARM   pStatus;       /*  Pointer to STATUS_PARM. */
  15791. ULONG          ulStatusSize;  /*  Size or position time. */
  15792.  } DDCMDSTATUS;
  15793.  
  15794.  
  15795. ΓòÉΓòÉΓòÉ <hidden> DDCMDSTATUS Parameter - ulFunction ΓòÉΓòÉΓòÉ
  15796.  
  15797.  ulFunction (ULONG) 
  15798.     Specifies the function requested by the stream handler. 
  15799.  
  15800.  
  15801. ΓòÉΓòÉΓòÉ <hidden> DDCMDSTATUS Parameter - hStream ΓòÉΓòÉΓòÉ
  15802.  
  15803.  hStream (HSTREAM) 
  15804.     Specifies the stream handle that identifies the stream instance for this 
  15805.     event. 
  15806.  
  15807.  
  15808. ΓòÉΓòÉΓòÉ <hidden> DDCMDSTATUS Parameter - pStatus ΓòÉΓòÉΓòÉ
  15809.  
  15810.  pStatus (PSTATUS_PARM) 
  15811.     A pointer to the current position time as output.  See STATUS_PARM. 
  15812.  
  15813.  
  15814. ΓòÉΓòÉΓòÉ <hidden> DDCMDSTATUS Parameter - ulStatusSize ΓòÉΓòÉΓòÉ
  15815.  
  15816.  ulStatusSize (ULONG) 
  15817.     Specifies the size or position time as output. 
  15818.  
  15819.  
  15820. ΓòÉΓòÉΓòÉ 17.13. E_DCB ΓòÉΓòÉΓòÉ
  15821.  
  15822. This structure contains device-specific information.  It is used at stream 
  15823. creation by the application media control device to deliver device-specific 
  15824. information to the source or target stream handlers. 
  15825.  
  15826. typedef struct _E_DCB {
  15827. ULONG   ulDCBLen;                 /*  Length of structure. */
  15828. SZ      szDevName[MAX_SPI_NAME];  /*  Device driver name. */
  15829. ULONG   ulSysFileNum;             /*  File handle number. */
  15830.  } E_DCB;
  15831.  
  15832. typedef E_DCB FAR *PE_DCB;
  15833.  
  15834.  
  15835. ΓòÉΓòÉΓòÉ <hidden> E_DCB Parameter - ulDCBLen ΓòÉΓòÉΓòÉ
  15836.  
  15837.  ulDCBLen (ULONG) 
  15838.     Length of the device control block. 
  15839.  
  15840.  
  15841. ΓòÉΓòÉΓòÉ <hidden> E_DCB Parameter - szDevName[MAX_SPI_NAME] ΓòÉΓòÉΓòÉ
  15842.  
  15843.  szDevName[MAX_SPI_NAME] (SZ) 
  15844.     Identifies the device driver that the stream handler connects to for a 
  15845.     particular stream instance.  For stream handler device drivers, 
  15846.     inter-device communication (IDC) is used to call the physical device 
  15847.     driver.  The device driver name must not be more than eight characters 
  15848.     (excluding the file extension). 
  15849.  
  15850.  
  15851. ΓòÉΓòÉΓòÉ <hidden> E_DCB Parameter - ulSysFileNum ΓòÉΓòÉΓòÉ
  15852.  
  15853.  ulSysFileNum (ULONG) 
  15854.     File handle number. 
  15855.  
  15856.  
  15857. ΓòÉΓòÉΓòÉ 17.14. HEVENT ΓòÉΓòÉΓòÉ
  15858.  
  15859. Event handle. 
  15860.  
  15861. typedef ULONG HEVENT;
  15862.  
  15863.  
  15864. ΓòÉΓòÉΓòÉ 17.15. HID ΓòÉΓòÉΓòÉ
  15865.  
  15866. Stream handler ID. 
  15867.  
  15868. typedef ULONG HID;
  15869.  
  15870.  
  15871. ΓòÉΓòÉΓòÉ 17.16. HSTREAM ΓòÉΓòÉΓòÉ
  15872.  
  15873. Stream handle. 
  15874.  
  15875. typedef ULONG HSTREAM;
  15876.  
  15877.  
  15878. ΓòÉΓòÉΓòÉ 17.17. HVSD ΓòÉΓòÉΓòÉ
  15879.  
  15880. VSD handle. 
  15881.  
  15882. typedef PVOID HVSD;
  15883.  
  15884.  
  15885. ΓòÉΓòÉΓòÉ 17.18. HWND ΓòÉΓòÉΓòÉ
  15886.  
  15887. Window handle. 
  15888.  
  15889. typedef LHANDLE HWND;
  15890.  
  15891.  
  15892. ΓòÉΓòÉΓòÉ 17.19. LINECONNECTIONS ΓòÉΓòÉΓòÉ
  15893.  
  15894. This structure contains data for the VSD_QUERYMIXCONNECTIONS and the 
  15895. VSD_SETMIXCONNECTIONS messages, and the MIX_GETCONNECTIONS and 
  15896. MIX_SETCONNECTIONS IOCtls. 
  15897.  
  15898. typedef struct _LINECONNECTIONS {
  15899. ULONG   ulLength;       /*  Length of the structure. */
  15900. ULONG   ulConnections;  /*  Connection information. */
  15901. ULONG   ulLine;         /*  Line to get connections information for. */
  15902.  } LINECONNECTIONS;
  15903.  
  15904. typedef LINECONNECTIONS FAR *PLINECONNECTIONS;
  15905.  
  15906.  
  15907. ΓòÉΓòÉΓòÉ <hidden> LINECONNECTIONS Parameter - ulLength ΓòÉΓòÉΓòÉ
  15908.  
  15909.  ulLength (ULONG) 
  15910.     Length of the structure. 
  15911.  
  15912.  
  15913. ΓòÉΓòÉΓòÉ <hidden> LINECONNECTIONS Parameter - ulConnections ΓòÉΓòÉΓòÉ
  15914.  
  15915.  ulConnections (ULONG) 
  15916.     Line(s) that ulLine is connected to. 
  15917.  
  15918.     Valid flags are: 
  15919.  
  15920.       SINK_LINE_OUT 
  15921.          Line out connection. 
  15922.  
  15923.       SINK_SPEAKER 
  15924.          Speaker connection. 
  15925.  
  15926.       SINK_HEADPHONES 
  15927.          Headphones connection. 
  15928.  
  15929.       SINK_GENERIC 
  15930.          Generic connection. 
  15931.  
  15932.       SINK_NULL 
  15933.          Null connection. 
  15934.  
  15935.  
  15936. ΓòÉΓòÉΓòÉ <hidden> LINECONNECTIONS Parameter - ulLine ΓòÉΓòÉΓòÉ
  15937.  
  15938.  ulLine (ULONG) 
  15939.     Line to get connections information for. 
  15940.  
  15941.     The line described in ulLine field can have the following values: 
  15942.  
  15943.       SOURCE_SYNTHESIZER 
  15944.          Midi connection. 
  15945.  
  15946.       SOURCE_MIXER 
  15947.          Source mixer connection. 
  15948.  
  15949.       SOURCE_LINE 
  15950.          Line connection. 
  15951.  
  15952.       SOURCE_INTERNAL_AUDIO 
  15953.          Internal audio connection. 
  15954.  
  15955.       SOURCE_MICROPHONE 
  15956.          Microphone connection. 
  15957.  
  15958.       SOURCE_WAVE 
  15959.          Wave connection. 
  15960.  
  15961.       SOURCE_PC_SPEAKER 
  15962.          PC speaker connection. 
  15963.  
  15964.  
  15965. ΓòÉΓòÉΓòÉ 17.20. LONG ΓòÉΓòÉΓòÉ
  15966.  
  15967. Signed integer in the range -2 147 483 648 through 2 147 483 647. 
  15968.  
  15969. #define LONG long
  15970.  
  15971. Note:  Where this data type represents a graphic coordinate in world or model 
  15972.        space, its value is restricted to -134 217 728 through 134 217 727. 
  15973.  
  15974. A graphic coordinate in device or screen coordinates is restricted to -32 768 
  15975. through 32 767. 
  15976.  
  15977. The value of a graphic coordinate may be further restricted by any transforms 
  15978. currently in force, including the positioning of the origin of the window on 
  15979. the screen. In particular, coordinates in world or model space must not 
  15980. generate coordinate values after transformation (that is, in device or screen 
  15981. space) outside the range -32 768 through 32 767. 
  15982.  
  15983.  
  15984. ΓòÉΓòÉΓòÉ 17.21. MCI_AUDIO_BUFFER ΓòÉΓòÉΓòÉ
  15985.  
  15986. This structure contains fields for the AUDIO_BUFFER function. 
  15987.  
  15988. typedef struct _buffer {
  15989. ULONG   ulFlags;         /*  Indicates error condition. */
  15990. ULONG   ulReadBufSize;   /*  Data in Read queue. */
  15991. ULONG   ulWriteBufSize;  /*  Data in Write queue. */
  15992. ULONG   ulReadBufTime;   /*  Data in Read queue (in ms). */
  15993. ULONG   ulWriteBufTime;  /*  Data in Write queue (in ms). */
  15994. ULONG   ulReadBufMax;    /*  Max. data in Read queue. */
  15995. ULONG   ulWriteBufMax;   /*  Max. data in Write queue. */
  15996. ULONG   ulPosition;      /*  Position. */
  15997. ULONG   ulPositionType;  /*  Type of position units. */
  15998. LONG    lReadBufCap;     /*  Capacity of Read queue. */
  15999. LONG    lWriteBufCap;    /*  Capacity of Write queue. */
  16000. LONG    lRequestBufCap;  /*  Max. # of requests. */
  16001.  } MCI_AUDIO_BUFFER;
  16002.  
  16003. typedef MCI_AUDIO_BUFFER FAR *LPMCI_AUDIO_BUFFER;
  16004.  
  16005.  
  16006. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulFlags ΓòÉΓòÉΓòÉ
  16007.  
  16008.  ulFlags (ULONG) 
  16009.     Indicates an error condition occurred.  The possible error states that can 
  16010.     be flagged are: 
  16011.  
  16012.         AUDIO_UNDERRUN   1
  16013.         AUDIO_OVERRUN    2
  16014.  
  16015.  
  16016. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulReadBufSize ΓòÉΓòÉΓòÉ
  16017.  
  16018.  ulReadBufSize (ULONG) 
  16019.     Amount of data in Read queue in bytes. 
  16020.  
  16021.  
  16022. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulWriteBufSize ΓòÉΓòÉΓòÉ
  16023.  
  16024.  ulWriteBufSize (ULONG) 
  16025.     Amount of data in Write queue in bytes. 
  16026.  
  16027.  
  16028. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulReadBufTime ΓòÉΓòÉΓòÉ
  16029.  
  16030.  ulReadBufTime (ULONG) 
  16031.     Amount of data in Read queue in milliseconds. 
  16032.  
  16033.  
  16034. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulWriteBufTime ΓòÉΓòÉΓòÉ
  16035.  
  16036.  ulWriteBufTime (ULONG) 
  16037.     Amount of data in Write queue in milliseconds. 
  16038.  
  16039.  
  16040. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulReadBufMax ΓòÉΓòÉΓòÉ
  16041.  
  16042.  ulReadBufMax (ULONG) 
  16043.     Maximum number of bytes ever in Read queue. 
  16044.  
  16045.  
  16046. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulWriteBufMax ΓòÉΓòÉΓòÉ
  16047.  
  16048.  ulWriteBufMax (ULONG) 
  16049.     Maximum number of bytes ever in Write queue. 
  16050.  
  16051.  
  16052. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulPosition ΓòÉΓòÉΓòÉ
  16053.  
  16054.  ulPosition (ULONG) 
  16055.     Time count since beginning of operation. 
  16056.  
  16057.  
  16058. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - ulPositionType ΓòÉΓòÉΓòÉ
  16059.  
  16060.  ulPositionType (ULONG) 
  16061.     Specifies the type of position units.  The defined values for this field 
  16062.     are: 
  16063.  
  16064.         POS_MSECS       0    /* Position units in milliseconds
  16065.                                 since start                            */
  16066.         MIDI_CLOCKS     1    /* Position units in # of MIDI clocks
  16067.                                 since start                            */
  16068.         POS_BYTES       2    /* Position data in bytes                 */
  16069.         SMPTE_24       24    /* Position corresponds with SMPTE 24
  16070.                                 frames/sec                             */
  16071.         SMPTE_25       25    /* Position corresponds with SMPTE 25
  16072.                                 frames/sec                             */
  16073.         SMPTE_30DF     29    /* Position corresponds with SMPTE 30
  16074.                                 drop frame                             */
  16075.         SMPTE_30       30    /* Position corresponds with SMPTE 30
  16076.                                 frames/sec                             */
  16077.  
  16078.  
  16079. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - lReadBufCap ΓòÉΓòÉΓòÉ
  16080.  
  16081.  lReadBufCap (LONG) 
  16082.     Capacity of Read queue; -1 if variable. 
  16083.  
  16084.  
  16085. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - lWriteBufCap ΓòÉΓòÉΓòÉ
  16086.  
  16087.  lWriteBufCap (LONG) 
  16088.     Capacity of Write queue; -1 if variable. 
  16089.  
  16090.  
  16091. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_BUFFER Parameter - lRequestBufCap ΓòÉΓòÉΓòÉ
  16092.  
  16093.  lRequestBufCap (LONG) 
  16094.     Maximum number of requests that can be queued. 
  16095.  
  16096.  
  16097. ΓòÉΓòÉΓòÉ 17.22. MCI_AUDIO_CAPS ΓòÉΓòÉΓòÉ
  16098.  
  16099. This structure contains fields for the AUDIO_CAPABILITY function. 
  16100.  
  16101. typedef struct _MCI_AUDIO_CAPS {
  16102. ULONG   ulLength;         /*  Input.  Structure length. */
  16103. ULONG   ulSamplingRate;   /*  Input/Output.  Sampling rate to query. */
  16104. ULONG   ulChannels;       /*  Input/Output.  Channels to query. */
  16105. ULONG   ulBitsPerSample;  /*  Input/Output.  Bits per sample to query. */
  16106. ULONG   ulDataType;       /*  Input/Output.  RIFF data type to query. */
  16107. ULONG   ulOperation;      /*  Input/Output.  OPERATION_PLAY or OPERATION_RECORD. */
  16108. ULONG   ulSupport;        /*  Output.  Boolean. */
  16109. ULONG   ulDataSubType;    /*  Output.  Data subtype to use. */
  16110. ULONG   ulResourceUnits;  /*  Output.  Resource units in this mode. */
  16111. ULONG   ulResourceClass;  /*  Output.  Resource class for this mode. */
  16112. ULONG   ulBlockAlign;     /*  Output.  Block alignment for this mode. */
  16113. BOOL    fCanRecord;       /*  Unused */
  16114. ULONG   ulFlags;          /*  Output.  Flags. */
  16115. ULONG   ulCapability;     /*  Output.  Capability of the device. */
  16116.  } MCI_AUDIO_CAPS;
  16117.  
  16118. typedef MCI_AUDIO_CAPS FAR *PAUDIO_CAPS;
  16119.  
  16120.  
  16121. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulLength ΓòÉΓòÉΓòÉ
  16122.  
  16123.  ulLength (ULONG) 
  16124.     Input.  Structure length. 
  16125.  
  16126.  
  16127. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulSamplingRate ΓòÉΓòÉΓòÉ
  16128.  
  16129.  ulSamplingRate (ULONG) 
  16130.     Input/Output.  Sampling rate to query. 
  16131.  
  16132.  
  16133. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulChannels ΓòÉΓòÉΓòÉ
  16134.  
  16135.  ulChannels (ULONG) 
  16136.     Input/Output.  Channels to query. 
  16137.  
  16138.  
  16139. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulBitsPerSample ΓòÉΓòÉΓòÉ
  16140.  
  16141.  ulBitsPerSample (ULONG) 
  16142.     Input/Output.  Bits per sample to query. 
  16143.  
  16144.  
  16145. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulDataType ΓòÉΓòÉΓòÉ
  16146.  
  16147.  ulDataType (ULONG) 
  16148.     Input/Output. RIFF data type to query. Defines are found in MCIOS2.H. A 
  16149.     sample data type would be DATATYPE_WAVEFORM. 
  16150.  
  16151.  
  16152. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulOperation ΓòÉΓòÉΓòÉ
  16153.  
  16154.  ulOperation (ULONG) 
  16155.     Input/Output.  OPERATION_PLAY or OPERATION_RECORD. 
  16156.  
  16157.  
  16158. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulSupport ΓòÉΓòÉΓòÉ
  16159.  
  16160.  ulSupport (ULONG) 
  16161.     Output. Boolean. Indicates if the device driver supports this mode. 
  16162.  
  16163.     Following are the valid return codes for ulSupport: 
  16164.  
  16165.       SUPPORT_SUCCESS 
  16166.          Device supports this mode. 
  16167.  
  16168.       UNSUPPORTED_RATE 
  16169.          Unsupported sampling rate. 
  16170.  
  16171.       UNSUPPORTED_CHANNELS 
  16172.          Unsupported sampling rate. 
  16173.  
  16174.       UNSUPPORTED_BPS 
  16175.          Unsupported bits per sample. 
  16176.  
  16177.       UNSUPPORTED_DATATYPE 
  16178.          Unsupported data type. 
  16179.  
  16180.       UNSUPPORTED_OPERATION 
  16181.          Unsupported operation. 
  16182.  
  16183.  
  16184. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulDataSubType ΓòÉΓòÉΓòÉ
  16185.  
  16186.  ulDataSubType (ULONG) 
  16187.     Output. Data subtype to use. Returned by device. 
  16188.  
  16189.  
  16190. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulResourceUnits ΓòÉΓòÉΓòÉ
  16191.  
  16192.  ulResourceUnits (ULONG) 
  16193.     Output. Data subtype to use. Returned by device. 
  16194.  
  16195.  
  16196. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulResourceClass ΓòÉΓòÉΓòÉ
  16197.  
  16198.  ulResourceClass (ULONG) 
  16199.     Output. Resource class for this mode. Returned by device. 
  16200.  
  16201.  
  16202. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulBlockAlign ΓòÉΓòÉΓòÉ
  16203.  
  16204.  ulBlockAlign (ULONG) 
  16205.     Output. Block alignment for this mode. Returned by device. 
  16206.  
  16207.  
  16208. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - fCanRecord ΓòÉΓòÉΓòÉ
  16209.  
  16210.  fCanRecord (BOOL) 
  16211.     Unused 
  16212.  
  16213.  
  16214. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  16215.  
  16216.  ulFlags (ULONG) 
  16217.     Output. Flags. Returned by device. 
  16218.  
  16219.  
  16220. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CAPS Parameter - ulCapability ΓòÉΓòÉΓòÉ
  16221.  
  16222.  ulCapability (ULONG) 
  16223.     Output. Capability of the device. Returned by device. 
  16224.  
  16225.     ulCapability can contain the following driver capabilities:+ 
  16226.  
  16227.       SUPPORTED_MIX 
  16228.          Supports mixing capabilities. 
  16229.  
  16230.       SUPPORTED_RIFF_MODES 
  16231.          Supports Riff data types on audio init. 
  16232.  
  16233.       SUPPORTED_CAP 
  16234.          Supports capability IOCtls. 
  16235.  
  16236.  
  16237. ΓòÉΓòÉΓòÉ 17.23. MCI_AUDIO_CHANGE ΓòÉΓòÉΓòÉ
  16238.  
  16239. This structure contains fields for the AUDIO_STATUS function. 
  16240.  
  16241. typedef struct _MCI_AUDIO_CHANGE {
  16242. VOID FAR           *pvDevInfo;       /*  Pointer to information. */
  16243. LONG                lInput;          /*  Reserved. */
  16244. LONG                lOutput;         /*  Reserved. */
  16245. LONG                lMonitor;        /*  Record monitor level. */
  16246. LONG                lVolume;         /*  Volume setting. */
  16247. LONG                lVolumeDelay;    /*  Volume delay. */
  16248. LONG                lBalance;        /*  Balance setting. */
  16249. LONG                lBalanceDelay;   /*  Balance delay. */
  16250. LONG                lTreble;         /*  Treble tone-control setting. */
  16251. LONG                lBass;           /*  Base tone-control setting. */
  16252. LONG                lPitch;          /*  Pitch control setting. */
  16253. MCI_AUDIO_DEVID     rInputList[8];   /*  Input list. */
  16254. MCI_AUDIO_DEVID     rOutputList[8];  /*  Output list. */
  16255. LPMCI_AUDIO_DEVID   prMoreInputs;    /*  Pointer to additional input. */
  16256. LPMCI_AUDIO_DEVID   prMoreOutputs;   /*  Pointer to additional output. */
  16257. LONG                lGain;           /*  Gain control setting. */
  16258. VOID FAR           *pvModeInfo;      /*  Pointer to mode-specific info. */
  16259.  } MCI_AUDIO_CHANGE;
  16260.  
  16261. typedef MCI_AUDIO_CHANGE FAR *LPMCI_AUDIO_CHANGE;
  16262.  
  16263.  
  16264. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - pvDevInfo ΓòÉΓòÉΓòÉ
  16265.  
  16266.  pvDevInfo (VOID FAR *) 
  16267.     Pointer to a data structure containing device-dependent information. For 
  16268.     example, for the M-ACPA card, pvDevInfo points to a MCI_TRACK_INFO 
  16269.     structure.  This field is ignored if its value is NULL. 
  16270.  
  16271.  
  16272. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lInput ΓòÉΓòÉΓòÉ
  16273.  
  16274.  lInput (LONG) 
  16275.     Reserved.  Used in v0 for input select. 
  16276.  
  16277.  
  16278. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lOutput ΓòÉΓòÉΓòÉ
  16279.  
  16280.  lOutput (LONG) 
  16281.     Reserved.  Used in v0 for output select. 
  16282.  
  16283.  
  16284. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lMonitor ΓòÉΓòÉΓòÉ
  16285.  
  16286.  lMonitor (LONG) 
  16287.     Record monitor level. 
  16288.  
  16289.  
  16290. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lVolume ΓòÉΓòÉΓòÉ
  16291.  
  16292.  lVolume (LONG) 
  16293.     Volume setting; linear 0 min to 0x7FFFFFFF. 
  16294.  
  16295.  
  16296. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lVolumeDelay ΓòÉΓòÉΓòÉ
  16297.  
  16298.  lVolumeDelay (LONG) 
  16299.     Number of milliseconds over which change occurs. 
  16300.  
  16301.  
  16302. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lBalance ΓòÉΓòÉΓòÉ
  16303.  
  16304.  lBalance (LONG) 
  16305.     Balance setting 0 = left, 0x7FFFFFFF  = right. 
  16306.  
  16307.  
  16308. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lBalanceDelay ΓòÉΓòÉΓòÉ
  16309.  
  16310.  lBalanceDelay (LONG) 
  16311.     Number of milliseconds over which change occurs. 
  16312.  
  16313.  
  16314. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lTreble ΓòÉΓòÉΓòÉ
  16315.  
  16316.  lTreble (LONG) 
  16317.     Treble tone-control setting. 
  16318.  
  16319.  
  16320. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lBass ΓòÉΓòÉΓòÉ
  16321.  
  16322.  lBass (LONG) 
  16323.     Base tone-control setting. 
  16324.  
  16325.  
  16326. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lPitch ΓòÉΓòÉΓòÉ
  16327.  
  16328.  lPitch (LONG) 
  16329.     Pitch control setting. 
  16330.  
  16331.  
  16332. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - rInputList[8] ΓòÉΓòÉΓòÉ
  16333.  
  16334.  rInputList[8] (MCI_AUDIO_DEVID) 
  16335.     Input devices are specified using an array of MCI_AUDIO_DEVID data 
  16336.     structures in the rInputList field.  Unused entries are set to NULL_INPUT. 
  16337.     The MCI_AUDIO_DEVID structure permits device specification by type and 
  16338.     ordinal number (for those audio adapters that support more than one device 
  16339.     of a specific type).  For example, to specify stereo line input, set: 
  16340.  
  16341.         rInputList[0].ulDevType = STEREO_LINE_INPUT
  16342.         rInputList[0].ulDevNum  = 1
  16343.  
  16344.  
  16345. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - rOutputList[8] ΓòÉΓòÉΓòÉ
  16346.  
  16347.  rOutputList[8] (MCI_AUDIO_DEVID) 
  16348.     Output devices are specified using an array of MCI_AUDIO_DEVID data 
  16349.     structures in the rOutputList field.  Unused entries are set to 
  16350.     NULL_OUTPUT.  The MCI_AUDIO_DEVID structure permits device specification by 
  16351.     type and ordinal number (for those audio adapters that support more than 
  16352.     one device of a specific type).  For example, to specify stereo line 
  16353.     output, set: 
  16354.  
  16355.         rOutputList[0].ulDevType = STEREO_LINE_OUTPUT
  16356.         rOutputList[0].ulDevNum  = DEVICE_1.
  16357.  
  16358.  
  16359. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - prMoreInputs ΓòÉΓòÉΓòÉ
  16360.  
  16361.  prMoreInputs (LPMCI_AUDIO_DEVID) 
  16362.     Pointer to additional input device IDs. 
  16363.  
  16364.  
  16365. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - prMoreOutputs ΓòÉΓòÉΓòÉ
  16366.  
  16367.  prMoreOutputs (LPMCI_AUDIO_DEVID) 
  16368.     Pointer to additional output device IDs. 
  16369.  
  16370.  
  16371. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - lGain ΓòÉΓòÉΓòÉ
  16372.  
  16373.  lGain (LONG) 
  16374.     Input (record) gain-control setting. 
  16375.  
  16376.  
  16377. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CHANGE Parameter - pvModeInfo ΓòÉΓòÉΓòÉ
  16378.  
  16379.  pvModeInfo (VOID FAR *) 
  16380.     Pointer to a mode-specific data structure.  For MIDI, this points to a 
  16381.     MIDI_INFO structure. 
  16382.  
  16383.  
  16384. ΓòÉΓòÉΓòÉ 17.24. MCI_AUDIO_CONTROL ΓòÉΓòÉΓòÉ
  16385.  
  16386. This structure contains fields for the AUDIO_CONTROL function. 
  16387.  
  16388. typedef struct _MCI_AUDIO_CONTROL {
  16389. USHORT   usIOCtlRequest;
  16390. VOID    *pbRequestInfo;
  16391. ULONG    ulPosition;
  16392. SHORT    sReturnCode;
  16393.  } MCI_AUDIO_CONTROL;
  16394.  
  16395. typedef MCI_AUDIO_CONTROL FAR *LPMCI_AUDIO_CONTROL
  16396.  
  16397.  
  16398. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CONTROL Parameter - usIOCtlRequest ΓòÉΓòÉΓòÉ
  16399.  
  16400.  usIOCtlRequest (USHORT) 
  16401.     IOCtl request to be executed.  The defined values for this field are: 
  16402.  
  16403.       AUDIO_CHANGE (0) 
  16404.          Enables an application to change adapter characteristics.  It is 
  16405.          issued while the audio device is open.  The characteristics contained 
  16406.          in the MCI_AUDIO_CHANGE structure such as input source can be changed 
  16407.          by this request. 
  16408.  
  16409.          Note:  AUDIO_CHANGE requests have the potential to break the data 
  16410.                 flow.  Some audio devices might require that input, output, and 
  16411.                 monitor selections be performed prior to starting a change 
  16412.                 operation. 
  16413.  
  16414.          To change an adapter's characteristics, the desired values should be 
  16415.          placed in the respective fields and the request issued.  Notice that 
  16416.          all possible combinations of these fields are not necessarily 
  16417.          supported by the device driver.  Invalid combinations result in an 
  16418.          error returned by AUDIO_CHANGE. 
  16419.  
  16420.          The effects of issuing this request can vary for each requested 
  16421.          change.  If a given field is to remain unchanged, set that field to 
  16422.          AUDIO_IGNORE (-1). 
  16423.  
  16424.       AUDIO_START (1) 
  16425.          Initiates the flow of audio data to or from the adapter.  It also 
  16426.          causes the internal position and timing values to be set to the value 
  16427.          contained in ulPosition. Therefore, an immediate call to AUDIO_BUFFER 
  16428.          returns a position value equal to the ulPosition value specified in 
  16429.          AUDIO_START.  The audio device must be opened and initialized (through 
  16430.          OPEN and AUDIO_INIT requests) before calling AUDIO_START. Otherwise, 
  16431.          an error is returned. 
  16432.  
  16433.          There is no pbRequestInfo field for AUDIO_START. 
  16434.  
  16435.       AUDIO_STOP (2) 
  16436.          Stops the current activity in progress on the audio device.  For 
  16437.          example, if the device was recording, the recording activity would be 
  16438.          stopped.  This operation does not change the current configuration 
  16439.          (such as sampling rate, input source, and so forth) of the device; it 
  16440.          simply terminates the current operation.  Consequently, it also stops 
  16441.          data flow between the device driver and the application.  Any data 
  16442.          left in the buffers is discarded.  Notice that the Write buffers can 
  16443.          be drained using the AUDIO_WAIT request. Use the AUDIO_PAUSE operation 
  16444.          instead of AUDIO_STOP if the operation must be resumed at the point it 
  16445.          left off. 
  16446.  
  16447.          The ulPosition value is used to specify when the stop is to occur.  A 
  16448.          value of less than the current position or 0 results in an immediate 
  16449.          execution of the stop. 
  16450.  
  16451.          There is no pbRequestInfo field for AUDIO_STOP. 
  16452.  
  16453.       AUDIO_PAUSE (3) 
  16454.          Used to suspend all data flow between the application and the adapter. 
  16455.          This request does not flush the kernel buffers or the adapter buffers. 
  16456.          Data flow can be resumed by using AUDIO_RESUME. If recording, data is 
  16457.          lost during the time that the device driver is paused. 
  16458.  
  16459.          The pbRequestInfo value is used to specify when the pause is to occur. 
  16460.          A value of less than the current position results in an immediate 
  16461.          pause. 
  16462.  
  16463.          There is no pbRequestInfo field for AUDIO_PAUSE. 
  16464.  
  16465.       AUDIO_RESUME (4) 
  16466.          Used to resume the flow of data that was suspended by AUDIO_PAUSE. 
  16467.          Notice that an ulPosition value of non-zero is not currently defined 
  16468.          and should not be used. 
  16469.  
  16470.          There is no pbRequestInfo field for AUDIO_RESUME. 
  16471.  
  16472.  
  16473. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CONTROL Parameter - pbRequestInfo ΓòÉΓòÉΓòÉ
  16474.  
  16475.  pbRequestInfo 
  16476.     Pointer to a structure that contains information specific to each type of 
  16477.     IOCtl request.  See the IOCtl request descriptions above for specifics on 
  16478.     what pbRequestInfo points to for each request.  Notice that these requests 
  16479.     are executed at a point in time specified by the caller. 
  16480.  
  16481.  
  16482. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CONTROL Parameter - ulPosition ΓòÉΓòÉΓòÉ
  16483.  
  16484.  ulPosition (ULONG) 
  16485.     Number of units before the request should be executed.  This value is used 
  16486.     to specify cue points.  Caller requests are executed ulPosition number of 
  16487.     units from the beginning of the first Write operation after opening a 
  16488.     track.  Depending on the DSP code loaded and the current mode of operation, 
  16489.     units can be bytes, time, or some other unit of measure.  For example, to 
  16490.     increase the volume of a track after the first 1,000 milliseconds of data 
  16491.     have been written to the adapter, issue an AUDIO_CHANGE request with 
  16492.     ulPosition set to 1000.  This example assumes that the track information 
  16493.     pointed to by pbRequestInfo has been initialized appropriately, and that 
  16494.     MCI_AUDIO_BUFFER.ulPositionType = POS_MSECS. 
  16495.  
  16496.     If a request is made for a position number that has already occurred, it is 
  16497.     processed immediately.  Requests with a position number of 0 are also 
  16498.     processed immediately. 
  16499.  
  16500.  
  16501. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_CONTROL Parameter - sReturnCode ΓòÉΓòÉΓòÉ
  16502.  
  16503.  sReturnCode (SHORT) 
  16504.     Used to return any error code.  The defined values for this field are: 
  16505.  
  16506.         AC_UNINITED  1           /* Device must be initialized or loaded first */
  16507.         FULL_QUEUE   2           /* Max. number of requests exceeded */
  16508.         AC_UNPAUSED  3           /* Resume issued, but device not paused */
  16509.         INVALID_REQUEST      4   /* Bad MCI_AUDIO_CONTROL.usIOCtlRequest */
  16510.         AC_UNSTARTED         5   /* Device must be started first */
  16511.         INVALID_INPUT_LIST   7   /* Device in MCI_AUDIO_CHANGE.input_list is not
  16512.                                     supported */
  16513.         INVALID_OUTPUT_LIST  8   /* Device in MCI_AUDIO_CHANGE.output_list is not
  16514.                                     supported */
  16515.  
  16516.  
  16517. ΓòÉΓòÉΓòÉ 17.25. MCI_AUDIO_DEVID ΓòÉΓòÉΓòÉ
  16518.  
  16519. typedef struct _MCI_AUDIO_DEVID {
  16520. ULONG   ulDevType;
  16521. ULONG   ulDevNum;
  16522.  } MCI_AUDIO_DEVID;
  16523.  
  16524. typedef MCI_AUDIO_DEVID FAR *LPMCI_AUDIO_DEVID;
  16525.  
  16526.  
  16527. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_DEVID Parameter - ulDevType ΓòÉΓòÉΓòÉ
  16528.  
  16529.  ulDevType (ULONG) 
  16530.     Defined values for ulDevType are shown for input and output devices: 
  16531.  
  16532.         /* Input Devices */
  16533.         #define  NULL_INPUT                   0
  16534.         #define  STEREO_LINE_INPUT            1
  16535.         #define  LEFT_LINE_INPUT              2
  16536.         #define  RIGHT_LINE_INPUT             3
  16537.         #define  MIC_INPUT                    4
  16538.         #define  BOOSTED_MIC_INPUT            5
  16539.         #define  PHONE_LINE_INPUT             6
  16540.         #define  HANDSET_INPUT                7
  16541.         #define  SYNTH_INPUT                  8
  16542.         #define  DIGITAL_PHONE_LINE_INPUT     9
  16543.         #define  DIGITAL_HANDSET_INPUT       10
  16544.         #define  MIDI_IN_PORT                11
  16545.         #define  LOOPBACK                    12
  16546.         #define  DEFAULT_INPUT               0xFFFFFFFF
  16547.         /* Values between 0x20000000 and 0xFFFFFFFE are reserved */
  16548.  
  16549.         /* Output Devices */
  16550.         #define  NULL_OUTPUT                  0
  16551.         #define  STEREO_LINE_OUTPUT           1
  16552.         #define  LEFT_LINE_OUTPUT             2
  16553.         #define  RIGHT_LINE_OUTPUT            3
  16554.         #define  SPEAKER_OUTPUT               4
  16555.         #define  HEADPHONES_OUTPUT            5
  16556.         #define  PHONE_LINE_OUTPUT            6
  16557.         #define  HANDSET_OUTPUT               7
  16558.         #define  SYNTH_OUTPUT                 8
  16559.         #define  DIGITAL_PHONE_LINE_OUTPUT    9
  16560.         #define  DIGITAL_HANDSET_OUTPUT      10
  16561.         #define  MIDI_OUT_PORT               11
  16562.         #define  DEFAULT_OUTPUT              0xFFFFFFFF
  16563.         /* Values between 0x20000000 and 0xFFFFFFFE are reserved */
  16564.  
  16565.  
  16566. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_DEVID Parameter - ulDevNum ΓòÉΓòÉΓòÉ
  16567.  
  16568.  ulDevNum (ULONG) 
  16569.     The defined values for ulDevNum are: 
  16570.  
  16571.         #define  DEFAULT_DEVICE               0
  16572.         #define  DEVICE_1                     1
  16573.         #define  DEVICE_2                     2
  16574.  
  16575.  
  16576. ΓòÉΓòÉΓòÉ 17.26. MCI_AUDIO_HPI ΓòÉΓòÉΓòÉ
  16577.  
  16578. This structure contains fields for the AUDIO_HPI function. 
  16579.  
  16580. typedef struct _hpi {
  16581. VOID FAR              *pvEntry ();     /*  Pointer to direct-call entry point. */
  16582. VOID FAR              *pvCallBack ();  /*  Pointer to callback routine. */
  16583. LPMCI_AUDIO_IOBUFFER   prXBuff;        /*  Pointer to new Transmit buffer. */
  16584. LPMCI_AUDIO_IOBUFFER   prRBuff;        /*  Pointer to new Receive buffer. */
  16585. USHORT                 usFlags;        /*  Reserved. */
  16586.  } MCI_AUDIO_HPI;
  16587.  
  16588. typedef MCI_AUDIO_HPI FAR *LPMCI_AUDIO_HPI;
  16589.  
  16590.  
  16591. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_HPI Parameter - pvEntry () ΓòÉΓòÉΓòÉ
  16592.  
  16593.  pvEntry () (VOID FAR *) 
  16594.     Pointer to the direct-call entry point.  The direct call interface is 
  16595.     defined below. 
  16596.  
  16597.         void (far *iobuf.ep)(short funcid, void far *data, short len);
  16598.  
  16599.         /* Definitions for funcid */
  16600.  
  16601.         EP_OPEN       0
  16602.         EP_CLOSE      1
  16603.         EP_READ       2
  16604.         EP_WRITE      3
  16605.         EP_INIT       4
  16606.         EP_STATUS     5
  16607.         EP_CONTROL    6
  16608.         EP_BUFFER     7
  16609.         EP_LOAD       8
  16610.         EP_WAIT       9
  16611.         EP_HPI       10
  16612.         EP_UPDATE    11
  16613.         /* On return, AX contains an error code, or 0 if successful */
  16614.  
  16615.  
  16616. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_HPI Parameter - pvCallBack () ΓòÉΓòÉΓòÉ
  16617.  
  16618.  pvCallBack () (VOID FAR *) 
  16619.     Pointer to the callback routine.  The application passes the address of a 
  16620.     callback routine (under DOS) or system semaphore handle (under OS/2) in 
  16621.     pvCallBack (). Notice that the DOS callback routine must be an interrupt 
  16622.     routine, that is, it must return with an IRET, not a RET instruction.  Care 
  16623.     must be taken not to re-enter DOS.  For example, the interrupt can occur 
  16624.     while executing a DOS call.  Any call to DOS made in the callback routine 
  16625.     will result in DOS being entered a second time and will probably cause a 
  16626.     system halt. 
  16627.  
  16628.     If not NULL, the address is called (under DOS) or the semaphore is cleared 
  16629.     (under OS/2) based on the state of the CBDATA, CBBLOCK, CBIOBUF, and 
  16630.     CBERROR flags in usRunFlags: 
  16631.  
  16632.       CBDATA         The address is called (under DOS) or the semaphore is 
  16633.                      cleared (under OS/2) for each data byte sent to, or 
  16634.                      received from, the device. Notice that some devices 
  16635.                      transfer data to and from the host only in blocks, in 
  16636.                      which case this bit has the same effect as CBBLOCK. 
  16637.  
  16638.       CBBLOCK        The address is called or the semaphore is cleared for each 
  16639.                      complete block of data sent to, or received from, the 
  16640.                      device. 
  16641.  
  16642.       CBIOBUF        The address is called or the semaphore is cleared each 
  16643.                      time the entire contents of IOBUF are sent to, or received 
  16644.                      from, the device. 
  16645.  
  16646.       CBERROR        The address is called or the semaphore is cleared each 
  16647.                      time a device error is detected by the device. 
  16648.  
  16649.       CBUNDERRUN     The address is called or the semaphore is cleared each 
  16650.                      time an underrun or overrun is detected by the device. 
  16651.  
  16652.     This process will continue until either the device is stopped (or closed) 
  16653.     or the AUDIO_HPI function is called again with pvCallBack () set to NULL. 
  16654.     The device interrupt rate generally corresponds with the position 
  16655.     resolution returned in lResolution of the MCI_AUDIO_INIT structure. 
  16656.  
  16657.  
  16658. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_HPI Parameter - prXBuff ΓòÉΓòÉΓòÉ
  16659.  
  16660.  prXBuff (LPMCI_AUDIO_IOBUFFER) 
  16661.     Pointer to new Transmit buffer to use.  Set prXBuff to NULL to use the 
  16662.     default internal buffers. 
  16663.  
  16664.  
  16665. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_HPI Parameter - prRBuff ΓòÉΓòÉΓòÉ
  16666.  
  16667.  prRBuff (LPMCI_AUDIO_IOBUFFER) 
  16668.     Pointer to new Receive buffer to use.  Set prRBuff to NULL to use the 
  16669.     default internal buffers. 
  16670.  
  16671.     By default, the internal buffer sizes are usually 512 bytes.  Any buffers 
  16672.     provided must be an even number of bytes in length. 
  16673.  
  16674.  
  16675. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_HPI Parameter - usFlags ΓòÉΓòÉΓòÉ
  16676.  
  16677.  usFlags (USHORT) 
  16678.     Reserved. 
  16679.  
  16680.  
  16681. ΓòÉΓòÉΓòÉ 17.27. MCI_AUDIO_INIT ΓòÉΓòÉΓòÉ
  16682.  
  16683. This structure contains fields for the AUDIO_INIT function. 
  16684.  
  16685. typedef struct _init {
  16686. LONG         lSRate;                 /*  Sampling rate. */
  16687. LONG         lBitsPerSRate;          /*  # of bits per sample. */
  16688. LONG         lBsize;                 /*  Block size. */
  16689. SHORT        sMode;                  /*  Audio mode. */
  16690. SHORT        sChannels;              /*  Number of audio channels. */
  16691. LONG         lResolution;            /*  Resolution of position data. */
  16692. CHAR         abLoadPath[LOAD_PATH];  /*  Path of DSP code to load. */
  16693. ULONG        ulFlags;                /*  Fixed, signed, and so on. */
  16694. ULONG        ulOperation;            /*  Desired operation. */
  16695. SHORT        sReturnCode;            /*  Return code for operation. */
  16696. SHORT        sSlotNumber;            /*  Slot number of adapter. */
  16697. SHORT        sDeviceID;              /*  Adapter type ID. */
  16698. VOID FAR    *pvReserved;             /*  Reserved field. */
  16699. ULONG        ulVersionLevel;         /*  Version level of device driver. */
  16700.  } MCI_AUDIO_INIT;
  16701.  
  16702. typedef MCI_AUDIO_INIT FAR *LPMCI_AUDIO_INIT;
  16703.  
  16704.  
  16705. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - lSRate ΓòÉΓòÉΓòÉ
  16706.  
  16707.  lSRate (LONG) 
  16708.     Indicates the sampling rate in Hz, if applicable. 
  16709.  
  16710.  
  16711. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - lBitsPerSRate ΓòÉΓòÉΓòÉ
  16712.  
  16713.  lBitsPerSRate (LONG) 
  16714.     Indicates the number of bits per sample, if applicable. 
  16715.  
  16716.  
  16717. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - lBsize ΓòÉΓòÉΓòÉ
  16718.  
  16719.  lBsize (LONG) 
  16720.     Indicates the data block size for blocked data.  Some devices perform I/O 
  16721.     in fixed block amounts.  For these devices, a full block of data must be 
  16722.     written to the device driver before it is written to the device (during 
  16723.     playback).  During Record operations, a full block of data must be received 
  16724.     before it becomes available to the application. The lBsize field should be 
  16725.     less than or equal to 1024 bytes, however, it cannot be guaranteed not to 
  16726.     exceed that size. 
  16727.  
  16728.  
  16729. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - sMode ΓòÉΓòÉΓòÉ
  16730.  
  16731.  sMode (SHORT) 
  16732.     Indicates the general audio mode, for example, PCM, ADPCM, or MIDI. The 
  16733.     defined values for sMode are: 
  16734.  
  16735.         ADPCM              1         /* AVC type ADPCM                */
  16736.         PCM                2         /* PCM                           */
  16737.         MU_LAW             3         /* Mu-law                        */
  16738.         MIDI               4         /* MIDI                          */
  16739.         A_LAW              5         /* A-law                         */
  16740.         SOURCE_MIX         6         /* External analog audio source  */
  16741.         SPV2               7         /* Reserved (Speech Viewer/2)    */
  16742.         ADPCMXA            8         /* XA CD ROM                     */
  16743.         DSSM               9         /* DS201 Standard mode           */
  16744.         DSMM              10         /* DS201 Movie mode              */
  16745.         CVSD              11         /* CVSD                          */
  16746.         SPV2BCPCM         25         /* Reserved (Speech Viewer/2)    */
  16747.         SPV2PCM           26         /* Reserved (Speech Viewer/2)    */
  16748.         SPV2NONE          27         /* Reserved (Speech Viewer/2)    */
  16749.         IDLE             999         /* Deinitialize the track        */
  16750.         CLAIM_HDWR     32000         /* Claim hardware for other use  */
  16751.  
  16752.  
  16753. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - sChannels ΓòÉΓòÉΓòÉ
  16754.  
  16755.  sChannels (SHORT) 
  16756.     Indicates the number of audio channels, for example, mono is 1, stereo is 
  16757.     2. 
  16758.  
  16759.  
  16760. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - lResolution ΓòÉΓòÉΓòÉ
  16761.  
  16762.  lResolution (LONG) 
  16763.     Set to indicate the resolution of position data returned by the device 
  16764.     driver.  For example, the M-ACPA device driver can return position data 
  16765.     rounded to the nearest 100 milliseconds when playing AVC ADPCM (.1-second 
  16766.     blocked) data. 
  16767.  
  16768.  
  16769. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - abLoadPath[LOAD_PATH] ΓòÉΓòÉΓòÉ
  16770.  
  16771.  abLoadPath[LOAD_PATH] (CHAR) 
  16772.     If the digital signal processor (DSP) code must be loaded before the 
  16773.     operation can be performed, the device driver sets the LOAD_CODE bit in 
  16774.     ulFlags.  In this case, the name of the DSP file to be loaded is specified 
  16775.     in the abLoadPath field. Notice that the application must call AUDIO_LOAD 
  16776.     before trying to perform Read or Write operations. 
  16777.  
  16778.     Keep a single copy of each DSP load module maintained and grouped together 
  16779.     in a single subdirectory.  This subdirectory can be referenced in the DOS 
  16780.     APPEND command or the OS/2 DPATH CONFIG.SYS statement. 
  16781.  
  16782.     The maximum path length available for DSP code modules in abLoadPath is: 
  16783.  
  16784.         LOAD_PATH    260    /* DOS and OS/2 length is 260 */
  16785.  
  16786.  
  16787. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - ulFlags ΓòÉΓòÉΓòÉ
  16788.  
  16789.  ulFlags (ULONG) 
  16790.     A bit flag indicating several pieces of information.  The defined values 
  16791.     for ulFlags are: 
  16792.  
  16793.       FIXED (0x00000001l) 
  16794.          Specify that the data is fixed, as opposed to variable rate or size. 
  16795.  
  16796.       LEFT_ALIGNED (0x00000002l) 
  16797.          Specify that the data is left aligned on a byte boundary.  This field 
  16798.          is applicable only if lBitsPerSRate is not a multiple of 8. 
  16799.  
  16800.       RIGHT_ALIGNED (0x00000004l) 
  16801.          Specify that the data is right aligned on a byte boundary.  This bit 
  16802.          is applicable only if lBitsPerSRate is not a multiple of 8. 
  16803.  
  16804.       TWOS_COMPLEMENT (0x00000008l) 
  16805.          Specify that the data is represented by using TWOS_COMPLEMENT signed 
  16806.          format.  If this bit and the SIGNED bit are both 0, the data is in 
  16807.          unsigned format. 
  16808.  
  16809.       SIGNED (0x00000010l) 
  16810.          Specify that the data is represented using signed magnitude format, 
  16811.          whereby the highest bit is set to 1 to indicate a negative value, and 
  16812.          the lower bits specify the absolute value. If this bit and the 
  16813.          TWOS_COMPLEMENT bit are both 0, the data is in unsigned format. 
  16814.  
  16815.       BIG_ENDIAN (0x00000020l) 
  16816.          Specifies that the most significant bytes precede the least 
  16817.          significant bytes.  This bit is applicable only if lBitsPerSRate is 
  16818.          greater than 8 (multibyte values). 
  16819.  
  16820.       RIFF_DATATYPE (0x00000040l) 
  16821.          sMode contains a RIFF datatype. 
  16822.  
  16823.       PITCH (0x00100000l) 
  16824.          Specifies that pitch control is supported. 
  16825.  
  16826.       INPUT (0x00200000l) 
  16827.          Specifies that input select is supported. 
  16828.  
  16829.       OUTPUT (0x00400000l) 
  16830.          Specifies that output select is supported. 
  16831.  
  16832.       MONITOR (0x00800000l) 
  16833.          Specifies that monitor select is supported. 
  16834.  
  16835.       VOLUME (0x01000000l) 
  16836.          Specifies that volume select is supported. 
  16837.  
  16838.       VOLUME_DELAY (0x02000000l) 
  16839.          Specifies that volume delay is supported. 
  16840.  
  16841.       BALANCE (0x04000000l) 
  16842.          Specifies that balance control is supported. 
  16843.  
  16844.       BALANCE_DELAY (0x08000000l) 
  16845.          Specifies that balance delay is supported. 
  16846.  
  16847.       TREBLE (0x10000000l) 
  16848.          Specifies that treble control is supported 
  16849.  
  16850.       BASS (0x20000000l) 
  16851.          Specifies that bass control is supported. 
  16852.  
  16853.       BESTFIT_PROVIDED (0x40000000l) 
  16854.          Indicates that the best fit is returned. 
  16855.  
  16856.       LOAD_CODE (0x80000000l) 
  16857.          Indicates that a DSP load is needed. 
  16858.  
  16859.  
  16860. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - ulOperation ΓòÉΓòÉΓòÉ
  16861.  
  16862.  ulOperation (ULONG) 
  16863.     Specifies the desired operation.  The defined values for this field are: 
  16864.  
  16865.         OPERATION_PLAY     0x80000001
  16866.         OPERATION_RECORD   0x80000002
  16867.         PLAY_AND_RECORD    0x80000003
  16868.         ANALYSIS           0x80000006      /* Speech Viewer/2 */
  16869.         DISTANCE           0x80000007      /* Speech Viewer/2 */
  16870.         MIGRATION          0x80000008      /* Speech Viewer/2 */
  16871.  
  16872.     Notice that the high-order bit is set in all cases. 
  16873.  
  16874.  
  16875. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - sReturnCode ΓòÉΓòÉΓòÉ
  16876.  
  16877.  sReturnCode (SHORT) 
  16878.     Return code for the operation.  The defined values for sReturnCode are: 
  16879.  
  16880.         NO_PLAY              1    /* Cannot play                       */
  16881.         NO_RECORD            2    /* Cannot record                     */
  16882.         NO_RECORD_AND_PLAY   3    /* Cannot both play and record       */
  16883.         INVALID_REQUEST      4    /* Request was not valid             */
  16884.         CONFLICT             5    /* Conflicting information was found */
  16885.         OVERLOADED           6    /* Out of DSP MIPS or Memory         */
  16886.         DOWNLEVEL_DD         7    /* DD is an earlier version than
  16887.                                      the version requested by the
  16888.                                      application                       */
  16889.         DSP_LOAD_PENDING_ON_OTHER_TRK  8  /* Other track hasn't loaded DSP  */
  16890.  
  16891.  
  16892. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - sSlotNumber ΓòÉΓòÉΓòÉ
  16893.  
  16894.  sSlotNumber (SHORT) 
  16895.     If the call is successful, the slot number of the device is returned in the 
  16896.     sSlotNumber field. 
  16897.  
  16898.  
  16899. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - sDeviceID ΓòÉΓòÉΓòÉ
  16900.  
  16901.  sDeviceID (SHORT) 
  16902.     If the call is successful, the type of device is returned in the sDeviceID 
  16903.     field.  The defined values used by sDeviceID are: 
  16904.  
  16905.         MINIDD               0    /* Minimal device driver             */
  16906.         ACPA                 1    /* IBM ACPA                          */
  16907.         MACPA                2    /* IBM M-ACPA                        */
  16908.         MPU401               3    /* Roland MPU-401 or compatible      */
  16909.         SOUND_BLASTER        4    /* Creative Labs Sound Blaster       */
  16910.         IMF                  5    /* IBM Music Feature                 */
  16911.         PS1                  6    /* IBM Personal System/1 audio
  16912.                                      feature                           */
  16913.         PAS16                7    /* Media Vision ProAudio Spectrum 16 */
  16914.         DS201                9    /* DS201 audio adapter               */
  16915.  
  16916.  
  16917. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - pvReserved ΓòÉΓòÉΓòÉ
  16918.  
  16919.  pvReserved (VOID FAR *) 
  16920.     Reserved field. 
  16921.  
  16922.  
  16923. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_INIT Parameter - ulVersionLevel ΓòÉΓòÉΓòÉ
  16924.  
  16925.  ulVersionLevel (ULONG) 
  16926.     Specifies the audio device driver version.  As audio device drivers evolve, 
  16927.     some changes are sure to occur.  The ulVersionLevel field is used to allow 
  16928.     new functions to be added to audio device drivers without losing 
  16929.     compatibility with existing applications. 
  16930.  
  16931.     When an application calls AUDIO_INIT, it specifies the version level of the 
  16932.     requested device driver.  The audio device driver compares its version 
  16933.     level with that passed by the application and ensures that they are 
  16934.     compatible.  If the device driver is an earlier version than that required 
  16935.     by the application, it returns an error.  If the version level of the 
  16936.     device driver is newer than the application, the driver ensures that calls 
  16937.     from the application are handled in a manner consistent with the version 
  16938.     level of the application. 
  16939.  
  16940.     The value specified in ulVersionLevel is the binary-coded decimal 
  16941.     representation of the version and build level.  For example, Version 1.0 
  16942.     Build 15 is coded 0x01000015.  The high-order byte is the version, the next 
  16943.     byte is the revision number, and the least significant two bytes are the 
  16944.     build number. 
  16945.  
  16946.  
  16947. ΓòÉΓòÉΓòÉ 17.28. MCI_AUDIO_IOBUFFER ΓòÉΓòÉΓòÉ
  16948.  
  16949. This structure contains fields for the AUDIO_HPI function. 
  16950.  
  16951. typedef struct _MCI_AUDIO_IOBUFFER {
  16952. LONG         lSize;       /*  Size of data buffers. */
  16953. CHAR FAR    *pHead;       /*  Queue head pointer. */
  16954. CHAR FAR    *pTail;       /*  Queue tail pointer. */
  16955. LONG         lCount;      /*  # of bytes queued. */
  16956. ULONG        ulPosition;  /*  Position counter. */
  16957. LONG         lDelay;      /*  # of units before next I/O. */
  16958. USHORT       usRunFlags;  /*  Start/stop/pause bits. */
  16959. USHORT       usSelInc;
  16960. CHAR FAR    *pBuffer;     /*  Array of pointers. */
  16961.  } MCI_AUDIO_IOBUFFER;
  16962.  
  16963. typedef MCI_AUDIO_IOBUFFER FAR *LPMCI_AUDIO_IOBUFFER;
  16964.  
  16965.  
  16966. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - lSize ΓòÉΓòÉΓòÉ
  16967.  
  16968.  lSize (LONG) 
  16969.     Total size in bytes of the data buffers. 
  16970.  
  16971.  
  16972. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - pHead ΓòÉΓòÉΓòÉ
  16973.  
  16974.  pHead (CHAR FAR *) 
  16975.     Queue head pointer (data added here). 
  16976.  
  16977.  
  16978. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - pTail ΓòÉΓòÉΓòÉ
  16979.  
  16980.  pTail (CHAR FAR *) 
  16981.     Queue tail pointer (data removed here) 
  16982.  
  16983.  
  16984. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - lCount ΓòÉΓòÉΓòÉ
  16985.  
  16986.  lCount (LONG) 
  16987.     Total number of data bytes currently queued. 
  16988.  
  16989.  
  16990. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - ulPosition ΓòÉΓòÉΓòÉ
  16991.  
  16992.  ulPosition (ULONG) 
  16993.     Position counter. 
  16994.  
  16995.  
  16996. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - lDelay ΓòÉΓòÉΓòÉ
  16997.  
  16998.  lDelay (LONG) 
  16999.     Number of pos units before the next I/O. 
  17000.  
  17001.  
  17002. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - usRunFlags ΓòÉΓòÉΓòÉ
  17003.  
  17004.  usRunFlags (USHORT) 
  17005.     Start/stop/pause bits. 
  17006.  
  17007.  
  17008. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - usSelInc ΓòÉΓòÉΓòÉ
  17009.  
  17010.  usSelInc (USHORT) 
  17011.  
  17012.  
  17013. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_IOBUFFER Parameter - pBuffer ΓòÉΓòÉΓòÉ
  17014.  
  17015.  pBuffer (CHAR FAR *) 
  17016.     Array of pointers describing buffers. 
  17017.  
  17018.  
  17019. ΓòÉΓòÉΓòÉ 17.29. MCI_AUDIO_LOAD ΓòÉΓòÉΓòÉ
  17020.  
  17021. This structure contains fields for the AUDIO_LOAD function. 
  17022.  
  17023. typedef struct _load {
  17024. CHAR FAR    *pbBuffer;  /*  Pointer to buffer. */
  17025. ULONG        ulSize;    /*  Size of DSP code (in bytes). */
  17026. ULONG        ulFlags;   /*  Indicates start or end of operation. */
  17027.  } MCI_AUDIO_LOAD;
  17028.  
  17029. typedef MCI_AUDIO_LOAD FAR *LPMCI_AUDIO_LOAD;
  17030.  
  17031.  
  17032. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_LOAD Parameter - pbBuffer ΓòÉΓòÉΓòÉ
  17033.  
  17034.  pbBuffer (CHAR FAR *) 
  17035.     Pointer to buffer containing DSP code. 
  17036.  
  17037.  
  17038. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_LOAD Parameter - ulSize ΓòÉΓòÉΓòÉ
  17039.  
  17040.  ulSize (ULONG) 
  17041.     Size of DSP code (in bytes). 
  17042.  
  17043.  
  17044. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_LOAD Parameter - ulFlags ΓòÉΓòÉΓòÉ
  17045.  
  17046.  ulFlags (ULONG) 
  17047.     Indicates start or end of operation.  The defined values for this field 
  17048.     are: 
  17049.  
  17050.         LOAD_START    1    /* Indicates that this is the first block  */
  17051.         LOAD_END      2    /* Indicates that this is the last block   */
  17052.         LOAD_32BIT   10
  17053.  
  17054.  
  17055. ΓòÉΓòÉΓòÉ 17.30. MCI_AUDIO_STATUS ΓòÉΓòÉΓòÉ
  17056.  
  17057. This structure contains fields for the AUDIO_STATUS function. 
  17058.  
  17059. typedef struct _stat {
  17060. LONG               lSRate;         /*  Sampling rate. */
  17061. LONG               lBitsPerSRate;  /*  # of bits per sample. */
  17062. LONG               lBsize;         /*  Block size. */
  17063. SHORT              sMode;          /*  Mode. */
  17064. SHORT              sChannels;      /*  # of channels. */
  17065. ULONG              ulFlags;        /*  Flags. */
  17066. ULONG              ulOperation;    /*  Operation. */
  17067. MCI_AUDIO_CHANGE   rAudioChange;   /*  MCI_AUDIO_CHANGE structure. */
  17068.  } MCI_AUDIO_STATUS;
  17069.  
  17070. typedef MCI_AUDIO_STATUS FAR *LPMCI_AUDIO_STATUS;
  17071.  
  17072.  
  17073. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - lSRate ΓòÉΓòÉΓòÉ
  17074.  
  17075.  lSRate (LONG) 
  17076.     Indicates the sampling rate in Hz (if applicable). 
  17077.  
  17078.  
  17079. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - lBitsPerSRate ΓòÉΓòÉΓòÉ
  17080.  
  17081.  lBitsPerSRate (LONG) 
  17082.     Indicates the number of bits per sample (if applicable). 
  17083.  
  17084.  
  17085. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - lBsize ΓòÉΓòÉΓòÉ
  17086.  
  17087.  lBsize (LONG) 
  17088.     Indicates the data block size for blocked data. 
  17089.  
  17090.  
  17091. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - sMode ΓòÉΓòÉΓòÉ
  17092.  
  17093.  sMode (SHORT) 
  17094.     Indicates the general audio mode, for example, PCM, ADPCM, or MIDI. The 
  17095.     possible values are listed under the sMode field of MCI_AUDIO_INIT. 
  17096.  
  17097.  
  17098. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - sChannels ΓòÉΓòÉΓòÉ
  17099.  
  17100.  sChannels (SHORT) 
  17101.     Indicates the number of audio channels, for example, mono is 1, stereo is 
  17102.     2. 
  17103.  
  17104.  
  17105. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  17106.  
  17107.  ulFlags (ULONG) 
  17108.     A bit flag.  The possible values are listed under the ulFlags field of 
  17109.     MCI_AUDIO_INIT. 
  17110.  
  17111.  
  17112. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - ulOperation ΓòÉΓòÉΓòÉ
  17113.  
  17114.  ulOperation (ULONG) 
  17115.     Specifies the desired operation. The defined values for this field are: 
  17116.  
  17117.         STOPPED               0x80000000
  17118.         PLAYING               0x80000001
  17119.         RECORDING             0x80000002
  17120.         PLAYING_AND_RECORDING 0x80000003
  17121.         UNINITIALIZED         0xFFFFFFFF
  17122.  
  17123.     Notice that the value associated with the current operation is returned in 
  17124.     the ulOperation field. 
  17125.  
  17126.  
  17127. ΓòÉΓòÉΓòÉ <hidden> MCI_AUDIO_STATUS Parameter - rAudioChange ΓòÉΓòÉΓòÉ
  17128.  
  17129.  rAudioChange (MCI_AUDIO_CHANGE) 
  17130.     An MCI_AUDIO_CHANGE data structure. 
  17131.  
  17132.  
  17133. ΓòÉΓòÉΓòÉ 17.31. MCI_DEVICESETTINGS_PARMS ΓòÉΓòÉΓòÉ
  17134.  
  17135. This structure contains fields for the MCI_DEVICESETTINGS message. 
  17136.  
  17137. typedef struct _MCI_DEVICESETTINGS_PARMS {
  17138. HWND     hwndCallback;   /*  Window handle. */
  17139. HWND     hwndNotebook;   /*  Handle to notebook window. */
  17140. USHORT   usDeviceType;   /*  Device type. */
  17141. PSZ      pszDeviceName;  /*  Logical device name. */
  17142.  } MCI_DEVICESETTINGS_PARMS;
  17143.  
  17144. typedef MCI_DEVICESETTINGS_PARMS *PMCI_DEVICESETTINGS_PARMS;
  17145.  
  17146.  
  17147. ΓòÉΓòÉΓòÉ <hidden> MCI_DEVICESETTINGS_PARMS Parameter - hwndCallback ΓòÉΓòÉΓòÉ
  17148.  
  17149.  hwndCallback (HWND) 
  17150.     A window handle to be used in returning asynchronous notification messages. 
  17151.     This parameter must be specified if the MCI_NOTIFY flag is specified. 
  17152.  
  17153.  
  17154. ΓòÉΓòÉΓòÉ <hidden> MCI_DEVICESETTINGS_PARMS Parameter - hwndNotebook ΓòÉΓòÉΓòÉ
  17155.  
  17156.  hwndNotebook (HWND) 
  17157.     Handle to notebook window. 
  17158.  
  17159.  
  17160. ΓòÉΓòÉΓòÉ <hidden> MCI_DEVICESETTINGS_PARMS Parameter - usDeviceType ΓòÉΓòÉΓòÉ
  17161.  
  17162.  usDeviceType (USHORT) 
  17163.     Device type. 
  17164.  
  17165.  
  17166. ΓòÉΓòÉΓòÉ <hidden> MCI_DEVICESETTINGS_PARMS Parameter - pszDeviceName ΓòÉΓòÉΓòÉ
  17167.  
  17168.  pszDeviceName (PSZ) 
  17169.     Logical device name. 
  17170.  
  17171.  
  17172. ΓòÉΓòÉΓòÉ 17.32. MCI_TRACK_INFO ΓòÉΓòÉΓòÉ
  17173.  
  17174. typedef struct _info {
  17175. USHORT   usMasterVolume;       /*  Master volume control. */
  17176. USHORT   usDitherPct;          /*  Dither percent control. */
  17177. USHORT   usMasterVolumeDelay;  /*  Master volume delay. */
  17178. USHORT   usMasterBalance;      /*  Master balance control. */
  17179.  } MCI_TRACK_INFO;
  17180.  
  17181. typedef MCI_TRACK_INFO FAR *LPMCI_TRACK_INFO;
  17182.  
  17183.  
  17184. ΓòÉΓòÉΓòÉ <hidden> MCI_TRACK_INFO Parameter - usMasterVolume ΓòÉΓòÉΓòÉ
  17185.  
  17186.  usMasterVolume (USHORT) 
  17187.     Master volume control. 
  17188.  
  17189.  
  17190. ΓòÉΓòÉΓòÉ <hidden> MCI_TRACK_INFO Parameter - usDitherPct ΓòÉΓòÉΓòÉ
  17191.  
  17192.  usDitherPct (USHORT) 
  17193.     Dither percent control. 
  17194.  
  17195.  
  17196. ΓòÉΓòÉΓòÉ <hidden> MCI_TRACK_INFO Parameter - usMasterVolumeDelay ΓòÉΓòÉΓòÉ
  17197.  
  17198.  usMasterVolumeDelay (USHORT) 
  17199.     Master volume delay. 
  17200.  
  17201.  
  17202. ΓòÉΓòÉΓòÉ <hidden> MCI_TRACK_INFO Parameter - usMasterBalance ΓòÉΓòÉΓòÉ
  17203.  
  17204.  usMasterBalance (USHORT) 
  17205.     Master balance control. 
  17206.  
  17207.  
  17208. ΓòÉΓòÉΓòÉ 17.33. MIDI_INFO ΓòÉΓòÉΓòÉ
  17209.  
  17210. This structure contains MIDI-mode information. 
  17211.  
  17212. typedef struct _mode_info {
  17213. SHORT   sTempo;         /*  Tempo. */
  17214. SHORT   sCPQN;          /*  Timing. */
  17215. SHORT   sMidiSwitches;  /*  Common MIDI switches. */
  17216. SHORT   sReserved[5];   /*  Reserved field. */
  17217.  } MIDI_INFO;
  17218.  
  17219.  
  17220. ΓòÉΓòÉΓòÉ <hidden> MIDI_INFO Parameter - sTempo ΓòÉΓòÉΓòÉ
  17221.  
  17222.  sTempo (SHORT) 
  17223.     Tempo in 1/10 beats per minute (nominally 120). 
  17224.  
  17225.  
  17226. ΓòÉΓòÉΓòÉ <hidden> MIDI_INFO Parameter - sCPQN ΓòÉΓòÉΓòÉ
  17227.  
  17228.  sCPQN (SHORT) 
  17229.     Timing clocks per quarter note (nominally 96). 
  17230.  
  17231.  
  17232. ΓòÉΓòÉΓòÉ <hidden> MIDI_INFO Parameter - sMidiSwitches ΓòÉΓòÉΓòÉ
  17233.  
  17234.  sMidiSwitches (SHORT) 
  17235.     The following MIDI switches are defined: 
  17236.  
  17237.         MIDI_THRU_OUT  1         /* Configure MIDI-Thru connector
  17238.                                     as MIDI-Out                    */
  17239.         MIDI_THRU_THRU 0         /* Configure MIDI-Thru connector
  17240.                                     as MIDI-Thru                   */
  17241.  
  17242.  
  17243. ΓòÉΓòÉΓòÉ <hidden> MIDI_INFO Parameter - sReserved[5] ΓòÉΓòÉΓòÉ
  17244.  
  17245.  sReserved[5] (SHORT) 
  17246.     Reserved field. 
  17247.  
  17248.  
  17249. ΓòÉΓòÉΓòÉ 17.34. MIXERCONTROL ΓòÉΓòÉΓòÉ
  17250.  
  17251. This structure contains fields for the VSD_QUERYMIXCONTROL and the 
  17252. VSD_SETMIXCONTROL messages and the MIX_GETCONTROL and MIX_SETCONTROL IOCtls. 
  17253.  
  17254. typedef struct _MIXERCONTROL {
  17255. ULONG   ulLength;   /*  Length of the structure. */
  17256. ULONG   ulLine;     /*  Line to control. */
  17257. ULONG   ulControl;  /*  Input. Mixer attribute to control. */
  17258. ULONG   ulSetting;  /*  Setting for mixer attribute. */
  17259.  } MIXERCONTROL;
  17260.  
  17261. typedef MIXERCONTROL FAR *PMIXERCONTROL;
  17262.  
  17263.  
  17264. ΓòÉΓòÉΓòÉ <hidden> MIXERCONTROL Parameter - ulLength ΓòÉΓòÉΓòÉ
  17265.  
  17266.  ulLength (ULONG) 
  17267.     Length of the structure. 
  17268.  
  17269.  
  17270. ΓòÉΓòÉΓòÉ <hidden> MIXERCONTROL Parameter - ulLine ΓòÉΓòÉΓòÉ
  17271.  
  17272.  ulLine (ULONG) 
  17273.     Line to control. 
  17274.  
  17275.     This field can contain the following sources or sinks: 
  17276.  
  17277.       SOURCE_SYNTHESIZER 
  17278.          Midi connection. 
  17279.  
  17280.       SOURCE_MIXER 
  17281.          Source mixer connection. 
  17282.  
  17283.       SOURCE_LINE 
  17284.          Line connection. 
  17285.  
  17286.       SOURCE_INTERNAL_AUDIO 
  17287.          Internal audio connection. 
  17288.  
  17289.       SOURCE_MICROPHONE 
  17290.          Microphone connection. 
  17291.  
  17292.       SOURCE_WAVE 
  17293.          Wave connection. 
  17294.  
  17295.       SOURCE_PC_SPEAKER 
  17296.          PC speaker connection. 
  17297.  
  17298.       SINK_LINE_OUT 
  17299.          Line out connection. 
  17300.  
  17301.       SINK_SPEAKER 
  17302.          Speaker connection. 
  17303.  
  17304.       SINK_HEADPHONES 
  17305.          Headphones connection. 
  17306.  
  17307.       SINK_GENERIC 
  17308.          Generic connection. 
  17309.  
  17310.       SINK_NULL 
  17311.          Null connection. 
  17312.  
  17313.  
  17314. ΓòÉΓòÉΓòÉ <hidden> MIXERCONTROL Parameter - ulControl ΓòÉΓòÉΓòÉ
  17315.  
  17316.  ulControl (ULONG) 
  17317.     Attribute to modify line. 
  17318.  
  17319.     This field can contain: 
  17320.  
  17321.       MIX_BALANCE 
  17322.          Separate balance control. 
  17323.  
  17324.       MIX_ALC 
  17325.          Auto level control. 
  17326.  
  17327.       MIX_MONITOR 
  17328.          Monitor control. 
  17329.  
  17330.       MIX_CROSSOVER 
  17331.          Crossover change. 
  17332.  
  17333.       MIX_LOUDNESS 
  17334.          Loudness equalization. 
  17335.  
  17336.       MIX_MUTE 
  17337.          Channel mute. 
  17338.  
  17339.       MIX_REVERB 
  17340.          Reverb. 
  17341.  
  17342.       MIX_STEREOENHANCE 
  17343.          Stereo enhance. 
  17344.  
  17345.       MIX_CUSTOM1 
  17346.          Custom effect #1. 
  17347.  
  17348.       MIX_CUSTOM2 
  17349.          Custom effect #2. 
  17350.  
  17351.       MIX_CUSTOM3 
  17352.          Custom effect #3. 
  17353.  
  17354.       MIX_BASS 
  17355.          Bass. 
  17356.  
  17357.       MIX_TREBLE 
  17358.          Treble. 
  17359.  
  17360.       MIX_PITCH 
  17361.          Pitch modifications. 
  17362.  
  17363.       MIX_CHORUS 
  17364.          Chorus. 
  17365.  
  17366.       MIX_VOLUME 
  17367.          Volume controls. 
  17368.  
  17369.  
  17370. ΓòÉΓòÉΓòÉ <hidden> MIXERCONTROL Parameter - ulSetting ΓòÉΓòÉΓòÉ
  17371.  
  17372.  ulSetting (ULONG) 
  17373.     Setting for mixer attribute.  Can range from 0 to 0xFFFF. for mono controls 
  17374.     to 0xFFFFFFFF for stereo controls. 
  17375.  
  17376.  
  17377. ΓòÉΓòÉΓòÉ 17.35. MIXERLINEINFO ΓòÉΓòÉΓòÉ
  17378.  
  17379. This structure contains fields for the VSD_QUERYMIXLINE message and the 
  17380. MIX_GETLINEINFO IOCtl. 
  17381.  
  17382. typedef struct _MIXERLINEINFO {
  17383. ULONG   ulLength;               /*  Length of the structure. */
  17384. ULONG   ulNumChannels;          /*  Input. Number of channels. */
  17385. ULONG   ulSupport;              /*  Supported mixer attributes. */
  17386. ULONG   ulConnectionsPossible;  /*  Possible connections. */
  17387. ULONG   ulLine;                 /*  Input/Output. */
  17388.  } MIXERLINEINFO;
  17389.  
  17390. typedef MIXERLINEINFO FAR *PMIXERLINEINFO;
  17391.  
  17392.  
  17393. ΓòÉΓòÉΓòÉ <hidden> MIXERLINEINFO Parameter - ulLength ΓòÉΓòÉΓòÉ
  17394.  
  17395.  ulLength (ULONG) 
  17396.     Length of the structure. 
  17397.  
  17398.  
  17399. ΓòÉΓòÉΓòÉ <hidden> MIXERLINEINFO Parameter - ulNumChannels ΓòÉΓòÉΓòÉ
  17400.  
  17401.  ulNumChannels (ULONG) 
  17402.     Input. Number of channels. 
  17403.  
  17404.  
  17405. ΓòÉΓòÉΓòÉ <hidden> MIXERLINEINFO Parameter - ulSupport ΓòÉΓòÉΓòÉ
  17406.  
  17407.  ulSupport (ULONG) 
  17408.     Supported mixer attributes.  The following values are defined for 
  17409.     ulSupport: 
  17410.  
  17411.       MIX_BALANCE 
  17412.          Separate balance control. 
  17413.  
  17414.       MIX_ALC 
  17415.          Auto level control. 
  17416.  
  17417.       MIX_MONITOR 
  17418.          Monitor control. 
  17419.  
  17420.       MIX_CROSSOVER 
  17421.          Crossover change. 
  17422.  
  17423.       MIX_LOUDNESS 
  17424.          Loudness equalization. 
  17425.  
  17426.       MIX_MUTE 
  17427.          Channel mute. 
  17428.  
  17429.       MIX_REVERB 
  17430.          Reverb. 
  17431.  
  17432.       MIX_STEREOENHANCE 
  17433.          Stereo enhance. 
  17434.  
  17435.       MIX_CUSTOM1 
  17436.          Custom effect #1. 
  17437.  
  17438.       MIX_CUSTOM2 
  17439.          Custom effect #2. 
  17440.  
  17441.       MIX_CUSTOM3 
  17442.          Custom effect #3. 
  17443.  
  17444.       MIX_BASS 
  17445.          Bass. 
  17446.  
  17447.       MIX_TREBLE 
  17448.          Treble. 
  17449.  
  17450.       MIX_PITCH 
  17451.          Pitch modifications. 
  17452.  
  17453.       MIX_CHORUS 
  17454.          Chorus. 
  17455.  
  17456.       MIX_VOLUME 
  17457.          Volume controls. 
  17458.  
  17459.  
  17460. ΓòÉΓòÉΓòÉ <hidden> MIXERLINEINFO Parameter - ulConnectionsPossible ΓòÉΓòÉΓòÉ
  17461.  
  17462.  ulConnectionsPossible (ULONG) 
  17463.     Lines ulLine can connect to. 
  17464.  
  17465.  
  17466. ΓòÉΓòÉΓòÉ <hidden> MIXERLINEINFO Parameter - ulLine ΓòÉΓòÉΓòÉ
  17467.  
  17468.  ulLine (ULONG) 
  17469.     Input/Output.  Line to set or query information. 
  17470.  
  17471.     The ulLine field must be filled in by the caller with one of the following 
  17472.     VSD lines: 
  17473.  
  17474.       SOURCE_SYNTHESIZER 
  17475.          Midi connection. 
  17476.  
  17477.       SOURCE_MIXER 
  17478.          Mixer connection. 
  17479.  
  17480.       SOURCE_LINE 
  17481.          Line connection. 
  17482.  
  17483.       SOURCE_INTERNAL_AUDIO 
  17484.          Internal audio connection. 
  17485.  
  17486.       SOURCE_MICROPHONE 
  17487.          Microphone connection. 
  17488.  
  17489.       SOURCE_WAVE 
  17490.          Wave connection. 
  17491.  
  17492.       SOURCE_PC_SPEAKER 
  17493.          PC speaker connection. 
  17494.  
  17495.  
  17496. ΓòÉΓòÉΓòÉ 17.36. MMTIME ΓòÉΓòÉΓòÉ
  17497.  
  17498. Universal Chinatown time (1/3000 second). 
  17499.  
  17500. typedef ULONG MMTIME;
  17501.  
  17502.  
  17503. ΓòÉΓòÉΓòÉ 17.37. MSG_REPORTEVENT ΓòÉΓòÉΓòÉ
  17504.  
  17505. This structure contains fields for the SHC_REPORT_EVENT message (passed with 
  17506. SpiSendMsg). 
  17507.  
  17508. typedef struct _MSG_REPORTEVENT {
  17509. ULONG    ulMsgLen;      /*  Length of structure. */
  17510. HEVENT   hevent;        /*  Event handle. */
  17511. ULONG    ulStreamTime;  /*  Time in milliseconds of stream position. */
  17512.  } MSG_REPORTEVENT;
  17513.  
  17514. typedef MSG_REPORTEVENT FAR *PMSG_REPORTEVENT;
  17515.  
  17516.  
  17517. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTEVENT Parameter - ulMsgLen ΓòÉΓòÉΓòÉ
  17518.  
  17519.  ulMsgLen (ULONG) 
  17520.     Length of structure. 
  17521.  
  17522.  
  17523. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTEVENT Parameter - hevent ΓòÉΓòÉΓòÉ
  17524.  
  17525.  hevent (HEVENT) 
  17526.     Event handle passed back to stream handler. 
  17527.  
  17528.  
  17529. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTEVENT Parameter - ulStreamTime ΓòÉΓòÉΓòÉ
  17530.  
  17531.  ulStreamTime (ULONG) 
  17532.     Time in milliseconds of stream position. 
  17533.  
  17534.  
  17535. ΓòÉΓòÉΓòÉ 17.38. MSG_REPORTINT ΓòÉΓòÉΓòÉ
  17536.  
  17537. This structure contains fields for the SHC_REPORT_INT message (passed with 
  17538. SpiSendMsg). 
  17539.  
  17540. typedef struct _MSG_REPORTINT {
  17541. ULONG   ulMsgLen;      /*  Length of structure. */
  17542. PVOID   pBuffer;       /*  Return pointer. */
  17543. ULONG   ulFlag;        /*  Reason for interrupt. */
  17544. ULONG   ulStatus;      /*  Bytes read or written. */
  17545. ULONG   ulStreamTime;  /*  Stream time in milliseconds. */
  17546.  } MSG_REPORTINT;
  17547.  
  17548. typedef MSG_REPORTINT FAR *PMSG_REPORTINT;
  17549.  
  17550.  
  17551. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTINT Parameter - ulMsgLen ΓòÉΓòÉΓòÉ
  17552.  
  17553.  ulMsgLen (ULONG) 
  17554.     Length of structure. 
  17555.  
  17556.  
  17557. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTINT Parameter - pBuffer ΓòÉΓòÉΓòÉ
  17558.  
  17559.  pBuffer (PVOID) 
  17560.     Pointer to buffer being returned (or null for no buffer to return). 
  17561.  
  17562.  
  17563. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTINT Parameter - ulFlag ΓòÉΓòÉΓòÉ
  17564.  
  17565.  ulFlag (ULONG) 
  17566.     Specifies the reason for the interrupt.  This field defines the following 
  17567.     flags: 
  17568.  
  17569.       ERROR 
  17570.       STREAM_STOP_NOW 
  17571.       SHD_READ_COMPLETE 
  17572.       SHD_WRITE_COMPLETE 
  17573.  
  17574.  Note: 
  17575.  
  17576.    1. ERROR must be ORed with SHD_READ_COMPLETE or SHD_WRITE_COMPLETE. 
  17577.  
  17578.    2. Do not set SHD_READ_COMPLETE or SHD_WRITE_COMPLETE if not returning a 
  17579.       buffer. 
  17580.  
  17581.  
  17582. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTINT Parameter - ulStatus ΓòÉΓòÉΓòÉ
  17583.  
  17584.  ulStatus (ULONG) 
  17585.     Return code or bytes read or written. 
  17586.  
  17587.  
  17588. ΓòÉΓòÉΓòÉ <hidden> MSG_REPORTINT Parameter - ulStreamTime ΓòÉΓòÉΓòÉ
  17589.  
  17590.  ulStreamTime (ULONG) 
  17591.     Stream time in milliseconds. 
  17592.  
  17593.  
  17594. ΓòÉΓòÉΓòÉ 17.39. PFN ΓòÉΓòÉΓòÉ
  17595.  
  17596. Pointer to a procedure. 
  17597.  
  17598. typedef _PFN *PFN;
  17599.  
  17600. In the header file, this is a two-part definition as shown below: 
  17601.  
  17602. typedef  int   (APIENTRY _PFN) ();
  17603. typedef  _PFN  *PFN;
  17604.  
  17605.  
  17606. ΓòÉΓòÉΓòÉ 17.40. PSHDFN ΓòÉΓòÉΓòÉ
  17607.  
  17608. Pointer to a function prototype for a stream handler device entry routine. 
  17609.  
  17610. typedef ULONG (FAR *PSHDFN) (PVOID pParmIn);
  17611.  
  17612. In the header file, this is a two-part defintion as shown below: 
  17613.  
  17614. typedef ULONG (FAR *PSHDFN) (PVOID pParmIn);
  17615. typedef PVOID PSHDFN;
  17616.  
  17617.  
  17618. ΓòÉΓòÉΓòÉ 17.41. PSZ ΓòÉΓòÉΓòÉ
  17619.  
  17620. Pointer to a null-terminated string. 
  17621.  
  17622. If you are using C++ **, you may need to use PCSZ. 
  17623.  
  17624. typedef unsigned char *PSZ;
  17625.  
  17626.  
  17627. ΓòÉΓòÉΓòÉ 17.42. SETUP_PARM ΓòÉΓòÉΓòÉ
  17628.  
  17629. This data structure contains fields for the pSetupParm and ulSetupParmSize 
  17630. fields of the DDCMDSETUP data structure. 
  17631.  
  17632. typedef struct _SETUP_PARM {
  17633. ULONG   ulStreamTime;  /*  Stream time in milliseconds. */
  17634. ULONG   ulFlags;       /*  Flags (input/output). */
  17635.  } SETUP_PARM;
  17636.  
  17637.  
  17638. ΓòÉΓòÉΓòÉ <hidden> SETUP_PARM Parameter - ulStreamTime ΓòÉΓòÉΓòÉ
  17639.  
  17640.  ulStreamTime (ULONG) 
  17641.     Specifies the stream time in milliseconds. 
  17642.  
  17643.  
  17644. ΓòÉΓòÉΓòÉ <hidden> SETUP_PARM Parameter - ulFlags ΓòÉΓòÉΓòÉ
  17645.  
  17646.  ulFlags (ULONG) 
  17647.     Device drivers should ignore this field. 
  17648.  
  17649.  
  17650. ΓòÉΓòÉΓòÉ 17.43. SHD_COMMON ΓòÉΓòÉΓòÉ
  17651.  
  17652. This data structure contains common fields between all SHD data structures. 
  17653.  
  17654. typedef struct _shd_common_parm {
  17655. ULONG     ulFunction;  /*  Function requested by PDD. */
  17656. HSTREAM   hStream;     /*  Stream handle. */
  17657.  } SHD_COMMON;
  17658.  
  17659. typedef SHD_COMMON *PSHD_COMMON;
  17660.  
  17661.  
  17662. ΓòÉΓòÉΓòÉ <hidden> SHD_COMMON Parameter - ulFunction ΓòÉΓòÉΓòÉ
  17663.  
  17664.  ulFunction (ULONG) 
  17665.     Specifies the function requested by the PDD. 
  17666.  
  17667.  
  17668. ΓòÉΓòÉΓòÉ <hidden> SHD_COMMON Parameter - hStream ΓòÉΓòÉΓòÉ
  17669.  
  17670.  hStream (HSTREAM) 
  17671.     Specifies the stream handle needed at interrupt time. 
  17672.  
  17673.  
  17674. ΓòÉΓòÉΓòÉ 17.44. SHD_REPORTEVENT ΓòÉΓòÉΓòÉ
  17675.  
  17676. This data structure contains fields for the SHD_REPORT_EVENT message. 
  17677.  
  17678. typedef struct _shd_reportevent_parm {
  17679. ULONG     ulFunction;    /*  Function requested by PDD. */
  17680. HSTREAM   hStream;       /*  Stream handle. */
  17681. HEVENT    hEvent;        /*  Event handle. */
  17682. ULONG     ulStreamTime;  /*  Time in milliseconds of stream position. */
  17683.  } SHD_REPORTEVENT;
  17684.  
  17685. typedef SHD_REPORTEVENT *PSHD_REPORTEVENT;
  17686.  
  17687.  
  17688. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTEVENT Parameter - ulFunction ΓòÉΓòÉΓòÉ
  17689.  
  17690.  ulFunction (ULONG) 
  17691.     Function requested by PDD. 
  17692.  
  17693.  
  17694. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTEVENT Parameter - hStream ΓòÉΓòÉΓòÉ
  17695.  
  17696.  hStream (HSTREAM) 
  17697.     Stream handle. 
  17698.  
  17699.  
  17700. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTEVENT Parameter - hEvent ΓòÉΓòÉΓòÉ
  17701.  
  17702.  hEvent (HEVENT) 
  17703.     Event handle passed back to stream handlers. 
  17704.  
  17705.  
  17706. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTEVENT Parameter - ulStreamTime ΓòÉΓòÉΓòÉ
  17707.  
  17708.  ulStreamTime (ULONG) 
  17709.     Time in milliseconds of stream position. 
  17710.  
  17711.  
  17712. ΓòÉΓòÉΓòÉ 17.45. SHD_REPORTINT ΓòÉΓòÉΓòÉ
  17713.  
  17714. This data structure contains fields for the SHD_REPORT_INT message. 
  17715.  
  17716. typedef struct _shd_reportint_parm {
  17717. ULONG     ulFunction;    /*  Function requested by PDD. */
  17718. HSTREAM   hStream;       /*  Stream handle. */
  17719. PVOID     pBuffer;       /*  Return pointer to last used buffer. */
  17720. ULONG     ulFlag;        /*  Reason for interrupt. */
  17721. ULONG     ulStatus;      /*  Return code or bytes read/written. */
  17722. ULONG     ulStreamTime;  /*  Time in milliseconds of stream position. */
  17723.  } SHD_REPORTINT;
  17724.  
  17725. typedef SHD_REPORTINT *PSHD_REPORTINT;
  17726.  
  17727.  
  17728. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - ulFunction ΓòÉΓòÉΓòÉ
  17729.  
  17730.  ulFunction (ULONG) 
  17731.     Specifies the function requested by the PDD. 
  17732.  
  17733.  
  17734. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - hStream ΓòÉΓòÉΓòÉ
  17735.  
  17736.  hStream (HSTREAM) 
  17737.     Specifies the stream handle so the stream handler knows which stream to 
  17738.     process. 
  17739.  
  17740.  
  17741. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - pBuffer ΓòÉΓòÉΓòÉ
  17742.  
  17743.  pBuffer (PVOID) 
  17744.     Returns the pointer to the last used buffer. 
  17745.  
  17746.  
  17747. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - ulFlag ΓòÉΓòÉΓòÉ
  17748.  
  17749.  ulFlag (ULONG) 
  17750.     Specifies the reason for the interrupt.  This field defines the following 
  17751.     flags: 
  17752.  
  17753.    o  ERROR 
  17754.    o  STREAM_STOP_NOW 
  17755.    o  SHD_READ_COMPLETE 
  17756.    o  SHD_WRITE_COMPLETE 
  17757.  
  17758.     Note:  Do not set SHD_READ_COMPLETE or SHD_WRITE_COMPLETE if not returning 
  17759.            a buffer. 
  17760.  
  17761.     The STREAM_STOP_NOW flag is required. It forces the stream handler to 
  17762.     release all buffers that have not been returned. Issue this flag if 
  17763.     DDCMD_STOP or if the VSD has remaining buffers. 
  17764.  
  17765.  
  17766. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - ulStatus ΓòÉΓòÉΓòÉ
  17767.  
  17768.  ulStatus (ULONG) 
  17769.     Specifies the status for the return code or the bytes read or written. 
  17770.  
  17771.  
  17772. ΓòÉΓòÉΓòÉ <hidden> SHD_REPORTINT Parameter - ulStreamTime ΓòÉΓòÉΓòÉ
  17773.  
  17774.  ulStreamTime (ULONG) 
  17775.     Specifies the time in milliseconds of stream position. 
  17776.  
  17777.  
  17778. ΓòÉΓòÉΓòÉ 17.46. SHORT ΓòÉΓòÉΓòÉ
  17779.  
  17780. Signed integer in the range -32 768 through 32 767. 
  17781.  
  17782. #define SHORT short
  17783.  
  17784.  
  17785. ΓòÉΓòÉΓòÉ 17.47. SPCB ΓòÉΓòÉΓòÉ
  17786.  
  17787. This structure describes a stream protocol of a specific data type. 
  17788.  
  17789. typedef struct _SPCB {
  17790. ULONG     ulSPCBLen;        /*  SPCB length. */
  17791. SPCBKEY   spcbkey;          /*  SPCB key. */
  17792. ULONG     ulDataFlags;      /*  Data type flags. */
  17793. ULONG     ulNumRec;         /*  Maximum number for records/buffers. */
  17794. ULONG     ulBlockSize;      /*  Block size. */
  17795. ULONG     ulBufSize;        /*  Buffer size. */
  17796. ULONG     ulMinBuf;         /*  Minimum number of buffers. */
  17797. ULONG     ulMaxBuf;         /*  Maximum number of buffers. */
  17798. ULONG     ulSrcStart;       /*  Number of empty buffers. */
  17799. ULONG     ulTgtStart;       /*  Number of full buffers. */
  17800. ULONG     ulBufFlags;       /*  Buffer flags. */
  17801. ULONG     ulHandFlags;      /*  Stream handler flags. */
  17802. MMTIME    mmtimeTolerance;  /*  Resync tolerance value. */
  17803. MMTIME    mmtimeSync;       /*  Sync pulse granularity. */
  17804. ULONG     ulBytesPerUnit;   /*  Bytes per unit. */
  17805. MMTIME    mmtimePerUnit;    /*  MMTIME per unit. */
  17806.  } SPCB;
  17807.  
  17808. typedef SPCB FAR *PSPCB;
  17809.  
  17810.  
  17811. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulSPCBLen ΓòÉΓòÉΓòÉ
  17812.  
  17813.  ulSPCBLen (ULONG) 
  17814.     Specifies the length of the stream protocol control block. 
  17815.  
  17816.  
  17817. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - spcbkey ΓòÉΓòÉΓòÉ
  17818.  
  17819.  spcbkey (SPCBKEY) 
  17820.     Data stream type and internal key.  The internal key is used to 
  17821.     differentiate between multiple SPCBs of the same data stream type. User 
  17822.     defines should be addressed to 8,000,000(h) and higher. 
  17823.  
  17824.  
  17825. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulDataFlags ΓòÉΓòÉΓòÉ
  17826.  
  17827.  ulDataFlags (ULONG) 
  17828.     Attributes of the data type (that is, it specifies whether data or time cue 
  17829.     points are supported by this data type). 
  17830.  
  17831.       SPCBDATA_CUEDATA 
  17832.            This data type can support data cue-point events. 
  17833.  
  17834.       SPCBDATA_CUETIME 
  17835.            This data type can support time cue-point events. 
  17836.  
  17837.       SPCBDATA_NOSEEK 
  17838.            Seeking cannot be done on this data type. 
  17839.  
  17840.       SPCBDATA_YIELDTIME 
  17841.            This flag indicates that the ulBytesPerUnit field of the SPCB is 
  17842.            interpreted as a millisecond yield time value. This yield takes 
  17843.            place in between each I/O read operation. The yield time will also 
  17844.            dynamically lower during data streaming depending on how many 
  17845.            buffers in the stream are full.  This flag is mutually exclusive 
  17846.            with the SPCBHAND_GENTIME flag and it can only be used with the 
  17847.            SPCBBUF_INTERLEAVED flag.  The maximum yield time is 1 second. 
  17848.  
  17849.  
  17850. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulNumRec ΓòÉΓòÉΓòÉ
  17851.  
  17852.  ulNumRec (ULONG) 
  17853.     Maximum number of records per buffer.  (This is valid only for split 
  17854.     streams). 
  17855.  
  17856.  
  17857. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulBlockSize ΓòÉΓòÉΓòÉ
  17858.  
  17859.  ulBlockSize (ULONG) 
  17860.     This field can be interpreted in two ways.  If the SPCBBUF_INTERLEAVED flag 
  17861.     is set, then this field is interpreted as the size of the I/O read 
  17862.     operation.  This is used to request a read buffer of a smaller size than 
  17863.     the ulBufSize field. The source stream handler will take the buffer of 
  17864.     ulBufSize and break up the actual I/O reads into ulBlockSize chunks. If 
  17865.     ulBlockSize is 1, then the ulBufSize is used as the default I/O read buffer 
  17866.     size.  Otherwise, ulBlockSize will be the I/O read buffer size.  The 
  17867.     ulBufSize value must be a multiple of the ulBlockSize value. 
  17868.  
  17869.     The second interpretation of this field is for non-interleaved streams, 
  17870.     when the SPCBBUF_INTERLEAVED is not set.  The ulBlockSize field represents 
  17871.     the atom size of a data item. For example, for digital audio data type PCM 
  17872.     16-bit stereo at a 44.1KB sampling rate, the block size is 4 bytes. 
  17873.  
  17874.  
  17875. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulBufSize ΓòÉΓòÉΓòÉ
  17876.  
  17877.  ulBufSize (ULONG) 
  17878.     Size of buffer to be used while streaming.  Maximum buffer size is 64KB. 
  17879.  
  17880.  
  17881. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulMinBuf ΓòÉΓòÉΓòÉ
  17882.  
  17883.  ulMinBuf (ULONG) 
  17884.     Minimum number of buffers needed to maintain a constant data stream. 
  17885.  
  17886.  
  17887. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulMaxBuf ΓòÉΓòÉΓòÉ
  17888.  
  17889.  ulMaxBuf (ULONG) 
  17890.     Maximum (ideal) number of buffers needed.  For normal streams, this means 
  17891.     the number of buffers that are allocated for the stream. For user-provided 
  17892.     buffer streaming, this means the number of buffers that the Sync/Stream 
  17893.     Manager can queue for a consumer. This can be used by a source stream 
  17894.     handler that gives the same set of buffers to the Sync/Stream Manager 
  17895.     repeatedly.  If the number of buffers is set to the number of buffers in 
  17896.     the set -1, the source stream handler will be able to detect when the 
  17897.     target has consumed a buffer so it can be reused. It is assumed that the 
  17898.     set of buffers is an ordered set and each buffer is used in the same order 
  17899.     each time. 
  17900.  
  17901.  
  17902. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulSrcStart ΓòÉΓòÉΓòÉ
  17903.  
  17904.  ulSrcStart (ULONG) 
  17905.     Number of empty buffers required to start the source stream handler.  The 
  17906.     value must be at least as big as the maximum number of buffers that would 
  17907.     be requested by the source stream handler. 
  17908.  
  17909.  
  17910. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulTgtStart ΓòÉΓòÉΓòÉ
  17911.  
  17912.  ulTgtStart (ULONG) 
  17913.     Number of full buffers required to start the target stream handler.  The 
  17914.     value must be at least as big as the maximum number of buffers that would 
  17915.     be requested by the target stream handler. Usually, a target requires at 
  17916.     least two buffers at the start of the stream. 
  17917.  
  17918.  
  17919. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulBufFlags ΓòÉΓòÉΓòÉ
  17920.  
  17921.  ulBufFlags (ULONG) 
  17922.     Buffer attributes (that is, the user provides buffers, fixed block size, 
  17923.     interleaved data type, maximum buffer size). 
  17924.  
  17925.       SPCBBUF_16MEG 
  17926.            The stream buffers can be allocated above the 16MB line. This is 
  17927.            used by stream handler device drivers that can support greater than 
  17928.            16MB addresses. 
  17929.  
  17930.       SPCBBUF_FIXEDBUF 
  17931.            The buffer size for this stream handler must be a particular fixed 
  17932.            size (for this data type). The SPCBBUF_INTERLEAVED flag (split 
  17933.            stream) implies SPCBBUF_FIXEDBUF. 
  17934.  
  17935.       SPCBBUF_INTERLEAVED 
  17936.            This is a split stream.  It consists of one input stream of 
  17937.            interleaved data that is split into multiple streams of individual 
  17938.            data types. Only the source stream handler can set this flag. This 
  17939.            flag is mutually exclusive with the SPCBBUF_USERPROVIDED flag. 
  17940.            SPCBBUF_FIXEDBUF cannot be used with this flag set. 
  17941.  
  17942.       SPCBBUF_MAXSIZE 
  17943.            The ulBufSize field contains the maximum size buffer that this 
  17944.            stream handler can handle. 
  17945.  
  17946.       SPCBBUF_NONCONTIGUOUS 
  17947.            Each data buffer is allocated contiguously in physical memory unless 
  17948.            both stream handlers set the non-contiguous flag 
  17949.            (SPCBBUF_NONCONTIGUOUS). This flag provides the system flexibility 
  17950.            in allocating memory. A device driver stream handler might require 
  17951.            contiguous memory, while a DLL stream handler might not. 
  17952.  
  17953.       SPCBBUF_USERPROVIDED 
  17954.            The user provides buffers for streaming.  The Sync/Stream Manager 
  17955.            does not allocate buffers but attempts to lock down user-provided 
  17956.            buffers or copy the data to locked buffers.  Using this flag affects 
  17957.            the performance of streaming.  Only a source stream handler can set 
  17958.            this flag.  This flag is mutually exclusive with the 
  17959.            SPCBBUF_INTERLEAVED flag. 
  17960.  
  17961.  
  17962. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulHandFlags ΓòÉΓòÉΓòÉ
  17963.  
  17964.  ulHandFlags (ULONG) 
  17965.     Stream handler flags (that is, handlers can generate/receive sync pulses, 
  17966.     use the Sync/Stream Manager timer as master, and use the non-streaming 
  17967.     handler as a NULL handler). 
  17968.  
  17969.       SPCBHAND_GENSYNC 
  17970.            This stream handler can generate sync pulses. 
  17971.  
  17972.       SPCBHAND_GENTIME 
  17973.            This stream handler can keep track of the real stream time. This 
  17974.            handler also supports the SpiGetTime function and cue point events. 
  17975.  
  17976.       SPCBHAND_NOPREROLL 
  17977.            This stream handler cannot preroll its device (that is, for 
  17978.            recording streams, the source stream handler cannot be prerolled). 
  17979.            If asked to preroll this stream, the Sync/Stream Manager treats this 
  17980.            stream as if it were prerolled. 
  17981.  
  17982.       SPCBHAND_NONSTREAM 
  17983.            This stream handler is a non-streaming handler (that is, it is a 
  17984.            stream handler that can participate in synchronization but does not 
  17985.            stream). 
  17986.  
  17987.       SPCBHAND_NOSYNC 
  17988.            This stream handler can be in a sync group but does not receive or 
  17989.            generate sync pulses. (It is useful to group streams so that they 
  17990.            can be manipulated as a group). 
  17991.  
  17992.       SPCBHAND_PHYS_SEEK 
  17993.            This stream handler does a seek to a physical device.  Other stream 
  17994.            handlers adjust stream time only on a seek request.  The Sync/Stream 
  17995.            Manager always calls this stream handler first in an SpiSeekStream 
  17996.            call. 
  17997.  
  17998.       SPCBHAND_RCVSYNC 
  17999.            This stream handler can receive sync pulses. 
  18000.  
  18001.       SPCBHAND_TIMER 
  18002.            This stream handler or the device (driver) it communicates with 
  18003.            cannot support generation of sync pulses on a granularity necessary 
  18004.            for synchronization.  Therefore, use the stream manager sync timer 
  18005.            as the master timer in a sync group. 
  18006.  
  18007.  
  18008. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - mmtimeTolerance ΓòÉΓòÉΓòÉ
  18009.  
  18010.  mmtimeTolerance (MMTIME) 
  18011.     It is used to determine whether to send a sync pulse to a specific slave 
  18012.     stream handler. 
  18013.  
  18014.  
  18015. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - mmtimeSync ΓòÉΓòÉΓòÉ
  18016.  
  18017.  mmtimeSync (MMTIME) 
  18018.     Time interval in Chinatown units between sync pulses. Used to save sync 
  18019.     pulse generation granularity if this stream handler is a master but cannot 
  18020.     generate its own sync pulse. 
  18021.  
  18022.  
  18023. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - ulBytesPerUnit ΓòÉΓòÉΓòÉ
  18024.  
  18025.  ulBytesPerUnit (ULONG) 
  18026.     Bytes per unit of time.  This is used to do a seek on linear data that is 
  18027.     not compressed or of variable length. Also used for SHC_GET_TIME queries in 
  18028.     a stream handler. 
  18029.  
  18030.  
  18031. ΓòÉΓòÉΓòÉ <hidden> SPCB Parameter - mmtimePerUnit ΓòÉΓòÉΓòÉ
  18032.  
  18033.  mmtimePerUnit (MMTIME) 
  18034.     The amount of MMTIME each unit represents.  This also is used for the 
  18035.     SHC_SEEK and SHC_GETTIME messages. 
  18036.  
  18037.  
  18038. ΓòÉΓòÉΓòÉ 17.48. SPCBKEY ΓòÉΓòÉΓòÉ
  18039.  
  18040. This structure identifies a stream protocol. 
  18041.  
  18042. typedef struct _SPCBKEY {
  18043. ULONG   ulDataType;     /*  Data type. */
  18044. ULONG   ulDataSubType;  /*  Data subtype. */
  18045. ULONG   ulIntKey;       /*  Internal key. */
  18046.  } SPCBKEY;
  18047.  
  18048. typedef SPCBKEY FAR *PSPCBKEY;
  18049.  
  18050.  
  18051. ΓòÉΓòÉΓòÉ <hidden> SPCBKEY Parameter - ulDataType ΓòÉΓòÉΓòÉ
  18052.  
  18053.  ulDataType (ULONG) 
  18054.     Data type. 
  18055.  
  18056.  
  18057. ΓòÉΓòÉΓòÉ <hidden> SPCBKEY Parameter - ulDataSubType ΓòÉΓòÉΓòÉ
  18058.  
  18059.  ulDataSubType (ULONG) 
  18060.     Data subtype. 
  18061.  
  18062.  
  18063. ΓòÉΓòÉΓòÉ <hidden> SPCBKEY Parameter - ulIntKey ΓòÉΓòÉΓòÉ
  18064.  
  18065.  ulIntKey (ULONG) 
  18066.     Contains a unique value used to identify one of several stream protocols of 
  18067.     the same data type and subtype. 
  18068.  
  18069.  
  18070. ΓòÉΓòÉΓòÉ 17.49. STATUS_PARM ΓòÉΓòÉΓòÉ
  18071.  
  18072. This data structure contains fields for the pStatus and ulStatusSize fields of 
  18073. the DDCMDSTATUS data structure. 
  18074.  
  18075. typedef struct _STATUS_PARM {
  18076. ULONG   ulTime;  /*  Current position time in milliseconds. */
  18077.  } STATUS_PARM;
  18078.  
  18079.  
  18080. ΓòÉΓòÉΓòÉ <hidden> STATUS_PARM Parameter - ulTime ΓòÉΓòÉΓòÉ
  18081.  
  18082.  ulTime (ULONG) 
  18083.     Specifies the current position time in milliseconds. 
  18084.  
  18085.  
  18086. ΓòÉΓòÉΓòÉ 17.50. SZ ΓòÉΓòÉΓòÉ
  18087.  
  18088. Null-terminated string (also known as a zero-terminated string). 
  18089.  
  18090. typedef CHAR SZ[];
  18091.  
  18092.  
  18093. ΓòÉΓòÉΓòÉ 17.51. ULONG ΓòÉΓòÉΓòÉ
  18094.  
  18095. Unsigned integer in the range 0 through 4 294 967 295. 
  18096.  
  18097. typedef unsigned long ULONG;
  18098.  
  18099.  
  18100. ΓòÉΓòÉΓòÉ 17.52. USHORT ΓòÉΓòÉΓòÉ
  18101.  
  18102. Unsigned integer in the range 0 through 65 535. 
  18103.  
  18104. typedef unsigned short USHORT;
  18105.  
  18106.  
  18107. ΓòÉΓòÉΓòÉ 17.53. VCACAPISIZE ΓòÉΓòÉΓòÉ
  18108.  
  18109. typedef struct _VCACAPISIZE {
  18110. ULONG   X_Left;
  18111. ULONG   Y_Top;
  18112. ULONG   Y_Height;
  18113. ULONG   X_Width;
  18114. ULONG   ScaleFactor;
  18115.  } VCACAPISIZE;
  18116.  
  18117. typedef VCACAPISIZE FAR * PVCACAPISIZE;
  18118.  
  18119.  
  18120. ΓòÉΓòÉΓòÉ <hidden> VCACAPISIZE Parameter - X_Left ΓòÉΓòÉΓòÉ
  18121.  
  18122.  X_Left (ULONG) 
  18123.  
  18124.  
  18125. ΓòÉΓòÉΓòÉ <hidden> VCACAPISIZE Parameter - Y_Top ΓòÉΓòÉΓòÉ
  18126.  
  18127.  Y_Top (ULONG) 
  18128.  
  18129.  
  18130. ΓòÉΓòÉΓòÉ <hidden> VCACAPISIZE Parameter - Y_Height ΓòÉΓòÉΓòÉ
  18131.  
  18132.  Y_Height (ULONG) 
  18133.  
  18134.  
  18135. ΓòÉΓòÉΓòÉ <hidden> VCACAPISIZE Parameter - X_Width ΓòÉΓòÉΓòÉ
  18136.  
  18137.  X_Width (ULONG) 
  18138.  
  18139.  
  18140. ΓòÉΓòÉΓòÉ <hidden> VCACAPISIZE Parameter - ScaleFactor ΓòÉΓòÉΓòÉ
  18141.  
  18142.  ScaleFactor (ULONG) 
  18143.  
  18144.  
  18145. ΓòÉΓòÉΓòÉ 17.54. VCADEVINFO ΓòÉΓòÉΓòÉ
  18146.  
  18147. typedef struct _vcadevinfo {
  18148. ULONG    Length;           /*  Length of structure. */
  18149. CHAR     ProdInfo[30];     /*  Describes product information. */
  18150. CHAR     ManInfo[30];      /*  Describes manufacturer information. */
  18151. CHAR     Version[10];      /*  Describes version information. */
  18152. ULONG    ImgFormat;        /*  Image format supported by the card. */
  18153. USHORT   BitsPerPEL;       /*  Bits per pel in this image format. */
  18154. USHORT   Overlay;          /*  Device has overlay support. */
  18155. ULONG    Brightness;       /*  Default brightness value. */
  18156. ULONG    hue;              /*  Default hue value. */
  18157. ULONG    saturation;       /*  Default saturation value. */
  18158. ULONG    contrast;         /*  Default contrast value. */
  18159. ULONG    Sharpness;        /*  Default sharpness value. */
  18160. ULONG    unused1;          /*  Reserved. */
  18161. ULONG    S_X_Left;         /*  Source frame:  default left coordinate. */
  18162. ULONG    S_Y_Top;          /*  Source frame:  default top coordinate. */
  18163. ULONG    S_Y_Height;       /*  Source frame:  default height coordinate. */
  18164. ULONG    S_X_Width;        /*  Source frame:  default width coordinate. */
  18165. ULONG    D_X_Left;         /*  Destination frame:  default left coordinate. */
  18166. ULONG    D_Y_Top;          /*  Destination frame:  default top coordinate. */
  18167. ULONG    D_Y_Height;       /*  Destination frame:  default height coordinate. */
  18168. ULONG    D_X_Width;        /*  Destination frame:  default width coordinate. */
  18169. ULONG    D_ScaleFactor;
  18170. ULONG    S_X_MAX;          /*  Maximum X size for the digitized source. */
  18171. ULONG    S_Y_MAX;          /*  Maximum Y size for the digitized source. */
  18172. ULONG    D_X_MAX;          /*  Maximum X size for the destination. */
  18173. ULONG    D_Y_MAX;          /*  Maximum Y size for the destination. */
  18174. ULONG    O_X_MAX;          /*  Maximum X size for the overlay destination. */
  18175. ULONG    O_Y_MAX;          /*  Maximum Y size for the overlay destination. */
  18176. USHORT   VideoInputs;      /*  Number of software switchable video inputs. */
  18177. USHORT   CanRestore;       /*  Can restore an image on the device. */
  18178. USHORT   CanStretch;       /*  Can scale image from source to destination. */
  18179. USHORT   CanDistort;       /*  Can scale image without maintaining aspect ratio. */
  18180. USHORT   HasVolume;        /*  Video device has volume control. */
  18181. USHORT   HasBalance;       /*  Video device has balance control. */
  18182. USHORT   CanScale;         /*  Can scale down source image on GetImage IOCtl. */
  18183. USHORT   CanStream;        /*  Can do streaming of images to stream handler. */
  18184. ULONG    DI_ulFilenum;     /*  File number associated with this instance/open of the device. */
  18185. BYTE     HasTuner;         /*  Card has a channel tuner. */
  18186. BYTE     HasTeleTex;       /*  Card has teletex support. */
  18187. LONG     Delay_Time;       /*  Delay (ms) between connector change/query signal. */
  18188. BYTE     HasAFC;           /*  Automatic Frequency Control/FineTune. */
  18189. BYTE     HasPolarization;  /*  Support video frequency polarization. */
  18190.  } VCADEVINFO;
  18191.  
  18192. typedef VCADEVINFO FAR * PVCADEVINFO;
  18193.  
  18194.  
  18195. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Length ΓòÉΓòÉΓòÉ
  18196.  
  18197.  Length (ULONG) 
  18198.     Specifies the length, in bytes, of this structure. 
  18199.  
  18200.  
  18201. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - ProdInfo[30] ΓòÉΓòÉΓòÉ
  18202.  
  18203.  ProdInfo[30] (CHAR) 
  18204.     String describing product information. 
  18205.  
  18206.  
  18207. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - ManInfo[30] ΓòÉΓòÉΓòÉ
  18208.  
  18209.  ManInfo[30] (CHAR) 
  18210.     String describing manufacturer information. 
  18211.  
  18212.  
  18213. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Version[10] ΓòÉΓòÉΓòÉ
  18214.  
  18215.  Version[10] (CHAR) 
  18216.     String describing version information. 
  18217.  
  18218.  
  18219. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - ImgFormat ΓòÉΓòÉΓòÉ
  18220.  
  18221.  ImgFormat (ULONG) 
  18222.     Indicates image format supported by the card. Valid image formats are: 
  18223.  
  18224.       DI_IMAGEFORMAT_RGB_565 
  18225.          5 bits of red, 6 bits of green, 5 bits of blue. 
  18226.  
  18227.       DI_IMAGEFORMAT_YUV_411 
  18228.          YUV_411 bit-interleaved format. 
  18229.  
  18230.  
  18231. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - BitsPerPEL ΓòÉΓòÉΓòÉ
  18232.  
  18233.  BitsPerPEL (USHORT) 
  18234.     Specifies bits per pel in this image format. 
  18235.  
  18236.  
  18237. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Overlay ΓòÉΓòÉΓòÉ
  18238.  
  18239.  Overlay (USHORT) 
  18240.     Specifies if the device has overlay support (TRUE or FALSE). 
  18241.  
  18242.  
  18243. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Brightness ΓòÉΓòÉΓòÉ
  18244.  
  18245.  Brightness (ULONG) 
  18246.     Specifies the default brightness value (0 to 255). 
  18247.  
  18248.  
  18249. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - hue ΓòÉΓòÉΓòÉ
  18250.  
  18251.  hue (ULONG) 
  18252.     Specifies the default hue value (0 to 255). 
  18253.  
  18254.  
  18255. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - saturation ΓòÉΓòÉΓòÉ
  18256.  
  18257.  saturation (ULONG) 
  18258.     Specifies the default saturation value (0 to 255). 
  18259.  
  18260.  
  18261. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - contrast ΓòÉΓòÉΓòÉ
  18262.  
  18263.  contrast (ULONG) 
  18264.     Specifies the default contrast value (0 to 255). 
  18265.  
  18266.  
  18267. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Sharpness ΓòÉΓòÉΓòÉ
  18268.  
  18269.  Sharpness (ULONG) 
  18270.     Specifies the default sharpness value (0 to 255). 
  18271.  
  18272.  
  18273. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - unused1 ΓòÉΓòÉΓòÉ
  18274.  
  18275.  unused1 (ULONG) 
  18276.     Reserved.  Set to zero. 
  18277.  
  18278.  
  18279. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_X_Left ΓòÉΓòÉΓòÉ
  18280.  
  18281.  S_X_Left (ULONG) 
  18282.     Specifies the default source frame default left coordinate. 
  18283.  
  18284.  
  18285. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_Y_Top ΓòÉΓòÉΓòÉ
  18286.  
  18287.  S_Y_Top (ULONG) 
  18288.     Specifies the default source frame default top coordinate. 
  18289.  
  18290.  
  18291. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_Y_Height ΓòÉΓòÉΓòÉ
  18292.  
  18293.  S_Y_Height (ULONG) 
  18294.     Specifies the default source frame default height coordinate. 
  18295.  
  18296.  
  18297. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_X_Width ΓòÉΓòÉΓòÉ
  18298.  
  18299.  S_X_Width (ULONG) 
  18300.     Specifies the default source frame default width coordinate. 
  18301.  
  18302.  
  18303. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_X_Left ΓòÉΓòÉΓòÉ
  18304.  
  18305.  D_X_Left (ULONG) 
  18306.     Specifies the default destination frame default left coordinate. 
  18307.  
  18308.  
  18309. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_Y_Top ΓòÉΓòÉΓòÉ
  18310.  
  18311.  D_Y_Top (ULONG) 
  18312.     Specifies the default destination frame default top coordinate. 
  18313.  
  18314.  
  18315. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_Y_Height ΓòÉΓòÉΓòÉ
  18316.  
  18317.  D_Y_Height (ULONG) 
  18318.     Specifies the default destination frame default height coordinate. 
  18319.  
  18320.  
  18321. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_X_Width ΓòÉΓòÉΓòÉ
  18322.  
  18323.  D_X_Width (ULONG) 
  18324.     Specifies the default destination frame default width coordinate. 
  18325.  
  18326.  
  18327. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_ScaleFactor ΓòÉΓòÉΓòÉ
  18328.  
  18329.  D_ScaleFactor (ULONG) 
  18330.     Specifies the default scale factor on a copy action. 
  18331.  
  18332.  
  18333. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_X_MAX ΓòÉΓòÉΓòÉ
  18334.  
  18335.  S_X_MAX (ULONG) 
  18336.     Indicates the maximum X size for the digitized source. 
  18337.  
  18338.  
  18339. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - S_Y_MAX ΓòÉΓòÉΓòÉ
  18340.  
  18341.  S_Y_MAX (ULONG) 
  18342.     Indicates the maximum Y size for the digitized source. 
  18343.  
  18344.  
  18345. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_X_MAX ΓòÉΓòÉΓòÉ
  18346.  
  18347.  D_X_MAX (ULONG) 
  18348.     Indicates the maximum X size for the destination. 
  18349.  
  18350.  
  18351. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - D_Y_MAX ΓòÉΓòÉΓòÉ
  18352.  
  18353.  D_Y_MAX (ULONG) 
  18354.     Indicates the maximum Y size for the destination. 
  18355.  
  18356.  
  18357. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - O_X_MAX ΓòÉΓòÉΓòÉ
  18358.  
  18359.  O_X_MAX (ULONG) 
  18360.     Indicates the maximum X size for the overlay destination. 
  18361.  
  18362.  
  18363. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - O_Y_MAX ΓòÉΓòÉΓòÉ
  18364.  
  18365.  O_Y_MAX (ULONG) 
  18366.     Indicates the maximum Y size for the overlay destination. 
  18367.  
  18368.  
  18369. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - VideoInputs ΓòÉΓòÉΓòÉ
  18370.  
  18371.  VideoInputs (USHORT) 
  18372.     Specifies the number of software switchable video inputs. 
  18373.  
  18374.  
  18375. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - CanRestore ΓòÉΓòÉΓòÉ
  18376.  
  18377.  CanRestore (USHORT) 
  18378.     Indicates if an image can be restored on the device (TRUE or FALSE). 
  18379.  
  18380.  
  18381. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - CanStretch ΓòÉΓòÉΓòÉ
  18382.  
  18383.  CanStretch (USHORT) 
  18384.     Indicates if the image can be scaled from source to destination (TRUE or 
  18385.     FALSE). 
  18386.  
  18387.  
  18388. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - CanDistort ΓòÉΓòÉΓòÉ
  18389.  
  18390.  CanDistort (USHORT) 
  18391.     Indicates if the image can be scaled without maintaining aspect ratio (TRUE 
  18392.     or FALSE). 
  18393.  
  18394.  
  18395. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasVolume ΓòÉΓòÉΓòÉ
  18396.  
  18397.  HasVolume (USHORT) 
  18398.     Indicates if the video device has volume control (TRUE or FALSE). 
  18399.  
  18400.  
  18401. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasBalance ΓòÉΓòÉΓòÉ
  18402.  
  18403.  HasBalance (USHORT) 
  18404.     Indicates if the video device has balance control (TRUE or FALSE). 
  18405.  
  18406.  
  18407. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - CanScale ΓòÉΓòÉΓòÉ
  18408.  
  18409.  CanScale (USHORT) 
  18410.     Indicates if the image can be scaled down on GetImage IOCtl (TRUE or 
  18411.     FALSE). 
  18412.  
  18413.  
  18414. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - CanStream ΓòÉΓòÉΓòÉ
  18415.  
  18416.  CanStream (USHORT) 
  18417.     Indicates if the device supports streaming of images to stream handler 
  18418.     (TRUE or FALSE). 
  18419.  
  18420.  
  18421. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - DI_ulFilenum ΓòÉΓòÉΓòÉ
  18422.  
  18423.  DI_ulFilenum (ULONG) 
  18424.     This file number is used to associate the stream creation with a particular 
  18425.     open instance. 
  18426.  
  18427.  
  18428. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasTuner ΓòÉΓòÉΓòÉ
  18429.  
  18430.  HasTuner (BYTE) 
  18431.     Card has a channel tuner. 
  18432.  
  18433.  
  18434. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasTeleTex ΓòÉΓòÉΓòÉ
  18435.  
  18436.  HasTeleTex (BYTE) 
  18437.     Card has teletex support. 
  18438.  
  18439.  
  18440. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - Delay_Time ΓòÉΓòÉΓòÉ
  18441.  
  18442.  Delay_Time (LONG) 
  18443.     Delay (ms) between connector change/query signal. 
  18444.  
  18445.  
  18446. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasAFC ΓòÉΓòÉΓòÉ
  18447.  
  18448.  HasAFC (BYTE) 
  18449.     Automatic Frequency Control/FineTune. 
  18450.  
  18451.  
  18452. ΓòÉΓòÉΓòÉ <hidden> VCADEVINFO Parameter - HasPolarization ΓòÉΓòÉΓòÉ
  18453.  
  18454.  HasPolarization (BYTE) 
  18455.     Support video frequency polarization. 
  18456.  
  18457.  
  18458. ΓòÉΓòÉΓòÉ 17.55. VCAEDCOLORKEY ΓòÉΓòÉΓòÉ
  18459.  
  18460. typedef struct _VCAEDCOLORKEY {
  18461. BOOL   bColorKeying;  /*  1=TRUE=ON, 0=FALSE=OFF. */
  18462.  } VCAEDCOLORKEY;
  18463.  
  18464. typedef VCAEDCOLORKEY FAR * PVCAEDCOLORKEY;
  18465.  
  18466.  
  18467. ΓòÉΓòÉΓòÉ <hidden> VCAEDCOLORKEY Parameter - bColorKeying ΓòÉΓòÉΓòÉ
  18468.  
  18469.  bColorKeying (BOOL) 
  18470.     1=TRUE=ON, 0=FALSE=OFF. 
  18471.  
  18472.  
  18473. ΓòÉΓòÉΓòÉ 17.56. VCAGETIMAGESCALE ΓòÉΓòÉΓòÉ
  18474.  
  18475. typedef struct _VCAGETIMAGESCALE {
  18476. ULONG   Capture_Buf_Len;  /*  Length, in bytes, of capture buffer. */
  18477. ULONG   Capture_Buf_Ptr;  /*  Pointer to the capture buffer. */
  18478. ULONG   Source_X_Left;    /*  Leftmost pel offset in source frame. */
  18479. ULONG   Source_Y_Top;     /*  Topmost pel offset in source frame. */
  18480. ULONG   Source_Y_Height;  /*  Height of source frame, in pels. */
  18481. ULONG   Source_X_Width;   /*  Width of source frame, in pels. */
  18482. ULONG   Dest_X_Left;      /*  Destination frame's left transpose offset. */
  18483. ULONG   Dest_Y_Top;       /*  Destination frame's top transpose offset. */
  18484. ULONG   Dest_Y_Height;    /*  Height of destination frame in pels. */
  18485. ULONG   Dest_X_Width;     /*  Width of destination frame in pels. */
  18486.  } VCAGETIMAGESCALE;
  18487.  
  18488. typedef VCAGETIMAGESCLAE FAR * PVCAGETIMAGESCALE;
  18489.  
  18490.  
  18491. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Capture_Buf_Len ΓòÉΓòÉΓòÉ
  18492.  
  18493.  Capture_Buf_Len (ULONG) 
  18494.     Specifies the length, in bytes, of the capture buffer. 
  18495.  
  18496.  
  18497. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Capture_Buf_Ptr ΓòÉΓòÉΓòÉ
  18498.  
  18499.  Capture_Buf_Ptr (ULONG) 
  18500.     Specifies a pointer to the capture buffer. 
  18501.  
  18502.  
  18503. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Source_X_Left ΓòÉΓòÉΓòÉ
  18504.  
  18505.  Source_X_Left (ULONG) 
  18506.     Specifies the leftmost pel offset in the source frame. 
  18507.  
  18508.  
  18509. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Source_Y_Top ΓòÉΓòÉΓòÉ
  18510.  
  18511.  Source_Y_Top (ULONG) 
  18512.     Specifies the topmost pel offset in the source frame. 
  18513.  
  18514.  
  18515. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Source_Y_Height ΓòÉΓòÉΓòÉ
  18516.  
  18517.  Source_Y_Height (ULONG) 
  18518.     Specifies the height of the source frame, in pels. 
  18519.  
  18520.  
  18521. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Source_X_Width ΓòÉΓòÉΓòÉ
  18522.  
  18523.  Source_X_Width (ULONG) 
  18524.     Specifies the width of the source frame, in pels. 
  18525.  
  18526.  
  18527. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Dest_X_Left ΓòÉΓòÉΓòÉ
  18528.  
  18529.  Dest_X_Left (ULONG) 
  18530.     Specifies the destination frame's left transpose offset. 
  18531.  
  18532.  
  18533. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Dest_Y_Top ΓòÉΓòÉΓòÉ
  18534.  
  18535.  Dest_Y_Top (ULONG) 
  18536.     Specifies the destination frame's top transpose offset. 
  18537.  
  18538.  
  18539. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Dest_Y_Height ΓòÉΓòÉΓòÉ
  18540.  
  18541.  Dest_Y_Height (ULONG) 
  18542.     Specifies the height of the destination frame in pels. 
  18543.  
  18544.  
  18545. ΓòÉΓòÉΓòÉ <hidden> VCAGETIMAGESCALE Parameter - Dest_X_Width ΓòÉΓòÉΓòÉ
  18546.  
  18547.  Dest_X_Width (ULONG) 
  18548.     Specifies the width of the destination frame in pels. 
  18549.  
  18550.  
  18551. ΓòÉΓòÉΓòÉ 17.57. VCALOAD ΓòÉΓòÉΓòÉ
  18552.  
  18553. This structure contains fields for the VCAI_LOAD_MICROCODE function. 
  18554.  
  18555. typedef struct _VCALOAD {
  18556. ULONG   ulflags;        /*  1=Query, 2=Load, 3=Unload. */
  18557. CHAR    ProdInfo[256];  /*  Path and name of microcode load. */
  18558. LONG    ulLoadID;       /*  Load ID (returned on a load). */
  18559. ULONG   ulLength;       /*  Length of load data. */
  18560. PVOID   pLoadData;      /*  Pointer to microcode load data. */
  18561.  } VCALOAD;
  18562.  
  18563. typedef VCALOAD FAR * PVCALOAD;
  18564.  
  18565.  
  18566. ΓòÉΓòÉΓòÉ <hidden> VCALOAD Parameter - ulflags ΓòÉΓòÉΓòÉ
  18567.  
  18568.  ulflags (ULONG) 
  18569.     The following flags are defined. 
  18570.  
  18571.         VCALOAD_QUERY     0x01
  18572.         VCALOAD_LOAD      0x02
  18573.         VCALOAD_UNLOAD    0x03
  18574.  
  18575.  
  18576. ΓòÉΓòÉΓòÉ <hidden> VCALOAD Parameter - ProdInfo[256] ΓòÉΓòÉΓòÉ
  18577.  
  18578.  ProdInfo[256] (CHAR) 
  18579.     Path and name of microcode load. 
  18580.  
  18581.  
  18582. ΓòÉΓòÉΓòÉ <hidden> VCALOAD Parameter - ulLoadID ΓòÉΓòÉΓòÉ
  18583.  
  18584.  ulLoadID (LONG) 
  18585.     Load ID (returned on a load). 
  18586.  
  18587.  
  18588. ΓòÉΓòÉΓòÉ <hidden> VCALOAD Parameter - ulLength ΓòÉΓòÉΓòÉ
  18589.  
  18590.  ulLength (ULONG) 
  18591.     Length of load data. 
  18592.  
  18593.  
  18594. ΓòÉΓòÉΓòÉ <hidden> VCALOAD Parameter - pLoadData ΓòÉΓòÉΓòÉ
  18595.  
  18596.  pLoadData (PVOID) 
  18597.     Pointer to microcode load data. 
  18598.  
  18599.  
  18600. ΓòÉΓòÉΓòÉ 17.58. VCAIMAGERF ΓòÉΓòÉΓòÉ
  18601.  
  18602. This structure contains fields for the VCAI_RESTORE_FORMAT function. 
  18603.  
  18604. typedef struct _VCAIMAGERF {
  18605. ULONG   ulFlags;       /*  0=Query, 1=Set. */
  18606. ULONG   ulNumFormats;  /*  Number of supported formats. */
  18607. ULONG   ulCurIndex;    /*  Current format (or format to set to). */
  18608. ULONG   FourCC[64];    /*  Name of format. */
  18609.  } VCAIMAGERF;
  18610.  
  18611. typedef VCAIMAGERF FAR * PVCAIMAGERF;
  18612.  
  18613.  
  18614. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGERF Parameter - ulFlags ΓòÉΓòÉΓòÉ
  18615.  
  18616.  ulFlags (ULONG) 
  18617.     The following values are defined for ulFlags. 
  18618.  
  18619.         VCAIRF_Query    0x00
  18620.         VCAIRF_Set      0x01
  18621.  
  18622.  
  18623. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGERF Parameter - ulNumFormats ΓòÉΓòÉΓòÉ
  18624.  
  18625.  ulNumFormats (ULONG) 
  18626.     Number of supported formats. 
  18627.  
  18628.  
  18629. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGERF Parameter - ulCurIndex ΓòÉΓòÉΓòÉ
  18630.  
  18631.  ulCurIndex (ULONG) 
  18632.     Current format (or format to set to). 
  18633.  
  18634.  
  18635. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGERF Parameter - FourCC[64] ΓòÉΓòÉΓòÉ
  18636.  
  18637.  FourCC[64] (ULONG) 
  18638.     Name of format. 
  18639.  
  18640.  
  18641. ΓòÉΓòÉΓòÉ 17.59. VCAIMAGECF ΓòÉΓòÉΓòÉ
  18642.  
  18643. This structure contains fields for the VCAI_CAPTURE_FORMAT function. 
  18644.  
  18645. typedef struct _VCAIMAGECF {
  18646. ULONG   ulFlags;       /*  0=Query, 1=Set. */
  18647. ULONG   ulNumFormats;  /*  Number of supported formats. */
  18648. ULONG   ulCurIndex;    /*  Current format (or format to set to). */
  18649. ULONG   FourCC[64];    /*  Name of format. */
  18650.  } VCAIMAGECF;
  18651.  
  18652. typedef VCAIMAGECF FAR * PVCAIMAGECF;
  18653.  
  18654.  
  18655. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGECF Parameter - ulFlags ΓòÉΓòÉΓòÉ
  18656.  
  18657.  ulFlags (ULONG) 
  18658.     The following values are defined for ulFlags. 
  18659.  
  18660.         VCAICF_Query   0x00
  18661.         VCAICF_Set     0x01
  18662.  
  18663.  
  18664. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGECF Parameter - ulNumFormats ΓòÉΓòÉΓòÉ
  18665.  
  18666.  ulNumFormats (ULONG) 
  18667.     Number of supported formats. 
  18668.  
  18669.  
  18670. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGECF Parameter - ulCurIndex ΓòÉΓòÉΓòÉ
  18671.  
  18672.  ulCurIndex (ULONG) 
  18673.     Current format (or format to set to). 
  18674.  
  18675.  
  18676. ΓòÉΓòÉΓòÉ <hidden> VCAIMAGECF Parameter - FourCC[64] ΓòÉΓòÉΓòÉ
  18677.  
  18678.  FourCC[64] (ULONG) 
  18679.     Name of format. 
  18680.  
  18681.  
  18682. ΓòÉΓòÉΓòÉ 17.60. VCASETCAPTURERECT ΓòÉΓòÉΓòÉ
  18683.  
  18684. typedef struct _VCASETCAPTURERECT {
  18685. ULONG   Source_X_Left;    /*  Leftmost pel offset in source frame. */
  18686. ULONG   Source_Y_Top;     /*  Topmost pel offset in source frame. */
  18687. ULONG   Source_Y_Height;  /*  Height of source frame, in pels. */
  18688. ULONG   Source_X_Width;   /*  Width of source frame, in pels. */
  18689. ULONG   Dest_X_Left;      /*  Destination frame's left transpose offset. */
  18690. ULONG   Dest_Y_Top;       /*  Destination frame's top transpose offset. */
  18691. ULONG   Dest_Y_Height;    /*  Height of destination frame in pels. */
  18692. ULONG   Dest_X_Width;     /*  Width of destination frame in pels. */
  18693.  } VCASETCAPTURERECT;
  18694.  
  18695. typedef VCASETCAPTURERECT FAR * PVCASETCAPTURERECT;
  18696.  
  18697.  
  18698. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Source_X_Left ΓòÉΓòÉΓòÉ
  18699.  
  18700.  Source_X_Left (ULONG) 
  18701.     Specifies the leftmost pel offset in the source frame. 
  18702.  
  18703.  
  18704. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Source_Y_Top ΓòÉΓòÉΓòÉ
  18705.  
  18706.  Source_Y_Top (ULONG) 
  18707.     Specifies the topmost pel offset in the source frame. 
  18708.  
  18709.  
  18710. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Source_Y_Height ΓòÉΓòÉΓòÉ
  18711.  
  18712.  Source_Y_Height (ULONG) 
  18713.     Specifies the height of source frame, in pels. 
  18714.  
  18715.  
  18716. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Source_X_Width ΓòÉΓòÉΓòÉ
  18717.  
  18718.  Source_X_Width (ULONG) 
  18719.     Specifies the width of source frame, in pels. 
  18720.  
  18721.  
  18722. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Dest_X_Left ΓòÉΓòÉΓòÉ
  18723.  
  18724.  Dest_X_Left (ULONG) 
  18725.     Specifies the destination frame's left transpose offset. 
  18726.  
  18727.  
  18728. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Dest_Y_Top ΓòÉΓòÉΓòÉ
  18729.  
  18730.  Dest_Y_Top (ULONG) 
  18731.     Specifies the destination frame's top transpose offset. 
  18732.  
  18733.  
  18734. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Dest_Y_Height ΓòÉΓòÉΓòÉ
  18735.  
  18736.  Dest_Y_Height (ULONG) 
  18737.     Specifies the height of the destination frame in pels. 
  18738.  
  18739.  
  18740. ΓòÉΓòÉΓòÉ <hidden> VCASETCAPTURERECT Parameter - Dest_X_Width ΓòÉΓòÉΓòÉ
  18741.  
  18742.  Dest_X_Width (ULONG) 
  18743.     Specifies the width of the destination frame in pels. 
  18744.  
  18745.  
  18746. ΓòÉΓòÉΓòÉ 17.61. VCASETCOLORKEY ΓòÉΓòÉΓòÉ
  18747.  
  18748. typedef struct _VCASETCOLORKEY {
  18749. ULONG   ulColorKey;  /*  Transparent color. */
  18750.  } VCASETCOLORKEY;
  18751.  
  18752. typedef VCASETCOLORKEY FAR * PVCASETCOLORKEY;
  18753.  
  18754.  
  18755. ΓòÉΓòÉΓòÉ <hidden> VCASETCOLORKEY Parameter - ulColorKey ΓòÉΓòÉΓòÉ
  18756.  
  18757.  ulColorKey (ULONG) 
  18758.     Transparent color. 
  18759.  
  18760.  
  18761. ΓòÉΓòÉΓòÉ 17.62. VCASETFPS ΓòÉΓòÉΓòÉ
  18762.  
  18763. This structure contains fields for the VCAI_SETFPS function. 
  18764.  
  18765. typedef struct _VCASETFPS {
  18766. ULONG   set_FPS;  /*  Frames per second to stream. */
  18767. ULONG   ulFlags;  /*  Frames or microseconds. */
  18768.  } VCASETFPS;
  18769.  
  18770. typedef VCASETFPS FAR * PVCASETFPS;
  18771.  
  18772.  
  18773. ΓòÉΓòÉΓòÉ <hidden> VCASETFPS Parameter - set_FPS ΓòÉΓòÉΓòÉ
  18774.  
  18775.  set_FPS (ULONG) 
  18776.     Frames per second to stream to the stream handler. 
  18777.  
  18778.  
  18779. ΓòÉΓòÉΓòÉ <hidden> VCASETFPS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  18780.  
  18781.  ulFlags (ULONG) 
  18782.     The following ulFlags are defined: 
  18783.  
  18784.         VCASF_FRAMES        0x0
  18785.         VCASF_MICROSECONDS  0x1
  18786.  
  18787.  
  18788. ΓòÉΓòÉΓòÉ 17.63. VCASETMONITOR ΓòÉΓòÉΓòÉ
  18789.  
  18790. typedef struct _VCASETMONITOR {
  18791. BOOL   bMonitor;  /*  1=TRUE=ON, 0=FALSE=OFF. */
  18792.  } VCASETMONITOR;
  18793.  
  18794. typedef VCASETMONITOR FAR * PVCASETMONITOR;
  18795.  
  18796.  
  18797. ΓòÉΓòÉΓòÉ <hidden> VCASETMONITOR Parameter - bMonitor ΓòÉΓòÉΓòÉ
  18798.  
  18799.  bMonitor (BOOL) 
  18800.     1=TRUE=ON, 0=FALSE=OFF. 
  18801.  
  18802.  
  18803. ΓòÉΓòÉΓòÉ 17.64. VCASETVIDEO ΓòÉΓòÉΓòÉ
  18804.  
  18805. typedef struct _VCASETVIDEO {
  18806. ULONG   set_brightness;  /*  New overall image brightness setting. */
  18807. ULONG   set_hue;         /*  New image hue (color) setting. */
  18808. ULONG   set_saturation;  /*  New color intensity setting. */
  18809. ULONG   set_contrast;    /*  New contrast setting. */
  18810. ULONG   ret_brightness;  /*  Current overall image brightness setting. */
  18811. ULONG   ret_hue;         /*  Current image hue (color) setting. */
  18812. ULONG   ret_saturation;  /*  Current color intensity setting. */
  18813. ULONG   ret_contrast;    /*  Current contrast setting. */
  18814.  } VCASETVIDEO;
  18815.  
  18816. typedef VCASETVIDEO FAR * PVCASETVIDEO;
  18817.  
  18818.  
  18819. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - set_brightness ΓòÉΓòÉΓòÉ
  18820.  
  18821.  set_brightness (ULONG) 
  18822.     Specifies the new overall image brightness setting. Valid values are 0 to 
  18823.     255, NO_CHANGE, or DEFAULT. 
  18824.  
  18825.  
  18826. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - set_hue ΓòÉΓòÉΓòÉ
  18827.  
  18828.  set_hue (ULONG) 
  18829.     Specifies the new image hue (color) setting. Valid values are 0 to 255, 
  18830.     NO_CHANGE, or DEFAULT. 
  18831.  
  18832.  
  18833. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - set_saturation ΓòÉΓòÉΓòÉ
  18834.  
  18835.  set_saturation (ULONG) 
  18836.     Specifies the new saturation (color intensity) setting. Valid values are 0 
  18837.     to 255, NO_CHANGE, or DEFAULT. 
  18838.  
  18839.  
  18840. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - set_contrast ΓòÉΓòÉΓòÉ
  18841.  
  18842.  set_contrast (ULONG) 
  18843.     Specifies the new luminance contrast setting. Valid values are 0 to 255, 
  18844.     NO_CHANGE, or DEFAULT. 
  18845.  
  18846.  
  18847. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - ret_brightness ΓòÉΓòÉΓòÉ
  18848.  
  18849.  ret_brightness (ULONG) 
  18850.     Specifies the current overall image brightness setting. Valid values are 0 
  18851.     to 255 or NOT_SUPPORTED. 
  18852.  
  18853.  
  18854. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - ret_hue ΓòÉΓòÉΓòÉ
  18855.  
  18856.  ret_hue (ULONG) 
  18857.     Specifies the current image hue (color) setting. Valid values are 0 to 255 
  18858.     or NOT_SUPPORTED. 
  18859.  
  18860.  
  18861. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - ret_saturation ΓòÉΓòÉΓòÉ
  18862.  
  18863.  ret_saturation (ULONG) 
  18864.     Specifies the current color intensity setting. Valid values are 0 to 255 or 
  18865.     NOT_SUPPORTED. 
  18866.  
  18867.  
  18868. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEO Parameter - ret_contrast ΓòÉΓòÉΓòÉ
  18869.  
  18870.  ret_contrast (ULONG) 
  18871.     Specifies the current luminance contrast setting. Valid values are 0 to 255 
  18872.     or NOT_SUPPORTED. 
  18873.  
  18874.  
  18875. ΓòÉΓòÉΓòÉ 17.65. VCASETVIDEOINPUT ΓòÉΓòÉΓòÉ
  18876.  
  18877. typedef struct _VCASETVIDEOINPUT {
  18878. ULONG   INPUT_CONNECTOR;  /*  Connector value. */
  18879.  } VCASETVIDEOINPUT;
  18880.  
  18881. typedef VCASETVIDEOINPUT FAR * PVCASETVIDEOINPUT;
  18882.  
  18883.  
  18884. ΓòÉΓòÉΓòÉ <hidden> VCASETVIDEOINPUT Parameter - INPUT_CONNECTOR ΓòÉΓòÉΓòÉ
  18885.  
  18886.  INPUT_CONNECTOR (ULONG) 
  18887.     Sets or queries the input connector value.  A value of -1 performs a query 
  18888.     and returns the current connector value. A value of -2 sets the video input 
  18889.     source connector to the default value. 
  18890.  
  18891.  
  18892. ΓòÉΓòÉΓòÉ 17.66. VCASTREAM ΓòÉΓòÉΓòÉ
  18893.  
  18894. This structure contains fields for the VCAI_PLAY function. 
  18895.  
  18896. typedef struct _VCASTREAM {
  18897. ULONG   ulLength;     /*  Length of image data. */
  18898. PVOID   pImageData;   /*  Pointer to image data. */
  18899. ULONG   ulFlags;      /*  Flag information. */
  18900. ULONG   ulSCR;        /*  MPEG system clock reference (SCR). */
  18901. ULONG   ulPTS;        /*  MPEG system clock reference (SCR). */
  18902. ULONG   ulAudioTime;  /*  Current audio stream time. */
  18903.  } VCASTREAM;
  18904.  
  18905. typedef VCASTREAM FAR * PVCASTREAM;
  18906.  
  18907.  
  18908. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - ulLength ΓòÉΓòÉΓòÉ
  18909.  
  18910.  ulLength (ULONG) 
  18911.     Length of image data. 
  18912.  
  18913.  
  18914. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - pImageData ΓòÉΓòÉΓòÉ
  18915.  
  18916.  pImageData (PVOID) 
  18917.     Pointer to image data. 
  18918.  
  18919.  
  18920. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - ulFlags ΓòÉΓòÉΓòÉ
  18921.  
  18922.  ulFlags (ULONG) 
  18923.     The following flags are defined. 
  18924.  
  18925.         VCA_PLAY_START     0x01
  18926.         VCA_PLAY_DATA      0x02
  18927.         VCA_PLAY_STOP      0x04
  18928.         VCA_PLAY_FLUSH     0x08
  18929.  
  18930.  
  18931. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - ulSCR ΓòÉΓòÉΓòÉ
  18932.  
  18933.  ulSCR (ULONG) 
  18934.     MPEG System clock reference (SCR). Set to 0 if current packet does not 
  18935.     contain a PTS or SCR. CODEC-specific, currently used only in MPEG playback. 
  18936.  
  18937.  
  18938. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - ulPTS ΓòÉΓòÉΓòÉ
  18939.  
  18940.  ulPTS (ULONG) 
  18941.     MPEG System clock reference (SCR). Set to 0 if current packet does not 
  18942.     contain a PTS or SCR. CODEC-specific, currently used only in MPEG playback. 
  18943.  
  18944.  
  18945. ΓòÉΓòÉΓòÉ <hidden> VCASTREAM Parameter - ulAudioTime ΓòÉΓòÉΓòÉ
  18946.  
  18947.  ulAudioTime (ULONG) 
  18948.     Current audio stream time in MMTIME on latest sync pulse. CODEC-specific, 
  18949.     currently used only in MPEG playback. 
  18950.  
  18951.  
  18952. ΓòÉΓòÉΓòÉ 17.67. VCATUNCHAN ΓòÉΓòÉΓòÉ
  18953.  
  18954. This structure contains fields for the VCAI_TUNERCHANNEL function. 
  18955.  
  18956. typedef struct _VCATUNCHAN {
  18957. ULONG    ulFlags;      /*  1=Set, 2=Query. */
  18958. ULONG    ulOptions;    /*  Options. */
  18959. USHORT   usResv01;     /*  Reserved. */
  18960. USHORT   usResv02;     /*  Reserved. */
  18961. LONG     lFineTune;    /*  Fine tune value for channel. */
  18962. ULONG    ulFrequency;  /*  Frequency instead of channel/region. */
  18963.  } VCATUNCHAN;
  18964.  
  18965. typedef VCATUNCHAN FAR * PVCATUNCHAN;
  18966.  
  18967.  
  18968. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - ulFlags ΓòÉΓòÉΓòÉ
  18969.  
  18970.  ulFlags (ULONG) 
  18971.     The following flags are defined. 
  18972.  
  18973.         TUC_SET_CHANNEL    1
  18974.         TUC_QUERY_CHANNEL  2
  18975.  
  18976.  
  18977. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - ulOptions ΓòÉΓòÉΓòÉ
  18978.  
  18979.  ulOptions (ULONG) 
  18980.     The ulOptions field is a bit-sensitive field. The following values are 
  18981.     defined for ulOptions. 
  18982.  
  18983.         TUC_AFC_ON               4
  18984.         TUC_AFC_OFF              0
  18985.         TUC_FREQUENCY            8
  18986.         TUC_CHANNEL              0
  18987.         TUC_POLOARIZATION_VERT  16
  18988.         TUC_POLOARIZATION_HORI  32
  18989.  
  18990.  
  18991. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - usResv01 ΓòÉΓòÉΓòÉ
  18992.  
  18993.  usResv01 (USHORT) 
  18994.     Resv01 set to 0. 
  18995.  
  18996.  
  18997. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - usResv02 ΓòÉΓòÉΓòÉ
  18998.  
  18999.  usResv02 (USHORT) 
  19000.     Resv02 set to 0. 
  19001.  
  19002.  
  19003. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - lFineTune ΓòÉΓòÉΓòÉ
  19004.  
  19005.  lFineTune (LONG) 
  19006.     Fine tune value for channel. 
  19007.  
  19008.  
  19009. ΓòÉΓòÉΓòÉ <hidden> VCATUNCHAN Parameter - ulFrequency ΓòÉΓòÉΓòÉ
  19010.  
  19011.  ulFrequency (ULONG) 
  19012.     Frequency instead of channel/region. 
  19013.  
  19014.  
  19015. ΓòÉΓòÉΓòÉ 17.68. VSD_AUDIOATTRIBUTES_PARMS ΓòÉΓòÉΓòÉ
  19016.  
  19017. This structure contains fields for the VSD_QUERYAUDIOATTRIBUTES command. 
  19018.  
  19019. typedef struct _VSD_AUDIOATTRIBUTES_PARMS {
  19020. ULONG   ulLength;  /*  Length of the structure. */
  19021. ULONG   ulFlags;   /*  Attribute to set. */
  19022. ULONG   ulValue;   /*  Input/Output.  Value for attribute setting. */
  19023. ULONG   ulDelay;   /*  Input.  Delay for attribute setting. */
  19024.  } VSD_AUDIOATTRIBUTES_PARMS;
  19025.  
  19026. typedef VSD_AUDIOATTRIBUTES_PARMS *PVSD_AUDIOATTRIBUTES_PARMS;
  19027.  
  19028.  
  19029. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOATTRIBUTES_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19030.  
  19031.  ulLength (ULONG) 
  19032.     Length of the structure. 
  19033.  
  19034.  
  19035. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOATTRIBUTES_PARMS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  19036.  
  19037.  ulFlags (ULONG) 
  19038.     Input. The following values are defined for ulFlags. 
  19039.  
  19040.       VSD_BALANCE 
  19041.          Set or query balance. 
  19042.  
  19043.       VSD_BASS 
  19044.          Set or query bass. 
  19045.  
  19046.       VSD_GAIN 
  19047.          Set or query gain. 
  19048.  
  19049.       VSD_TREBLE 
  19050.          Set or query treble. 
  19051.  
  19052.       VSD_PITCH 
  19053.          Set or query pitch. 
  19054.  
  19055.  
  19056. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOATTRIBUTES_PARMS Parameter - ulValue ΓòÉΓòÉΓòÉ
  19057.  
  19058.  ulValue (ULONG) 
  19059.     Input/Output.  Value for attribute setting. 
  19060.  
  19061.  
  19062. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOATTRIBUTES_PARMS Parameter - ulDelay ΓòÉΓòÉΓòÉ
  19063.  
  19064.  ulDelay (ULONG) 
  19065.     Delay for attribute setting to take place in mmtime units. 
  19066.  
  19067.  
  19068. ΓòÉΓòÉΓòÉ 17.69. VSD_AUDIODATATYPE_PARMS ΓòÉΓòÉΓòÉ
  19069.  
  19070. This structure contains fields for the VSD_OPEN command. 
  19071.  
  19072. typedef struct _VSD_AUDIODATATYPE_PARMS {
  19073. ULONG   ulLength;              /*  Length of the structure. */
  19074. ULONG   ulFlags;               /*  Flags. */
  19075. ULONG   ulSamplingRate;        /*  Input.  Sampling rate setting. */
  19076. ULONG   ulBitsPerSample;       /*  Input.  Bits per sample setting. */
  19077. ULONG   ulChannels;            /*  Input.  Channels setting. */
  19078. ULONG   ulBlockAlignment;      /*  Output.  Block alignment. */
  19079. ULONG   ulAverageBytesPerSec;  /*  Output.  Average bytes per second throughput. */
  19080. ULONG   ulDataType;            /*  Input.  Data type to set or query. */
  19081. ULONG   ulDataSubType;         /*  Output.  Data subtype info. */
  19082. ULONG   ulReserved1;           /*  Reserved. */
  19083. ULONG   ulOperation;           /*  Input.  VSD_PRODUCE or VSD_CONSUME. */
  19084. ULONG   ulDeviceID;            /*  Input.  Device ID of the amp-mixer. */
  19085. PVOID   pDevInfo;              /*  Device-specific information. */
  19086.  } VSD_AUDIODATATYPE_PARMS;
  19087.  
  19088. typedef VSD_AUDIODATATYPE_PARMS *PVSD_AUDIODATATYPE_PARMS;
  19089.  
  19090.  
  19091. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19092.  
  19093.  ulLength (ULONG) 
  19094.     Length of the structure. 
  19095.  
  19096.  
  19097. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  19098.  
  19099.  ulFlags (ULONG) 
  19100.     Flags indicating which fields are to be queried or modified. The 
  19101.     VSD_AUDIODATATYPE_PARMS structure must contain at least one of the 
  19102.     following flags. 
  19103.  
  19104.     Note:  More than one flag can be specified. 
  19105.  
  19106.       VSD_MODE 
  19107.          Set/query mode. 
  19108.  
  19109.       VSD_CHANNELS 
  19110.          Set/query channels. 
  19111.  
  19112.       VSD_SAMPLESPERSEC 
  19113.          Set/query sampling rate. 
  19114.  
  19115.       VSD_BITSPERSAMPLE 
  19116.          Set/query bits per sample. 
  19117.  
  19118.       VSD_OPERATION 
  19119.          Set/query VSD operation field. 
  19120.  
  19121.  
  19122. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulSamplingRate ΓòÉΓòÉΓòÉ
  19123.  
  19124.  ulSamplingRate (ULONG) 
  19125.     Input.  Sampling rate setting. 
  19126.  
  19127.  
  19128. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulBitsPerSample ΓòÉΓòÉΓòÉ
  19129.  
  19130.  ulBitsPerSample (ULONG) 
  19131.     Input.  Bits per sample setting. 
  19132.  
  19133.  
  19134. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulChannels ΓòÉΓòÉΓòÉ
  19135.  
  19136.  ulChannels (ULONG) 
  19137.     Input.  Channels setting. 
  19138.  
  19139.  
  19140. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulBlockAlignment ΓòÉΓòÉΓòÉ
  19141.  
  19142.  ulBlockAlignment (ULONG) 
  19143.     Output.  Block alignment. 
  19144.  
  19145.  
  19146. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulAverageBytesPerSec ΓòÉΓòÉΓòÉ
  19147.  
  19148.  ulAverageBytesPerSec (ULONG) 
  19149.     Output.  Average bytes per second throughput. 
  19150.  
  19151.  
  19152. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulDataType ΓòÉΓòÉΓòÉ
  19153.  
  19154.  ulDataType (ULONG) 
  19155.     Input. Data type to set or query. This value is a RIFF datatype (such as 
  19156.     DATATYPE_WAVEFORM) defined in OS2MEDEF.H. 
  19157.  
  19158.  
  19159. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulDataSubType ΓòÉΓòÉΓòÉ
  19160.  
  19161.  ulDataSubType (ULONG) 
  19162.     Output.  Data subtype info. 
  19163.  
  19164.  
  19165. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulReserved1 ΓòÉΓòÉΓòÉ
  19166.  
  19167.  ulReserved1 (ULONG) 
  19168.     Reserved. 
  19169.  
  19170.  
  19171. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulOperation ΓòÉΓòÉΓòÉ
  19172.  
  19173.  ulOperation (ULONG) 
  19174.     Input. Operation to perform; set to either VSD_PRODUCE or VSD_CONSUME. 
  19175.  
  19176.  
  19177. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - ulDeviceID ΓòÉΓòÉΓòÉ
  19178.  
  19179.  ulDeviceID (ULONG) 
  19180.     Input.  Device ID of the amp-mixer. 
  19181.  
  19182.  
  19183. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIODATATYPE_PARMS Parameter - pDevInfo ΓòÉΓòÉΓòÉ
  19184.  
  19185.  pDevInfo (PVOID) 
  19186.     Device-specific information. 
  19187.  
  19188.  
  19189. ΓòÉΓòÉΓòÉ 17.70. VSD_AUDIOOPEN_PARMS ΓòÉΓòÉΓòÉ
  19190.  
  19191. This structure contains fields for the VSD_OPEN command. 
  19192.  
  19193. typedef struct _VSD_AUDIOOPEN_PARMS {
  19194. ULONG   ulLength;              /*  Input.  Length of the structure. */
  19195. ULONG   ulFlags;               /*  Input.  Flags. */
  19196. ULONG   ulSamplingRate;        /*  Input.  Sampling rate. */
  19197. ULONG   ulBitsPerSample;       /*  Input.  Bits per sample. */
  19198. ULONG   ulChannels;            /*  Input.  Channels. */
  19199. ULONG   ulBlockAlignment;      /*  Input.  Block alignment. */
  19200. ULONG   ulAverageBytesPerSec;  /*  Output.  Average bytes per second throughput. */
  19201. ULONG   ulDataType;            /*  Input.  Data type to set or query. */
  19202. ULONG   ulDataSubType;         /*  Output.  Data subtype info. */
  19203. ULONG   hidSource;             /*  Input.  Source stream handler for VSD.  (Unused) */
  19204. ULONG   hidTarget;             /*  Input.  Target stream handler for VSD.  (Unused) */
  19205. ULONG   ulOperation;           /*  Input.  Operation to perform. */
  19206. ULONG   ulReserved1;           /*  Reserved. */
  19207. ULONG   ulDeviceID;            /*  Input.  Device ID of the amp-mixer. */
  19208. PVOID   pHeader;               /*  Pointer to media-specific header. */
  19209. PVOID   pParmString;           /*  Input.  Device-specific parm string. */
  19210. PVOID   pDevInfo;              /*  Device-specific information. */
  19211. ULONG   ulReserved2;           /*  Reserved. */
  19212. PCHAR   pResourceDLL;          /*  Input.  Resource DLL from MMPM2.INI file. */
  19213. ULONG   ulResourceId;          /*  Input.  Resource ID to use in Resource DLL. */
  19214.  } VSD_AUDIOOPEN_PARMS;
  19215.  
  19216. typedef VSD_AUDIOOPEN_PARMS *PVSD_AUDIOOPEN_PARMS;
  19217.  
  19218.  
  19219. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19220.  
  19221.  ulLength (ULONG) 
  19222.     Input.  Length of the structure. 
  19223.  
  19224.  
  19225. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  19226.  
  19227.  ulFlags (ULONG) 
  19228.     Input. Flags indicating which fields are to be queried or modified. 
  19229.     (Unused) 
  19230.  
  19231.  
  19232. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulSamplingRate ΓòÉΓòÉΓòÉ
  19233.  
  19234.  ulSamplingRate (ULONG) 
  19235.     Input.  Sampling rate. 
  19236.  
  19237.  
  19238. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulBitsPerSample ΓòÉΓòÉΓòÉ
  19239.  
  19240.  ulBitsPerSample (ULONG) 
  19241.     Input.  Bits per sample. 
  19242.  
  19243.  
  19244. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulChannels ΓòÉΓòÉΓòÉ
  19245.  
  19246.  ulChannels (ULONG) 
  19247.     Input.  Channels. 
  19248.  
  19249.  
  19250. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulBlockAlignment ΓòÉΓòÉΓòÉ
  19251.  
  19252.  ulBlockAlignment (ULONG) 
  19253.     Input. Block alignment. (Unused) 
  19254.  
  19255.  
  19256. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulAverageBytesPerSec ΓòÉΓòÉΓòÉ
  19257.  
  19258.  ulAverageBytesPerSec (ULONG) 
  19259.     Output.  Average bytes per second throughput. 
  19260.  
  19261.  
  19262. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulDataType ΓòÉΓòÉΓòÉ
  19263.  
  19264.  ulDataType (ULONG) 
  19265.     Input.  Data type to set or query. 
  19266.  
  19267.  
  19268. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulDataSubType ΓòÉΓòÉΓòÉ
  19269.  
  19270.  ulDataSubType (ULONG) 
  19271.     Output.  Data subtype info. 
  19272.  
  19273.  
  19274. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - hidSource ΓòÉΓòÉΓòÉ
  19275.  
  19276.  hidSource (ULONG) 
  19277.     Input.  Source stream handler for VSD.  (Unused) 
  19278.  
  19279.  
  19280. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - hidTarget ΓòÉΓòÉΓòÉ
  19281.  
  19282.  hidTarget (ULONG) 
  19283.     Input.  Target stream handler for VSD.  (Unused) 
  19284.  
  19285.  
  19286. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulOperation ΓòÉΓòÉΓòÉ
  19287.  
  19288.  ulOperation (ULONG) 
  19289.     Input. Operation to perform. Defined values for ulOperation include 
  19290.     VSD_PRODUCE and VSD_CONSUME. 
  19291.  
  19292.  
  19293. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulReserved1 ΓòÉΓòÉΓòÉ
  19294.  
  19295.  ulReserved1 (ULONG) 
  19296.     Reserved. 
  19297.  
  19298.  
  19299. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulDeviceID ΓòÉΓòÉΓòÉ
  19300.  
  19301.  ulDeviceID (ULONG) 
  19302.     Input. Device ID of the amp-mixer. This ID is necessary if media control 
  19303.     interface calls must be made by the VSD. 
  19304.  
  19305.  
  19306. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - pHeader ΓòÉΓòÉΓòÉ
  19307.  
  19308.  pHeader (PVOID) 
  19309.     Pointer to media-specific header. For audio, it is an MMAUDIOHEADER. For 
  19310.     further information, see the OS/2 Multimedia Programming Reference. 
  19311.     (Unused) 
  19312.  
  19313.  
  19314. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - pParmString ΓòÉΓòÉΓòÉ
  19315.  
  19316.  pParmString (PVOID) 
  19317.     Input. Pointer to device-specific parmstring in MMPM2.INI file. 
  19318.  
  19319.  
  19320. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - pDevInfo ΓòÉΓòÉΓòÉ
  19321.  
  19322.  pDevInfo (PVOID) 
  19323.     Device-specific information. 
  19324.  
  19325.  
  19326. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulReserved2 ΓòÉΓòÉΓòÉ
  19327.  
  19328.  ulReserved2 (ULONG) 
  19329.     Reserved. 
  19330.  
  19331.  
  19332. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - pResourceDLL ΓòÉΓòÉΓòÉ
  19333.  
  19334.  pResourceDLL (PCHAR) 
  19335.     Input. Resource DLL from MMPM2.INI file. VSD can use this file to retrieve 
  19336.     VSD-specific setup information. 
  19337.  
  19338.  
  19339. ΓòÉΓòÉΓòÉ <hidden> VSD_AUDIOOPEN_PARMS Parameter - ulResourceId ΓòÉΓòÉΓòÉ
  19340.  
  19341.  ulResourceId (ULONG) 
  19342.     Input.  Resource ID to use in Resource DLL. 
  19343.  
  19344.  
  19345. ΓòÉΓòÉΓòÉ 17.71. VSD_CONNECTOR_PARMS ΓòÉΓòÉΓòÉ
  19346.  
  19347. This structure contains fields for the VSD_QUERYCONNECTOR message. 
  19348.  
  19349. typedef struct _VSD_CONNECTOR_PARMS {
  19350. ULONG   ulLength;     /*  Input.  Length of the structure. */
  19351. ULONG   ulFlags;      /*  Flags to be queried or modified. */
  19352. CHAR    ulConn_Type;  /*  Input.  Type of connector. */
  19353. ULONG   ulIndex;      /*  Input.  Connector number. */
  19354. BOOL    fEnabled;     /*  Input/Output.  Indicates enabled or disabled. */
  19355.  } VSD_CONNECTOR_PARMS;
  19356.  
  19357. typedef VSD_CONNECTOR_PARMS *PVSD_CONNECTOR_PARMS;
  19358.  
  19359.  
  19360. ΓòÉΓòÉΓòÉ <hidden> VSD_CONNECTOR_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19361.  
  19362.  ulLength (ULONG) 
  19363.     Input.  Length of the structure. 
  19364.  
  19365.  
  19366. ΓòÉΓòÉΓòÉ <hidden> VSD_CONNECTOR_PARMS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  19367.  
  19368.  ulFlags (ULONG) 
  19369.     Flags to be queried or modified. 
  19370.  
  19371.  
  19372. ΓòÉΓòÉΓòÉ <hidden> VSD_CONNECTOR_PARMS Parameter - ulConn_Type ΓòÉΓòÉΓòÉ
  19373.  
  19374.  ulConn_Type (CHAR) 
  19375.     Input.  Type of connector. 
  19376.  
  19377.  
  19378. ΓòÉΓòÉΓòÉ <hidden> VSD_CONNECTOR_PARMS Parameter - ulIndex ΓòÉΓòÉΓòÉ
  19379.  
  19380.  ulIndex (ULONG) 
  19381.     Input.  Connector number. 
  19382.  
  19383.  
  19384. ΓòÉΓòÉΓòÉ <hidden> VSD_CONNECTOR_PARMS Parameter - fEnabled ΓòÉΓòÉΓòÉ
  19385.  
  19386.  fEnabled (BOOL) 
  19387.     Input.  Indicates if connector is enabled or disabled. 
  19388.  
  19389.  
  19390. ΓòÉΓòÉΓòÉ 17.72. VSD_ESCAPE_PARMS ΓòÉΓòÉΓòÉ
  19391.  
  19392. This structure contains fields for the VSD_ESCAPE message. 
  19393.  
  19394. typedef struct _VSD_ESCAPE_PARMS {
  19395. ULONG   ulLength;        /*  Length of the structure. */
  19396. PVOID   pBuffer;         /*  Information for VSD. */
  19397. ULONG   ulBufferLength;  /*  Length of pBuffer. */
  19398.  } VSD_ESCAPE_PARMS;
  19399.  
  19400. typedef VSD_ESCAPE_PARMS *PVSD_ESCAPE_PARMS;
  19401.  
  19402.  
  19403. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19404.  
  19405.  ulLength (ULONG) 
  19406.     Length of the structure. 
  19407.  
  19408.  
  19409. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE_PARMS Parameter - pBuffer ΓòÉΓòÉΓòÉ
  19410.  
  19411.  pBuffer (PVOID) 
  19412.     Information to pass to the VSD. 
  19413.  
  19414.  
  19415. ΓòÉΓòÉΓòÉ <hidden> VSD_ESCAPE_PARMS Parameter - ulBufferLength ΓòÉΓòÉΓòÉ
  19416.  
  19417.  ulBufferLength (ULONG) 
  19418.     Length of pBuffer. 
  19419.  
  19420.  
  19421. ΓòÉΓòÉΓòÉ 17.73. VSD_GETDEVCAPS_PARMS ΓòÉΓòÉΓòÉ
  19422.  
  19423. This structure contains fields for the VSD_GETDEVCAPS message. 
  19424.  
  19425. typedef struct _VSD_GETDEVCAPS_PARMS {
  19426. ULONG   ulLength;                                    /*  Input.  Length of the structure. */
  19427. ULONG   ulMax_Caps;                                  /*  Output.  Returns maximum capabilities supported. */
  19428. ULONG   ulNum_Caps;                                  /*  Output.  Returns number of capabilities returned. */
  19429. ULONG   ulResv01;                                    /*  Reserved. */
  19430. ULONG   ulResv02;                                    /*  Reserved. */
  19431. ULONG   ulResv03;                                    /*  Reserved. */
  19432. ULONG   ulResv04;                                    /*  Reserved. */
  19433. ULONG   bSupports[DC_MAX_DEVCAP];  /*  Output.  Capability entries. */
  19434.  } VSD_GETDEVCAPS_PARMS;
  19435.  
  19436. typedef VSD_GETDEVCAPS_PARMS *PVSD_GETDEVCAPS_PARMS;
  19437.  
  19438.  
  19439. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19440.  
  19441.  ulLength (ULONG) 
  19442.     Input.  Length of the structure. 
  19443.  
  19444.  
  19445. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulMax_Caps ΓòÉΓòÉΓòÉ
  19446.  
  19447.  ulMax_Caps (ULONG) 
  19448.     Output.  Returns maximum capabilities supported. 
  19449.  
  19450.  
  19451. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulNum_Caps ΓòÉΓòÉΓòÉ
  19452.  
  19453.  ulNum_Caps (ULONG) 
  19454.     Output.  Returns number of capabilities returned. 
  19455.  
  19456.  
  19457. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulResv01 ΓòÉΓòÉΓòÉ
  19458.  
  19459.  ulResv01 (ULONG) 
  19460.     Reserved. 
  19461.  
  19462.  
  19463. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulResv02 ΓòÉΓòÉΓòÉ
  19464.  
  19465.  ulResv02 (ULONG) 
  19466.     Reserved. 
  19467.  
  19468.  
  19469. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulResv03 ΓòÉΓòÉΓòÉ
  19470.  
  19471.  ulResv03 (ULONG) 
  19472.     Reserved. 
  19473.  
  19474.  
  19475. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - ulResv04 ΓòÉΓòÉΓòÉ
  19476.  
  19477.  ulResv04 (ULONG) 
  19478.     Reserved. 
  19479.  
  19480.  
  19481. ΓòÉΓòÉΓòÉ <hidden> VSD_GETDEVCAPS_PARMS Parameter - bSupports[DC_MAX_DEVCAP] ΓòÉΓòÉΓòÉ
  19482.  
  19483.  bSupports[DC_MAX_DEVCAP] (ULONG) 
  19484.     The following table lists the valid device capabilities. 
  19485.  
  19486.         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  19487.         ΓöéDevice Capabilities      ΓöéSupported Command        Γöé
  19488.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19489.         ΓöéDC_HASAUDIO              ΓöéAll audio functions      Γöé
  19490.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19491.         ΓöéDC_HASVIDEO              ΓöéAll video functions      Γöé
  19492.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19493.         ΓöéDC_HASVOLUME             ΓöéVSD_QUERYVOLUME          Γöé
  19494.         Γöé                         ΓöéVSD_SETVOLUME            Γöé
  19495.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19496.         ΓöéDC_HASDISPLAY            ΓöéVSD_QUERYDISPLAY         Γöé
  19497.         Γöé                         ΓöéVSD_SETDISPLAY           Γöé
  19498.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19499.         ΓöéDC_HASAUDIOATTRIBUTES    ΓöéVSD_QUERYAUDIOATTRIBUTES Γöé
  19500.         Γöé                         ΓöéVSD_SETAUDIOATTRIBUTES   Γöé
  19501.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19502.         ΓöéDC_HASAUDIOCAPABILITIES  ΓöéVSD_QUERYDATATYPE        Γöé
  19503.         Γöé                         ΓöéVSD_SETDATATYPE          Γöé
  19504.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19505.         ΓöéDC_HASVIDEOATTRIBUTES    ΓöéVSD_QUERYVIDEOATTRIBUTES Γöé
  19506.         Γöé                         ΓöéVSD_SETVIDEOATTRIBUTES   Γöé
  19507.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19508.         ΓöéDC_HASIMAGEATTRIBUTES    ΓöéVSD_QUERYIMAGEATTRIBUTES Γöé
  19509.         Γöé                         ΓöéVSD_SETIMAGEATTRIBUTES   Γöé
  19510.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19511.         ΓöéDC_HASESCAPE             ΓöéVSD_ESCAPE               Γöé
  19512.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19513.         ΓöéDC_HASINPUTLEVEL         ΓöéVSD_QUERYINPUTLEVEL      Γöé
  19514.         Γöé                         ΓöéVSD_SETINPUTLEVEL        Γöé
  19515.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19516.         ΓöéDC_HASSTATUSLEVEL        ΓöéVSD_QUERYSTATUSLEVEL     Γöé
  19517.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19518.         ΓöéDC_HASMONITOR            ΓöéVSD_QUERYMONITOR         Γöé
  19519.         Γöé                         ΓöéVSD_SETMONITOR           Γöé
  19520.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19521.         ΓöéDC_CANEJECT              ΓöéVSD_EJECT                Γöé
  19522.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19523.         ΓöéDC_CANLOAD               ΓöéVSD_LOAD                 Γöé
  19524.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19525.         ΓöéDC_HASDOOR               ΓöéVSD_QUERYDOOR            Γöé
  19526.         Γöé                         ΓöéVSD_SETDOOR              Γöé
  19527.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19528.         ΓöéDC_HASTRACKS             ΓöéVSD_QUERYTRACKS          Γöé
  19529.         Γöé                         ΓöéVSD_SETTRACKS            Γöé
  19530.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19531.         ΓöéDC_HASMEDIA              ΓöéVSD_QUERYMEDIATYPE       Γöé
  19532.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19533.         ΓöéDC_HASCOMSETTINGS        ΓöéVSD_QUERYCOMMSETTINGS    Γöé
  19534.         Γöé                         ΓöéVSD_SETCOMSETTINGS       Γöé
  19535.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19536.         ΓöéDC_HASMEDIATYPE          ΓöéVSD_QUERYMEDIATYPE       Γöé
  19537.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19538.         ΓöéDC_HASKEYLOCK            ΓöéVSD_QUERYKEYLOCK         Γöé
  19539.         Γöé                         ΓöéVSD_SETKEYLOCK           Γöé
  19540.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19541.         ΓöéDC_CANCUE                ΓöéVSD_QUERYCUE             Γöé
  19542.         Γöé                         ΓöéVSD_SETCUE               Γöé
  19543.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19544.         ΓöéDC_HASCOUNTER            ΓöéVSD_QUERYCOUNTER         Γöé
  19545.         Γöé                         ΓöéVSD_SETCOUNTER           Γöé
  19546.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19547.         ΓöéDC_CANRESET              ΓöéVSD_RESET                Γöé
  19548.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19549.         ΓöéDC_HASPOSITION           ΓöéVSD_QUERYPOSITION        Γöé
  19550.         Γöé                         ΓöéVSD_SETPOSITION          Γöé
  19551.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19552.         ΓöéDC_HASLENGTH             ΓöéVSD_QUERYLENGTH          Γöé
  19553.         Γöé                         ΓöéVSD_SETLENGTH            Γöé
  19554.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19555.         ΓöéDC_CANPARK               ΓöéVSD_PARK                 Γöé
  19556.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19557.         ΓöéDC_HASCONNECTOR          ΓöéVSD_QUERYCONNECTOR       Γöé
  19558.         Γöé                         ΓöéVSD_SETCONNECTOR         Γöé
  19559.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19560.         ΓöéDC_HASEVENTS             ΓöéVSD_EVENT                Γöé
  19561.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19562.         ΓöéDC_HASDIRECTION          ΓöéVSD_QUERYDIRECTION       Γöé
  19563.         Γöé                         ΓöéVSD_SETDIRECTION         Γöé
  19564.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19565.         ΓöéDC_HASVIEWPORT           ΓöéVSD_QUERYVIEWPORT        Γöé
  19566.         Γöé                         ΓöéVSD_SETVIEWPORT          Γöé
  19567.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19568.         ΓöéDC_CANCAPTUREIMAGE       ΓöéVSD_CAPTUREIMAGE         Γöé
  19569.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19570.         ΓöéDC_CANRESTOREIMAGE       ΓöéVSD_RESTOREIMAGE         Γöé
  19571.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19572.         ΓöéDC_HASRAM                ΓöéInformational            Γöé
  19573.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19574.         ΓöéDC_AUDIOSETTINGS         ΓöéInformational            Γöé
  19575.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19576.         ΓöéDC_IMAGESETTINGS         ΓöéInformational            Γöé
  19577.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19578.         ΓöéDC_QUERYMINSEEKTIME      ΓöéInformational            Γöé
  19579.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19580.         ΓöéDC_QUERYTIME             ΓöéInformational            Γöé
  19581.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19582.         ΓöéDC_STEP                  ΓöéInformational            Γöé
  19583.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19584.         ΓöéDC_CAN_MIX               ΓöéMixer functions are      Γöé
  19585.         Γöé                         Γöéavailable                Γöé
  19586.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19587.         ΓöéDC_HASCLOCK              ΓöéInformational            Γöé
  19588.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19589.         ΓöéDC_HASPOWER              ΓöéInformational            Γöé
  19590.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19591.         ΓöéDC_HASZOOM               ΓöéInformational            Γöé
  19592.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19593.         ΓöéDC_HASFOCUS              ΓöéInformational            Γöé
  19594.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19595.         ΓöéDC_HASCHANNELS           ΓöéInformational            Γöé
  19596.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19597.         ΓöéDC_CANSTREAM             ΓöéVSD_DDCMD                Γöé
  19598.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19599.         ΓöéDC_CANSCALE              ΓöéInformational            Γöé
  19600.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19601.         ΓöéDC_CANDISTORT            ΓöéInformational            Γöé
  19602.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19603.         ΓöéDC_CANSTRETCH            ΓöéInformational            Γöé
  19604.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19605.         ΓöéDC_HASTUNER              ΓöéInformational            Γöé
  19606.         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  19607.         ΓöéDC_HASTELETEX            ΓöéInformational            Γöé
  19608.         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  19609.  
  19610.     Note:  Informational in the above table indicates the device has the 
  19611.            capability, but does not indicate that a particular command is 
  19612.            supported. 
  19613.  
  19614.  
  19615. ΓòÉΓòÉΓòÉ 17.74. VSD_OPEN_PARMS ΓòÉΓòÉΓòÉ
  19616.  
  19617. This structure contains fields for the VSD_OPEN message. 
  19618.  
  19619. typedef struct _VSD_OPEN_PARMS {
  19620. ULONG   ulLength;                                          /*  Input.  Length of the structure. */
  19621. ULONG   ulCategory;                                        /*  Name of unit to open. */
  19622. CHAR    szInstallName[MAX_DEVICE_NAME];  /*  Installation name of MCD. */
  19623. CHAR    szPDDName[MAX_DEVICE_NAME];      /*  Name of PDD to open. */
  19624. HVSD    hvsd;                                              /*  Output.  Handle to the VSD driver. */
  19625. PFN     pfEvent;                                           /*  Output.  (Unused) */
  19626. PVOID   pDevInfo;                                          /*  Device-specific info. */
  19627. ULONG   ulDDStream;                                        /*  Input.  Device driver stream identifier. (Unused) */
  19628.  } VSD_OPEN_PARMS;
  19629.  
  19630. typedef VSD_OPEN_PARMS *PVSD_OPEN_PARMS;
  19631.  
  19632.  
  19633. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19634.  
  19635.  ulLength (ULONG) 
  19636.     Input.  Length of the structure. 
  19637.  
  19638.  
  19639. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - ulCategory ΓòÉΓòÉΓòÉ
  19640.  
  19641.  ulCategory (ULONG) 
  19642.     Input. Name of unit to open. (Currently unused) 
  19643.  
  19644.  
  19645. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - szInstallName[MAX_DEVICE_NAME] ΓòÉΓòÉΓòÉ
  19646.  
  19647.  szInstallName[MAX_DEVICE_NAME] (CHAR) 
  19648.     Input. Installation name of the MCD. This field contains information that 
  19649.     can be optionally ignored. (Unused) 
  19650.  
  19651.  
  19652. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - szPDDName[MAX_DEVICE_NAME] ΓòÉΓòÉΓòÉ
  19653.  
  19654.  szPDDName[MAX_DEVICE_NAME] (CHAR) 
  19655.     Input.  Name of PDD to open.  This field contains information that can be 
  19656.     optionally ignored. 
  19657.  
  19658.  
  19659. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - hvsd ΓòÉΓòÉΓòÉ
  19660.  
  19661.  hvsd (HVSD) 
  19662.     Output.  Handle to the VSD driver. 
  19663.  
  19664.  
  19665. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - pfEvent ΓòÉΓòÉΓòÉ
  19666.  
  19667.  pfEvent (PFN) 
  19668.     Output.  (Unused) 
  19669.  
  19670.  
  19671. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - pDevInfo ΓòÉΓòÉΓòÉ
  19672.  
  19673.  pDevInfo (PVOID) 
  19674.     Input/Output.  Device-specific or media-specific information. For audio, it 
  19675.     points to VSD_AUDIOOPEN_PARMS 
  19676.  
  19677.  
  19678. ΓòÉΓòÉΓòÉ <hidden> VSD_OPEN_PARMS Parameter - ulDDStream ΓòÉΓòÉΓòÉ
  19679.  
  19680.  ulDDStream (ULONG) 
  19681.     Input.  Device driver stream identifier. (Unused) 
  19682.  
  19683.  
  19684. ΓòÉΓòÉΓòÉ 17.75. VSD_RESOURCE_PARMS ΓòÉΓòÉΓòÉ
  19685.  
  19686. This structure contains fields for the VSD_RESOURCE command. 
  19687.  
  19688. typedef struct _VSD_RESOURCE_PARMS {
  19689. ULONG   ulLength;                    /*  Length of the structure. */
  19690. CHAR    szPDDName[MAX_DEVICE_NAME];  /*  Input.  Device driver name. */
  19691. ULONG   ulDevType;                   /*  Input.  Device type to open. */
  19692. ULONG   ulDataType;                  /*  Input.  Data type to open. */
  19693. ULONG   ulResUnits;                  /*  Output.  Resouce units. */
  19694. ULONG   ulClass;                     /*  Output.  Resource class. */
  19695.  } VSD_RESOURCE_PARMS;
  19696.  
  19697. typedef VSD_RESOURCE_PARMS *PVSD_RESOURCE_PARMS;
  19698.  
  19699.  
  19700. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19701.  
  19702.  ulLength (ULONG) 
  19703.     Length of the structure. 
  19704.  
  19705.  
  19706. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - szPDDName[MAX_DEVICE_NAME] ΓòÉΓòÉΓòÉ
  19707.  
  19708.  szPDDName[MAX_DEVICE_NAME] (CHAR) 
  19709.     Input.  Name of device driver to open. 
  19710.  
  19711.  
  19712. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - ulDevType ΓòÉΓòÉΓòÉ
  19713.  
  19714.  ulDevType (ULONG) 
  19715.     Input.  Device type to open. 
  19716.  
  19717.  
  19718. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - ulDataType ΓòÉΓòÉΓòÉ
  19719.  
  19720.  ulDataType (ULONG) 
  19721.     Input.  Data type to open. 
  19722.  
  19723.  
  19724. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - ulResUnits ΓòÉΓòÉΓòÉ
  19725.  
  19726.  ulResUnits (ULONG) 
  19727.     Output.  Resouce units consumed for requested mode. 
  19728.  
  19729.  
  19730. ΓòÉΓòÉΓòÉ <hidden> VSD_RESOURCE_PARMS Parameter - ulClass ΓòÉΓòÉΓòÉ
  19731.  
  19732.  ulClass (ULONG) 
  19733.     Output.  Resource class for requested mode (where mode is PCM, MIDI, etc.). 
  19734.  
  19735.  
  19736. ΓòÉΓòÉΓòÉ 17.76. VSD_VOLUME_PARMS ΓòÉΓòÉΓòÉ
  19737.  
  19738. This structure contains fields for the VSD_QUERYVOLUME and the VSD_SETVOLUME 
  19739. commands. 
  19740.  
  19741. typedef struct _VSD_VOLUME_PARMS {
  19742. ULONG   ulLength;       /*  Length of structure. */
  19743. ULONG   ulFlags;        /*  Volume item to operate on. */
  19744. ULONG   ulRequest;      /*  Unused. */
  19745. ULONG   ulVectoredVol;  /*  Input.  Time for volume change to take place. */
  19746. ULONG   ulMasterAudio;  /*  Input.  Master audio setting. */
  19747. ULONG   ulVolume;       /*  Input/Output.  Volume for connector. */
  19748. ULONG   hConn;          /*  Handle to connector.  (Unused) */
  19749. BOOL    fMute;          /*  Input/Output.  Muted or not muted. */
  19750.  } VSD_VOLUME_PARMS;
  19751.  
  19752. typedef VSD_VOLUME_PARMS *PVSD_VOLUME_PARMS;
  19753.  
  19754.  
  19755. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulLength ΓòÉΓòÉΓòÉ
  19756.  
  19757.  ulLength (ULONG) 
  19758.     Length of structure. 
  19759.  
  19760.  
  19761. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulFlags ΓòÉΓòÉΓòÉ
  19762.  
  19763.  ulFlags (ULONG) 
  19764.     Input.  Volume item to operate on. 
  19765.  
  19766.     The following flags (subcommands) are defined for this command: 
  19767.  
  19768.       VSD_VOLUME 
  19769.          Instance volume. 
  19770.  
  19771.       VSD_MASTERVOLUME 
  19772.          System-wide volume setting. 
  19773.  
  19774.       VSD_MUTE 
  19775.          Flag indicating mute setting. 
  19776.  
  19777.  
  19778. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulRequest ΓòÉΓòÉΓòÉ
  19779.  
  19780.  ulRequest (ULONG) 
  19781.     Unused. 
  19782.  
  19783.  
  19784. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulVectoredVol ΓòÉΓòÉΓòÉ
  19785.  
  19786.  ulVectoredVol (ULONG) 
  19787.     Input.  Time for volume change to take place. 
  19788.  
  19789.  
  19790. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulMasterAudio ΓòÉΓòÉΓòÉ
  19791.  
  19792.  ulMasterAudio (ULONG) 
  19793.     Input.  Master audio setting. 
  19794.  
  19795.  
  19796. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - ulVolume ΓòÉΓòÉΓòÉ
  19797.  
  19798.  ulVolume (ULONG) 
  19799.     Input/Output.  Volume for connector. 
  19800.  
  19801.  
  19802. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - hConn ΓòÉΓòÉΓòÉ
  19803.  
  19804.  hConn (ULONG) 
  19805.     Handle to connector to operate on. (Unused) 
  19806.  
  19807.  
  19808. ΓòÉΓòÉΓòÉ <hidden> VSD_VOLUME_PARMS Parameter - fMute ΓòÉΓòÉΓòÉ
  19809.  
  19810.  fMute (BOOL) 
  19811.     Input/Output. Indicates if volume should be muted. 
  19812.  
  19813.  
  19814. ΓòÉΓòÉΓòÉ 17.77. VOID ΓòÉΓòÉΓòÉ
  19815.  
  19816. A data area of undefined format. 
  19817.  
  19818. #define VOID void
  19819.  
  19820.  
  19821. ΓòÉΓòÉΓòÉ 18. Glossary ΓòÉΓòÉΓòÉ
  19822.  
  19823.  
  19824. ΓòÉΓòÉΓòÉ <hidden> Glossary ΓòÉΓòÉΓòÉ
  19825.  
  19826. Select the starting letter of the glossary term you want to locate. 
  19827.  
  19828.  
  19829. ΓòÉΓòÉΓòÉ <hidden> A ΓòÉΓòÉΓòÉ
  19830.  
  19831.  ACPA Audio capture and playback adapter. 
  19832.  
  19833.  aliasing In multimedia applications, the phenomenon of generating a false 
  19834.    (alias) frequency, along with the correct one, as an artifact of sampling a 
  19835.    signal at discrete points. In imaging, it produces a jagged edge, or 
  19836.    stair-step effect.  In audio, it produces a 'buzz'. 
  19837.  
  19838.  amp See amplifier. 
  19839.  
  19840.  amplifier A device that delivers an enlarged reproduction of the essential 
  19841.    characteristics of the received wave by enabling the wave to control a local 
  19842.    source of power. 
  19843.  
  19844.  amp-mixer (1) A combination amplifier and mixer that is used to control the 
  19845.    characteristics of an audio signal from one or more audio sources.  (2) Also 
  19846.    referred to as an amplifier-mixer. 
  19847.  
  19848.  analog Pertaining to data that consist of continuously variable physical 
  19849.    quantities. 
  19850.  
  19851.  analog audio (1) Audio in which all information representing sounds is stored 
  19852.    or transmitted in a continuous-scale electrical signal, such as line level 
  19853.    audio in stereo components.  (2) See also digital audio. 
  19854.  
  19855.  analog video (1) Video in which all the information representing images is in 
  19856.    a continuous-scale electrical signal for both amplitude and time.  (2) See 
  19857.    also digital video. 
  19858.  
  19859.  API See Application Programming Interface. 
  19860.  
  19861.  Application Programming Interface  (API) A functional interface supplied by 
  19862.    the operating system or by a separately orderable licensed program that 
  19863.    allows an application program written in a high-level language to use 
  19864.    specific data or functions of the operating system or the licensed program. 
  19865.  
  19866.  audio Pertaining to the portion of recorded information that can be heard. 
  19867.  
  19868.  
  19869. ΓòÉΓòÉΓòÉ <hidden> B ΓòÉΓòÉΓòÉ
  19870.  
  19871.  buffer A routine or storage used to compensate for a difference in rate of 
  19872.    flow of data, or time of occurrence of events, when transferring data from 
  19873.    one device to another. 
  19874.  
  19875.  
  19876. ΓòÉΓòÉΓòÉ <hidden> C ΓòÉΓòÉΓòÉ
  19877.  
  19878.  command message interface This programming interface is used for sending 
  19879.    messages to the media control interface from an application using the 
  19880.    mciSendCommand function.  Each time a message is sent to the Media Device 
  19881.    Manager with the mciSendCommand, flags are set and a pointer to a data 
  19882.    structure is passed.  The message interface is normally used by application 
  19883.    developers wishing to access device-specific features. 
  19884.  
  19885.  command string interface This character string interface is used for sending 
  19886.    command language statements to the media control interface from an 
  19887.    application using the mciSendString.  These statements must be converted to 
  19888.    the message format understood by the media driver. The Media Device Manager 
  19889.    calls the MMPM/2 string parser to interpret the string.  The string 
  19890.    interface provides a simple English-like command language that enables users 
  19891.    to control media control interface devices. 
  19892.  
  19893.  Common User Access  (CUA) Guidelines for the dialog between a human and a 
  19894.    workstation or terminal.  This includes the visual display, and keyboard and 
  19895.    mouse interfaces and actions. 
  19896.  
  19897.  CUA See Common User Access. 
  19898.  
  19899.  cue point (1) A discrete location or time position in a media device.  (2)  A 
  19900.    point the system recognizes as a signal to release a blocked application 
  19901.    thread. 
  19902.  
  19903.  
  19904. ΓòÉΓòÉΓòÉ <hidden> D ΓòÉΓòÉΓòÉ
  19905.  
  19906.  data streaming The uninterrupted transfer of information over an interface in 
  19907.    order to achieve high data transfer rates. 
  19908.  
  19909.  device capabilities The functionality of a device, including supported 
  19910.    component functions. 
  19911.  
  19912.  device context The device status and characteristics associated with an opened 
  19913.    instance of an media control interface device. 
  19914.  
  19915.  device driver A file that contains the code needed to use an attached device. 
  19916.  
  19917.  device sharing (1) The ability to share a device among many different 
  19918.    applications simultaneously.  If a device is opened shareable, the device 
  19919.    context will be saved when going from one application to another 
  19920.    application.  (2) Allowing a device context to be switched between media 
  19921.    control interface devices. 
  19922.  
  19923.  device-specific format The storage or transmission format used by a device, 
  19924.    especially if it is different from an accepted standard. 
  19925.  
  19926.  digital audio In multimedia applications, audio data that has been converted 
  19927.    to digital form. See also analog audio. 
  19928.  
  19929.  direct memory access The transfer of data between memory and input/output 
  19930.    units without microprocessor intervention. 
  19931.  
  19932.  discard stop In data streaming, requests that the data stream be stopped and 
  19933.    the data remaining in the stream buffers be discarded. 
  19934.  
  19935.  DLL See dynamic-link library. 
  19936.  
  19937.  DMA See direct memory access. 
  19938.  
  19939.  doubleword  (DWORD) A contiguous sequence of bits or characters that comprises 
  19940.    two computer words and is capable of being addressed as a unit. 
  19941.  
  19942.  dynamic-link library  (DLL) A file containing executable code and data bound 
  19943.    to a program at load time or run time, rather than during linking. The code 
  19944.    and data in a dynamic link library can be shared by several applications 
  19945.    simultaneously. 
  19946.  
  19947.  dynamic linking In the OS/2* operating system, the delayed connection of a 
  19948.    program to a routine until load time or run time. 
  19949.  
  19950.  
  19951. ΓòÉΓòÉΓòÉ <hidden> E ΓòÉΓòÉΓòÉ
  19952.  
  19953.  event An occurrence of significance to a task; for example, the completion of 
  19954.    an asynchronous operation such as I/O. 
  19955.  
  19956.  event semaphore (1) Used when one or more threads must wait for a single event 
  19957.    to occur.  (2) A blocking flag used to signal when an event has occurred. 
  19958.  
  19959.  explicit event An event supported by only some handlers, such as a custom 
  19960.    event unique to a particular type of data. 
  19961.  
  19962.  
  19963. ΓòÉΓòÉΓòÉ <hidden> F ΓòÉΓòÉΓòÉ
  19964.  
  19965.  file format A language construct that specifies the representation, in 
  19966.    character form, of data objects in a file.  For example, MIDI, M-Motion 
  19967.    (MMOT), or AVC.  The file format defines how data is stored in the file, and 
  19968.    how the data should be interpreted. 
  19969.  
  19970.  flush stop In data streaming, requests that the source stream handler be 
  19971.    stopped but the target stream handler continue until the last buffer held at 
  19972.    the time the stop was requested is consumed by the target stream handler. 
  19973.  
  19974.  FOURCC See Four-character code. 
  19975.  
  19976.  Four-character code A 32-bit quantity representing a sequence of one to four 
  19977.    ASCII alphanumeric characters (padded on the right with blank characters). 
  19978.    Four-character codes are unique identifiers that represent the file format 
  19979.    and IOProc. 
  19980.  
  19981.  
  19982. ΓòÉΓòÉΓòÉ <hidden> G ΓòÉΓòÉΓòÉ
  19983.  
  19984.  graphic push button A push button control with graphic, two-state, and 
  19985.    animation capabilities. 
  19986.  
  19987.  grouping For media control interface devices, refers to the ability to 
  19988.    associate dissimilar devices for a common purpose.  Grouping media control 
  19989.    interface devices aids resource management by insuring that all devices in a 
  19990.    group are kept together. 
  19991.  
  19992.  
  19993. ΓòÉΓòÉΓòÉ <hidden> H ΓòÉΓòÉΓòÉ
  19994.  
  19995.  HID Handler identification. 
  19996.  
  19997.  HMS (1) Hours-minutes-seconds.  (2) A time format for videodisc players. 
  19998.  
  19999.  HMSF (1) Hours-minutes-seconds-frames.  (2) A time format for videodisc 
  20000.    players. 
  20001.  
  20002.  
  20003. ΓòÉΓòÉΓòÉ <hidden> I ΓòÉΓòÉΓòÉ
  20004.  
  20005.  IDC Inter-device driver communication mechanism. 
  20006.  
  20007.  identifier One or more characters used to identify or name a data element and 
  20008.    possibly to indicate certain properties of that data element. (A)  In 
  20009.    programming languages, a token that names a data object such as a variable, 
  20010.    an array, a record, a subprogram, or a function. 
  20011.  
  20012.  implicit event An event that all stream handlers always must support, such as 
  20013.    end-of stream (EOS) or preroll complete.) 
  20014.  
  20015.  input/output control (IOCtl) A system service that provides a way for an 
  20016.    application to send device-specific control commands to a device driver. 
  20017.  
  20018.  installable I/O procedure A file format handler that provides functions that 
  20019.    operate on the media object of a particular data format.  These functions 
  20020.    include opening, reading, writing, seeking, and closing elements. 
  20021.  
  20022.  inter-device driver communication (IDC) A mechanism that enables a physical 
  20023.    device driver to communicate with another physical device driver. 
  20024.  
  20025.  internal SPCB key The internal key is used to differentiate between multiple 
  20026.    Stream Protocol Control Blocks (SPCBs) of the same data stream type. 
  20027.  
  20028.  IOCtl Input/output control. 
  20029.  
  20030.  
  20031. ΓòÉΓòÉΓòÉ <hidden> J ΓòÉΓòÉΓòÉ
  20032.  
  20033.  journal A chronological record of changes made in a set of data;  the record 
  20034.    may be used to reconstruct a previous version of the set. 
  20035.  
  20036.  
  20037. ΓòÉΓòÉΓòÉ <hidden> K ΓòÉΓòÉΓòÉ
  20038.  
  20039.  kilobyte (KB) 1024 bytes. 
  20040.  
  20041.  
  20042. ΓòÉΓòÉΓòÉ <hidden> L ΓòÉΓòÉΓòÉ
  20043.  
  20044.  LIB A collection (or library) of object modules available for static linking 
  20045.    with other modules.  These modules physically become part of the program's 
  20046.    .EXE file. 
  20047.  
  20048.  line audio The standard type of audio signal distributed between most 
  20049.    components of an audio system. 
  20050.  
  20051.  
  20052. ΓòÉΓòÉΓòÉ <hidden> M ΓòÉΓòÉΓòÉ
  20053.  
  20054.  M-ACPA M-Audio Capture and Playback Adapter. 
  20055.  
  20056.  master stream handler Controls the behavior of one or more subordinate objects 
  20057.    (the slave streams). 
  20058.  
  20059.  M-Audio Capture and Playback Adapter (M-ACPA) An adapter card (for use with 
  20060.    the IBM PS/2 product line) that provides the ability to record and play back 
  20061.    high quality sound.  The adapter converts the audio input (analog) signals 
  20062.    to a digital format that is compressed and stored for later use. 
  20063.  
  20064.  MDM See Media Device Manager. 
  20065.  
  20066.  media control interface (MCI) A generalized interface to control multimedia 
  20067.    devices.  Each device has its own media control interface driver that 
  20068.    implements a standard set of media control interface functions.  In 
  20069.    addition, each media driver can implement functions that are specific to the 
  20070.    particular device. 
  20071.  
  20072.  media device A processor of audiovisual information or media.  Media 
  20073.    components can be either internal or external physical devices or defined 
  20074.    mechanisms for effecting higher-level function from internal hardware and 
  20075.    software subsystems.  (An example is a waveform player component that 
  20076.    utilizes the DSP (Digital Signal Processor) subsystem and data-streaming 
  20077.    services to effect audio-playback functions.) 
  20078.  
  20079.  media device capabilities The functionality of a media component, including 
  20080.    supported component functions. 
  20081.  
  20082.  media device connection A physical or logical link between media component 
  20083.    connectors for a particular set of media component instances. 
  20084.  
  20085.  media device connector A physical or logical input or output on a media 
  20086.    component. 
  20087.  
  20088.  Media Device Manager  (MDM) A system service that, when two or more 
  20089.    applications attempt to control a media device, determines which process 
  20090.    gains access. 
  20091.  
  20092.  media driver (1) A device driver for a multimedia device.  (2) See also device 
  20093.    driver. 
  20094.  
  20095.  message interface See command message interface. 
  20096.  
  20097.  millisecond One thousandth of a second. 
  20098.  
  20099.  mix In multimedia applications, the combination of audio or video sources 
  20100.    during postproduction. 
  20101.  
  20102.  mixer A device that selects, combines, or blends audio or video signals. 
  20103.  
  20104.  MMIO See Multimedia Input/Output. 
  20105.  
  20106.  MMIO file services System services that enable an application to access and 
  20107.    manipulate multimedia data files. 
  20108.  
  20109.  MMIO manager The Multimedia Input/Output Manager provides services to find, 
  20110.    query, and access multimedia data objects.  It also supports the functions 
  20111.    of memory allocation and file compaction.  The MMIO manager uses IOProcs to 
  20112.    direct the input and output associated with reading from and writing to 
  20113.    different types of storage systems or file formats. 
  20114.  
  20115.  MMPM/2 Multimedia Presentation Manager/2.  See OS/2 Multimedia. 
  20116.  
  20117.  MMTIME Standard time and media position format supported by the Media Control 
  20118.    Interface.  This time unit is 1/3000 of a second. 
  20119.  
  20120.  multimedia The combining of different elements of media (for example, text, 
  20121.    graphics, audio, and still images) for display and control from a personal 
  20122.    computer. 
  20123.  
  20124.  multimedia data object In an application, an element of a data structure (such 
  20125.    as a file, an array, or an operand) that is needed for program execution and 
  20126.    that is named or otherwise specified by the allowable character set of the 
  20127.    language in which the program is coded. 
  20128.  
  20129.  Multimedia File I/O Services System services that provide a generalized 
  20130.    interface to manipulate multimedia data.  The services support buffered and 
  20131.    unbuffered file I/O, standard RIFF files, and installable I/O procedures. 
  20132.  
  20133.  Multimedia Input/Output  (MMIO) (1) System services that provide a variety of 
  20134.    functions for media file access and manipulation.  (2) A consistent 
  20135.    programming interface where an application, media driver, or stream handler 
  20136.    can refer to multimedia files, read and write data to the files, and query 
  20137.    the contents of the files, while remaining independent of the underlying 
  20138.    file formats or the storage systems that contain the files. 
  20139.  
  20140.  OS/2 Multimedia A subsystem service of OS/2 that provides a software platform 
  20141.    for multimedia applications.  It defines standard interfaces between 
  20142.    multimedia devices and OS/2 multimedia applications. 
  20143.  
  20144.  multimedia system A system capable of presenting multimedia material in its 
  20145.    entirety. 
  20146.  
  20147.  mux (1) An abbreviation for multiplexer.  (2) See also mixer. 
  20148.  
  20149.  
  20150. ΓòÉΓòÉΓòÉ <hidden> N ΓòÉΓòÉΓòÉ
  20151.  
  20152.  National Television Standard Committee  (NTSC) A committee that defines the 
  20153.    video standard in the United States. 
  20154.  
  20155.  NTSC (1) The video standard in the United States, Canada, Mexico, and Japan. 
  20156.    (2) 525 lines of resolution at 30 frames per second.  (3) See also National 
  20157.    Television Standard Committee. 
  20158.  
  20159.  
  20160. ΓòÉΓòÉΓòÉ <hidden> O ΓòÉΓòÉΓòÉ
  20161.  
  20162.  overrun Loss of data because a receiving device is unable to accept data at 
  20163.    the rate it is transmitted. 
  20164.  
  20165.  
  20166. ΓòÉΓòÉΓòÉ <hidden> P ΓòÉΓòÉΓòÉ
  20167.  
  20168.  pause stop In data streaming, a stop that pauses the data stream but does not 
  20169.    disturb any data. 
  20170.  
  20171.  PDD Physical device driver. 
  20172.  
  20173.  physical device driver (PDD) A system interface that handles hardware 
  20174.    interrupts and supports a set of input and output functions. 
  20175.  
  20176.  preroll The process of preparing a device to begin a playback or recording 
  20177.    function with minimal latency.  During a multimedia sequence, it might 
  20178.    require that two devices be cued (prerolled) to start playing and recording 
  20179.    at the same time. 
  20180.  
  20181.  proc A custom procedure, called by the particular utility manager, to handle 
  20182.    input or output to files of a format different from DOS, MEM, or BND; for 
  20183.    example, MMOT (M-Motion) or TIFF.  By installing custom procedures, existing 
  20184.    applications no longer need to store multiple copies of the same media file 
  20185.    for running on various platforms using different file formats. 
  20186.  
  20187.  
  20188. ΓòÉΓòÉΓòÉ <hidden> R ΓòÉΓòÉΓòÉ
  20189.  
  20190.  RGB (1) Color coding in which the brightness of the additive primary colors of 
  20191.    light, red, green, and blue, are specified as three distinct values of white 
  20192.    light. (2) Pertaining to a color display that accepts signals representing 
  20193.    red, green, and blue. 
  20194.  
  20195.  
  20196. ΓòÉΓòÉΓòÉ <hidden> S ΓòÉΓòÉΓòÉ
  20197.  
  20198.  simple device A media control interface device that does not require a device 
  20199.    element. 
  20200.  
  20201.  single plane video system (1) Refers to when video and graphics are combined 
  20202.    into one buffer.  This may appear the same as a dual plane video system, but 
  20203.    since all the data is in one buffer, capture and restore operations will 
  20204.    obtain both graphics and video components in one operation.  (2) See also 
  20205.    dual plane video system. 
  20206.  
  20207.  SPCB Stream protocol control block. 
  20208.  
  20209.  SPI Stream programming interface. 
  20210.  
  20211.  split streaming A mechanism provided by the Sync/Stream Manager to create one 
  20212.    data stream source with multiple targets. 
  20213.  
  20214.  standard multimedia device controls These controls provide the application 
  20215.    developer with a CUA compliant interface for controlling audio attributes, 
  20216.    video attributes, and videodisc players.  These controls simplify the 
  20217.    programming task required to create the interface and handle the 
  20218.    presentation of the interface and all interaction with the user.  They also 
  20219.    send the media control interface (MCI) commands to the Media Device Manager 
  20220.    (MDM) for processing. 
  20221.  
  20222.  stream To send data from one source to another. 
  20223.  
  20224.  stream object The data resource or device channel that represents either the 
  20225.    data source or target for a stream. 
  20226.  
  20227.  stream programming interface (SPI) A system service that supports continual 
  20228.    flow of data between physical devices. 
  20229.  
  20230.  stream protocol control block (SPCB) The system service that controls the 
  20231.    behavior of a specified stream type.  This enables you to subclass a 
  20232.    stream's data type, change data buffering characteristics, and alter 
  20233.    synchronization behavior and other stream events. 
  20234.  
  20235.  string commands See command string interface. 
  20236.  
  20237.  subclassing The act of intercepting messages and passing them on to their 
  20238.    original intended recipient. 
  20239.  
  20240.  S-Video input connector A special connector that separates the chrominance 
  20241.    from the luminance signal. 
  20242.  
  20243.  sync group A master stream and all its slaves that can be started, stopped, 
  20244.    and searched as a group by using the slaves flag on each of the following 
  20245.    SPI functions: 
  20246.  
  20247.    o  SpiStartStream 
  20248.    o  SpiStopStream 
  20249.    o  SpiSeekStream 
  20250.  
  20251.  sync pulse A system service that enables each slave stream handler to adjust 
  20252.    the activity of that stream so that synchronization can be maintained. Sync 
  20253.    pulses are introduced by transmission equipment into the receiving equipment 
  20254.    to keep the two equipments operating in step. 
  20255.  
  20256.  synchronization The action of forcing certain points in the execution 
  20257.    sequences of two or more asynchronous procedures to coincide in time. 
  20258.  
  20259.  synchronous Pertaining to two or more processes that depend upon the 
  20260.    occurrence of specific events such as common timing signals. 
  20261.  
  20262.  
  20263. ΓòÉΓòÉΓòÉ <hidden> T ΓòÉΓòÉΓòÉ
  20264.  
  20265.  tearing Refers to when video is displaced horizontally.  This may be caused by 
  20266.    sync problems. 
  20267.  
  20268.  transport device A device that plays, records, and positions a media element, 
  20269.    and either presents the result directly or sends the material to a transform 
  20270.    device.  Examples are videodisc players, CD-ROMs, and digital audio (wave) 
  20271.    player. 
  20272.  
  20273.  
  20274. ΓòÉΓòÉΓòÉ <hidden> U ΓòÉΓòÉΓòÉ
  20275.  
  20276.  underrun Loss of data caused by inability of a transmitting device or channel 
  20277.    to provide data to the communication control logic at a rate that is fast 
  20278.    enough for the attached link or loop. 
  20279.  
  20280.  
  20281. ΓòÉΓòÉΓòÉ <hidden> V ΓòÉΓòÉΓòÉ
  20282.  
  20283.  videodisc A disc with information stored in the form of pits along a spiral 
  20284.    track.  The information is decoded by a videodisc player and converted to an 
  20285.    analog signal. 
  20286.  
  20287.  viewport A predefined part of the display space; a rectangular portion of the 
  20288.    screen where the video is displayed. 
  20289.  
  20290.  
  20291. ΓòÉΓòÉΓòÉ <hidden> W ΓòÉΓòÉΓòÉ
  20292.  
  20293.  window coordinates The size and location of a window. 
  20294.  
  20295.  
  20296. ΓòÉΓòÉΓòÉ <hidden> X Y Z ΓòÉΓòÉΓòÉ
  20297.  
  20298.  Y Refers to the luminance portion of a Y/C video signal. 
  20299.  
  20300.  Y/C Color image encoding scheme that separates luminance (Y) from phase 
  20301.    encoded chroma (C).  Synonymous with S-video. 
  20302.  
  20303.  zooming The progressive scaling of an image in order to give the visual 
  20304.    impression of movement of all or part of a display group toward or away from 
  20305.    an observer. 
  20306.