home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / book / mmapg.inf (.txt) < prev    next >
OS/2 Help File  |  1999-05-12  |  627KB  |  15,997 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4. This guide provides information about application interfaces to help you select 
  5. and implement functions for your OS/2 multimedia applications. It is written 
  6. for application programmers who are interested in developing OS/2 multimedia 
  7. applications. 
  8.  
  9.  
  10. ΓòÉΓòÉΓòÉ 1.1. Additional Multimedia Information ΓòÉΓòÉΓòÉ
  11.  
  12.  Developing Multimedia Applications Under OS/2, John Wiley & Sons, Inc., 1995. 
  13.  (ISBN 0-471-13168-7) 
  14.            Provides insight, tips and techniques, and samples on MMPM/2 
  15.            application development. It also describes the uses of multimedia 
  16.            for general Presentation Manager applications. 
  17.  
  18.  Guide to Multimedia User Interface Design, IBM Corporation, 1992. 
  19.  (S41G-2922-00) 
  20.            Describes design concepts to be considered when designing a CUA 
  21.            multimedia interface that is consistent within a particular 
  22.            multimedia product and across other products. 
  23.  
  24.  IBM Redbooks 
  25.            You can find information on multimedia-related IBM Redbooks at 
  26.            http://www.redbooks.ibm.com/redbooks/ on the World Wide Web. 
  27.  
  28.  Multimedia with REXX - (online) 
  29.            Describes REXX functions that enable media control interface string 
  30.            commands to be sent from an OS/2 command file to control multimedia 
  31.            devices. This online book is provided with the OS/2 operating system 
  32.            and is located in the Reference and Commands folder. 
  33.  
  34.  
  35. ΓòÉΓòÉΓòÉ 1.2. Using This Online Book ΓòÉΓòÉΓòÉ
  36.  
  37. Before you begin to use this online book, it would be helpful to understand how 
  38. you can: 
  39.  
  40.      Expand the Contents to see all available topics 
  41.      Obtain additional information for a highlighted word or phrase 
  42.      Use action bar choices. 
  43.  
  44.  How To Use the Contents 
  45.  
  46.  When the Contents window first appears, some topics have a plus (+) sign 
  47.  beside them.  The plus sign indicates that additional topics are available. 
  48.  
  49.  To expand the Contents if you are using a mouse, select the plus sign (+).  If 
  50.  you are using a keyboard, use the Up or Down Arrow key to highlight the topic, 
  51.  and press the plus key (+). 
  52.  
  53.  To view a topic, double-click on the topic (or press the Up or Down Arrow key 
  54.  to highlight the topic, and then press Enter). 
  55.  
  56.  How To Obtain Additional Information 
  57.  
  58.  After you select a topic, the information for that topic appears in a window. 
  59.  Highlighted words or phrases indicate that additional information is 
  60.  available.  You will notice that certain words in the following paragraph are 
  61.  highlighted in green letters, or in white letters on a black background. These 
  62.  are called hypertext terms.  If you are using a mouse, double-click on the 
  63.  highlighted word.  If you are using a keyboard, press the Tab key to move to 
  64.  the highlighted word, and then press the Enter key.  Additional information 
  65.  will appear in a window. 
  66.  
  67.  How To Use Action Bar Choices 
  68.  
  69.  Several choices are available for managing information presented in the 
  70.  M-Control Program/2 Programming Reference.  There are three pull-down menus on 
  71.  the action bar:  the Services menu, the Options menu, and the Help menu. 
  72.  
  73.  The actions that are selectable from the Services menu operate on the active 
  74.  window currently displayed on the screen.  These actions include the 
  75.  following: 
  76.  
  77.  Bookmark 
  78.     Sets a place holder so you can retrieve information of interest to you. 
  79.  
  80.     When you place a bookmark on a topic, it is added to a list of bookmarks 
  81.     you have previously set.  You can view the list, and you can remove one or 
  82.     all bookmarks from the list.  If you have not set any bookmarks, the list 
  83.     is empty. 
  84.  
  85.     To set a bookmark, do the following: 
  86.  
  87.       1. Select a topic from the Contents. 
  88.  
  89.       2. When that topic appears, choose the Bookmark option from the Services 
  90.          menu. 
  91.  
  92.       3. If you want to change the name used for the bookmark, type the new 
  93.          name in the field. 
  94.  
  95.       4. Select the Place radio button (or press the Up or Down Arrow key to 
  96.          select it). 
  97.  
  98.       5. Select OK.  The bookmark is then added to the bookmark list. 
  99.  
  100.  Search 
  101.     Finds occurrences of a word or phrase in the current topic, selected 
  102.     topics, or all topics. 
  103.  
  104.     You can specify a word or phrase to be searched.  You can also limit the 
  105.     search to a set of topics by first marking the topics in the Contents list. 
  106.  
  107.     To search for a word or phrase in all topics, do the following: 
  108.  
  109.       1. Choose the Search option from the Services pull-down. 
  110.  
  111.       2. Type the word or words to be searched. 
  112.  
  113.       3. Select All sections. 
  114.  
  115.       4. Select Search to begin the search. 
  116.  
  117.       5. The list of topics where the word or phrase appears is displayed. 
  118.  
  119.  Print 
  120.     Prints one or more topics.  You can also print a set of topics by first 
  121.     marking the topics in the Contents list. 
  122.  
  123.     You can print one or more topics.  You can also print a set of topics by 
  124.     first marking the topics on the Contents list. 
  125.  
  126.     To print the document Contents list, do the following: 
  127.  
  128.       1. Select Print from the Services menu. 
  129.  
  130.       2. Select Contents. 
  131.  
  132.       3. Select Print. 
  133.  
  134.       4. The Contents list is printed on your printer. 
  135.  
  136.  Copy 
  137.     Copies a topic you are viewing to a file you can edit. 
  138.  
  139.     You can copy a topic you are viewing into a temporary file named TEXT.TMP. 
  140.     You can later edit that file by using an editor such as the System Editor. 
  141.  
  142.     To copy a topic, do the following: 
  143.  
  144.       1. Expand the Contents list and select a topic. 
  145.  
  146.       2. When the topic appears, select Copy to file from the Services menu. 
  147.  
  148.     The system copies the text pertaining to that topic into the temporary 
  149.     TEXT.TMP file. 
  150.  
  151.     For information on any of the other choices in the Services menu, highlight 
  152.     the choice and press the F1 key. 
  153.  
  154.  Options 
  155.     Changes the way the Contents is displayed. 
  156.  
  157.     You can control the appearance of the Contents list. 
  158.  
  159.     To expand the Contents and show all levels for all topics, select Expand 
  160.     all from the Options menu. 
  161.  
  162.     For information on any of the other choices in the Options menu, highlight 
  163.     the choice and press the F1 key. 
  164.  
  165.  
  166. ΓòÉΓòÉΓòÉ 2. What's New... ΓòÉΓòÉΓòÉ
  167.  
  168. This release of the OS/2 Multimedia Application Programming Guide includes the 
  169. following: 
  170.  
  171.      Using a Control Program Queue for Notifications 
  172.  
  173.       An OS/2 application that does not have a PM window, and therefore cannot 
  174.       use a PM message queue for receiving notification messages, can use an 
  175.       OS/2 Control Program queue instead. The Control Program queue method of 
  176.       notification should also be considered for time-critical PM applications, 
  177.       because it is faster than using the PM message queue. 
  178.  
  179.      Direct Audio RouTines (DART) Interface 
  180.  
  181.       The DART interface enables games and multimedia applications to bypass 
  182.       the waveaudio device entirely and communicate directly with the amp 
  183.       mixer. 
  184.  
  185.      Additional DIVE functionality 
  186.  
  187.       DIVE transparent blitting functions enable an interactive game or imaging 
  188.       application to create composites of graphics and image data using a 
  189.       transparency key color. See Transparent Blitting for more information. 
  190.  
  191.      Additional flags for MCI_CUE 
  192.  
  193.       Additional MCI_CUE flags allow digital video devices to seek to a 
  194.       specified position and to display or hide the video window when cueing 
  195.       the media. See Playing Motion Video Files for more information. 
  196.  
  197.  
  198. ΓòÉΓòÉΓòÉ 3. Multimedia Application Programming Environment ΓòÉΓòÉΓòÉ
  199.  
  200. OS/2 multimedia (referred to as MMPM/2 or Multimedia Presentation Manager/2 in 
  201. previous releases) is the multimedia platform for today because it takes 
  202. advantage of OS/2 features to provide an effective multimedia environment. OS/2 
  203. multitasking capability supports synchronization and concurrent playback of 
  204. multiple devices. The flat memory model supports the management of large data 
  205. objects. 
  206.  
  207. OS/2 multimedia is also the multimedia platform for tomorrow because of its 
  208. extendable architecture, which enables new functions, devices, and multimedia 
  209. data types to be added as the technology of multimedia advances. 
  210.  
  211. Because OS/2 multimedia and its devices are designed to support synchronization 
  212. activities, Presentation Manager (PM) applications can easily incorporate 
  213. multimedia function for playing multiple devices concurrently and synchronizing 
  214. audio and video as media drivers become available. 
  215.  
  216.  
  217. ΓòÉΓòÉΓòÉ 3.1. Application Programming Model ΓòÉΓòÉΓòÉ
  218.  
  219. The application programming model for an OS/2 multimedia application is an 
  220. extension of the OS/2 Presentation Manager programming model, providing both 
  221. messaging and procedural programming interfaces. OS/2 multimedia API procedures 
  222. allow applications to manage data and control devices while messages from the 
  223. OS/2 multimedia system notify applications of asynchronous events. 
  224.  
  225. The media control interface provides a view of the OS/2 multimedia system to 
  226. both application developers and users that is similar to that of a video and 
  227. audio home entertainment system. Operations are performed by controlling the 
  228. processors of media information, known as media devices.  Media devices can be 
  229. internal or external hardware devices, or they can be software libraries that 
  230. perform a defined set of operations by manipulating lower-level hardware 
  231. components and system software functions. 
  232.  
  233. Multiple media devices can be used in an operation. For example, the playback 
  234. of an audio compact disc can be implemented by coordinating the control of a 
  235. compact disc player and an amplifier-mixer device. 
  236.  
  237. The Media Device Manager (MDM) shown in the following figure provides resource 
  238. management for media devices and enables the command message and command string 
  239. interface. The Media Device Manager provides device independence to an 
  240. application developer. 
  241.  
  242.  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  243.  Γöé   Data    Γöé Γöé           Γöé Γöé   Media   Γöé Γöé           Γöé Γöé  Volume   Γöé Γöé    CD     Γöé Γöé  Digital  Γöé
  244.  ΓöéConverter  Γöé Γöé  Install  Γöé Γöé  Players  Γöé Γöé   Setup   Γöé Γöé  Control  Γöé Γöé  Player   Γöé Γöé   Audio   Γöé
  245.  ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  246.   Γöé                  Γöé             Γöé             Γöé             Γöé             Γöé         Γöé           Applications
  247.  -Γöé- - - - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - - - Γöé - - - - Γöé - - - - - - - - - - -
  248.   Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  249.   Γöé    Γöé                      Media Device Manager Interface Layer                                           Γöé
  250.   Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  251.   Γöé           Γöé              Γöé              Γöé              Γöé              Γöé              Γöé              Γöé
  252.   Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  253.   Γöé     Γöé CD-ROM/XA  Γöé Γöé  CD Audio  Γöé ΓöéWave Audio  Γöé Γöé  Sequencer Γöé ΓöéDigitalvideoΓöé Γöé Amp/Mixer  Γöé Γöé Videodisc  Γöé
  254.   Γöé     Γöé  Driver    Γöé Γöé   Driver   Γöé Γöé  Driver    Γöé Γöé    Driver  Γöé Γöé  Driver    Γöé Γöé  Driver    Γöé Γöé   Driver   Γöé
  255.   Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γö¼ΓöÇΓöÿ ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓö¼ΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  256.   Γöé Application   ΓöéΓöé     Γöé      Γöé              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé             Γöé           Γöé Γöé                 Γöé
  257.   Γöé     or        ΓöéΓöé     Γöé      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           Γöé Γöé                 Γöé
  258.   Γöé Media Driver  ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé Γöé Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé
  259.   Γöé               Γöé    ΓöîΓöÇΓöÿ                          Γöé Γöé Γöé Γöé Γöé Γöé                               Γöé         Γöé
  260.  ΓöîΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé    Γöé  Stream Handlers           Γöé Γöé Γöé Γöé Γöé Γöé                           ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ    Γöé
  261.  Γöé  MMIO   Γö£ΓöÇΓöÇΓöÇΓöÉ  Γöé    Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé Γöé Γöé Γöé Γöé Γöé      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé Audio  Γöé    Γöé
  262.  Γöé Manager Γöé   Γöé  Γöé    ΓöéΓöîΓöÇΓöñ File System  Γöé          Γöé Γöé Γöé Γöé Γöé Γöé    ΓöîΓöÇΓöñ    Audio     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  VSD   Γöé    Γöé
  263.  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝Γöñ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé Γöé Γöé Γöé Γöé Γöé    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé        Γöé    Γöé
  264.  ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé    ΓöéΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé Γöé Γöé Γöé Γöé Γöé    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé
  265.  ΓöéI/O ProceduresΓöé Γöé    ΓöéΓöé Γöé Multi-track  Γö£ΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÉ   Γö£ΓöÇΓöñ   Memory     Γöé         Γöé         Γöé
  266.  ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé    ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé
  267.       Γöé           Γöé    ΓöéΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γö£ΓöÇΓöÇΓöÇΓö╝Γöñ Sync/Stream ΓöéΓöé   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé         Γöé
  268.       Γöé           Γöé    ΓöéΓööΓöÇΓöñ   Video      Γö£ΓöÇΓöñ   ΓöéΓöé Manager DLL Γö£Γö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöñ  CD-ROM/XA   Γöé         Γöé         Γöé
  269.       Γöé           ΓööΓöÇΓöÇΓöÇΓöÉΓöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé   Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé
  270.       Γöé               ΓöéΓöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé   Γöé       Γöé       Γöé   Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γöé         Γöé
  271.    ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöéΓöé  Γöé  MIDI Mapper Γö£ΓöÇΓöÿ   Γöé       Γöé       Γöé   ΓööΓöÇΓöñ    CD/DA     Γöé         Γöé         Γöé  RING 3
  272.    ΓöéFile SystemΓöé      ΓöéΓöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé       Γöé       Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé         Γöé  DLL
  273. - -Γöé- - - - - -Γöé- - - ΓöéΓöé- - - - - - - - - - - -Γöé- - - -Γöé- - - -Γöé- - - - - - - - - - - - - - - Γöé - - - - Γöé- - - - -
  274.    ΓöéFAT/HPFS/XAΓöé      ΓöéΓöé                       ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé                              Γöé         Γöé  RING 0
  275.    ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼Γö¼Γöÿ      ΓöéΓöé                       ΓöéΓöé Sync/Stream ΓöéΓöé                              Γöé         Γöé  PDD
  276.      Γöé    Γöé  ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöéΓöé                       ΓöéΓöé Manager PDD ΓöéΓöé                              Γöé         Γöé
  277.  ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉΓöéΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöéΓöé                       ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé                              Γöé IOCtl   Γöé
  278.  Γöé Hard  ΓöéΓöéΓöé  R/W  Γöé ΓöéΓöéΓöé                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                              Γöé         Γöé
  279.  Γöé Disk  ΓöéΓöéΓöéOpticalΓöé ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé
  280.  Γöé PDD   ΓöéΓöéΓöé  PDD  Γöé ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé IOCtl
  281.  ΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöéΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓöéΓöéΓöé                               Γöé                                      Γöé         Γöé
  282.    Γöé      Γöé  Γöé       ΓöéΓöéΓöé                           ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                Γöé         Γöé
  283.    Γöé      Γöé  ΓööΓöÉ      ΓöéΓöéΓöé                       ΓöîΓöÇΓöÇΓöÇΓöñRing 0 Stub Device DriverΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ         Γöé
  284.    Γöé      Γöé   Γöé      ΓöéΓöéΓöé                       Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                Γöé         Γöé
  285.    ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÉΓöé  ΓöîΓöÇΓöÇΓöÇΓö┤Γö┤Γö┤ΓöÇΓöÇΓöÇΓöÉ                   Γöé   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                 Γöé         Γöé
  286.    ΓöéΓöéDisketteΓöéΓöé  ΓöéCD-ROM/XAΓöé               IDC Γöé   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé                 Γöé         Γöé
  287.    ΓöéΓöé   PDD  ΓöéΓöé  Γöé   PDD   Γöé                   Γöé   ΓöéΓöéCommon Audio InterfaceΓö£Γö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé
  288.    ΓöéΓööΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé  ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                   Γöé   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé                           Γöé
  289.    Γöé  Γöé       Γöé    ΓöîΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ              Γöé   Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé                       ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ
  290.    Γöé  Γöé       Γöé    ΓöéGeneric SCSCΓöé              Γöé   Γöé     Γöé OEM Audio Γöé      Γöé                       Γöé OS/2  Γöé
  291.    Γöé  Γöé       ΓööΓöÇΓöÇΓöÇΓöÇΓöñ     DD     Γöé              ΓööΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Device  Γöé      Γöé                       Γöé  COM  Γöé
  292.    Γöé  Γöé            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                  Γöé     Γöé   Driver  Γöé      Γöé                       Γöé  PDD  Γöé
  293.    Γöé  Γöé                  Γöé                         Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé                       ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  294.    Γöé  Γöé                  Γöé                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                           Γöé
  295. - -Γöé- Γöé - - - - - - - - -Γöé- - - - - - - - - - - - - - - - - - -Γöé- - - - - - - - - - - - - - - - - - - - Γöé- - - -
  296.    Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                           Γöé                                        Γöé
  297.    Γö┤           Γö┤         Γö┤         Γö┤                       ΓöîΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                                RS-232
  298.   Hard      Diskette  Optical   CD-ROM                     ΓöéOEM AudioΓöé
  299.   Drive      Drive     Drive     Drive                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé                                    Physical
  300.                                                                   ΓööΓöÇΓöÇΓöÿ                                    Devices
  301.  
  302. Refer to the OS/2 Multimedia Subsystem Programming Guide for information on 
  303. multimedia subsystem programming including media drivers and stream handlers. 
  304.  
  305. To assist you in creating a standardized user interface for your OS/2 
  306. multimedia application, OS/2 provides multimedia window controls, which have 
  307. been implemented in OS/2 multimedia applications such as Volume Control.  See 
  308. the following figure. 
  309.  
  310. Graphic buttons are two-state buttons that can be toggled up and down. They can 
  311. display text, or graphics, or both. They can also be animated. Their 
  312. versatility makes graphic buttons ideal to use for device control panels. 
  313.  
  314. Circular sliders lend realism to your panel by providing familiar-looking 
  315. dials. The dials are easy to operate and do not hog screen real estate. 
  316.  
  317. Secondary windows provide a sizeable dialog window to contain your multimedia 
  318. device controls. 
  319.  
  320.  
  321. ΓòÉΓòÉΓòÉ 3.1.1. OS/2 Multimedia Application Requirements ΓòÉΓòÉΓòÉ
  322.  
  323. The IBM Developer's Toolkit for OS/2 Warp includes the bindings, header files, 
  324. and libraries for developing OS/2 multimedia applications. 
  325.  
  326. A PM message queue is required for all OS/2 multimedia applications because it 
  327. enables the efficient sharing of devices in the OS/2 multimedia environment. 
  328.  
  329. The minimum stack size for an OS/2 multimedia application is 32KB; however, for 
  330. better performance, use a stack size of 64KB. 
  331.  
  332. All OS/2 multimedia public interfaces, for example error message defines and 
  333. common definitions, are accessible through the OS2ME.H file. Constants and 
  334. prototypes for multimedia window control functions, MMIO file services 
  335. functions, and high-level interfaces are accessible after the following defines 
  336. are included in your application: 
  337.  
  338.  Define                    Services 
  339.  #define INCL_SW           Window Control Functions 
  340.  #define INCL_MMIOOS2      MMIO File Services 
  341.  #define INCL_MACHDR       High-Level Services 
  342.  
  343.  OS/2 multimedia applications should link with the MMPM2.LIB library. 
  344.  
  345.  Note:  OS/2 multimedia header files have naming conventions compatible with 
  346.         the standard OS/2 format.  Applications using previous versions of the 
  347.         MMPM/2 header files will still use those header files by default when 
  348.         the applications are compiled.  In order to use the OS/2-consistent 
  349.         header files in an application, define INCL_OS2MM in the program. 
  350.         Defining INCL_OS2MM automatically defines the following: 
  351.  
  352.  INCL_MCIOS2               MCI-related include files (MCIOS2.H and MMDRVOS2.H) 
  353.  INCL_MMIOOS2              MMIO include file (MMIOOS2.H) 
  354.  
  355.  All existing applications remain binary compatible.  If they are recompiled a 
  356.  choice of which set of headers to use is available. If new header files are 
  357.  used, the source code must be modified to conform to the name changes. 
  358.  
  359.  
  360. ΓòÉΓòÉΓòÉ 3.1.2. Extendable Device Support ΓòÉΓòÉΓòÉ
  361.  
  362. The system architecture of OS/2 multimedia extensions is designed to be 
  363. extendable.  This level of modularity allows independent development of support 
  364. for new hardware devices, logical media devices, and file formats. 
  365.  
  366. Examples of media control interface devices are listed in the following table. 
  367. The table shows the logical device types that can be supported and already have 
  368. media control interface definitions. Devices currently supported by OS/2 
  369. multimedia are indicated by (X) marks. 
  370.  
  371. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  372. ΓöéMedia Device  ΓöéOS/2      ΓöéString        ΓöéConstant                          Γöé
  373. ΓöéType          ΓöéMultimediaΓöé              Γöé                                  Γöé
  374. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  375. ΓöéAmplifier     ΓöéX         Γöéampmix        ΓöéMCI_DEVTYPE_AUDIO_AMPMIX          Γöé
  376. Γöémixer         Γöé          Γöé              Γöé                                  Γöé
  377. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  378. ΓöéAudio tape    Γöé          Γöéaudiotape     ΓöéMCI_DEVTYPE_AUDIO_TAPE            Γöé
  379. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  380. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  381. ΓöéCD audio      ΓöéX         Γöécdaudio       ΓöéMCI_DEVTYPE_CD_AUDIO              Γöé
  382. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  383. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  384. ΓöéCD-XA player  ΓöéX         Γöécdxa          ΓöéMCI_DEVTYPE_CDXA                  Γöé
  385. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  386. ΓöéDigital audio Γöé          Γöédat           ΓöéMCI_DEVTYPE_DAT                   Γöé
  387. Γöétape          Γöé          Γöé              Γöé                                  Γöé
  388. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  389. ΓöéDigital video ΓöéX         Γöédigitalvideo  ΓöéMCI_DEVTYPE_DIGITAL_VIDEO         Γöé
  390. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  391. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  392. ΓöéHeadphone     Γöé          Γöéheadphone     ΓöéMCI_DEVTYPE_HEADPHONE             Γöé
  393. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  394. ΓöéMicrophone    Γöé          Γöémicrophone    ΓöéMCI_DEVTYPE_MICROPHONE            Γöé
  395. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  396. ΓöéMonitor       Γöé          Γöémonitor       ΓöéMCI_DEVTYPE_MONITOR               Γöé
  397. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  398. ΓöéOther         Γöé          Γöéother         ΓöéMCI_DEVTYPE_OTHER                 Γöé
  399. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  400. ΓöéVideo overlay Γöé          Γöévideooverlay  ΓöéMCI_DEVTYPE_OVERLAY               Γöé
  401. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  402. ΓöéSequencer     ΓöéX         Γöésequencer     ΓöéMCI_DEVTYPE_SEQUENCER             Γöé
  403. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  404. ΓöéSpeaker       Γöé          Γöéspeaker       ΓöéMCI_DEVTYPE_SPEAKER               Γöé
  405. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  406. ΓöéVideodisc     ΓöéX         Γöévideodisc     ΓöéMCI_DEVTYPE_VIDEODISC             Γöé
  407. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  408. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  409. ΓöéVideo         Γöé          Γöévideotape     ΓöéMCI_DEVTYPE_VIDEOTAPE             Γöé
  410. Γöétape/cassette Γöé          Γöé              Γöé                                  Γöé
  411. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  412. ΓöéWaveform audioΓöéX         Γöéwaveaudio     ΓöéMCI_DEVTYPE_WAVEFORM_AUDIO        Γöé
  413. Γöéplayer        Γöé          Γöé              Γöé                                  Γöé
  414. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  415.  
  416. Note:  M-Control Program 2.01, which supports the M-Motion Video Adapter/A, 
  417.        provides overlay extensions for OS/2 multimedia. 
  418.  
  419.  
  420. ΓòÉΓòÉΓòÉ 4. Media Control Interface ΓòÉΓòÉΓòÉ
  421.  
  422. This section describes the services offered to applications by the media 
  423. control interface for managing devices in the multimedia environment. 
  424.  
  425.  
  426. ΓòÉΓòÉΓòÉ 4.1. Command Message and Command String Interfaces ΓòÉΓòÉΓòÉ
  427.  
  428. When a user activates a PM control to use a multimedia device function, the 
  429. OS/2 multimedia application window procedure sends a command to the media 
  430. control interface. Depending on the needs of the application, the window 
  431. procedure can use the command message interface or the command string interface 
  432. to implement these device commands. Messages for the command message interface 
  433. (also referred to as procedural interface) are sent with mciSendCommand. 
  434. Strings for the command string interface are sent to the Media Device Manager 
  435. for parsing, using the mciSendString function. 
  436.  
  437. See the following figure.
  438.  
  439. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  440. |         mciSendCommand                     mciSendString                  |
  441. |                Γöé                                 Γöé                        |
  442. |                Γöé                                 Γöé                        |
  443. |                                                                         |
  444. |   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ           |
  445. |   Γöé          Media Device Manager Interface Layer             Γöé           |
  446. M   ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           |
  447. D      Γöé                       Γöé                                            |
  448. M      Γöé                       Γöé                           Default Tables   |
  449. |      Γöé                       Γöé                            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ|
  450. |      Γöé          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöñ    System    Γöé|
  451. |      Γöé          Γöé    Table-Driven Parser    ΓöéΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  452. |      Γöé          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé   Γöé   waveaudio  Γöé|
  453. |      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                       Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  454. |                    Γöé                      Γöé           Γöé   Γöé   sequencer  Γöé|
  455. |                                          Γöé           Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  456. |    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé           Γöé   Γöé    cdaudio   Γöé|
  457. |    Γöé    Media Device Manager   Γöé          Γöé           Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  458. |    ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé           Γöé   Γöé     cdxa     Γöé|
  459. |_ _ _ _Γöé _ _ _ _Γöé _ _ _ _Γöé_ _ _ _ _ _ _ _ _Γöé_ _ _      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  460.         Γöé        Γöé        Γöé                 Γöé    |      Γöé   Γöé    ampmix    Γöé|
  461.      ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÉ             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  462.      ΓöéMedia Γöé ΓöéMedia Γöé ΓöéMedia Γöé             Γöé    |      Γöé   Γöé   videodisc  Γöé|
  463.      ΓöéDriverΓöé ΓöéDriverΓöé ΓöéDriverΓöé             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  464.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             Γöé    |      Γöé   Γöé digitalvideo Γöé|
  465.                        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ             Γöé    |      Γöé   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ|
  466.                        ΓöéCustomΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    |      ΓööΓöÇΓöÇΓöÇΓöñ     other    Γöé|
  467.                        ΓöéTable Γöé                  |          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ|
  468.                        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                  | _ _ _ _ _ _ _ _ _ _ _ _ _|
  469.  
  470. The string interface provides access to most functions of the message 
  471. interface. However, operations that involve identifying multiple devices (for 
  472. example, for the purpose of establishing connections), or operations that 
  473. return complex data structures (such as a CD table of contents) are available 
  474. only through the message interface. 
  475.  
  476. Each time a message is sent to the Media Device Manager with mciSendCommand, 
  477. flags are set and a pointer to a data structure is passed. Each time a string 
  478. is passed with mciSendString, it must be converted to the message format 
  479. understood by the media driver. The Media Device Manager calls the multimedia 
  480. string parser, which is case insensitive, to interpret the strings. The time 
  481. required for this conversion process makes the string method of control 
  482. slightly slower than the message method. However, the string interface 
  483. generally requires less application code than the command message interface. 
  484. The string interface also lets users interactively control devices with a 
  485. command line or PM interface.  See Command Strings. 
  486.  
  487.  
  488. ΓòÉΓòÉΓòÉ 4.1.1. Command Messages ΓòÉΓòÉΓòÉ
  489.  
  490. Command messages are used by the command message interface and specified with 
  491. mciSendCommand.  Most command messages have corresponding string commands that 
  492. are used by the command string interface and specified with mciSendString. 
  493. Command messages are sent either to a logical device or to the system. The 
  494. following table lists the command messages sent to devices. Commands that cause 
  495. asynchronous responses to be generated, such as cue point and position advise, 
  496. can be called using the appropriate string command; however, their responses 
  497. are returned to window procedures. 
  498.  
  499. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  500. ΓöéCommand Messages        Γöé                                    Γöé
  501. ΓöéSupported by All DevicesΓöé                                    Γöé
  502. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  503. ΓöéMCI_OPEN                ΓöéEstablishes a specific instance of aΓöé
  504. Γöé                        Γöémultimedia device or file.          Γöé
  505. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  506. ΓöéMCI_GETDEVCAPS          ΓöéGets the capabilities of a device.  Γöé
  507. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  508. ΓöéMCI_INFO                ΓöéGets textual information from the   Γöé
  509. Γöé                        Γöédevice.                             Γöé
  510. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  511. ΓöéMCI_STATUS              ΓöéGets the current status of the      Γöé
  512. Γöé                        Γöédevice.                             Γöé
  513. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  514. ΓöéMCI_CLOSE               ΓöéCloses the device.                  Γöé
  515. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  516. ΓöéDevice Setup Command    Γöé                                    Γöé
  517. ΓöéMessages                Γöé                                    Γöé
  518. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  519. ΓöéMCI_SET                 ΓöéChanges the configuration of the    Γöé
  520. Γöé                        Γöédevice.                             Γöé
  521. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  522. ΓöéMCI_CONNECTOR           ΓöéEnables, disables, or queries the   Γöé
  523. Γöé                        Γöéstate of a connector.               Γöé
  524. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  525. ΓöéPlayback and Recording  Γöé                                    Γöé
  526. ΓöéCommand Messages        Γöé                                    Γöé
  527. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  528. ΓöéMCI_CUE                 ΓöéPrerolls a device for playing or    Γöé
  529. Γöé                        Γöérecording.                          Γöé
  530. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  531. ΓöéMCI_SEEK                ΓöéSeeks to a specified position in theΓöé
  532. Γöé                        Γöéfile.                               Γöé
  533. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  534. ΓöéMCI_PLAY                ΓöéBegins transmitting output data.    Γöé
  535. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  536. ΓöéMCI_RECORD              ΓöéBegins recording data from the      Γöé
  537. Γöé                        Γöéspecified position.                 Γöé
  538. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  539. ΓöéMCI_PAUSE               ΓöéSuspends the playing or recording   Γöé
  540. Γöé                        Γöéoperation.                          Γöé
  541. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  542. ΓöéMCI_RESUME              ΓöéResumes the playing or recording    Γöé
  543. Γöé                        Γöéoperation.                          Γöé
  544. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  545. ΓöéMCI_STOP                ΓöéStops the playing or recording      Γöé
  546. Γöé                        Γöéoperation.                          Γöé
  547. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  548. ΓöéMCI_LOAD                ΓöéLoads a data element into a media   Γöé
  549. Γöé                        Γöédevice. An example of a data elementΓöé
  550. Γöé                        Γöéis a waveform file.                 Γöé
  551. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  552. ΓöéMCI_SAVE                ΓöéSaves the current file to disk.     Γöé
  553. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  554. ΓöéSynchronization Command Γöé                                    Γöé
  555. ΓöéMessages                Γöé                                    Γöé
  556. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  557. ΓöéMCI_SET_CUEPOINT        ΓöéSets run-time cue points.           Γöé
  558. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  559. ΓöéMCI_SET_POSITION_ADVISE ΓöéAdvises the application when time   Γöé
  560. Γöé                        Γöéelapses or position changes.        Γöé
  561. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  562. ΓöéMCI_SET_SYNC_OFFSET     ΓöéBiases MCI_PLAY starting positions  Γöé
  563. Γöé                        Γöéand MCI_SEEK target positions for   Γöé
  564. Γöé                        Γöégroup operations.                   Γöé
  565. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  566. ΓöéDevice-Specific Command Γöé                                    Γöé
  567. ΓöéMessages                Γöé                                    Γöé
  568. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  569. ΓöéMCI_CAPTURE             ΓöéCaptures the current video image andΓöé
  570. Γöé                        Γöéstores it as an image device        Γöé
  571. Γöé                        Γöéelement.                            Γöé
  572. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  573. ΓöéMCI_ESCAPE              ΓöéSends a custom message directly to  Γöé
  574. Γöé                        Γöéthe media driver.                   Γöé
  575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  576. ΓöéMCI_GETIMAGEBUFFER      ΓöéGets the contents of the capture    Γöé
  577. Γöé                        Γöévideo buffer or the current movie   Γöé
  578. Γöé                        Γöéframe.                              Γöé
  579. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  580. ΓöéMCI_GETTOC              ΓöéGets a contents structure for the   Γöé
  581. Γöé                        Γöécurrently loaded CD-ROM disc.       Γöé
  582. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  583. ΓöéMCI_PUT                 ΓöéSets the source and destination     Γöé
  584. Γöé                        Γöérectangles for the transformation ofΓöé
  585. Γöé                        Γöéthe video image.  It also sets the  Γöé
  586. Γöé                        Γöésize and position of the default    Γöé
  587. Γöé                        Γöévideo.                              Γöé
  588. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  589. ΓöéMCI_REWIND              ΓöéSeeks the media to the beginning    Γöé
  590. Γöé                        Γöépoint.                              Γöé
  591. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  592. ΓöéMCI_SETTUNER            ΓöéCauses the digital video MCD to     Γöé
  593. Γöé                        Γöéchange the frequency the tuner      Γöé
  594. Γöé                        Γöédevice is tuned to.                 Γöé
  595. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  596. ΓöéMCI_SPIN                ΓöéSpins the videodisc player up or    Γöé
  597. Γöé                        Γöédown.                               Γöé
  598. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  599. ΓöéMCI_STEP                ΓöéAdvances or backs up the videodisc  Γöé
  600. Γöé                        Γöéplayer one or more frames.          Γöé
  601. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  602. ΓöéMCI_WHERE               ΓöéReturns the source and destination  Γöé
  603. Γöé                        Γöérectangles set by MCI_PUT. It also  Γöé
  604. Γöé                        Γöéreturns the size and position of theΓöé
  605. Γöé                        Γöévideo window.                       Γöé
  606. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  607. ΓöéMCI_WINDOW              ΓöéSpecifies the window in which to    Γöé
  608. Γöé                        Γöédisplay video output, and controls  Γöé
  609. Γöé                        Γöéthe visibility of the default video Γöé
  610. Γöé                        Γöéwindow.                             Γöé
  611. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  612. ΓöéEditing Command MessagesΓöé                                    Γöé
  613. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  614. ΓöéMCI_COPY                ΓöéCopies specified data range into    Γöé
  615. Γöé                        Γöéclipboard or buffer.                Γöé
  616. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  617. ΓöéMCI_CUT                 ΓöéRemoves specified data range and    Γöé
  618. Γöé                        Γöéplaces it into clipboard or buffer. Γöé
  619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  620. ΓöéMCI_DELETE              ΓöéDeletes specified data range.       Γöé
  621. Γöé                        ΓöéClipboard or buffer is not used.    Γöé
  622. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  623. ΓöéMCI_PASTE               ΓöéDeletes selected data range if      Γöé
  624. Γöé                        Γöédifference between FROM and TO is   Γöé
  625. Γöé                        Γöémore than zero, then inserts data   Γöé
  626. Γöé                        Γöéfrom buffer or clipboard.           Γöé
  627. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  628. ΓöéMCI_REDO                ΓöéReverses previous MCI_UNDO command. Γöé
  629. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  630. ΓöéMCI_UNDO                ΓöéCancels previous RECORD, CUT, PASTE,Γöé
  631. Γöé                        Γöéor DELETE.                          Γöé
  632. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  633.  
  634. The following table lists the system command messages specified with 
  635. mciSendCommand. 
  636.  
  637. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  638. ΓöéMCI_DEVICESETTINGS      ΓöéProvides a media control interface  Γöé
  639. Γöé                        Γöédriver the opportunity to insert    Γöé
  640. Γöé                        Γöécustom settings pages.              Γöé
  641. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  642. ΓöéMCI_GROUP               ΓöéMakes and breaks device group       Γöé
  643. Γöé                        Γöéassociations.                       Γöé
  644. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  645. ΓöéMCI_MASTERAUDIO         ΓöéSets the system master volume and   Γöé
  646. Γöé                        Γöétoggles speakers and headphones.    Γöé
  647. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  648. ΓöéMCI_SYSINFO             ΓöéGets and sets device and system     Γöé
  649. Γöé                        Γöéinformation.                        Γöé
  650. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  651. ΓöéMCI_CONNECTORINFO       ΓöéGets information regarding the      Γöé
  652. Γöé                        Γöénumber and types of connectors      Γöé
  653. Γöé                        Γöédefined for a device.               Γöé
  654. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  655. ΓöéMCI_DEFAULT_CONNECTION  ΓöéMakes, breaks, or queries default   Γöé
  656. Γöé                        Γöéconnections established for a       Γöé
  657. Γöé                        Γöédevice.                             Γöé
  658. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  659. ΓöéMCI_CONNECTION          ΓöéGets the device context connection  Γöé
  660. Γöé                        Γöéor establishes an alias for a       Γöé
  661. Γöé                        Γöéconnected device.                   Γöé
  662. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  663. ΓöéMCI_ACQUIREDEVICE       ΓöéAcquires a device for use.          Γöé
  664. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  665. ΓöéMCI_RELEASEDEVICE       ΓöéReleases a device from use.         Γöé
  666. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  667.  
  668.  
  669. ΓòÉΓòÉΓòÉ 4.1.2. Command Strings ΓòÉΓòÉΓòÉ
  670.  
  671. String commands utilize a more English text format than command messages. 
  672. Following is the valid syntax for passing string commands directly to the media 
  673. control interface: 
  674.  
  675. <COMMAND> <DEVICE_TYPE|DEVICE_NAME|ALIAS|ELEMENT> <PARAMETERS>
  676.  
  677. This format is used for all string commands except masteraudio, which does not 
  678. require a device name. The format for the masteraudio command is: 
  679.  
  680. <COMMAND> <PARAMETERS>
  681.  
  682. An application calls mciSendString to pass the string command to the Media 
  683. Device Manager for parsing and execution. The String Test Sample program, 
  684. provided in the Toolkit (\TOOLKIT\SAMPLES\MM\MCISTRNG), illustrates the 
  685. interpretive string interface. The following code fragment shows the call to 
  686. mciSendString in the String Test Sample. 
  687.  
  688. ulSendStringRC =
  689.    mciSendString(
  690.     (PSZ) &acMCIString[ 0 ],          /* The MCI String Command     */
  691.     (PSZ) &acMCIReturnString[ 0 ],    /* Place for return strings   */
  692.     (USHORT) MCI_RETURN_STRING_LENGTH, /* Length of return space     */
  693.     hwndDisplayDialogBox,              /* Window to receive notifies */
  694.     usCountOfMCIStringSent );          /* The user parameter         */
  695.  
  696. The following is an example of the string commands required to open a CD player 
  697. and play an entire CD. 
  698.  
  699. open cdaudio01 alias cdaud1 shareable
  700. status cdaud1 media present wait
  701. status cdaud1 mode wait
  702. set cdaud1 time format milliseconds
  703. seek cdaud1 to start
  704. play cdaud1 notify
  705. .
  706. .
  707. .
  708. ** play the entire disc **
  709. .
  710. .
  711. .
  712. close cdaud1
  713.  
  714. The status commands let the application know if a CD is present and if the 
  715. drive is ready.  Notice that wait flags are used; otherwise the commands would 
  716. return immediately with no status information. The set command sets the time 
  717. base to milliseconds for all future commands. The close command is sent after 
  718. the application receives an MM_MCINOTIFY message at the completion of the play 
  719. command. 
  720.  
  721. Note:  The close command can be sent at any time. 
  722.  
  723.  Authoring languages that include support for the media control interface can 
  724.  integrate device command strings like these with authoring language syntax to 
  725.  create multimedia presentations. The string interface provides a 16-bit 
  726.  interface to enable developers to integrate multimedia function with the macro 
  727.  languages of existing 16-bit applications. 
  728.  
  729.  
  730. ΓòÉΓòÉΓòÉ 4.1.3. Wait and Notify Flags ΓòÉΓòÉΓòÉ
  731.  
  732. An application can set a wait or a notify flag on a device command sent with 
  733. mciSendString or mciSendCommand. These two flags are mutually exclusive and are 
  734. available on all commands except some system commands. 
  735.  
  736. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  737. ΓöéFlag           ΓöéDescription                                  Γöé
  738. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  739. Γöéwait           ΓöéThe command is executed synchronously.  The  Γöé
  740. Γöé               Γöéfunction waits until the requested action is Γöé
  741. Γöé               Γöécomplete before returning to the application.Γöé
  742. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  743. Γöénotify         ΓöéThe command is executed asynchronously,      Γöé
  744. Γöé               Γöéallowing control to be returned immediately  Γöé
  745. Γöé               Γöéto the application.  When the requested      Γöé
  746. Γöé               Γöéaction is complete, an MM_MCINOTIFY message  Γöé
  747. Γöé               Γöéis sent to the application window procedure. Γöé
  748. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  749.  
  750. Note:  If a command is issued without a wait flag or notify flag specified, the 
  751.        command is executed asynchronously, and the application is never 
  752.        notified. 
  753.  
  754.  The wait flag is useful for operations that are conducted quickly, like the 
  755.  playback of short sounds, which the application wants to complete before it 
  756.  continues.  The wait flag is also useful for operations that return 
  757.  information, such as device capabilities, because the Media Device Manager 
  758.  parser converts the return code to a meaningful string. However, the 
  759.  conversion occurs only if the wait flag is specified. 
  760.  
  761.  The wait flag should be used with care when issuing commands from threads that 
  762.  read application input message queues as it ties up the thread, preventing all 
  763.  PM messages in the system from being processed while the command issued with 
  764.  the wait flag is executed. 
  765.  
  766.  The notify flag is useful for operations that are conducted over a period of 
  767.  time. For example, the playing of a waveform file often can take a while to 
  768.  complete. By specifying the notify flag, an application requests to be 
  769.  notified when processing of the command is complete.  The application window 
  770.  procedure can then remain responsive to input queue processing. 
  771.  
  772.  
  773. ΓòÉΓòÉΓòÉ 4.1.4. OS/2 Multimedia Notification Messages ΓòÉΓòÉΓòÉ
  774.  
  775. The system returns notification messages to applications to indicate OS/2 
  776. multimedia events such as completing a media device function or passing 
  777. ownership of a media device from one process to another. Following is a list of 
  778. OS/2 multimedia notification messages. 
  779.  
  780. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  781. ΓöéNotification Message ΓöéReason for Notification                           Γöé
  782. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  783. ΓöéMM_MCICUEPOINT       ΓöéA cue point was detected. Cue points are set with Γöé
  784. Γöé                     Γöéthe playlist CUEPOINT instruction or the          Γöé
  785. Γöé                     ΓöéMCI_SET_CUEPOINT command message.                 Γöé
  786. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  787. ΓöéMM_MCIEVENT          ΓöéA device has generated an event.                  Γöé
  788. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  789. ΓöéMM_MCINOTIFY         ΓöéA device has completed an action, or an error has Γöé
  790. Γöé                     Γöéoccurred.                                         Γöé
  791. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  792. ΓöéMM_MCIPASSDEVICE     ΓöéA shared device is being lost or gained.          Γöé
  793. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  794. ΓöéMM_MCIPLAYLISTMESSAGEΓöéA MESSAGE instruction was encountered in a        Γöé
  795. Γöé                     Γöéplaylist.                                         Γöé
  796. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  797. ΓöéMM_MCIPOSITIONCHANGE ΓöéThe time period or position specified with the    Γöé
  798. Γöé                     ΓöéMCI_SET_POSITION_ADVISE command message has       Γöé
  799. Γöé                     Γöépassed.                                           Γöé
  800. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  801.  
  802. With the exception of MM_MCIEVENT, the system returns notification messages 
  803. asynchronously to applications using WinPostMsg; MM_MCIEVENT notifications are 
  804. returned synchronously with WinSendMsg. 
  805.  
  806. A PM application receives notifications by passing its message queue window 
  807. handle as a parameter on the mciSendCommand or mciSendString call. Applications 
  808. can also receive notifications by passing a handle to a Control Program queue. 
  809. For more information see Using a Control Program Queue for Notifications. 
  810.  
  811. If an application sends a command message with mciSendCommand and specifies the 
  812. MCI_NOTIFY flag, control returns immediately to the application. The media 
  813. control interface posts a notification message to the window specified in the 
  814. callback window handle after the command completes processing. The MM_MCINOTIFY 
  815. message is returned asynchronously to the application using WinPostMsg. It can 
  816. have any of the following values: 
  817.  
  818. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  819. ΓöéNotification Code       ΓöéMeaning                             Γöé
  820. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  821. ΓöéMCI_NOTIFY_SUCCESSFUL   ΓöéThe command completed successfully. Γöé
  822. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  823. ΓöéMCI_NOTIFY_SUPERSEDED   ΓöéAnother command is being processed. Γöé
  824. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  825. ΓöéMCI_NOTIFY_ABORTED      ΓöéAnother command interrupted this    Γöé
  826. Γöé                        Γöéone.                                Γöé
  827. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  828.  
  829. Note:  If none of the above notification codes are returned, an error code is 
  830.        returned, indicating that the asynchronous processing of the command 
  831.        ended in an error condition. To convert the error code to a textual 
  832.        description of the error, the application calls the mciGetErrorString 
  833.        function. 
  834.  
  835.  The following code fragment illustrates how the Audio Recorder Sample program, 
  836.  provided in the Toolkit (\TOOLKIT\SAMPLES\MM\RECORDER), handles the 
  837.  MM_MCINOTIFY notification message. 
  838.  
  839.   case MM_MCINOTIFY:
  840.    /*
  841.     * This message is returned to an application when a device
  842.     * successfully completes a command that was issued with a NOTIFY
  843.     * flag, or when an error occurs with the command.
  844.     *
  845.     * This message returns two values. A user parameter (mp1) and
  846.     * the command message (mp2) that was issued. The low word of mp1
  847.     * is the Notification Message Code, which indicates the status of the
  848.     * command like success or failure. The high word of mp2 is the
  849.     * Command Message which indicates the source of the command.
  850.     */
  851.  
  852.     usNotifyCode = (USHORT) SHORT1FROMMP( mp1);     /* low-word  */
  853.     usCommandMessage = (USHORT) SHORT2FROMMP( mp2); /* high-word */
  854.  
  855.     switch (usCommandMessage)
  856.     {
  857.      case MCI_PLAY:
  858.         switch (usNotifyCode)
  859.         {
  860.            case MCI_NOTIFY_SUCCESSFUL:
  861.               if (eState != ST_STOPPED)
  862.               {
  863.                  /*
  864.                   * Update the status line with appropriate message.
  865.                   */
  866.                  UpdateTheStatusLine(hwnd, IDS_STOPPED);
  867.                  eState = ST_STOPPED;
  868.  
  869.                  /*
  870.                   * Stop the play button animation
  871.                   */
  872.                  WinSendMsg( hwndPlayPB,        /* Play button handle */
  873.                              GBM_ANIMATE,       /* Animation control  */
  874.                              MPFROMSHORT(FALSE),/* Animation flag     */
  875.                              NULL );            /* Ignore return data */
  876.               }
  877.               break;
  878.  
  879.            case MCI_NOTIFY_SUPERSEDED:
  880.            case MCI_NOTIFY_ABORTED:
  881.               /* we don't need to handle these messages. */
  882.               break;
  883.  
  884.            default:
  885.               /*
  886.                * If the message is none of the above, then it must be
  887.                * a notification error message.
  888.                */
  889.               ShowMCIErrorMessage( usNotifyCode);
  890.               eState = ST_STOPPED;
  891.  
  892.               /*
  893.                * Stop the play button animation and update the status
  894.                * line with appropriate text.
  895.                */
  896.               WinSendMsg( hwndPlayPB,         /* Play button handle  */
  897.                           GBM_ANIMATE,        /* Animation control   */
  898.                           MPFROMSHORT(FALSE), /* Animation flag      */
  899.                           NULL );             /* Ignore return data  */
  900.               UpdateTheStatusLine(hwnd, IDS_STOPPED);
  901.               break;
  902.         }
  903.         break;
  904.   }
  905.   return( (MRESULT) 0);
  906.  
  907.  
  908. ΓòÉΓòÉΓòÉ 4.1.5. Using a Control Program Queue for Notifications ΓòÉΓòÉΓòÉ
  909.  
  910. An OS/2 application that does not have a PM window, and therefore cannot use a 
  911. PM message queue for receiving notification messages, can use an OS/2 Control 
  912. Program queue instead. The Control Program queue method of notification should 
  913. also be considered for time-critical PM applications, because it is faster than 
  914. using the PM message queue. 
  915.  
  916. To receive notifications on a Control Program queue, the application must 
  917. specify the MCI_DOS_QUEUE flag with the MCI_OPEN command message when using 
  918. mciSendCommand (or the dosqueue keyword with the open command when using 
  919. mciSendString). This flag indicates that the window handle specified for 
  920. receiving notification messages is actually a handle to a Control Program 
  921. queue, not a PM window. 
  922.  
  923. The application issues DosReadQueue, which mimics the PM message queue function 
  924. by blocking until there is something in the queue to process. To place a 
  925. notification message in the queue, the system issues DosWriteQueue and 
  926. specifies the queue handle given to it by the application. 
  927.  
  928. The syntax for Control Program queues and PM message queues varies slightly. A 
  929. typical PM message queue process function has the following four parameters: 
  930.  
  931. HWND         hwnd   /* Window handle       */
  932. ULONG        msg    /* Notification type   */
  933. MPARAM       mp1    /* Message parameter 1 */
  934. MPARAM       mp2    /* Message parameter 2 */
  935.  
  936. The DosReadQueue call has eight parameters. The system uses the first four 
  937. parameters of DosReadQueue in the same manner as a PM message queue process 
  938. function. 
  939.  
  940. HQUEUE       hq     /* Queue handle */
  941. PREQUESTDATA pRD    /* Pointer to REQUESTDATA */
  942. PULONG       pmp1   /* Pointer to mp1 information */
  943. PPVOID       pmp2   /* Pointer to mp2 information */
  944.  
  945. The second parameter of DosReadQueue points to the REQUESTDATA structure, which 
  946. contains a ulData field. This field corresponds to the msg field of PM message 
  947. queues. The application can use the remaining parameters of DosReadQueue for 
  948. its own purposes. 
  949.  
  950. The following example code illustrates how an application can use Control 
  951. Program queue functions to handle multimedia notification messages. 
  952.  
  953. {
  954.  PID      OwnerPID=0;
  955.  HQUEUE   QHandle =0;
  956.  char     ch, retstring[100], QueueName[100];
  957.  
  958.  strcpy(QueueName, "\\QUEUES\\");
  959.  if (argc == 2) strcat(QueueName, argv[1]);
  960.  else           strcat(QueueName, "DEFAULT");
  961.  if (DosCreateQueue(&QHandle, QUE_FIFO, QueueName)) return(1L);
  962.  if (DosOpenQueue(&OwnerPID, &QHandle, QueueName))  return(1L);
  963.  _beginthread( QMonitor, (PVOID)NULL, 65536L, (PVOID)QHandle);
  964.  SendString((LPSTR)"open d:\\mmos2\\sounds\\applause.wav shareable
  965.              dosqueue wait alias a",
  966.             (LPSTR)retstring, 100,
  967.             (HWND)QHandle, 0);
  968.  SendString((LPSTR)"setpositionadvise a on every 3000 wait",
  969.             (LPSTR)retstring, 100,
  970.             (HWND)QHandle, 0);
  971.  SendString((LPSTR)"play a notify", (LPSTR)retstring, 100, (HWND)QHandle, 0);
  972.  ch=(char)getch();
  973.  SendString((LPSTR)"close a wait", (LPSTR)retstring, 100, (HWND)QHandle, 0);
  974.  DosCloseQueue(QHandle);
  975.  return(0L);
  976. }
  977.  
  978. VOID _Optlink QMonitor( PVOID qh)
  979. {
  980.  APIRET      rc=0;
  981.  BYTE        Priority;
  982.  REQUESTDATA RD;
  983.  ULONG       msg, mp1, mp2;
  984.  
  985.  printf("QMonitor Started!\n");
  986.  while (1)
  987.   {
  988.    DosReadQueue((HQUEUE)qh, &RD, (PULONG)&mp1, (PPVOID)&mp2, 0L, (BOOL32)0,
  989.                 &Priority, (HEV)0);
  990.    switch(RD.ulData)
  991.      {
  992.        case MM_MCINOTIFY:
  993.           printf("   msg=MM_MCINOTIFY:\n");
  994.           printf("   mp1=%d\n",mp1);
  995.           printf("   mp2=%d\n",mp2);
  996.           break;
  997.        case MM_MCIPASSDEVICE:
  998.           printf("   msg=MM_MCIPASSDEVICE:\n");
  999.           printf("   Device id=%d\n",mp1);
  1000.           switch (mp2)
  1001.             {
  1002.               case MCI_LOSING_USE:
  1003.                  printf("   MCI_LOSING_USE:\n");
  1004.                  break;
  1005.               case MCI_GAINING_USE:
  1006.                  printf("   MCI_GAINING_USE:\n");
  1007.                  break;
  1008.               default:
  1009.                  printf("   mp2=%d\n",mp2);
  1010.                  break;
  1011.             }
  1012.           break;
  1013.        case MM_MCIPOSITIONCHANGE:
  1014.           printf("   msg=MM_MCIPOSITIONCHANGE:\n");
  1015.           printf("   mp1=%d\n",mp1);
  1016.           printf("   mp2=%d\n",mp2);
  1017.           break;
  1018.        case MM_MCICUEPOINT:
  1019.           printf("   msg=MM_MCICUEPOINT:\n");
  1020.           printf("   mp1=%d\n",mp1);
  1021.           printf("   mp2=%d\n",mp2);
  1022.           break;
  1023.        case MM_MCIPLAYLISTMESSAGE:
  1024.           printf("   msg=MM_MCIPLAYLISTMESSAGE:\n");
  1025.           printf("   mp1=%d\n",mp1);
  1026.           printf("   mp2=%d\n",mp2);
  1027.           break;
  1028.        case MM_MCIEVENT:
  1029.           printf("   msg=MM_MCIEVENT:\n");
  1030.           printf("   mp1=%d\n",mp1);
  1031.           printf("   mp2=%d\n",mp2);
  1032.           break;
  1033.        default:
  1034.           printf("   msg=%d\n",RD.ulData);
  1035.           printf("   mp1=%d\n",mp1);
  1036.           printf("   mp2=%d\n",mp2);
  1037.           break;
  1038.      }
  1039.   }   /* endwhile */
  1040.  return;
  1041. }
  1042.  
  1043.  
  1044. VOID SendString( LPSTR string, LPSTR retstring, ULONG retsize, HWND Handle,
  1045.                  ULONG userparm)
  1046. {
  1047.  ULONG rc;
  1048.  rc=mciSendString(string, retstring, retsize, Handle, userparm);
  1049.  if (rc) printf("Error: (%s) rc=%d\n",string,rc);
  1050.  return;
  1051. }
  1052. /* QUEUE.H */
  1053. #define INCL_BASE
  1054. #define INCL_32
  1055.  
  1056. #include<os2.h>
  1057. #include<os2me.h>
  1058. #include<mmioos2.h>
  1059. #include<stdio.h>
  1060. #include<stdlib.h>
  1061. #include<conio.h>
  1062.  
  1063. int           main(int argc, char *argv[], char *envp[]);
  1064. VOID          SendString(LPSTR string,
  1065.                          LPSTR retstring,
  1066.                          ULONG retsize,
  1067.                          HWND Handle,
  1068.                          ULONG userparm);
  1069. VOID _Optlink QMonitor( PVOID qh);
  1070.  
  1071.  
  1072. ΓòÉΓòÉΓòÉ 4.1.6. Time Formats for Device Commands ΓòÉΓòÉΓòÉ
  1073.  
  1074. Media position and time information are required as input and also returned as 
  1075. output by many multimedia commands. Time formats vary, depending on the device 
  1076. being used and the format of the data being operated on. The default time base 
  1077. for both the procedural and string interfaces is MMTIME.  See MMTIME Format. 
  1078.  
  1079. Other time formats, such as milliseconds, are also supported. 
  1080.  
  1081. Time formats used by media control interface devices for measuring time are 
  1082. listed in the following table. The flags shown in the table are set with the 
  1083. MCI_SET command. 
  1084.  
  1085. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1086. ΓöéDevice         ΓöéFormats                  ΓöéFlags                    Γöé
  1087. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1088. ΓöéCD-DA          Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  1089. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  1090. Γöé               Γöéminutes-seconds-frames   ΓöéMCI_FORMAT_MSF           Γöé
  1091. Γöé               Γöétracks-min-sec-frame     ΓöéMCI_FORMAT_TMSF          Γöé
  1092. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1093. ΓöéCD-XA          Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  1094. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  1095. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1096. Γöédigital video  Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  1097. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  1098. Γöé               Γöéframes                   ΓöéMCI_FORMAT_FRAMES        Γöé
  1099. Γöé               Γöéhours-minutes-seconds    ΓöéMCI_FORMAT_HMS           Γöé
  1100. Γöé               Γöéhours-min-sec-frames     ΓöéMCI_FORMAT_HMSF          Γöé
  1101. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1102. Γöéwaveform audio Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  1103. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  1104. Γöé               Γöébytes                    ΓöéMCI_FORMAT_BYTES         Γöé
  1105. Γöé               Γöésamples                  ΓöéMCI_FORMAT_SAMPLES       Γöé
  1106. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1107. ΓöéMIDI sequencer Γöémilliseconds             ΓöéMCI_FORMAT_MILLISECONDS  Γöé
  1108. Γöé               Γöémmtime                   ΓöéMCI_FORMAT_MMTIME        Γöé
  1109. Γöé               ΓöéSMPTE 24                 ΓöéMCI_SEQ_SET_SMPTE_24     Γöé
  1110. Γöé               ΓöéSMPTE 25                 ΓöéMCI_SEQ_SET_SMPTE_25     Γöé
  1111. Γöé               ΓöéSMPTE 30                 ΓöéMCI_SEQ_SET_SMPTE_30     Γöé
  1112. Γöé               ΓöéSMPTE 30                 ΓöéMCI_SEQ_SET_SMPTE_30DROP Γöé
  1113. Γöé               Γöésong pointer             ΓöéMCI_SEQ_SET_SONGPTR      Γöé
  1114. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1115.  
  1116.  
  1117. ΓòÉΓòÉΓòÉ 4.1.6.1. MMTIME Format ΓòÉΓòÉΓòÉ
  1118.  
  1119. MMTIME is a standard time and media position format supported by the media 
  1120. control interface. This time unit is 1/3000 second, or 333 microseconds. 
  1121. Conversion macros are provided for convenient conversion of other popular time 
  1122. formats to and from this format.  MMTIME values are passed as long (32-bit) 
  1123. integer values. 
  1124.  
  1125. To use MMTIME on command messages, send the MCI_SET message specifying the 
  1126. MCI_SET_TIME_FORMAT flag. Use MCI_FORMAT_MMTIME in the ulTimeFormat field of 
  1127. the MCI_SET_PARMS structure. 
  1128.  
  1129. The macros shown in the following figure are available for conversion to and 
  1130. from the MMTIME format. 
  1131.  
  1132. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1133. ΓöéConversion to MMTIME          ΓöéConversion to Other Formats   Γöé
  1134. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1135. ΓöéREDBOOKTOMM (ULONG)           ΓöéREDBOOKFROMMM (ULONG)         Γöé
  1136. ΓöéFPS24TOMM (ULONG)             ΓöéFPS24FROMMM (ULONG)           Γöé
  1137. ΓöéFPS25TOMM (ULONG)             ΓöéFPS25FROMMM (ULONG)           Γöé
  1138. ΓöéFPS30TOMM (ULONG)             ΓöéFPS30FROMMM (ULONG)           Γöé
  1139. ΓöéMSECTOMM (ULONG)              ΓöéMSECFROMMM (ULONG)            Γöé
  1140. ΓöéHMSTOMM (ULONG)               ΓöéHMSFROMMM (ULONG)             Γöé
  1141. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1142.  
  1143. Packed Time Formats 
  1144.  
  1145. The packed time formats described in the following sections require that the 
  1146. application format the ULONG value passed in command message parameter 
  1147. structures. When these values are passed in string commands, any value 
  1148. containing a colon (:) is assumed to be a field-oriented value. For example, if 
  1149. the time format for a CD audio device is set to TMSF, and the value 4:10:00:00 
  1150. is specified, this value is interpreted as track 4, 10 minutes, 0 seconds, and 
  1151. 0 frames. However, if the value 4100000 is specified, the integer is passed 
  1152. directly, and the assignment to byte fields is quite different. 
  1153.  
  1154. It is not required that a field-oriented value contain specifications for all 
  1155. fields.  For example, the following are equivalent specifications for track 4: 
  1156.  
  1157. 4:00:00:00
  1158. 4:00:00
  1159. 4:00:
  1160. 4:00
  1161. 4:
  1162. 4
  1163.  
  1164. The interpretation of field-oriented values is left-justified with respect to 
  1165. the placement of colons.  Values not specified default to zero. If a value has 
  1166. a colon, it is subject to field-oriented interpretation, regardless of the time 
  1167. format currently set for the device. 
  1168.  
  1169.  
  1170. HMSF (SMPTE) Packed Time Format 
  1171.  
  1172. The HMSF packed time format represents elapsed hours, minutes, seconds, and 
  1173. frames from any specified point. This time format is packed into a 32-bit ULONG 
  1174. value as follows: 
  1175.  
  1176. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1177. ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  1178. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1179. ΓöéFrames         ΓöéSeconds        ΓöéMinutes        ΓöéHours          Γöé
  1180. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1181.  
  1182. MSF Packed Time Format 
  1183.  
  1184. The CD-DA MSF time format, also referred to as the Red Book time format, is 
  1185. based on the 75-frame-per-second CD digital audio standard.  Media position 
  1186. values in this format are packed into a 32-bit ULONG value as follows: 
  1187.  
  1188. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1189. ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  1190. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1191. ΓöéReserved       ΓöéFrames         ΓöéSeconds        ΓöéMinutes        Γöé
  1192. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1193.  
  1194. The following macros aid in extracting information in packed MSF format: 
  1195.  
  1196.  Macro                   Description 
  1197.  MSF_MINUTE(time)        Gets the number of minutes. 
  1198.  MSF_SECOND(time)        Gets the number of seconds. 
  1199.  MSF_FRAME(time)         Gets the number of frames. 
  1200.  
  1201.  For example, the following code fragment sets the time in ulTime to 6 minutes 
  1202.  and 30 seconds (06:30:00). 
  1203.  
  1204.   ULONG ulTime;
  1205.   .
  1206.   .
  1207.   .
  1208.   MSF_MINUTE(ulTime) = 6
  1209.   MSF_SECOND(ulTime) = 30;
  1210.   MSF_FRAME(ulTime) = 0;
  1211.  
  1212.  
  1213.  TMSF Packed Time Format 
  1214.  
  1215.  The CD-DA TMSF time format is based on the 75-frame-per-second CD digital 
  1216.  audio standard.  Media position values in this format are packed into a 32-bit 
  1217.  ULONG value as follows: 
  1218.  
  1219.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1220.   ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  1221.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1222.   ΓöéFrames         ΓöéSeconds        ΓöéMinutes        ΓöéTrack          Γöé
  1223.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1224.  
  1225.  The following macros aid in extracting information in packed TMSF format: 
  1226.  
  1227.  Macro                   Description 
  1228.  TMSF_TRACK(time)        Gets the number of tracks. 
  1229.  TMSF_MINUTE(time)       Gets the number of minutes. 
  1230.  TMSF_SECOND(time)       Gets the number of seconds. 
  1231.  TMSF_FRAME(time)        Gets the number of frames. 
  1232.  
  1233.  For example, the following code fragment sets the time in ulTime to 2 minutes 
  1234.  into track 2 (02:02:00:00). 
  1235.  
  1236.   ULONG ulTime;
  1237.   .
  1238.   .
  1239.   .
  1240.   TMSF_TRACK(ulTime) = 2;
  1241.   TMSF_MINUTE(ulTime) = 2;
  1242.   TMSF_SECOND(ulTime) = 0;
  1243.   TMSF_FRAME(ulTime) = 0;
  1244.  
  1245.  Note:  MSF and TMSF macros can be found in the MCIOS2.H file. 
  1246.  
  1247.  
  1248.  HMS Packed Time Format 
  1249.  
  1250.  The HMS packed time format, representing hours, minutes, and seconds, is 
  1251.  packed into a 32-bit ULONG value as follows: 
  1252.  
  1253.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1254.   ΓöéHigh-Order ByteΓöéLow-Order Byte ΓöéHigh-Order ByteΓöéLow-Order Byte Γöé
  1255.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1256.   ΓöéReserved       ΓöéSeconds        ΓöéMinutes        ΓöéHours          Γöé
  1257.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1258.  
  1259.  
  1260. ΓòÉΓòÉΓòÉ 4.2. Opening a Media Device ΓòÉΓòÉΓòÉ
  1261.  
  1262. Media devices are categorized as simple or compound devices. A compound device 
  1263. is an internal device that operates on data objects, such as files, within the 
  1264. system.  These data objects are referred to as device elements. A simple device 
  1265. is an external device that does not require a device element. 
  1266.  
  1267. Media device types supported by OS/2 multimedia are shown in the following 
  1268. table. 
  1269.  
  1270. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1271. ΓöéLogical Device Type ΓöéString         ΓöéConstant                      Γöé
  1272. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1273. ΓöéAmplifier-mixer     Γöéampmix         ΓöéMCI_DEVTYPE_AUDIO_AMPMIX      Γöé
  1274. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1275. ΓöéCD-DA player        Γöécdaudio        ΓöéMCI_DEVTYPE_CD_AUDIO          Γöé
  1276. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1277. ΓöéCD-XA player        Γöécdxa           ΓöéMCI_DEVTYPE_CDXA_PLAYER       Γöé
  1278. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1279. ΓöéDigital video playerΓöédigitalvideo   ΓöéMCI_DEVTYPE_DIGITAL_VIDEO     Γöé
  1280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1281. ΓöéMIDI sequencer      Γöésequencer      ΓöéMCI_DEVTYPE_SEQUENCER         Γöé
  1282. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1283. ΓöéWaveform audio      Γöéwaveaudio      ΓöéMCI_DEVTYPE_WAVEFORM_AUDIO    Γöé
  1284. Γöéplayer              Γöé               Γöé                              Γöé
  1285. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1286. ΓöéVideodisc player    Γöévideodisc      ΓöéMCI_DEVTYPE_VIDEODISC         Γöé
  1287. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1288.  
  1289. Device type constants represent one way of specifying devices in command 
  1290. messages. String names can be specified in either command messages or command 
  1291. strings. 
  1292.  
  1293. To use the string interface to communicate with a device, an application calls 
  1294. mciSendString and passes the textual command open. Following is the syntax used 
  1295. for the textual command: 
  1296.  
  1297. open device_name <shareable> <type device_type > <alias alias> 
  1298.  
  1299. Parameters for the open command are: 
  1300.  
  1301. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1302. ΓöéParameters          ΓöéDescription                             Γöé
  1303. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1304. Γöédevice_name         ΓöéSpecifies the name of a device or deviceΓöé
  1305. Γöé                    Γöéelement.                                Γöé
  1306. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1307. Γöéshareable           ΓöéIndicates the device or device element  Γöé
  1308. Γöé                    Γöémay be shared by other applications.    Γöé
  1309. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1310. Γöétype device_type    ΓöéSpecifies the device type when          Γöé
  1311. Γöé                    Γöédevice_name is a device element.        Γöé
  1312. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1313. Γöéalias alias         ΓöéSpecifies an alternate name for the     Γöé
  1314. Γöé                    Γöédevice.                                 Γöé
  1315. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1316.  
  1317. Here is an example of the syntax for opening a device: 
  1318.  
  1319. open horns.wav type waveaudio alias sound1
  1320.  
  1321. where "horns.wav" is the device element and "waveaudio" is the device type. 
  1322.  
  1323. The system also supports a shortcut version of the syntax: 
  1324.  
  1325. open device_type!element_name
  1326.  
  1327. The shortcut version of the previous example looks like this: 
  1328.  
  1329. open waveaudio!horns.wav alias sound1
  1330.  
  1331.  
  1332. ΓòÉΓòÉΓòÉ 4.2.1. File Type Associations ΓòÉΓòÉΓòÉ
  1333.  
  1334. A specific device can have file extensions and .TYPE EAs (Extended Attributes) 
  1335. associated with it. The OS/2 multimedia user can map a file extension or .TYPE 
  1336. EA to a specific device with the Multimedia Setup application located in the 
  1337. Multimedia folder. An OS/2 multimedia subsystem developer writing an 
  1338. installation DLL can map a file extension or .TYPE EA to a device using 
  1339. MCI_SYSINFO_SET_EXTENSIONS or MCI_SYSINFO_SET_TYPES. For an extension or .TYPE 
  1340. EA to be mapped to a device, it must be unique across installation names. 
  1341.  
  1342. For example, the Multimedia Setup application can be used to associate the WAV 
  1343. extension with the waveaudio01 device. The device can then be opened by passing 
  1344. the name of a data element with a WAV extension as a parameter in the open 
  1345. command to mciSendString. Suppose the following string is passed: 
  1346.  
  1347. open honk.wav wait
  1348.  
  1349. The waveaudio01 device is opened with the data file honk.wav. 
  1350.  
  1351.  
  1352. ΓòÉΓòÉΓòÉ 4.2.2. Default and Specific Devices ΓòÉΓòÉΓòÉ
  1353.  
  1354. The following table shows some examples of open commands. A default device is 
  1355. opened if only a logical device type (for example, waveaudio) is specified in 
  1356. the open command. The default device for a logical device type can be queried 
  1357. and set by the user with the Multimedia Setup application. The default device 
  1358. also can be queried and set with MCI_SYSINFO by an installation DLL for a media 
  1359. device. 
  1360.  
  1361. A specific device is opened by specifying its name (for example waveaudio01), 
  1362. or by specifying a device element with an extension or .TYPE EA that is 
  1363. associated with the device. 
  1364.  
  1365. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1366. ΓöéOpen Command            ΓöéDescription                         Γöé
  1367. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1368. Γöéopen waveaudio          ΓöéOpens a default device of type      Γöé
  1369. Γöé                        Γöéwaveaudio.                          Γöé
  1370. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1371. Γöéopen waveaudio01        ΓöéOpens a specific device of type     Γöé
  1372. Γöé                        Γöéwaveaudio.                          Γöé
  1373. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1374. Γöéopen foo.xyz            ΓöéOpens a specific device that is     Γöé
  1375. Γöé                        Γöéassociated with the .TYPE EA (if    Γöé
  1376. Γöé                        Γöéany) of foo.xyz; otherwise opens a  Γöé
  1377. Γöé                        Γöéspecific device that has a unique   Γöé
  1378. Γöé                        Γöéassociation with file extension xyz;Γöé
  1379. Γöé                        Γöéotherwise returns                   Γöé
  1380. Γöé                        ΓöéMCIERR_INVALID_DEVICE_NAME.         Γöé
  1381. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1382.  
  1383.  
  1384. ΓòÉΓòÉΓòÉ 4.2.3. Shareable Flag ΓòÉΓòÉΓòÉ
  1385.  
  1386. By setting the shareable flag for an open request, an application can share an 
  1387. OS/2 multimedia device with other applications. To enable device sharing, the 
  1388. multimedia system posts the MM_MCIPASSDEVICE message with WinPostMsg to the 
  1389. application. The message informs the application the device context is becoming 
  1390. active (MCI_GAINING_USE) or inactive (MCI_LOSING_USE). 
  1391.  
  1392. After the application processes the MCI_GAINING_USE event notification, it can 
  1393. issue device commands. The device context becomes inactive when the 
  1394. MCI_LOSING_USE event notification is received. 
  1395.  
  1396. If the application has specified a notify flag on the open, the receipt of an 
  1397. MM_MCINOTIFY message does not mean the device context is active. When 
  1398. MCI_NOTIFY_SUCCESSFUL is received, the commands status, capability, and info 
  1399. can be issued, because the multimedia system allows these commands to be made 
  1400. to inactive instances.  If the application issues a command to an inactive 
  1401. instance and the instance must be active to process the command, the multimedia 
  1402. system returns MCIERR_INSTANCE_INACTIVE. 
  1403.  
  1404. When an application opens a device without setting the shareable flag, the 
  1405. Media Device Manager attempts to acquire the device for the exclusive use of 
  1406. the application. If a device context already exists that was either opened as 
  1407. nonshareable by another application or opened as shareable but then acquired 
  1408. exclusively by another application, the open fails and the application receives 
  1409. the MCIERR_DEVICE_LOCKED error code.  The application can subsequently make the 
  1410. device context shareable by issuing an MCI_RELEASEDEVICE message. 
  1411.  
  1412. See Device Sharing By Applications for more detailed information on device 
  1413. sharing. 
  1414.  
  1415.  
  1416. ΓòÉΓòÉΓòÉ 4.2.4. Device Alias ΓòÉΓòÉΓòÉ
  1417.  
  1418. When a device is opened, it can be given an alias, or alternate name. The 
  1419. primary use of a device alias is to simplify the specifying of subsequent 
  1420. commands to control the device through the string interface. A device alias is 
  1421. referenced only from the string interface, and it is valid only within the 
  1422. process that opened the device context. 
  1423.  
  1424. For example, the following strings can be passed with mciSendString: 
  1425.  
  1426. open horns.wav alias honk
  1427. play honk
  1428.  
  1429. A secondary use of the device alias is to differentiate between device contexts 
  1430. opened by the same process. For example: 
  1431.  
  1432. open horns.wav alias honk
  1433. open bells.wav alias ring
  1434. play ring wait
  1435. play honk wait
  1436.  
  1437. Note:  The maximum length for an alias is 20 characters. Placing an alias in 
  1438.        quotation marks is permitted. 
  1439.  
  1440.  When a device is opened using the string interface, a device context ID is 
  1441.  returned.  If the application provides a return buffer in the call to 
  1442.  mciSendString, the ID can be used to issue commands to the device context 
  1443.  using the mciSendCommand interface, when necessary. 
  1444.  
  1445.  
  1446. ΓòÉΓòÉΓòÉ 4.2.5. Using the Command Message Interface ΓòÉΓòÉΓòÉ
  1447.  
  1448. To use the command message interface to communicate with a device, an 
  1449. application calls mciSendCommand and passes the command message MCI_OPEN. If 
  1450. the request is successful, a device handle for access to the device context is 
  1451. returned in the usDeviceID field of the MCI_OPEN_PARMS data structure. This 
  1452. handle is retained for use in subsequent message commands. 
  1453.  
  1454. An alias can be specified with the MCI_OPEN_ALIAS flag in the command message 
  1455. MCI_OPEN.  Commands can then be issued to the device context by means of the 
  1456. string interface. 
  1457.  
  1458. The following code fragment shows the opening of devices in the Duet Player I 
  1459. sample program.  The hwndCallback field contains the application's main window 
  1460. procedure so that the MM_MCIPASSDEVICE messages are sent to it when the duet 
  1461. player gains or passes control of the device.  The device ID and type fields of 
  1462. the structure are not needed because the audio file name is specified as the 
  1463. element field of the structure.  This causes the Media Device Manager (MDM) to 
  1464. open the appropriate device based on the file name extension.  Once the 
  1465. MCI_OPEN_PARMS structure is initialized, an MCI_OPEN command is specified with 
  1466. the mciSendCommand function for each separate part of the duet. 
  1467.  
  1468.  /*
  1469.   * Open one part of the duet. The first step is to initialize an
  1470.   * MCI_OPEN_PARMS data structure with the appropriate information,
  1471.   * then issue the MCI_OPEN command with the mciSendCommand function.
  1472.   * We will be using an open with only the element name specified.
  1473.   * This will cause the default connection, as specified in the
  1474.   * MMPM.INI file, for the data type.
  1475.   */
  1476. mopDuetPart.hwndCallback   = (ULONG)  hwnd; /* For MM_MCIPASSDEVICE */
  1477. mopDuetPart.usDeviceID     = (USHORT) NULL; /* this is returned    */
  1478. mopDuetPart.pszDeviceType  = (PSZ)    NULL; /* using default conn. */
  1479. mopDuetPart.pszElementName = (PSZ)   aDuet[sDuet].achPart1;
  1480.  
  1481.  
  1482.      ulError = mciSendCommand( (USHORT) 0,
  1483.                                MCI_OPEN,
  1484.                                MCI_WAIT | MCI_OPEN_ELEMENT |
  1485.                                MCI_OPEN_SHAREABLE | MCI_READONLY,
  1486.                                (PVOID) &mopDuetPart,
  1487.                                UP_OPEN);
  1488.  
  1489.  
  1490.      if (!ulError)  /* if we opened part 1 */
  1491.      {
  1492.         usDuetPart1ID = mopDuetPart.usDeviceID;
  1493.  
  1494.         /*
  1495.          * Now, open the other part
  1496.          */
  1497.         mopDuetPart.pszElementName    = (PSZ)   aDuet[sDuet]achPart2;
  1498.  
  1499.         ulError = mciSendCommand( (USHORT) 0,
  1500.                                   MCI_OPEN,
  1501.                                   MCI_WAIT | MCI_OPEN_ELEMENT |
  1502.                                   MCI_OPEN_SHAREABLE | MCI_READONLY,
  1503.                                   (PVOID) &mopDuetPart,
  1504.                                   UP_OPEN);
  1505.  
  1506.         if (!ulError)  /* if we opened part 2 */
  1507.         {
  1508.            usDuetPart2ID = mopDuetPart.usDeviceID;
  1509.  
  1510.  
  1511. ΓòÉΓòÉΓòÉ 4.3. Memory Playlists ΓòÉΓòÉΓòÉ
  1512.  
  1513. In addition to specifying files or Resource Interchange File Format (RIFF) 
  1514. chunks to be loaded by compound devices, you also can specify memory objects. 
  1515. You create memory objects, for example, to play synthesized audio using the 
  1516. waveform audio media driver. These memory objects can be placed under the 
  1517. control of the memory playlist. 
  1518.  
  1519. The memory playlist is a data structure in an application. It contains an array 
  1520. of simple, machine-like instructions you formulate, each of which has a fixed 
  1521. format consisting of a 32-bit operation code and three 32-bit operands. 
  1522. Playlist instructions are described in the following table. 
  1523.  
  1524. To have playlist instructions interpreted by the playlist processor, you 
  1525. specify the MCI_OPEN_PLAYLIST flag with the MCI_OPEN command message. This flag 
  1526. indicates that the pszElementName field in the MCI_OPEN_PARMS data structure is 
  1527. a pointer to a memory playlist. 
  1528.  
  1529. Using playlist instructions, you can play audio objects in succession from one 
  1530. or more memory buffers. Instructions include branching to and returning from 
  1531. subroutines within the playlist. In addition, the playlist can be modified 
  1532. dynamically by the application while it is being played. Because less overhead 
  1533. is involved when playing audio data from memory, playlist programs will have 
  1534. higher performance. If your application requires speed or if it needs to modify 
  1535. the data before it is sent to the audio device, use playlists. 
  1536.  
  1537. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1538. ΓöéCommand             ΓöéDescription                                       Γöé
  1539. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1540. ΓöéBRANCH_OPERATION    ΓöéTransfers control to another instruction in the   Γöé
  1541. Γöé                    Γöéplaylist.                                         Γöé
  1542. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1543. Γöé                    ΓöéOperand 2-The absolute instruction number in the  Γöé
  1544. Γöé                    Γöéplaylist to which control is being transferred.   Γöé
  1545. Γöé                    ΓöéBecause the playlist is defined as an array of    Γöé
  1546. Γöé                    Γöéstructures (instruction, operation, and operand   Γöé
  1547. Γöé                    Γöévalues) its first instruction is referenced as    Γöé
  1548. Γöé                    Γöéarray element, index 0. Therefore, the first      Γöé
  1549. Γöé                    Γöéinstruction in the list is 0, the second          Γöé
  1550. Γöé                    Γöéinstruction is 1, and so on.                      Γöé
  1551. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1552. Γöé                    ΓöéBranching out of a subroutine is not prohibited;  Γöé
  1553. Γöé                    Γöéhowever, it is not recommended because an unused  Γöé
  1554. Γöé                    Γöéreturn address is left on the stack maintained by Γöé
  1555. Γöé                    Γöéthe playlist processor.                           Γöé
  1556. Γöé                    ΓöéAn application can enable or disable a            Γöé
  1557. Γöé                    ΓöéBRANCH_OPERATION by exchanging it with a          Γöé
  1558. Γöé                    ΓöéNOP_OPERATION. Operands for a NOP_OPERATION are   Γöé
  1559. Γöé                    Γöéignored.                                          Γöé
  1560. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1561. ΓöéCALL_OPERATION      ΓöéTransfers control to the absolute instruction     Γöé
  1562. Γöé                    Γöénumber specified in Operand 2, saving the number  Γöé
  1563. Γöé                    Γöéof the instruction following the CALL for use on aΓöé
  1564. Γöé                    ΓöéRETURN instruction.                               Γöé
  1565. Γöé                    ΓöéCALL instructions may be nested up to 20 levels.  Γöé
  1566. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1567. Γöé                    ΓöéOperand 2-Absolute instruction number in the      Γöé
  1568. Γöé                    Γöéplaylist to which control is being transferred.   Γöé
  1569. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1570. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1571. ΓöéCUEPOINT_OPERATION  ΓöéCauses a cue point data record to be entered into Γöé
  1572. Γöé                    Γöéthe data stream. Note that the cue point is       Γöé
  1573. Γöé                    Γöérelative to the DATA_OPERATION that follows it.   Γöé
  1574. Γöé                    ΓöéOperand 1-User-defined parameter to be returned asΓöé
  1575. Γöé                    Γöéthe low word of ulMsgParam1 in the MM_MCICUEPOINT Γöé
  1576. Γöé                    Γöémessage.                                          Γöé
  1577. Γöé                    ΓöéOperand 2-Offset in MMTIME units for the actual   Γöé
  1578. Γöé                    Γöétime the CUEPOINT message should be generated.    Γöé
  1579. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1580. Γöé                    ΓöéThe MM_MCICUEPOINT message is returned to the     Γöé
  1581. Γöé                    Γöéapplication as soon as possible after the cue     Γöé
  1582. Γöé                    Γöépoint data record is encountered in the data      Γöé
  1583. Γöé                    Γöéstream. The message is sent to the window handle  Γöé
  1584. Γöé                    Γöéspecified when the device was originally opened.  Γöé
  1585. Γöé                    ΓöéNote: The CUEPOINT instruction is ignored when    Γöé
  1586. Γöé                    Γöéused in a recording operation.                    Γöé
  1587. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1588. ΓöéDATA_OPERATION      ΓöéSpecifies a data buffer to be played from or      Γöé
  1589. Γöé                    Γöérecorded into.                                    Γöé
  1590. Γöé                    ΓöéOperand 1-Long pointer to a buffer in the         Γöé
  1591. Γöé                    Γöéapplication.                                      Γöé
  1592. Γöé                    ΓöéOperand 2-Length of the buffer pointed to by      Γöé
  1593. Γöé                    ΓöéOperand 1.                                        Γöé
  1594. Γöé                    ΓöéOperand 3-Current position in the buffer. This    Γöé
  1595. Γöé                    Γöéoperand is updated by the system during a         Γöé
  1596. Γöé                    Γöérecording or playback operation. For a playback   Γöé
  1597. Γöé                    Γöéoperation, it is the number of bytes that have    Γöé
  1598. Γöé                    Γöébeen sent to the output device handler. For a     Γöé
  1599. Γöé                    Γöérecording operation, it is the number of bytes    Γöé
  1600. Γöé                    Γöéthat have been placed into a user buffer.         Γöé
  1601. Γöé                    ΓöéThe current position in the buffer is particularlyΓöé
  1602. Γöé                    Γöéimportant after a recording operation, because    Γöé
  1603. Γöé                    Γöéthis field contains the number of bytes of        Γöé
  1604. Γöé                    Γöérecorded data.  The remaining bytes in the buffer Γöé
  1605. Γöé                    Γöéare not valid. This field is initialized to zero  Γöé
  1606. Γöé                    Γöéwhen the DATA_OPERATION statement is first        Γöé
  1607. Γöé                    Γöéencountered.                                      Γöé
  1608. Γöé                    ΓöéThe buffer indicated by the DATA instruction must Γöé
  1609. Γöé                    Γöéonly contain the raw data bytes from the device   Γöé
  1610. Γöé                    Γöéand cannot include any header information.        Γöé
  1611. Γöé                    ΓöéTherefore, the precise meaning or format of the   Γöé
  1612. Γöé                    Γöédata is dependent on the current settings of the  Γöé
  1613. Γöé                    Γöémedia device.  For example, a wave audio data     Γöé
  1614. Γöé                    Γöéelement is assumed to have the format PCM or      Γöé
  1615. Γöé                    ΓöéADPCM, number of bits per sample, and so on, that Γöé
  1616. Γöé                    Γöéis indicated by the settings of the audio device. Γöé
  1617. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1618. ΓöéEXIT_OPERATION      ΓöéIndicates the end of the playlist.                Γöé
  1619. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1620. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1621. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1622. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1623. ΓöéLOOP_OPERATION      ΓöéControls iteration in a playlist. It is the       Γöé
  1624. Γöé                    Γöéresponsibility of the application to initialize   Γöé
  1625. Γöé                    Γöéthe current iteration.  The current iteration is  Γöé
  1626. Γöé                    Γöéreset to zero following loop termination.         Γöé
  1627. Γöé                    ΓöéOperand 1-Number of times the loop is to be       Γöé
  1628. Γöé                    Γöéexecuted.                                         Γöé
  1629. Γöé                    ΓöéOperand 2-Target instruction to branch to, when   Γöé
  1630. Γöé                    Γöéthe loop condition fails.                         Γöé
  1631. Γöé                    ΓöéOperand 3-Current iteration.                      Γöé
  1632. Γöé                    ΓöéThe last instruction in a loop is a branch back toΓöé
  1633. Γöé                    Γöéthe LOOP_OPERATION. The operation of the          Γöé
  1634. Γöé                    ΓöéLOOP_OPERATION instruction is as follows:         Γöé
  1635. Γöé                    Γöé1. If Operand 3 is less than Operand 1, control isΓöé
  1636. Γöé                    Γöétransferred to the playlist instruction following Γöé
  1637. Γöé                    Γöéthe LOOP instruction, and the iteration count in  Γöé
  1638. Γöé                    ΓöéOperand 3 is incremented.                         Γöé
  1639. Γöé                    Γöé2. Otherwise, the iteration count is reset to zeroΓöé
  1640. Γöé                    Γöéand control is passed to the instruction specifiedΓöé
  1641. Γöé                    Γöéin Operand 2.                                     Γöé
  1642. Γöé                    ΓöéTypically, the application sets the iteration     Γöé
  1643. Γöé                    Γöécount to zero when the playlist is passed to the  Γöé
  1644. Γöé                    Γöédevice, but this is not required.  The loop       Γöé
  1645. Γöé                    Γöéinstruction merely compares the loop count with   Γöé
  1646. Γöé                    Γöéthe iteration count. If the iteration count is setΓöé
  1647. Γöé                    Γöéto a value other than zero when the playlist is   Γöé
  1648. Γöé                    Γöépassed in, it is as if the loop has been executed Γöé
  1649. Γöé                    Γöéthat number of times. Also, if a playback         Γöé
  1650. Γöé                    Γöéoperation is stopped, and then the same playlist  Γöé
  1651. Γöé                    Γöéis loaded again, the loop iteration count is not  Γöé
  1652. Γöé                    Γöéinitialized by the playlist processor.            Γöé
  1653. Γöé                    ΓöéIt is the application's responsibility to see thatΓöé
  1654. Γöé                    Γöéiteration count values are what is required when  Γöé
  1655. Γöé                    Γöéswitching from play to record, record to play, andΓöé
  1656. Γöé                    Γöéwhen changing settings for the data (for example, Γöé
  1657. Γöé                    Γöébitspersample, samplespersec, and so on) with the Γöé
  1658. Γöé                    Γöéset command. These commands cause the playlist    Γöé
  1659. Γöé                    Γöéstream to be destroyed and re-created, and the    Γöé
  1660. Γöé                    Γöéplaylist to be reassociated as a new playlist withΓöé
  1661. Γöé                    Γöéthe playlist processor.                           Γöé
  1662. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1663. ΓöéMESSAGE_OPERATION   ΓöéReturns a message to the application during       Γöé
  1664. Γöé                    Γöéplaylist processing.                              Γöé
  1665. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1666. Γöé                    ΓöéOperand 2-ULONG that is returned to the           Γöé
  1667. Γöé                    Γöéapplication in the MM_MCIPLAYLISTMESSAGE message  Γöé
  1668. Γöé                    ΓöéMsgParam2.                                        Γöé
  1669. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1670. Γöé                    ΓöéEach time the playlist processor encounters a     Γöé
  1671. Γöé                    ΓöéMESSAGE instruction, MM_MCIPLAYLISTMESSAGE is     Γöé
  1672. Γöé                    Γöéreturned to the application. MESSAGE instructions Γöé
  1673. Γöé                    Γöécan be used by the application to trace specific  Γöé
  1674. Γöé                    Γöépoints during the execution of the playlist       Γöé
  1675. Γöé                    Γöéprocessor. The message is sent to the window      Γöé
  1676. Γöé                    Γöéhandle specified when the device was originally   Γöé
  1677. Γöé                    Γöéopened.                                           Γöé
  1678. Γöé                    ΓöéThis function is not intended to be used for      Γöé
  1679. Γöé                    Γöétiming of data production or consumption          Γöé
  1680. Γöé                    Γöéidentified by previously interpreted instructions.Γöé
  1681. Γöé                    ΓöéDo not rely on the MESSAGE instruction to indicateΓöé
  1682. Γöé                    Γöéprecisely when a particular piece of digital audioΓöé
  1683. Γöé                    Γöéhas been played by an audio device; however, the  Γöé
  1684. Γöé                    ΓöéMESSAGE instruction can be used to indicate when aΓöé
  1685. Γöé                    Γöébuffer has been consumed and needs to be refilled.Γöé
  1686. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1687. ΓöéNOP_OPERATION       ΓöéUsed as a placeholder.                            Γöé
  1688. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1689. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1690. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1691. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1692. ΓöéRETURN_OPERATION    ΓöéTransfers control to the playlist instruction     Γöé
  1693. Γöé                    Γöéfollowing the most recently executed CALL         Γöé
  1694. Γöé                    Γöéinstruction.                                      Γöé
  1695. Γöé                    ΓöéOperand 1-Ignored.                                Γöé
  1696. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1697. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1699. ΓöéSEMPOST_OPERATION   ΓöéCauses the playlist processor to post an event    Γöé
  1700. Γöé                    Γöésemaphore. The playlist processor will call       Γöé
  1701. Γöé                    ΓöéDosWaitEventSem.                                  Γöé
  1702. Γöé                    ΓöéOperand 1-Contains the semaphore to post.         Γöé
  1703. Γöé                    ΓöéOperand 2-Ignored.                                Γöé
  1704. Γöé                    ΓöéOperand 3-Ignored.                                Γöé
  1705. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1706. ΓöéSEMWAIT_OPERATION   ΓöéCauses the playlist processor to wait on a        Γöé
  1707. Γöé                    Γöésemaphore. The playlist processor will call       Γöé
  1708. Γöé                    ΓöéDosWaitEventSem.                                  Γöé
  1709. Γöé                    ΓöéOperand 1-Contains the semaphore to perform the   Γöé
  1710. Γöé                    Γöéwait on.                                          Γöé
  1711. Γöé                    ΓöéOperand 2-Amount of time the semaphore should     Γöé
  1712. Γöé                    Γöéwait.                                             Γöé
  1713. Γöé                    ΓöéOperand 3-Boolean value indicating whether or not Γöé
  1714. Γöé                    Γöéthe semaphore should be cleared before waiting.   Γöé
  1715. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1716.  
  1717.  
  1718. ΓòÉΓòÉΓòÉ 4.3.1. Clock Sample Program Playlist Example ΓòÉΓòÉΓòÉ
  1719.  
  1720. The data structure in the following figure holds the playlist that is used to 
  1721. play the chimes in the Clock Sample program provided in the Toolkit 
  1722. (\TOOLKIT\SAMPLES\MM\CLOCK). Note that the definitions for the playlist 
  1723. operation codes can be found in the MCIOS2.H file. 
  1724.  
  1725. /*
  1726.  * This double array holds the playlists that will be used to play the
  1727.  * chimes for the clock.  Each array has three fields within the
  1728.  * structure: one for the playlist command (32-bit value) and three
  1729.  * operands (32-bit values).  The DATA_OPERATION's first operand will
  1730.  * contain the address to the respective waveform buffers.  Once the
  1731.  * playlist has been played, the CHIME_PLAYING_HAS_STOPPED message
  1732.  * will be sent so that the application knows that the audio has
  1733.  * finished.
  1734.  * The clock will have a unique chime for each quarter hour.
  1735.  * There are three chime files that are used in different combinations
  1736.  * to create all of the chimes used for the clock.  These three files
  1737.  * are CLOCK1.WAV, CLOCK2.WAV, and CLOCK3.WAV.
  1738.  *
  1739.  * The first playlist will play quarter hour chime.  This is simply
  1740.  * CLOCK1.WAV.
  1741.  *
  1742.  * The second playlist will play the half hour chime.  This
  1743.  * consists of CLOCK1.WAV + CLOCK2.WAV.
  1744.  *
  1745.  * The third playlist will play the three quarter hour chime.  This
  1746.  * consists of CLOCK1.WAV + CLOCK2.WAV + CLOCK1.WAV.
  1747.  *
  1748.  * The fourth playlist plays the hour chime.  This consists of
  1749.  * CLOCK1.WAV + CLOCK2.WAV + CLOCK1.WAV + CLOCK2.WAV +
  1750.  * (HOUR * CLOCK3.WAV)
  1751.  * The Number of loops to perform for the hour value is kept in
  1752.  * the first operand.  This will be set in a later procedure when the
  1753.  * hour of the chime time is known.
  1754.  */
  1755. PLAY_LIST_STRUCTURE_T apltPlayList[ NUMBER_OF_PLAYLISTS ]
  1756.                                   [ NUMBER_OF_COMMANDS ] =
  1757. {
  1758.    /*
  1759.     * Quarter Hour Chime.
  1760.     */
  1761.    {
  1762.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1763.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1764.       EXIT_OPERATION,    0, 0, 0
  1765.    },
  1766.    /*
  1767.     * Half Hour Chime.
  1768.     */
  1769.    {
  1770.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1771.       DATA_OPERATION,    0, 0, 0,      /* Chime file 2.  */
  1772.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1773.       EXIT_OPERATION,    0, 0, 0
  1774.    },
  1775.    /*
  1776.     * Three Quarter Hour Chime.
  1777.     */
  1778.    {
  1779.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1780.       DATA_OPERATION,    0, 0, 0,      /* Chime file 2.  */
  1781.       DATA_OPERATION,    0, 0, 0,      /* Chime file 1.  */
  1782.       MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1783.       EXIT_OPERATION,    0, 0, 0
  1784.    },
  1785.  /*
  1786.   * Hour Chime.
  1787.   */
  1788.  {
  1789.     DATA_OPERATION,    0, 0, 0, /* Chime file 1.          < Line 0 >*/
  1790.     DATA_OPERATION,    0, 0, 0, /* Chime file 2.          < Line 1 >*/
  1791.     DATA_OPERATION,    0, 0, 0, /* Chime file 1.          < Line 2 >*/
  1792.     DATA_OPERATION,    0, 0, 0, /* Chime file 2.          < Line 3 >*/
  1793.     DATA_OPERATION,    0, 0, 0, /* Chime file 3.          < Line 4 >*/
  1794.     LOOP_OPERATION,    0, 4, 0, /* Which line to loop on. < Line 5 >*/
  1795.     MESSAGE_OPERATION, 0, CHIME_PLAYING_HAS_STOPPED, 0,
  1796.     EXIT_OPERATION,    0, 0, 0
  1797.  }
  1798.  
  1799. To prevent lost data, the address range of memory buffers used in DATA 
  1800. operations should not overlap. 
  1801.  
  1802.  
  1803. ΓòÉΓòÉΓòÉ 4.3.1.1. Setting up the Playlist ΓòÉΓòÉΓòÉ
  1804.  
  1805. Playlists operate on data from memory. Therefore, space must be allocated for 
  1806. the memory that will be utilized with the playlist. 
  1807.  
  1808. The SetupPlaylist procedure is performed once, during initialization of the 
  1809. Clock Sample program.  It calls the procedure CopyWaveformIntoMemory to copy 
  1810. the waveform files into memory buffers.  It also initializes the playlist data 
  1811. structure by supplying the address and size of the memory buffers holding the 
  1812. data in the appropriate data structure fields. 
  1813.  
  1814. VOID SetupPlayList( VOID )
  1815. {
  1816.  /*
  1817.   * This array keeps the address of each audio chime file.
  1818.   */
  1819.  static LONG *pulBaseAddress[ NUMBER_OF_CHIME_FILES ];
  1820.  
  1821.  USHORT usChimeFileId;            /* Chime audio file ID.        */
  1822.  ULONG  ulSizeOfFile,             /* Size of audio file.         */
  1823.  
  1824. ulMemoryAllocationFlags = PAG_COMMIT | PAG_READ | PAG_WRITE;
  1825. for(usChimeFileId=0; usChimeFileId<NUMBER_OF_CHIME_FILES;
  1826.     usChimeFileId++)
  1827.  {
  1828.  
  1829.     ulSizeOfFile = HowBigIsTheChimeFile( usChimeFileId );
  1830.     /*
  1831.      * If the returned file size is zero, there is a problem with the
  1832.      * chime files.  A message will already have been shown to the
  1833.      * user by the HowBigIsTheChimeFile function so get out of
  1834.      * this routine.
  1835.      */
  1836.     if ( ulSizeOfFile == 0 )
  1837.     {
  1838.        return;
  1839.     }
  1840.     if ( (pulBaseAddress[ usChimeFileId ] = (LONG *)
  1841.             malloc( ulSizeOfFile )) == (LONG *) NULL )
  1842.     {
  1843.     /*
  1844.      * The memory for the waveform files cannot be allocated.
  1845.      * Notify the user and return from this routine.  No playlist can
  1846.      * be created/played until memory is available.
  1847.      */
  1848.     ShowAMessage(acStringBuffer[IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT - 1 ],
  1849.                  IDS_CANNOT_GET_MEMORY, /* ID of the message to show. */
  1850.                  MB_OK | MB_INFORMATION |
  1851.                  MB_HELP |  MB_APPLMODAL |
  1852.                  MB_MOVEABLE );      /* Style of the message box.  */
  1853.  
  1854.        return;
  1855.  
  1856.     }  /* End of IF allocation fails. */
  1857.     /*
  1858.      * Place the waveform files into the memory buffer that was just
  1859.      * created.
  1860.      */
  1861.     CopyWaveformIntoMemory(
  1862.        pulBaseAddress[ usChimeFileId ],
  1863.        ulSizeOfFile,
  1864.        usChimeFileId );
  1865.     /*
  1866.      * Now that we've loaded the waveform into memory, we need to put
  1867.      * its address and size into the playlist data statements that
  1868.      * use this particular file.
  1869.      *
  1870.      * Its address must be placed into the data statement's first
  1871.      * operand and its size must be placed in the data
  1872.      * statement's second operand.
  1873.      *
  1874.      * For the four different playlists, one for each chime time
  1875.      * (1/4, 1/2, 3/4 and 1 hour increments),
  1876.      * the address of the chime file and its size will be loaded
  1877.      * into each data statement of the Playlist.
  1878.      */
  1879.     if ( usChimeFileId == 0 )
  1880.     /* If we just loaded CLOCK1.WAV */
  1881.     {
  1882.     /*
  1883.      * Put the address of this chime into the first operand of
  1884.      * every data operation that uses this particular chime.
  1885.      */
  1886.     apltPlayList[ 0 ][ 0 ].ulOperandOne =  /* 1/4 hour 1st data op */
  1887.     apltPlayList[ 1 ][ 0 ].ulOperandOne =  /* 1/2 hour 1st data op */
  1888.     apltPlayList[ 2 ][ 0 ].ulOperandOne =  /* 3/4 hour 1st data op */
  1889.     apltPlayList[ 2 ][ 2 ].ulOperandOne =  /* 3/4 hour 3rd data op */
  1890.     apltPlayList[ 3 ][ 0 ].ulOperandOne =  /* 1   hour 1st data op */
  1891.     apltPlayList[ 3 ][ 2 ].ulOperandOne =  /* 1   hour 3rd data op */
  1892.        (ULONG) pulBaseAddress[ usChimeFileId ];  /*    address     */
  1893.     /*
  1894.      * Now put the size of the file into the second operand of every
  1895.      * data operation that uses this particular chime.
  1896.      */
  1897.     apltPlayList[ 0 ][ 0 ].ulOperandTwo =  /* 1/4 hour 1st data op */
  1898.     apltPlayList[ 1 ][ 0 ].ulOperandTwo =  /* 1/2 hour 1st data op */
  1899.     apltPlayList[ 2 ][ 0 ].ulOperandTwo =  /* 3/4 hour 1st data op */
  1900.     apltPlayList[ 2 ][ 2 ].ulOperandTwo =  /* 3/4 hour 3rd data op */
  1901.     apltPlayList[ 3 ][ 0 ].ulOperandTwo =  /* 1   hour 1st data op */
  1902.     apltPlayList[ 3 ][ 2 ].ulOperandTwo =  /* 1   hour 3rd data op */
  1903.        ulSizeOfFile;                             /* size         */
  1904.     }
  1905.     else
  1906.     if ( usChimeFileId == 1 )
  1907.     /* If we just loaded CLOCK2.WAV */
  1908.     {
  1909.     /*
  1910.      * Put the address of this chime into the first operand of
  1911.      * every data operation that uses this particular chime.
  1912.      */
  1913.     apltPlayList[ 1 ][ 1 ].ulOperandOne =  /* 1/2 hour 2nd data op */
  1914.     apltPlayList[ 2 ][ 1 ].ulOperandOne =  /* 3/4 hour 2nd data op */
  1915.     apltPlayList[ 3 ][ 1 ].ulOperandOne =  /* 1   hour 2nd data op */
  1916.     apltPlayList[ 3 ][ 3 ].ulOperandOne =  /* 1   hour 4th data op */
  1917.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address    */
  1918.     /*
  1919.      * Now put the size of the file into the second operand of every
  1920.      * data operation that uses this particular chime.
  1921.      */
  1922.     apltPlayList[ 1 ][ 1 ].ulOperandTwo =  /* 1/2 hour 2nd data op */
  1923.     apltPlayList[ 2 ][ 1 ].ulOperandTwo =  /* 3/4 hour 2nd data op */
  1924.     apltPlayList[ 3 ][ 1 ].ulOperandTwo =  /* 1   hour 2nd data op */
  1925.     apltPlayList[ 3 ][ 3 ].ulOperandTwo =  /* 1   hour 4th data op */
  1926.        ulSizeOfFile;                             /* size        */
  1927.  }
  1928.  else
  1929.  if ( usChimeFileId == 2 )
  1930.  /* If we just loaded CLOCK3.WAV ,       */
  1931.  /* (this is the gong part of the chime) */
  1932. {
  1933.     /*
  1934.      * Put the address of this chime into the first operand of
  1935.      * every data operation that uses this particular chime.
  1936.      */
  1937.     apltPlayList[ 3 ][ 5 ].ulOperandOne =  /* 1 hour 5th data op */
  1938.        (ULONG) pulBaseAddress[ usChimeFileId ];
  1939.  
  1940.     /*
  1941.      * Now put the size of the file into the second operand of every
  1942.      * data operation that uses this particular chime.
  1943.      */
  1944.  
  1945.     apltPlayList[ 3 ][ 5 ].ulOperandTwo =  /* 1 hour 5th data op */
  1946.        ulSizeOfFile;
  1947.   }
  1948.  
  1949.  }  /* End of For loop of chime files. */
  1950.  
  1951. }  /* End of SetupPlayList */
  1952.  
  1953.  
  1954. ΓòÉΓòÉΓòÉ 4.3.2. Dynamic Playlist Modification ΓòÉΓòÉΓòÉ
  1955.  
  1956. An application can change a playlist dynamically to achieve various effects in 
  1957. controlling the data stream in memory.  In the case of the Clock Sample 
  1958. program, if the chime is an hour chime, then the program will dynamically 
  1959. modify the loop instruction in the memory playlist structure.  This is how the 
  1960. device playing the playlist knows how many times to play the chime.  The 
  1961. variable usHour is assigned the valid hour in the UpdateTheClock procedure. 
  1962.  
  1963.       /*
  1964.        * Set the playlist to loop for the number of hours to
  1965.        * be played.  The hour value will be placed into operand one
  1966.        * of the loop instruction playlist structure.*/
  1967.  
  1968.            apltPlayList[ HOUR_PLAYLIST ][ LOOP_LINE ].ulOperandOne =
  1969.                ((ULONG) (usHour));
  1970.  
  1971. Manipulations that entail atomic, or uninterruptible, operations are acceptable 
  1972. techniques for achieving special effects with playlists. For example, the 
  1973. modification of the 32-bit operation code of an instruction is considered to be 
  1974. an atomic operation. Changing BRANCH to NOP, NOP to BRANCH, or changing the 
  1975. loop count value of a LOOP instruction are examples of atomic operations that 
  1976. produce special effects. 
  1977.  
  1978. Because the playlist processor is asynchronously interpreting instructions, 
  1979. care must be taken to avoid a situation where unexpected results can occur. For 
  1980. example, suppose a situation exists that enables the loop count field to be 
  1981. modified by the application at the same time that the LOOP instruction is being 
  1982. executed by the playlist processor. The playlist processor can overwrite the 
  1983. application modification with a loop count value based on the execution of the 
  1984. LOOP instruction. 
  1985.  
  1986. More extensive modifications (particularly those to pointer and length 
  1987. parameters of DATA instructions) should also be performed with caution.  You do 
  1988. not want the playlist processor to gain control of a partially modified 
  1989. instruction. 
  1990.  
  1991. As a rule, it is not a good idea to modify a DATA instruction unless you are 
  1992. sure the playlist processor cannot interpret the instruction during the 
  1993. modification process; that is, you know the instruction is currently 
  1994. unreachable by the processor.  One way to determine the location of the 
  1995. processor is with the MESSAGE instruction.  For example, suppose you precede a 
  1996. LOOP instruction with a MESSAGE instruction. When the message is returned to 
  1997. your application, you know the processor is busy with the loop and you can 
  1998. safely modify any DATA instructions outside the loop. 
  1999.  
  2000. After DATA instructions have been modified, BRANCH or NOP instructions can be 
  2001. changed to direct playlist interpretation to the modified section of the 
  2002. playlist. 
  2003.  
  2004.  
  2005. ΓòÉΓòÉΓòÉ 4.3.3. Using a Playlist for Recording ΓòÉΓòÉΓòÉ
  2006.  
  2007. Memory playlists can be used in recording scenarios. For example, MESSAGE 
  2008. instructions are useful for notifying the application of the progress of a 
  2009. recording operation. A message can be sent each time the filling of a buffer is 
  2010. completed. 
  2011.  
  2012. Encasing several DATA statements inside a loop using either a LOOP or BRANCH 
  2013. instruction allows the playlist to function as a simple circular buffering 
  2014. scheme. The following is an example of circular buffering: 
  2015.  
  2016.     0:    NOP
  2017.     1:    DATA...
  2018.     2:    MESSAGE...
  2019.     3:    DATA...
  2020.     4:    MESSAGE...
  2021.     5:    DATA...
  2022.     6:    MESSAGE...
  2023.     7:    BRANCH 0
  2024.  
  2025. If the playlist processor executes an EXIT statement while recording, this 
  2026. means the playlist is full. This situation is similar to a disk becoming full 
  2027. during a recording operation. An ERROR_END_OF_PLAYLIST error is generated by 
  2028. the playlist processor in the streaming subsystem.  As the recording operation 
  2029. continues, additional data is lost.  The media driver being used returns the 
  2030. MCIERR_TARGET_DEVICE_FULL to the application. 
  2031.  
  2032. LOOP, CALL, and RETURN instructions are used for iterative playing operations. 
  2033. These instructions are not appropriate for a recording scenario because 
  2034. recorded data residing in the buffer would be overwritten by each iteration. 
  2035.  
  2036.  
  2037. ΓòÉΓòÉΓòÉ 4.4. Editing Operations ΓòÉΓòÉΓòÉ
  2038.  
  2039. Applications can perform editing operations using both the PM clipboard and 
  2040. user-defined buffers. This enables applications to share data with other 
  2041. applications by way of the clipboard or to quickly retrieve data into 
  2042. user-defined buffers.  Messages used for editing include MCI_COPY, MCI_CUT, 
  2043. MCI_DELETE, MCI_PASTE, MCI_REDO, and MCI_UNDO. 
  2044.  
  2045.  
  2046. ΓòÉΓòÉΓòÉ 4.4.1. Clipboard and Resource Formats ΓòÉΓòÉΓòÉ
  2047.  
  2048. Applications can imbed multimedia data into program resources and interchange 
  2049. that data through the clipboard. 
  2050.  
  2051. The following clipboard and resource format types are defined in the OS2MEDEF.H 
  2052. file: 
  2053.  
  2054.      CF_RMID and RT_RMID represent RIFF data that has a RMID chunk or regular 
  2055.       MIDI with an "MT" header.  This is a special case. 
  2056.      CF_RIFF and RT_RIFF represent RIFF data including all of the headers. 
  2057.      CF_WAVE and RT_WAVE represent RIFF data that has a WAVE chunk.  This is a 
  2058.       specific form of RIFF. 
  2059.      CF_AVI and RT_AVI represent RIFF Audio/Video Interleaved (AVI) data. 
  2060.       This is a specific form of RIFF.  An entire video file is placed in the 
  2061.       clipboard. 
  2062.  
  2063.  The following code fragment is an example of retrieving digital audio 
  2064.  information from the clipboard.  Source code for ADMCEDIT is located in the 
  2065.  \TOOLKIT\SAMPLES\MM\ADMCT subdirectory. 
  2066.  
  2067.   {
  2068.   HAB            habClipboard;
  2069.   HMQ            hmq;
  2070.  
  2071.   HMMIO          hmmioMem;           /* handle to memory file   */
  2072.  
  2073.   MMIOINFO       mmioinfo;           /* info struct for memory file */
  2074.  
  2075.   ULONG          ulFormatInfo = 0;
  2076.   ULONG          rc;
  2077.   PULONG         pulDataSize;
  2078.  
  2079.   LONG           lBytesRead;
  2080.   LONG           lReturnCode;
  2081.  
  2082.   MMAUDIOHEADER  mmaudioheader;
  2083.   MMAUDIOHEADER  mmaudioheaderTemp;
  2084.  
  2085.   PSZ            pTempBuffer;
  2086.   PVOID          pNewBuffer;
  2087.  
  2088.     habClipboard = WinInitialize( 0 );
  2089.     if ( !habClipboard )
  2090.        {
  2091.        return ( MCIERR_CLIPBOARD_ERROR );
  2092.        }
  2093.  
  2094.     hmq = WinCreateMsgQueue( habClipboard, 0 );
  2095.  
  2096.     if ( !hmq )
  2097.        {
  2098.        fCreatedMQ = FALSE;
  2099.        }
  2100.  
  2101.   /*  habClipboard = WinQueryAnchorBlock( HWND_DESKTOP ); */
  2102.  
  2103.     /*****************************************************************
  2104.     * Check to see if there is a wave (CF_WAVE is the defined type) in
  2105.     * the clipboard.
  2106.     ******************************************************************/
  2107.  
  2108.     rc = WinQueryClipbrdFmtInfo( habClipboard,
  2109.                             CF_WAVE,
  2110.                             &ulFormatInfo );
  2111.  
  2112.  
  2113.     if ( !WinOpenClipbrd( habClipboard ) )
  2114.        {
  2115.        WinCloseClipbrd( habClipboard );
  2116.        return ( MCIERR_CLIPBOARD_ERROR );
  2117.        }
  2118.  
  2119.     pTempBuffer = ( PSZ ) WinQueryClipbrdData( habClipboard, CF_WAVE );
  2120.  
  2121.     if ( !pTempBuffer )
  2122.        {
  2123.        WinCloseClipbrd( habClipboard );
  2124.        return ( MCIERR_CLIPBOARD_ERROR );
  2125.        }
  2126.  
  2127.     /*****************************************************************
  2128.     * We need to find out how much data is in the file.  Retrieve
  2129.     * the length of the RIFF chunk.
  2130.     ******************************************************************/
  2131.     pulDataSize = ( PULONG ) pTempBuffer + 1;
  2132.  
  2133.  
  2134.     memset( &mmioinfo, '\0', sizeof( MMIOINFO ) );
  2135.  
  2136.     /*****************************************************************
  2137.     * Prepare to open a memory file--the buffer * in the clipboard
  2138.     * contains the actual RIFF file which the WAVE IOProc already knows
  2139.     * how to parse--use  it to retrieve the information and keep the MCD
  2140.     * from file-format dependence.
  2141.     ******************************************************************/
  2142.  
  2143.     mmioinfo.fccIOProc = mmioFOURCC( 'W', 'A', 'V', 'E' ) ;
  2144.     mmioinfo.fccChildIOProc = FOURCC_MEM;
  2145.  
  2146.     rc = CheckMem ( (PVOID) pulDataSize,
  2147.                       sizeof ( ULONG ),
  2148.                       PAG_READ | PAG_WRITE );
  2149.  
  2150.     if (rc != MCIERR_SUCCESS)
  2151.        {
  2152.        WinCloseClipbrd( habClipboard );
  2153.        return (MCIERR_OUT_OF_MEMORY );
  2154.        }
  2155.  
  2156.  
  2157.     mmioinfo.cchBuffer = ( *pulDataSize) + 8;
  2158.     mmioinfo.pchBuffer = pTempBuffer;
  2159.  
  2160.  
  2161.     hmmioMem = mmioOpen( NULL,
  2162.                          &mmioinfo,
  2163.                          MMIO_READ );
  2164.  
  2165.     if ( !hmmioMem )
  2166.        {
  2167.        WinCloseClipbrd( habClipboard );
  2168.        return ( mmioinfo.ulErrorRet );
  2169.        }
  2170.  
  2171.  
  2172. ΓòÉΓòÉΓòÉ 4.4.2. Audio Media Driver Clipboard Commands ΓòÉΓòÉΓòÉ
  2173.  
  2174. The data that the buffer or clipboard contains will be defined differently for 
  2175. each media driver. 
  2176.  
  2177. The following formula is necessary to allocate memory for digital audio 
  2178. clipboard operations: 
  2179.  
  2180.  
  2181. (BitsPerSample/8) x (SamplesPerSecond) x (Channels) x (Seconds)
  2182.  
  2183. Therefore, if an application is to copy 20 seconds of a 16-bit, 44 kHz, mono 
  2184. file into the clipboard using the caller's buffer; 1,764,000 bytes ((16/8) x 
  2185. (44100) x (1) x (20)) must be allocated and placed in the pBuff field of the 
  2186. MCI_EDIT_PARMS structure.  For MCI_CUT, MCI_COPY, and MCI_PASTE, if 
  2187. MCI_TO_BUFFER or MCI_FROM_BUFFER is passed in, then the pBuff field should 
  2188. contain a valid pointer. 
  2189.  
  2190. MCI_STATUS_CLIPBOARD returns MCI_TRUE if digital audio is in the clipboard; 
  2191. otherwise it returns MCI_FALSE. MCI_CUT removes the specified range and places 
  2192. the data in the buffer or clipboard.  The position of the media will either be 
  2193. the from position if MCI_FROM is specified or the previous position if MCI_FROM 
  2194. is not specified.  If the buffer is not large enough for the data an 
  2195. MCIERR_INVALID_BUFFER is returned.  The units of MCI_FROM and MCI_TO must be 
  2196. supplied in the currently selected time format.  If neither MCI_FROM or MCI_TO 
  2197. are specified, the operation will start from the current file position and 
  2198. continue to the end of the file. If audio data is already in the clipboard, it 
  2199. will be overwritten. 
  2200.  
  2201. Note:  The clipboard contents are emptied before the cut occurs. 
  2202.  
  2203.  MCI_COPY copies the specified range and places the data in the buffer or 
  2204.  clipboard.  The position of the media remains the same as it was before the 
  2205.  copy operation. 
  2206.  
  2207.  MCI_PASTE deletes the selected range if the differences between the from and 
  2208.  to position are greater than zero, then inserts the data provided in the 
  2209.  buffer or clipboard.  The media position will be at the end of what was pasted 
  2210.  into the file.  If neither MCI_FROM or MCI_TO are specified, MCI_PASTE inserts 
  2211.  the clipboard contents at the current position. MCI_CONVERT_FORMAT converts 
  2212.  the data that was in the clipboard to the destination file format. The 
  2213.  following data format conversions can be performed: 
  2214.  
  2215.      16-bit to 8-bit resolution/8-bit to 16-bit resolution 
  2216.      11.025 kHz, 22.05 kHz, and 44.1 kHz to any of the following sampling 
  2217.       rates: 11.025 kHz, 22.05 kHz, or 44.1 kHz 
  2218.      mono to stereo/stereo to mono 
  2219.  
  2220.  Note:  The MCI_CONVERT_FORMAT flag supports only the Pulse Code Modulation 
  2221.         (PCM) format. The data format conversion can take a while to complete. 
  2222.         If the notify flag is specified, the application is notified when the 
  2223.         conversion is completed. 
  2224.  
  2225.  The following code fragment shows an example of the use of MCI_COPY and 
  2226.  MCI_PASTE. 
  2227.  
  2228.  
  2229.   ULONG weMciCopy( HWND hwnd, ULONG ulMarkedStartBytes,
  2230.                    ULONG ulMarkedEndBytes,  USHORT usDeviceID )
  2231.      {
  2232.      ULONG          ulFlags;
  2233.      MCI_EDIT_PARMS mcieditstr;
  2234.      ULONG          ulResult;
  2235.  
  2236.      ulResult = 0L;
  2237.  
  2238.      /*
  2239.       * First, set all fields of the MCI_EDIT_PARMS structure to 0.
  2240.       */
  2241.      memset( &mcieditstr, '\0', sizeof(MCI_EDIT_PARMS) );
  2242.  
  2243.      /*
  2244.       * The flags are NOTIFY, FROM, and TO.
  2245.       */
  2246.      ulFlags = 0L;
  2247.      ulFlags |= MCI_NOTIFY |
  2248.                 MCI_FROM |
  2249.                 MCI_TO;
  2250.  
  2251.      mcieditstr.ulCallback = (ULONG)hwnd;
  2252.  
  2253.      /*
  2254.       * Set the from and to items to the beginning and end
  2255.       * of the selected area.
  2256.       */
  2257.      mcieditstr.ulFrom = ulMarkedStartBytes;
  2258.  
  2259.      mcieditstr.ulTo = ulMarkedEndBytes;
  2260.  
  2261.      ulResult = mciSendCommand( usDeviceID,
  2262.                                 MCI_COPY,
  2263.                                 ulFlags,
  2264.                                 (ULONG)&mcieditstr,
  2265.                                 0 );
  2266.  
  2267.      return( ulResult );
  2268.      {
  2269.  
  2270.   ULONG weMciPaste( HWND hwnd, ULONG ulMarkedStartBytes,
  2271.                     ULONG ulMarkedEndBytes,  USHORT usDeviceID )
  2272.      {
  2273.      ULONG          ulFlags;
  2274.      MCI_EDIT_PARMS mcieditstr;
  2275.      ULONG          ulResult;
  2276.  
  2277.      ulResult = 0L;
  2278.  
  2279.      /*
  2280.       * First, set all fields of the MCI_EDIT_PARMS structure to 0.
  2281.       */
  2282.      memset( &mcieditstr, '\0', sizeof(MCI_EDIT_PARMS) );
  2283.  
  2284.      mcieditstr.ulCallback = (ULONG)hwnd;
  2285.  
  2286.      ulFlags = 0L;
  2287.  
  2288.      /*
  2289.       * If there is an area of wave selected, then the flags are NOTIFY,
  2290.       * FROM, TO, and CONVERT_FORMAT.
  2291.       */
  2292.      if( ulMarkedEndBytes > ulMarkedStartBytes )
  2293.         {
  2294.         ulFlags |= MCI_NOTIFY |
  2295.                    MCI_FROM |
  2296.                    MCI_TO |
  2297.                    MCI_CONVERT_FORMAT;
  2298.  
  2299.         /*
  2300.          * Set the from and to items to the beginning and end
  2301.          * of the selected area.
  2302.          */
  2303.         mcieditstr.ulFrom = ulMarkedStartBytes;
  2304.  
  2305.         mcieditstr.ulTo = ulMarkedEndBytes;
  2306.         }
  2307.      else
  2308.         {
  2309.         /*
  2310.          * Otherwise, nothing in the wave is selected so the flags are
  2311.          * only NOTIFY and CONVERT_FORMAT.
  2312.          */
  2313.         ulFlags |= MCI_NOTIFY |
  2314.                    MCI_CONVERT_FORMAT;
  2315.  
  2316.         /*
  2317.          * Because this is a paste operation without FROM/TO,
  2318.          * we have to SEEK so that the media position is set
  2319.          * to the place that we want to paste.
  2320.          */
  2321.         if( ulResult = weMciCall( hwnd,
  2322.                                   MCI_SEEK ) )
  2323.            return( ulResult );
  2324.         }
  2325.      ulResult = mciSendCommand( usDeviceID,
  2326.                                 MCI_PASTE,
  2327.                                 ulFlags,
  2328.                                 (ULONG)&mcieditstr,
  2329.                                 0 );
  2330.  
  2331.      return( ulResult );
  2332.      {
  2333.  
  2334.  The following is an example of using the command string interface with editing 
  2335.  commands to create a repeating sound. 
  2336.  
  2337.   open test.wav alias a wait
  2338.   copy a from 0 to 3000 wait
  2339.   seek a to end
  2340.   paste a wait
  2341.   paste a wait
  2342.   paste a wait
  2343.  
  2344.  
  2345. ΓòÉΓòÉΓòÉ 4.5. Device Sharing By Applications ΓòÉΓòÉΓòÉ
  2346.  
  2347. The multimedia system supports sharing of physical devices among multiple 
  2348. applications. If a device is capable of being shared; that is, if it can 
  2349. maintain state information, the system can establish a unique device state, 
  2350. much like a Presentation Manager device context, for each application that uses 
  2351. the device. 
  2352.  
  2353. The scope of a device state is defined by each device. The state of a simple 
  2354. device like the digital video player contains information about the current 
  2355. frame position, whether the device is playing or stopped, what its current 
  2356. playback speed is set to, and so on. The state of a compound device can include 
  2357. the name of the currently selected file, RIFF object, and playback position. 
  2358.  
  2359. Media devices vary in their ability to support multiple device contexts 
  2360. concurrently. The different types of device use that are supported by media 
  2361. devices are: 
  2362.  
  2363.      Fixed single-context 
  2364.      Dynamic single-context 
  2365.      Limited multiple-context 
  2366.      Unlimited context 
  2367.  
  2368.  The following table contains descriptions and examples of these device use 
  2369.  types. 
  2370.  
  2371.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2372.   ΓöéContext Use Type         ΓöéDescription                                  Γöé
  2373.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2374.   ΓöéFixed single-context     ΓöéA fixed single-context device can establish  Γöé
  2375.   Γöé                         Γöéonly one device context.  The state of a     Γöé
  2376.   Γöé                         Γöéfixed single-context device cannot be queriedΓöé
  2377.   Γöé                         Γöéor set by software.                          Γöé
  2378.   Γöé                         ΓöéAn example of a fixed single-context device  Γöé
  2379.   Γöé                         Γöéis a video cassette recorder that does not   Γöé
  2380.   Γöé                         Γöéreport the tape position to the driver.      Γöé
  2381.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2382.   ΓöéDynamic single-context   ΓöéA dynamic single-context device is serially  Γöé
  2383.   Γöé                         Γöéshareable. That is, the device can be used byΓöé
  2384.   Γöé                         Γöéonly one application at a time but can be    Γöé
  2385.   Γöé                         Γöépassed from one application to another.  A   Γöé
  2386.   Γöé                         Γöédevice state for each application is saved   Γöé
  2387.   Γöé                         Γöéand restored appropriately.                  Γöé
  2388.   Γöé                         ΓöéThis is the most common concurrent use type  Γöé
  2389.   Γöé                         Γöéfor a media device. An example of a dynamic  Γöé
  2390.   Γöé                         Γöésingle-context device is a CD-ROM player.    Γöé
  2391.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2392.   ΓöéLimited multiple-context ΓöéA limited multiple-context device can        Γöé
  2393.   Γöé                         Γöéestablish multiple device contexts, but the  Γöé
  2394.   Γöé                         Γöénumber of device contexts is limited by the  Γöé
  2395.   Γöé                         Γöéphysical device.                             Γöé
  2396.   Γöé                         ΓöéAn example of a limited multiple-context     Γöé
  2397.   Γöé                         Γöédevice is a 4-channel amp-mixer audio device,Γöé
  2398.   Γöé                         Γöéwhich can concurrently support any of the    Γöé
  2399.   Γöé                         Γöéfollowing multiple-contexts:                 Γöé
  2400.   Γöé                         ΓöéFour monaural contexts, two stereo contexts, Γöé
  2401.   Γöé                         Γöéand one stereo and two monaural contexts.    Γöé
  2402.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2403.   ΓöéUnlimited context        ΓöéAn unlimited context device can support an   Γöé
  2404.   Γöé                         Γöéarbitrary number of concurrent device        Γöé
  2405.   Γöé                         Γöécontexts.  The number of concurrent contexts Γöé
  2406.   Γöé                         Γöéis limited only by the resource limits of theΓöé
  2407.   Γöé                         Γöésystem.                                      Γöé
  2408.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2409.  
  2410.  
  2411. ΓòÉΓòÉΓòÉ 4.5.1. Getting Control of a Shared Device ΓòÉΓòÉΓòÉ
  2412.  
  2413. The MM_MCIPASSDEVICE message sent with WinPostMsg by the multimedia system to 
  2414. applications and the MCI_ACQUIREDEVICE message sent by applications with 
  2415. mciSendCommand to the multimedia system provide a device-sharing scheme for the 
  2416. OS/2 multimedia environment. 
  2417.  
  2418. To participate in device sharing, an application issues MCI_OPEN with the 
  2419. MCI_OPEN_SHAREABLE flag set. The system then attempts to acquire the device for 
  2420. the application. The application must wait until it receives the asynchronous 
  2421. MM_MCIPASSDEVICE message to gain control of the device.  The multimedia system 
  2422. sends the MM_MCIPASSDEVICE message to inform the application that the device 
  2423. context is becoming active (MCI_GAINING_USE). 
  2424.  
  2425. Before an application receives an MM_MCIPASSDEVICE message with an event of 
  2426. MCI_GAINING_USE, it can make inquiries about the device and the media. 
  2427. MCI_STATUS, MCI_GETDEVCAPS, MCI_INFO, and MCI_CLOSE commands can be sent to an 
  2428. inactive device context. 
  2429.  
  2430. Note:  If your application has set an MCI_NOTIFY flag on the open request, 
  2431.        notification will be posted to the application before the 
  2432.        MM_MCIPASSDEVICE message is sent.  However, if the application message 
  2433.        queue has other messages already queued, it is possible that the 
  2434.        application may receive the MM_MCIPASSDEVICE message before it receives 
  2435.        the notification message. 
  2436.  
  2437.  The active instance of the application remains active until the application 
  2438.  returns from the WinPostMsg (MCI_LOSING_USE). This guarantees that the 
  2439.  application has an active device context until it returns from WinPostMsg. If 
  2440.  the application receives an MM_MCIPASSDEVICE message with an event of 
  2441.  MCI_GAINING_USE, it should return immediately. The following code fragment 
  2442.  illustrates the device sharing architecture from the Clock Sample program. 
  2443.  
  2444.     /*
  2445.      * The next two messages are handled so that the Clock application
  2446.      * can participate in device sharing.  Because it opens the devices
  2447.      * as shareable devices, other applications can gain control of the
  2448.      * devices.  When this happens, we will receive a pass device
  2449.      * message.  We keep track of this device passing in the fPassed
  2450.      * boolean variable.
  2451.      * If we do not have access to the device when we receive an
  2452.      * activate message, then we will issue an acquire device command
  2453.      * to gain access to the device.
  2454.      */
  2455.  
  2456.   case MM_MCIPASSDEVICE:
  2457.      if (SHORT1FROMMP(mp2) == MCI_GAINING_USE)
  2458.      {
  2459.         fPassed = FALSE;               /* Gaining control of device   */
  2460.      } else
  2461.      {
  2462.         fPassed = TRUE;                /* Losing control of device    */
  2463.      }
  2464.      return( WinDefSecondaryWindowProc( hwnd, msg, mp1, mp2 ) );
  2465.  
  2466.   case WM_ACTIVATE:
  2467.  
  2468.      /* We use the WM_ACTIVATE message to participate in device sharing.
  2469.       * We first check to see if this is an activate or a deactivate
  2470.       * message (indicated by mp1). Then, we check to see if we've
  2471.       * passed control of the device that we use.  If these conditions
  2472.       * are true, we issue an acquire device command to regain
  2473.       * control of the device, because we're now the active window on
  2474.       * the screen.
  2475.       *
  2476.       * This is one possible method that can be used to implement
  2477.       * device sharing. For applications that are more complex
  2478.       * than this sample program, developers may wish to take
  2479.       * advantage of a more robust method of device sharing.
  2480.       * This can be done by using the MCI_ACQUIRE_QUEUE flag on
  2481.       * the MCI_ACQUIREDEVICE command.
  2482.       */
  2483.  
  2484.      /*
  2485.       * First we check to see if we've passed control of the device
  2486.       */
  2487.  
  2488.   if ((BOOL)mp1 && fPassed == TRUE) {
  2489.  
  2490.      mciGenericParms.hwndCallback =  hwnd;
  2491.  
  2492.      ulError = mciSendCommand( mciOpenParameters.usDeviceID,
  2493.                                MCI_ACQUIREDEVICE,
  2494.                                (ULONG)MCI_NOTIFY,
  2495.                                (PVOID) &mciGenericParms,
  2496.                                (USHORT)NULL);
  2497.      if (ulError)
  2498.      {
  2499.        ShowAMessage(acStringBuffer[IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT-1];
  2500.                     IDS_CHIME_FILE_ERROR,  /* ID of message      */
  2501.                     MB_OK | MB_INFORMATION |
  2502.                     MB_HELP | MB_APPLMODAL |
  2503.                     MB_MOVEABLE );         /* Style of msg box.  */
  2504.      }
  2505.    }
  2506.    return( WinDefSecondaryWindowProc( hwnd, msg, mp1, mp2 ) );
  2507.  
  2508.  Regaining Control of a Shared Device 
  2509.  
  2510.  An application regains control of a shared device by issuing the 
  2511.  MCI_ACQUIREDEVICE message with mciSendCommand after it has received a 
  2512.  WM_ACTIVATE message. The application receives a WM_ACTIVATE message whenever 
  2513.  its frame window is activated or deactivated by user selection. The time for 
  2514.  the application to regain control of a shared device is during the period its 
  2515.  window is activated. A "greedy" application that grabs back a device as soon 
  2516.  as it loses it defeats the purpose of the WM_ACTIVATE message processing 
  2517.  scheme, which is to give control of a shared device to the application with 
  2518.  which the user is interacting. 
  2519.  
  2520.  Only dynamic single-context and limited multiple-context devices are acquired 
  2521.  by applications. The MCI_ACQUIREDEVICE function does not perform any function 
  2522.  for fixed single-context and unlimited-context devices, because device 
  2523.  contexts are not saved or restored for these classes of devices. 
  2524.  
  2525.  To better understand the allocation of resources to multiple device contexts, 
  2526.  imagine a stack of device contexts. The physical device is associated with the 
  2527.  topmost device context on the stack.  Whenever a device context is opened, it 
  2528.  is placed on top of the stack, and the physical device is associated with the 
  2529.  new device context. When MCI_ACQUIREDEVICE is issued for a particular device 
  2530.  context, that device context moves to the top of the stack, and the physical 
  2531.  device is associated with the existing device context. Closing a device 
  2532.  context removes it from the stack. 
  2533.  
  2534.  Queued Acquire Command 
  2535.  
  2536.  Setting the MCI_ACQUIRE_QUEUE flag of the MCI_ACQUIREDEVICE message enables 
  2537.  the message to be queued and executed as soon as device resources become 
  2538.  available.  An application can issue an MCI_ACQUIREDEVICE message and, at a 
  2539.  later point, the device context becomes active.  This is true if either the 
  2540.  MCI_NOTIFY or MCI_WAIT flag is specified.  If the MCI_WAIT flag is specified, 
  2541.  the calling thread is blocked until the device context becomes active. If the 
  2542.  MCI_ACQUIREDEVICE request can be satisfied immediately, the command is not 
  2543.  queued. 
  2544.  
  2545.  The acquire command can be used to acquire a device instance when the resource 
  2546.  becomes available: 
  2547.  
  2548.   open music1.wave alias wave1 shareable wait
  2549.   play wave1 notify
  2550.   .
  2551.   .
  2552.   .
  2553.   ** During this time a losing use message is received **
  2554.   ** and this instance becomes inactive.               **
  2555.   .
  2556.   .
  2557.   .
  2558.   acquire wave1 queue notify
  2559.  
  2560.  If an MCI_ACQUIREDEVICE is queued and an application issues MCI_RELEASEDEVICE 
  2561.  or MCI_CLOSE for that instance, the queued MCI_ACQUIREDEVICE message is 
  2562.  canceled. 
  2563.  
  2564.  Releasing the Resource 
  2565.  
  2566.  The release resource command is used in conjunction with the queued acquire 
  2567.  command. An application can release a device instance from the active state 
  2568.  and make the next available inactive device instance active by setting the 
  2569.  MCI_RETURN_RESOURCE flag of the MCI_RELEASEDEVICE message.  When a device 
  2570.  instance no longer needs its resources, the device instance can give up the 
  2571.  resource to another device requesting the resources (with MCI_ACQUIRE_QUEUE). 
  2572.  
  2573.  The release command as shown in the following example can be used to release 
  2574.  exclusive hold on a device. 
  2575.  
  2576.   open waveaudio alias wave2 shareable wait
  2577.   acquire wave2 exclusive wait
  2578.   record wave2 notify
  2579.   .
  2580.   .
  2581.   .
  2582.   ** Open the device exclusively to avoid interruptions **
  2583.   ** during recording.                                  **
  2584.   .
  2585.   .
  2586.   .
  2587.   stop wave2 wait
  2588.   release wave2 return resource wait
  2589.  
  2590.  The device instance will not be made active again unless an application issues 
  2591.  an MCI_ACQUIREDEVICE message for this device context. This function is ignored 
  2592.  if the instance is already in an inactive state.  The instance remains active 
  2593.  if the resource used by this instance is not required by any other instance. 
  2594.  
  2595.  
  2596. ΓòÉΓòÉΓòÉ 4.5.2. Using a Device Exclusively ΓòÉΓòÉΓòÉ
  2597.  
  2598. There are times when an application must retain control of the physical 
  2599. resource, such as the during the duration of a recording operation or when the 
  2600. application needs to establish specific settings for the device context. The 
  2601. application can retain control by not specifying the shareable flag with the 
  2602. open request or by setting the MCI_EXCLUSIVE flag of the MCI_ACQUIREDEVICE 
  2603. message. When a device has been acquired for exclusive use, other applications 
  2604. cannot acquire the device until the application using the device closes it or 
  2605. releases it from exclusive use with the MCI_RELEASEDEVICE message. When an 
  2606. application releases a device from exclusive use, it does not lose use of the 
  2607. device until another application acquires it. 
  2608.  
  2609. When an application needs to acquire a device context for exclusive use without 
  2610. acquiring the entire device resource, the application can set the 
  2611. MCI_EXCLUSIVE_INSTANCE flag of the MCI_ACQUIREDEVICE message. This flag 
  2612. prevents the device context from being made inactive unless the application 
  2613. using the device issues the MCI_CLOSE or MCI_RELEASEDEVICE message. 
  2614.  
  2615. The MCI_EXCLUSIVE_INSTANCE and MCI_EXCLUSIVE flags are mutually exclusive. An 
  2616. instance can be in one of three sharing states: 
  2617.  
  2618.      Instance exclusive 
  2619.      Device exclusive 
  2620.      Fully shareable 
  2621.  
  2622.  Using the MCI_EXCLUSIVE_INSTANCE flag places an instance in an 
  2623.  instance-exclusive sharing state.  Using the MCI_EXCLUSIVE flag places an 
  2624.  instance in a device-exclusive sharing state.  The MCI_RELEASEDEVICE message 
  2625.  places an instance in a fully shareable state. 
  2626.  
  2627.  
  2628. ΓòÉΓòÉΓòÉ 4.6. Device Groups ΓòÉΓòÉΓòÉ
  2629.  
  2630. When an OS/2 multimedia application needs to control more than one device at a 
  2631. time, it uses the MCI_GROUP message to group device contexts. The 
  2632. MCI_GROUP_MAKE and MCI_GROUP_DELETE flags are used to make and delete groups. 
  2633. MCI_GROUP_MAKE ties several device instances together so that a single command 
  2634. sent to the group by an application is actually sent to each device instance in 
  2635. the group by the multimedia system. This flag can be combined with any of the 
  2636. other MCI_GROUP flags except MCI_GROUP_DELETE in which case an 
  2637. MCIERR_FLAGS_NOT_COMPATIBLE error code is returned.  Device instances must have 
  2638. been previously opened but can be in any mode (such as, playing, stopped, or 
  2639. paused) for this message to be successful.  If one or more device IDs are 
  2640. invalid, the MCIERR_INVALID_DEVICE_ID error code is returned.  If a device ID 
  2641. or alias refers to a device in another group, the MCIERR_ID_ALREADY_IN_GROUP 
  2642. error code is returned. 
  2643.  
  2644. Once a group has been made, certain command messages sent to the group ID (or 
  2645. alias name) are sent to each device making up that group.  Command messages 
  2646. that support groups are: 
  2647.  
  2648.  MCI_ACQUIREDEVICE          MCI_RELEASEDEVICE 
  2649.  MCI_CLOSE                  MCI_RESUME 
  2650.  MCI_CUE                    MCI_SEEK 
  2651.  MCI_PAUSE                  MCI_SET 
  2652.  MCI_PLAY                   MCI_STOP 
  2653.  MCI_RECORD 
  2654.  
  2655.  Note:  Commands sent to a group must use the MCI_NOTIFY flag. 
  2656.  
  2657.  To end a group association, an application uses the MCI_GROUP_DELETE flag of 
  2658.  the MCI_GROUP message. None of the other flags of the MCI_GROUP message can be 
  2659.  combined with MCI_GROUP_DELETE because the only information required by this 
  2660.  flag is a group ID.  If any other flags are supplied an 
  2661.  MCIERR_FLAGS_NOT_COMPATIBLE error code is returned. The 
  2662.  MCIERR_INVALID_GROUP_ID error code is returned if an application passes an 
  2663.  invalid ID.  When a device in a group is closed, it is removed from the group. 
  2664.  When the last device in a group is closed, the group is automatically deleted. 
  2665.  
  2666.  Applications can use the MCI_GROUP_ALIAS flag to refer to a group by a name 
  2667.  rather than a group ID for use with the mciSendString interface.  This flag 
  2668.  can only be used with an MCI_GROUP_MAKE flag; the given alias is used to refer 
  2669.  to the new group.  If the alias is already in use, an MCIERR_DUPLICATE_ALIAS 
  2670.  error code is returned.  Each string group "make" command must include an 
  2671.  alias so the group can later be referred to.  The alias follows the group 
  2672.  command as shown by the following syntax: 
  2673.  
  2674.   group grp1 make (wave1 cd1) wait
  2675.  
  2676.  This defines the alias to be "grp1".  The list of device names (members of the 
  2677.  group) is delimited by parenthesis and separated by spaces and optional 
  2678.  quotation marks. The following syntax is used to delete this group: 
  2679.  
  2680.   group grp1 delete wait
  2681.  
  2682.  
  2683. ΓòÉΓòÉΓòÉ 4.6.1. Duet Player Sample Program Example ΓòÉΓòÉΓòÉ
  2684.  
  2685. The following code fragment illustrates the creation of a device group in the 
  2686. Duet Player I sample program. An array is filled with the IDs of opened devices 
  2687. to be associated in the group.  The application then calls MCI_GROUP to create 
  2688. the group and return a handle. 
  2689.  
  2690.  
  2691.   /* If this is the first time through this routine, then we need to
  2692.    * open the devices and make the group.
  2693.    *
  2694.    * On subsequent calls to this routine, the devices are already open
  2695.    * and the group is already made, so we only need to load the
  2696.    * appropriate files onto the devices.
  2697.    */
  2698.   {
  2699.   /*
  2700.    * Open one part of the duet. The first step is to initialize an
  2701.    * MCI_OPEN_PARMS data structure with the appropriate information,
  2702.    * then issue the MCI_OPEN command with the mciSendCommand function.
  2703.    * We will be using an open with only the element name specified.
  2704.    * This will cause the default connection, as specified in the
  2705.    * MMPM.INI file, for the data type.
  2706.    */
  2707.   mopDuetPart.hwndCallback   =  hwnd;     /* For MM_MCIPASSDEVICE   */
  2708.   mopDuetPart.usDeviceID     = (USHORT) NULL; /* this is returned   */
  2709.   mopDuetPart.pszDeviceType  = (PSZ) NULL;    /* using default conn.*/
  2710.   mopDuetPart.pszElementName = (PSZ) aDuet[sDuet].achPart1;
  2711.  
  2712.   ulError = mciSendCommand( (USHORT) 0,
  2713.                             MCI_OPEN,
  2714.                             MCI_WAIT | MCI_OPEN_ELEMENT |
  2715.                             MCI_OPEN_SHAREABLE | MCI_READONLY,
  2716.                             (PVOID) &mopDuetPart,
  2717.                             UP_OPEN);
  2718.  
  2719.   if (!ulError)  /* if we opened part 1 */
  2720.   {
  2721.      usDuetPart1ID = mopDuetPart.usDeviceID;
  2722.  
  2723.      /*
  2724.       * Now, open the other part.
  2725.       */
  2726.      mopDuetPart.pszElementName    = (PSZ)   aDuet[sDuet].achPart2;
  2727.  
  2728.      ulError = mciSendCommand( (USHORT) 0,
  2729.                                MCI_OPEN,
  2730.                                MCI_WAIT | MCI_OPEN_ELEMENT |
  2731.                                MCI_OPEN_SHAREABLE | MCI_READONLY,
  2732.                                (PVOID) &mopDuetPart,
  2733.                                UP_OPEN);
  2734.  
  2735.   if (!ulError)  /* if we opened part 2 */
  2736.   {
  2737.      usDuetPart2ID = mopDuetPart.usDeviceID;
  2738.  
  2739.  /*
  2740.   * Now we need to create a group.  To do this,
  2741.   * we need to fill an array with the IDs of the already open
  2742.   * devices that we want to group.  Then we call MCI_GROUP to
  2743.   * create the group and return a handle to it.
  2744.   */
  2745.  
  2746.  ulDeviceList[0] = (ULONG)usDuetPart1ID;
  2747.  ulDeviceList[1] = (ULONG)usDuetPart2ID;
  2748.  
  2749.  mgpGroupParms.hwndC  lback = (HWND) NULL;     /* Not needed -
  2750.                                                   we're waiting     */
  2751.  mgpGroupParms.ulNumDevices = NUM_PARTS;       /* Count of devices  */
  2752.  mgpGroupParms.paulDeviceID = (PULONG)&ulDeviceList; /* Array of
  2753.                                                         devices     */
  2754.  mgpGroupParms.ulStructLength = sizeof (mgpGroupParms);
  2755.  
  2756. ulError = mciSendCommand( (USHORT) 0,
  2757.                            MCI_GROUP,
  2758.                            MCI_WAIT | MCI_GROUP_MAKE|
  2759.                            MCI_NOPIECEMEAL,
  2760.                            (PVOID) &mgpGroupParms,
  2761.                            UP_GROUP);
  2762.  
  2763.  fFirstPlay = FALSE;
  2764.  
  2765.  
  2766. ΓòÉΓòÉΓòÉ 4.6.2. Resource Allocation ΓòÉΓòÉΓòÉ
  2767.  
  2768. An application avoids piecemeal resource allocation problems by setting the 
  2769. MCI_NOPIECEMEAL flag of the MCI_GROUP message. This flag specifies that the 
  2770. associated group is treated as a whole rather than several separate instances. 
  2771. If one of the device instances becomes inactive then all the instances in the 
  2772. group will go inactive. This flag can only be combined with the MCI_GROUP_MAKE 
  2773. flag as it specifies the nature of the group to be created.  If the 
  2774. MCI_NOPIECEMEAL flag is set during creation and one or more of the instances in 
  2775. the list of IDs or aliases is already inactive, the entire group will go 
  2776. inactive and each device in the group saves its state. The device contexts in 
  2777. the group can subsequently be restored by passing the group device context ID 
  2778. with the MCI_ACQUIREDEVICE message, using mciSendCommand. 
  2779.  
  2780. If the MCI_NOPIECEMEAL flag is not specified and devices are lost, the 
  2781. application retains control over the remaining devices in the group, unless one 
  2782. of the lost devices is the master of the group. When the master of a group of 
  2783. devices is lost, the group is lost. 
  2784.  
  2785.  
  2786. ΓòÉΓòÉΓòÉ 4.7. Event Synchronization ΓòÉΓòÉΓòÉ
  2787.  
  2788. Applications can perform event synchronization by taking an action at a 
  2789. specified point during the playback of a data object. There are two ways an 
  2790. application can do this: 
  2791.  
  2792.      The application can request to be notified when a specified point in 
  2793.       playback is encountered by sending the MCI_SET_CUEPOINT message to the 
  2794.       multimedia system.  When this cue point is encountered, the multimedia 
  2795.       system sends an MM_MCICUEPOINT message to the application. 
  2796.  
  2797.      The application can request notification on a periodic basis, based on 
  2798.       time or position, by sending the MCI_SET_POSITION_ADVISE message to the 
  2799.       multimedia system.  As each time period (or position) specified passes, 
  2800.       the multimedia system sends an MM_MCIPOSITIONCHANGE message to the 
  2801.       application. 
  2802.  
  2803.  
  2804. ΓòÉΓòÉΓòÉ 4.7.1. Cue Points ΓòÉΓòÉΓòÉ
  2805.  
  2806. Cue points are discrete locations or time positions in a media device.  When a 
  2807. device encounters a time position associated with a cue point, a message is 
  2808. returned to the application window handle that is specified to receive the cue 
  2809. point messages.  Cue points are maintained as part of a device context, so 
  2810. setting a cue point in one device context will not cause cue point messages to 
  2811. be generated for other device contexts. 
  2812.  
  2813. Applications specify cue points for a device with the MCI_SET_CUEPOINT message. 
  2814. A cue point is identified by its location; setting a cue point "on" sets a cue 
  2815. point at the specified location, and setting a cue point "off" removes the cue 
  2816. point.  Because cue points are identified by location, only one cue point can 
  2817. be set at a specified location in the media. Therefore, setting a cue point at 
  2818. a location where a cue point is already set causes the second MCI_SET_CUEPOINT 
  2819. to fail and to return the error MCIERR_DUPLICATE_CUEPOINT. Cue points can be 
  2820. set at any valid location in the media, regardless of current media position. 
  2821. If a device is currently playing at 2:00 (two minutes), and a cue point is set 
  2822. at 1:00 (one minute) in the media, and the device is subsequently seeked and 
  2823. played from the beginning, the cue point message will be generated when the 
  2824. device passes the 1:00 point in the media. 
  2825.  
  2826. Cue points are persistent.  That is, they remain set after they are 
  2827. encountered.  The device will generate cue point messages whenever the cue 
  2828. point location is encountered, which may be many times if the device is seeked 
  2829. or played repeatedly. Cue points are encountered only when a device is playing 
  2830. or recording.  If a device is seeked from its current position to some new 
  2831. position, cue points set at locations between the old and new position are not 
  2832. encountered during the seek operation, and no cue point messages are generated. 
  2833.  
  2834. Because cue points can be set only within the valid range of a media element, 
  2835. cue points cannot be set when a file is not loaded. All cue points for a device 
  2836. context are removed when a new file element is loaded. 
  2837.  
  2838. Cue points also can be created as part of a media element.  In the case of cue 
  2839. points imbedded directly in a media element, the MCI_SET_CUEPOINT message 
  2840. performs no function.  Imbedded cue points always result in cue point messages 
  2841. being returned when they are encountered.  The user parameter value returned on 
  2842. the cue point message varies from one media data type to another and should be 
  2843. set to a meaning that is significant to the application. 
  2844.  
  2845. When a cue point is encountered, an MM_MCICUEPOINT message is sent to the 
  2846. window specified by the hwndCallback field of the MCI_CUEPOINT_PARMS data 
  2847. structure passed with the MCI_SET_CUEPOINT message.  The MM_MCICUEPOINT message 
  2848. parameters contain the device ID of the device context that generated the cue 
  2849. point message, as well as the media position and an additional 
  2850. application-defined parameter that can be specified when the cue point is set. 
  2851. Although the media position specified by the application on the 
  2852. MCI_SET_CUEPOINT message is in the currently set device units, the media 
  2853. position returned on the MM_MCICUEPOINT message is always in MMTIME units. 
  2854. MMTIME units are used because the time format set when the cue point is set 
  2855. might not be the same time format set when the cue point is encountered. 
  2856.  
  2857. The maximum number of cue points that can be set in a device context is defined 
  2858. by the implementation of the logical device. Devices generally support up to 20 
  2859. cue points per device context. 
  2860.  
  2861.  
  2862. ΓòÉΓòÉΓòÉ 4.7.2. Position Advises ΓòÉΓòÉΓòÉ
  2863.  
  2864. In addition to notification messages at discrete locations in the media, 
  2865. periodic notification of elapsed media time can also be requested.  These 
  2866. periodic messages, referred to as "position advise" messages, are requested for 
  2867. a device context based on a specified time interval.  Position advise messages 
  2868. are requested by issuing the MCI_SET_POSITION_ADVISE message to a device 
  2869. context as shown in the following code fragment. 
  2870.  
  2871.         MCI_OPEN_PARMS   mop;
  2872. static  MCI_PLAY_PARMS   mpp;      /* parms for MCI_PLAY         */
  2873. static  MCI_POSITION_PARMS mppPos; /* parms for
  2874.                                       MCI_SET_POSITION_ADVISE */
  2875.  
  2876. iState = ST_PLAYING;           /* Set state to reflect play mode   */
  2877.  
  2878. mppPos.hwndCallback = hwndMainDlg;
  2879. mppPos.ulUnits    = 1500;      /* Request position advise messages */
  2880. mppPos.usUserParm = usPositionUP;
  2881. mppPos.Reserved0  = 0;
  2882. mciSendCommand    ( mop.usDeviceID,
  2883.                     MCI_SET_POSITION_ADVISE,
  2884.                     MCI_NOTIFY | MCI_SET_POSITION_ADVISE_ON,
  2885.                     (PVOID) &mppPos,
  2886.                     UP_POSITION );
  2887.  
  2888. This causes MM_MCIPOSITIONCHANGE messages to be returned to the application 
  2889. window specified in the MCI_POSITION_PARMS structure at the requested frequency 
  2890. as media time passes in the device context.  Only one position advise frequency 
  2891. may be active for a device context, and having position advise notification 
  2892. active in one device context does not cause messages to be generated in other 
  2893. device contexts.  Position advise messages can be set only when a device 
  2894. element is loaded in the device context, and are reset when a new device 
  2895. element is loaded. 
  2896.  
  2897. Like MM_MCICUEPOINT messages, MM_MCIPOSITIONCHANGE message parameters contain 
  2898. the device ID of the device context that generated the position advise message, 
  2899. as well as the media position and an additional application-defined parameter 
  2900. that can be specified when the position advise notification is requested. 
  2901. Although the media position interval (frequency) specified by the application 
  2902. on the MCI_SET_POSITION_ADVISE message is in the currently set device units, 
  2903. the media position returned on the MM_MCIPOSITIONCHANGE message is always in 
  2904. MMTIME units. MMTIME units are used because the time format set when the 
  2905. position advise notification is set might not be the same time format set when 
  2906. the position advise notification messages are returned. 
  2907.  
  2908. Position advise notifications are generated only during playback or recording. 
  2909. MM_MCIPOSITIONCHANGE messages are usually not generated during seek operations 
  2910. initiated by the application. The exception is a device, such as a tape 
  2911. recorder, that has a discernible position during the seek operation.  A device 
  2912. like this can generate position advise messages as the media is traversed, to 
  2913. indicate the progress of the seek operation. 
  2914.  
  2915. The following code fragment shows how the Caption Sample application handles 
  2916. the MM_MCIPOSITIONCHANGE message. When the Caption Sample application receives 
  2917. a position change message, it updates its media position slider arm allowing 
  2918. the application to advance the media position slider smoothly as the audio 
  2919. plays. 
  2920.  
  2921. case MM_MCIPOSITIONCHANGE:
  2922.  /*
  2923.   * This message will be returned (in MMTIME) to the application
  2924.   * whenever the audio position changes. This time will be used to
  2925.   * increment the audio position slider. This message is only
  2926.   * generated during playback.
  2927.   */
  2928.  if ( eState == ST_PLAYING )
  2929.  {
  2930.     ulTime = (ULONG) LONGFROMMP(mp2);
  2931.  
  2932.     /*
  2933.      * Get the new slider arm position and set it.
  2934.      */
  2935.     sArmPosition =
  2936.        (SHORT) ( ( ulTime * ( sAudioArmRange - 1) ) / ulAudioLength );
  2937.     WinSendMsg(
  2938.        hwndAudioSlider,
  2939.        SLM_SETSLIDERINFO,
  2940.        MPFROM2SHORT( SMA_SLIDERARMPOSITION, SMA_RANGEVALUE ),
  2941.        MPFROMSHORT( sArmPosition ));
  2942.  }
  2943.  return 0;
  2944.  
  2945.  
  2946. ΓòÉΓòÉΓòÉ 4.8. System Values ΓòÉΓòÉΓòÉ
  2947.  
  2948. The OS/2 multimedia system provides a number of system-wide values that can be 
  2949. queried and set by applications. Because OS/2 multimedia applications such as 
  2950. Volume Control and Multimedia Setup allow users to set system values, it is 
  2951. recommended that applications only query the settings users have selected. The 
  2952. following table describes the system values that can be queried and set using 
  2953. mciQuerySysValue and mciSetSysValue. 
  2954.  
  2955. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  2956. ΓöéSystem Value        ΓöéDescription                                  Γöé
  2957. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2958. ΓöéMSV_CLOSEDCAPTION   ΓöéQuery or set the current state of a          Γöé
  2959. Γöé                    Γöécaptioning flag.                             Γöé
  2960. Γöé                    ΓöéBy querying the setting of this flag, an     Γöé
  2961. Γöé                    Γöéapplication can determine whether to display Γöé
  2962. Γöé                    Γöétext along with audio, for example, for a    Γöé
  2963. Γöé                    Γöéhearing-impaired user.                       Γöé
  2964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2965. ΓöéMSV_MASTERVOLUME    ΓöéQuery or set the current master audio level. Γöé
  2966. Γöé                    ΓöéThis value acts as a "multiplier" of the     Γöé
  2967. Γöé                    Γöéindividual volume levels of each device      Γöé
  2968. Γöé                    Γöécontext, allowing one application to control Γöé
  2969. Γöé                    Γöéthe volume for a number of open devices or   Γöé
  2970. Γöé                    Γöéelements.                                    Γöé
  2971. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2972. ΓöéMSV_HEADPHONES      ΓöéReserved for future use.                     Γöé
  2973. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2974. ΓöéMSV_SPEAKERS        ΓöéReserved for future use.                     Γöé
  2975. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2976. ΓöéMSV_WORKPATH        ΓöéQuery or set the directory for storing of    Γöé
  2977. Γöé                    Γöétemporary files by the media driver.         Γöé
  2978. Γöé                    ΓöéThis value can be used to point to, for      Γöé
  2979. Γöé                    Γöéexample, a directory on the hard disk that   Γöé
  2980. Γöé                    Γöéholds waveform data from a recording         Γöé
  2981. Γöé                    Γöéoperation.                                   Γöé
  2982. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2983. ΓöéMSV_SYSQOSERRORFLAG ΓöéQuery the Quality of Service (QOS) error     Γöé
  2984. Γöé                    Γöéflag.                                        Γöé
  2985. Γöé                    ΓöéBy querying this flag, an application can    Γöé
  2986. Γöé                    Γöédetermine an error occuring during band-widthΓöé
  2987. Γöé                    Γöéreservation.                                 Γöé
  2988. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  2989. ΓöéMSV_SYSQOSVALUE     ΓöéQuery or set the QOS specification value.    Γöé
  2990. Γöé                    ΓöéThis system-wide Quality of Service (QOS)    Γöé
  2991. Γöé                    Γöéspecification value is used for band-width   Γöé
  2992. Γöé                    Γöéreservation (for example, bytes per second)  Γöé
  2993. Γöé                    Γöéover the network.                            Γöé
  2994. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  2995.  
  2996. The following code fragment demonstrates how to obtain the multimedia work 
  2997. path. 
  2998.  
  2999. CHAR szWorkpath[CCHMAXPATH] ;   /* Work path for temporary files */
  3000.  
  3001. if ( mciQuerySysValue( MSV_WORKPATH, szWorkPath ) )
  3002.   {
  3003.   /* mciQuerySysValue was successful, szWorkPath now */
  3004.   /* contains the multimedia workpath                */
  3005.   }
  3006.  
  3007.  
  3008. ΓòÉΓòÉΓòÉ 4.8.1. Clock Sample Program Caption Query ΓòÉΓòÉΓòÉ
  3009.  
  3010. When it is time to chime the clock, the Clock Sample program checks the system 
  3011. captioning flag to determine whether or not it should display a visual chime 
  3012. while the audio chime is playing.  The Clock program sets the global variable 
  3013. fClosedCaptionIsSet to store the value of the system captioning flag. 
  3014.  
  3015.  /*
  3016.   * If the Captioning Flag indicates that the bell should be
  3017.   * animated (swung), the region of the presentation space
  3018.   * that contains the bell bitmap is to be invalidated so that a
  3019.   * WM_PAINT will be sent to draw the bells.
  3020.   */
  3021.  mciQuerySysValue( MSV_CAPTION, (PVOID)&fCaptionIsSet );
  3022.  
  3023.  
  3024. ΓòÉΓòÉΓòÉ 5. Multimedia Logical Devices ΓòÉΓòÉΓòÉ
  3025.  
  3026. OS/2 multimedia represents audio adapters, CD-ROM drives, videodiscs and other 
  3027. real hardware devices as logical media devices that are managed by the Media 
  3028. Device Manager (MDM). Media devices are a logical representation of the 
  3029. function available from either a real hardware device, software emulation in 
  3030. combination with real hardware, or pure software emulation. The actual 
  3031. implementation is not relevant to an application, because the multimedia system 
  3032. provides device independence with the mciSendCommand and mciSendString 
  3033. interfaces. 
  3034.  
  3035. The following logical devices are currently supported in this release of OS/2. 
  3036. Additional media devices may be available from IBM or from other companies as 
  3037. OS/2 multimedia is completely extensible at all levels. 
  3038.  
  3039.      Amplifier mixer 
  3040.      Waveform audio 
  3041.      MIDI sequencer 
  3042.      CD audio 
  3043.      CD-XA 
  3044.      Videodisc 
  3045.      Digital video 
  3046.  
  3047.  Frequently there is a one-to-one correspondence between a real hardware 
  3048.  device, such as a CD-ROM drive and its associated media device. Other hardware 
  3049.  may be represented as multiple logical devices. For example, a multi-function 
  3050.  audio adapter can be represented as waveform audio, MIDI sequencer, and 
  3051.  amplifier-mixer media devices. 
  3052.  
  3053.  The following sections describe the function and typical use of each media 
  3054.  device, plus the software model presented to the application developer. 
  3055.  
  3056.  
  3057. ΓòÉΓòÉΓòÉ 5.1. Multimedia Information and OS/2 Multimedia Connectors ΓòÉΓòÉΓòÉ
  3058.  
  3059. A connector is a software representation of the physical way in which 
  3060. multimedia data moves from one device to another.  Simple examples are the 
  3061. headphone jack on a CD-ROM player, or the speakers jack on an audio adapter. 
  3062. If an audio card has both a speaker and a line OUT jack, it is desirable to let 
  3063. an application choose the destination of the audio, while remaining independent 
  3064. from the actual hardware implementation. 
  3065.  
  3066. OS/2 multimedia connectors provide this function by allowing an application to 
  3067. query which connectors are supported by a logical device, and manipulate 
  3068. whether or not information is flowing through the connector. The connectors for 
  3069. a logical device can be accessed either by number or by a symbolic connector 
  3070. type.  When specifying a symbolic type such as microphone or line IN, a number 
  3071. can also be specified to select the first connector, second connector, and so 
  3072. on, of that specific connector type. The MCI_CONNECTORINFO message can be used 
  3073. to determine which connectors are supported by a device, whereas the 
  3074. MCI_CONNECTOR message can be used to enable, disable, or query the state of a 
  3075. particular connector. 
  3076.  
  3077. Although connectors are typically associated with the representation of 
  3078. externally visible audio and video jacks on multimedia equipment, another 
  3079. category of connectors can represent the flow of information within a computer. 
  3080. For example, a connector on an audio adapter can be attached to the internal PC 
  3081. speaker.  A more subtle example is the flow of digital audio information into 
  3082. an audio adapter.  This information could come from a file, system memory, or 
  3083. another device.  Connectors of this category are referred to as stream 
  3084. connectors to convey the idea of a logical stream of information flowing from 
  3085. one device to another. 
  3086.  
  3087.  
  3088. ΓòÉΓòÉΓòÉ 5.2. Connector Types ΓòÉΓòÉΓòÉ
  3089.  
  3090. Each connector is defined by specific type or name, so that applications can 
  3091. make requests symbolically instead of using an absolute connector number that 
  3092. is device dependent.  If an application specifies only a connector type, then 
  3093. the default connector of that type is selected on the device.  Both a type and 
  3094. a number may be specified to select connectors when more than one connector of 
  3095. the same type exists on a device. 
  3096.  
  3097. The following table describes connector types and typical uses. 
  3098.  
  3099. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3100. ΓöéConnector Type            ΓöéName         ΓöéDescription                        Γöé
  3101. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3102. ΓöéMCI_MIDI_STREAM_CONNECTOR Γöémidi stream  ΓöéDigital input or output for the    Γöé
  3103. Γöé                          Γöé             Γöésequencer device.  This informationΓöé
  3104. Γöé                          Γöé             Γöéis typically streamed to an        Γöé
  3105. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  3106. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3107. ΓöéMCI_CD_STREAM_CONNECTOR   Γöécd stream    ΓöéDigital output from a CD-ROM drive Γöé
  3108. Γöé                          Γöé             Γöécapable of reading the CD-DA data  Γöé
  3109. Γöé                          Γöé             Γöédirectly off the disc.  This       Γöé
  3110. Γöé                          Γöé             Γöéinformation is typically streamed  Γöé
  3111. Γöé                          Γöé             Γöéto an amplifier-mixer logical      Γöé
  3112. Γöé                          Γöé             Γöédevice.                            Γöé
  3113. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3114. ΓöéMCI_XA_STREAM_CONNECTOR   Γöéxa stream    ΓöéThe flow of digital audio          Γöé
  3115. Γöé                          Γöé             Γöéinformation from a CD-ROM/XA drive Γöé
  3116. Γöé                          Γöé             Γöécapable of streaming the ADPCM dataΓöé
  3117. Γöé                          Γöé             Γöéinternally.  This information is   Γöé
  3118. Γöé                          Γöé             Γöétypically streamed to an           Γöé
  3119. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  3120. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3121. ΓöéMCI_WAVE_STREAM_CONNECTOR Γöéwave stream  ΓöéDigital input or output for the    Γöé
  3122. Γöé                          Γöé             Γöéwaveaudio device. This information Γöé
  3123. Γöé                          Γöé             Γöéis typically streamed to an        Γöé
  3124. Γöé                          Γöé             Γöéamplifier-mixer logical device.    Γöé
  3125. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3126. ΓöéMCI_AMP_STREAM_CONNECTOR  Γöéamp stream   ΓöéThe flow of information to an      Γöé
  3127. Γöé                          Γöé             Γöéamplifier-mixer device.  Typically Γöé
  3128. Γöé                          Γöé             Γöéthis information comes from anotherΓöé
  3129. Γöé                          Γöé             Γöélogical device and can include     Γöé
  3130. Γöé                          Γöé             ΓöéMIDI, and various kinds of digital Γöé
  3131. Γöé                          Γöé             Γöéaudio.                             Γöé
  3132. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3133. ΓöéMCI_HEADPHONES_CONNECTOR  Γöéheadphones   ΓöéThe connector on the device labeledΓöé
  3134. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  3135. Γöé                          Γöé             Γöéheadphones to the device.          Γöé
  3136. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3137. ΓöéMCI_SPEAKERS_CONNECTOR    Γöéspeakers     ΓöéThe connector on the device labeledΓöé
  3138. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  3139. Γöé                          Γöé             Γöéspeakers to the device.            Γöé
  3140. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3141. ΓöéMCI_MICROPHONE_CONNECTOR  Γöémicrophone   ΓöéThe connector on the device labeledΓöé
  3142. Γöé                          Γöé             Γöéfor, or typically used, to attach aΓöé
  3143. Γöé                          Γöé             Γöémicrophone to the device.          Γöé
  3144. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3145. ΓöéMCI_LINE_IN_CONNECTOR     Γöéline in      ΓöéThe connector on the device labeledΓöé
  3146. Γöé                          Γöé             Γöéfor, or typically used to provide  Γöé
  3147. Γöé                          Γöé             Γöéline level input to the device.    Γöé
  3148. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3149. ΓöéMCI_LINE_OUT_CONNECTOR    Γöéline out     ΓöéThe connector on the device labeledΓöé
  3150. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  3151. Γöé                          Γöé             Γöéline level output from the device. Γöé
  3152. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3153. ΓöéMCI_VIDEO_IN_CONNECTOR    Γöévideo in     ΓöéThe connector on the device labeledΓöé
  3154. Γöé                          Γöé             Γöéfor, or typically used to provide  Γöé
  3155. Γöé                          Γöé             Γöévideo input to the device.         Γöé
  3156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3157. ΓöéMCI_VIDEO_OUT_CONNECTOR   Γöévideo out    ΓöéThe connector on the device labeledΓöé
  3158. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  3159. Γöé                          Γöé             Γöévideo output from the device.      Γöé
  3160. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3161. ΓöéMCI_PHONE_SET_CONNECTOR   Γöéphone set    ΓöéThe connector on the device labeledΓöé
  3162. Γöé                          Γöé             Γöéfor, or typically used, to attach aΓöé
  3163. Γöé                          Γöé             Γöéphone set to the device.           Γöé
  3164. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3165. ΓöéMCI_PHONE_LINE_CONNECTOR  Γöéphone line   ΓöéThe connector on the device labeledΓöé
  3166. Γöé                          Γöé             Γöéfor, or typically used, to attach  Γöé
  3167. Γöé                          Γöé             Γöéan external phone line to the      Γöé
  3168. Γöé                          Γöé             Γöédevice.                            Γöé
  3169. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3170. ΓöéMCI_AUDIO_IN_CONNECTOR    Γöéaudio in     ΓöéThe connector on the device labeledΓöé
  3171. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  3172. Γöé                          Γöé             Γöéaudio input to the device.         Γöé
  3173. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3174. ΓöéMCI_AUDIO_OUT_CONNECTOR   Γöéaudio out    ΓöéThe connector on the device labeledΓöé
  3175. Γöé                          Γöé             Γöéfor, or typically used, to provide Γöé
  3176. Γöé                          Γöé             Γöéaudio output from the device.      Γöé
  3177. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3178. ΓöéMCI_UNIVERSAL_CONNECTOR   Γöéuniversal    ΓöéA connector on a device which does Γöé
  3179. Γöé                          Γöé             Γöénot fall into any of the other     Γöé
  3180. Γöé                          Γöé             Γöécategories.  This connector type   Γöé
  3181. Γöé                          Γöé             Γöémay be used to access device       Γöé
  3182. Γöé                          Γöé             Γöédependent function.  The           Γöé
  3183. Γöé                          Γöé             Γöémanufacturer of the device should  Γöé
  3184. Γöé                          Γöé             Γöédefine the exact use of this       Γöé
  3185. Γöé                          Γöé             Γöéconnector.                         Γöé
  3186. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3187.  
  3188.  
  3189. ΓòÉΓòÉΓòÉ 5.3. A Connector Example Using the IBM M-Audio Adapter ΓòÉΓòÉΓòÉ
  3190.  
  3191. The following figure illustrates how the capabilities of an audio card might be 
  3192. modeled as an OS/2 amplifier-mixer device using connectors.  This example uses 
  3193. the IBM M-Audio Capture and Playback Adapter, however a model can easily be 
  3194. defined for any manufacturer's audio card.  The number and type of connectors 
  3195. may vary. 
  3196.  
  3197. In this particular model, the speakers(1) connector is the default speakers 
  3198. connector and represents the physical speaker jack on the M-Audio card.  The 
  3199. speakers(2) connector represents the internal connection to the PC speaker. 
  3200. The amp stream connector represents the flow of digital information to and from 
  3201. the audio card. 
  3202.  
  3203.  
  3204. ΓòÉΓòÉΓòÉ 5.4. Establishing Connections between Devices ΓòÉΓòÉΓòÉ
  3205.  
  3206. A connection is the establishment of a flow of information from one device 
  3207. connector to a compatible connector on another device.  One example of a 
  3208. connection is the attachment of a speaker to an audio card with speaker wire. 
  3209. Typically, an application might enable the speaker connector on an audio card, 
  3210. causing the flow of information out of the speaker connector.  If you have 
  3211. connected the wire, then the audio is heard.  In this case the multimedia 
  3212. system must rely on a person to make the actual connection. 
  3213.  
  3214. Another category of connection exists where the connection is made internally 
  3215. in the computer, typically through the transfer of digital information from one 
  3216. media device to another.  For instance, the waveaudio media device has a 
  3217. connection to its associated amplifier mixer device. 
  3218.  
  3219.  
  3220. ΓòÉΓòÉΓòÉ 5.5. Default and Device Context Connections ΓòÉΓòÉΓòÉ
  3221.  
  3222. Device connections are usually automatically established by the media device 
  3223. when the device is opened.  The choice of connection is determined by a default 
  3224. established during installation of the media driver, and can be re-established 
  3225. using the MCI_DEFAULT_CONNECTION message. 
  3226.  
  3227. Once opened, the media device may open and connect to another media device to 
  3228. provide the complete function of the originally opened device to the 
  3229. application.  This is transparent to the calling application.  One example is 
  3230. the waveaudio device, which uses a connected amplifier-mixer device to actually 
  3231. produce sound from the digital audio stream.  The waveaudio device also uses 
  3232. the services of the amplifier-mixer device to set the volume. 
  3233.  
  3234. While some services of the connected device can be surfaced in the definition 
  3235. of the originally opened device, the connected device can also provide some 
  3236. extended features beyond those required by the original device.  If the 
  3237. application wishes to access these extended features, it can get the handle to 
  3238. the particular device context or instance of the connected device, using the 
  3239. MCI_CONNECTION message. 
  3240.  
  3241. Note the subtle difference between a default connection and a device context 
  3242. connection.  A default connection is the name of a connected device, whereas a 
  3243. device context connection is the actual handle to a particular instance of an 
  3244. opened device.  An example of this is a waveaudio01 device that has a default 
  3245. connection to an ampmix01 device.  When the waveaudio01 device is opened, it 
  3246. automatically opens the ampmix01 device, creating an instance of each device. 
  3247. Because devices may be shared in OS/2 multimedia, the waveaudio01 device can be 
  3248. opened again by another application and two new instances will be created. 
  3249. Although the default connection is the same in both cases, the device context 
  3250. connections are different. 
  3251.  
  3252.  
  3253. ΓòÉΓòÉΓòÉ 5.6. Connectors Supported by Media Drivers ΓòÉΓòÉΓòÉ
  3254.  
  3255. Each implementation of a media device defines the connectors that it supports. 
  3256. This information is maintained in the media driver and can vary with the 
  3257. underlying hardware. 
  3258.  
  3259. The following table lists each media device and the connector types applicable 
  3260. to each device.  The actual number and types of connectors in each device can 
  3261. vary from one implementation to another. 
  3262.  
  3263. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3264. ΓöéDevice Type    ΓöéConnectors                                   Γöé
  3265. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3266. Γöéampmix         Γöéamp stream, headphones, speakers, microphone,Γöé
  3267. Γöé               Γöéline in, line out                            Γöé
  3268. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3269. Γöécdaudio        Γöécd stream, headphones                        Γöé
  3270. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3271. Γöécdxa           Γöéxa stream                                    Γöé
  3272. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3273. Γöédigitalvideo   Γöéheadphones, speakers, microphone, line in,   Γöé
  3274. Γöé               Γöéline out, audio in, audio out                Γöé
  3275. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3276. Γöéheadphones     Γöéaudio in                                     Γöé
  3277. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3278. Γöémicrophone     Γöéaudio out                                    Γöé
  3279. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3280. Γöésequencer      Γöémidi stream, headphones, speakers, line out  Γöé
  3281. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3282. Γöévideodisc      Γöévideo out, line out                          Γöé
  3283. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3284. Γöéspeakers       Γöéaudio in                                     Γöé
  3285. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3286. Γöéwaveaudio      Γöéwave stream, headphones, speakers,           Γöé
  3287. Γöé               Γöémicrophone, line in, line out                Γöé
  3288. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3289.  
  3290.  
  3291. ΓòÉΓòÉΓòÉ 5.7. Allowable Connections for Connector Types ΓòÉΓòÉΓòÉ
  3292.  
  3293. For a connection to exist between two media devices, the connectors on each 
  3294. device must be of compatible types. For instance, a connection could be 
  3295. established between the line OUT connector on one device and the line IN 
  3296. connector on another device, however a connection between line OUT and video IN 
  3297. is prohibited. This mechanism will eliminate the majority of incorrect 
  3298. connections. The following table lists the allowable connections based on 
  3299. connector types.  These connections are allowed in either direction. Please 
  3300. note that this table should be read as meaning that a device which has a 
  3301. connector of the type in the first column can connect to a device which has a 
  3302. connector of the type in the second column. 
  3303.  
  3304. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3305. Γöéamp stream     Γöé<->Γöéwave stream    Γöé
  3306. Γöé               Γöé   Γöémidi stream    Γöé
  3307. Γöé               Γöé   Γöécd stream      Γöé
  3308. Γöé               Γöé   Γöéxa stream      Γöé
  3309. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3310. Γöéline in        Γöé<->Γöéline out       Γöé
  3311. Γöé               Γöé   Γöéaudio out      Γöé
  3312. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3313. Γöéaudio in       Γöé<->Γöéheadphones     Γöé
  3314. Γöé               Γöé   Γöéspeakers       Γöé
  3315. Γöé               Γöé   Γöéline out       Γöé
  3316. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3317. Γöévideo in       Γöé<->Γöévideo out      Γöé
  3318. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3319. Γöéheadphones     Γöé<->Γöéaudio in       Γöé
  3320. Γöé               Γöé   Γöéline in        Γöé
  3321. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3322. Γöéspeakers       Γöé<->Γöéaudio in       Γöé
  3323. Γöé               Γöé   Γöéline in        Γöé
  3324. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3325. Γöémicrophone     Γöé<->Γöéaudio out      Γöé
  3326. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3327. Γöéphone line     Γöé<->Γöéphone set      Γöé
  3328. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3329.  
  3330. The connections in the table shown above are based on connector types, not 
  3331. device types. The list of connections might appear incorrect if the connector 
  3332. types are misinterpreted as device types. For example, "headphones <-> audio 
  3333. in" might be misinterpreted as meaning that headphones can be connected to an 
  3334. audio input. Referring to however, we see that the HEADPHONE device has a 
  3335. connector of type audio in.  This connector is analogous to the plug on the 
  3336. headphones and, from the perspective of the headphones, it is input.  We also 
  3337. see that the AMPMIX and CDAUDIO devices have connectors of type headphones. The 
  3338. connection is correct, because headphones can be connected to either the CD 
  3339. player (CDAUDIO) or to the audio adapter (AMPMIX). 
  3340.  
  3341.  
  3342. ΓòÉΓòÉΓòÉ 6. Amplifier-Mixer Device ΓòÉΓòÉΓòÉ
  3343.  
  3344. The OS/2 amplifier-mixer (ampmix) device is similar to a home stereo 
  3345. amplifier-mixer.  Components are plugged into the amplifier-mixer so that audio 
  3346. signals can be transferred to a pair of attached speakers, headphones, or 
  3347. perhaps another device. A comparable example of connecting to another device is 
  3348. playing an old phonograph record, and recording the sound on a new DAT (Digital 
  3349. Audio Tape) deck.  The ampmix is the center of all audio signals and provides 
  3350. input or output switching and sound shaping services such as volume, treble, or 
  3351. bass control. 
  3352.  
  3353. The logical ampmix device in OS/2 supports both analog and digital devices. 
  3354. Other OS/2 multimedia logical devices may be connected to the ampmix device. 
  3355. Similar to the previous example, the CD audio logical device could provide an 
  3356. analog input to the ampmix device, which could then be recorded by the digital 
  3357. waveform audio device. 
  3358.  
  3359. Both a logical ampmix device and the audio adapter performs all the functions 
  3360. surfaced by the ampmix device.  Two important points are the speaker and amp 
  3361. stream connectors. 
  3362.  
  3363. Although there is actually no visible speaker jack on the back of the audio 
  3364. card, it is a convenient fiction for an application to view the PC internal 
  3365. speaker as another set of speakers that might be plugged into the back of the 
  3366. audio card.  Using the previously defined concept of a connector, an 
  3367. application can view all flows of information into and out of the ampmix device 
  3368. in a similar fashion.  Selecting the internal speaker as opposed to the 
  3369. external speakers may require the ampmix device to issue a completely different 
  3370. set of instructions to the actual hardware device.  The application, however, 
  3371. remains completely device independent. 
  3372.  
  3373. The other features of the ampmix device are provided by either issuing commands 
  3374. to the hardware device, or emulating in software.  One example of software 
  3375. emulation is the support of changing the volume over a period of time, or fade 
  3376. in/fade out.  The audio card may only support setting the volume to a 
  3377. particular value, however the ampmix device can send a series of values to 
  3378. achieve the fade effect. 
  3379.  
  3380.  
  3381. ΓòÉΓòÉΓòÉ 6.1. The Amp Stream Connector ΓòÉΓòÉΓòÉ
  3382.  
  3383. The amp stream connector represents the flow of digital information to and from 
  3384. the ampmix device.  Again similar to home stereo amplifier-mixers, the ampmix 
  3385. device by itself is not especially notable until another device is attached. 
  3386. Information is transferred from the device and played back on a pair of 
  3387. attached speakers.  Note that the ampmix device is a conduit of information, 
  3388. and relies on another device to provide the flow of information.  Therefore, 
  3389. commands for the transport of information (such as play, seek, or stop), are 
  3390. sent to the attached device.  Commands for transforming the information (such 
  3391. as treble or bass) are sent directly to the ampmix device. 
  3392.  
  3393. As a nicety for applications, the attached device will provide volume control, 
  3394. so that the application need not provide ampmix functions unless some advanced 
  3395. audio functions are required.  The volume command is transparently routed to 
  3396. the attached ampmix device.  If the application needs to talk directly to the 
  3397. ampmix device, the value of the stream connector may be queried using the 
  3398. MCI_CONNECTION message, which returns a device context connection.  If the 
  3399. string interface is being used, an alias can be established for the connected 
  3400. device. Ampmix commands may then be sent directly to the ampmix device. 
  3401.  
  3402. Some devices also provide a connector service, which also alleviates the need 
  3403. to talk directly to the ampmix device for frequently requested function.  An 
  3404. example of this is the waveaudio device, which attempts to process requests for 
  3405. speakers and several other connector types.  If the service is available from 
  3406. the associated ampmix device it is routed; otherwise, the function fails.  The 
  3407. connectors and connector services provided by each OS/2 multimedia logical 
  3408. device are discussed in the section for that device. 
  3409.  
  3410.  
  3411. ΓòÉΓòÉΓòÉ 6.2. Sharing the Amplifier-Mixer Device ΓòÉΓòÉΓòÉ
  3412.  
  3413. Because many components of OS/2 multimedia utilize the amplifier-mixer device, 
  3414. it is typically opened shareable so that several devices can use the ampmix 
  3415. device simultaneously, or serially, in an application-window-focus driven 
  3416. sharing scheme. The Media Device Manager (MDM) is responsible for allocating 
  3417. the resources of the underlying hardware correctly and informs an application 
  3418. with the MM_MCIPASSDEVICE message whenever use of the ampmix device is gained 
  3419. or lost. 
  3420.  
  3421. When other media devices in an application use the ampmix device, the 
  3422. amplifier-mixer becomes a source of contention, depending on the capabilities 
  3423. of the underlying audio adapter.  For example, the IBM M-Audio adapter supports 
  3424. the simultaneous playback of two mono 22 kHz PCM waveforms.  However, if a 
  3425. third waveform is started, one of the previous two waveforms must be suspended. 
  3426. The application that opened the waveform audio (waveaudio) device receives a 
  3427. MM_MCIPASSDEVICE message with an event of MCI_LOSING_USE. Following completion 
  3428. of the third waveform, the second waveform is automatically restored and can 
  3429. then play to completion.  See Device Sharing By Applications for information on 
  3430. device sharing. 
  3431.  
  3432. The OS/2 multimedia system manages all device sharing, and informs the 
  3433. application when the device is temporarily unavailable. 
  3434.  
  3435.  
  3436. ΓòÉΓòÉΓòÉ 6.3. Audio Attributes ΓòÉΓòÉΓòÉ
  3437.  
  3438. The OS/2 ampmix device provides the following control of audio signals. Current 
  3439. values of audio attributes are retrieved using the MCI_STATUS message. New 
  3440. values are set using the MCI_SET command. 
  3441.  
  3442. Support of these features can vary by manufacturer. Some companies may develop 
  3443. ampmix devices for use in OS/2 multimedia that provide additional capabilities. 
  3444. To determine whether the device supports a feature, use the MCI_GETDEVCAPS 
  3445. message. If the feature is not supported, MCIERR_UNSUPPORTED_FLAG is returned. 
  3446.  
  3447.  volume 
  3448.       Sets mixer-channel volume level as a percentage of the maximum achievable 
  3449.       effect. Volume of the left and right channels for stereo signals can be 
  3450.       set simultaneously using the keyword all, or independently using keywords 
  3451.       left and right. The keyword over can be added to fade the volume in or 
  3452.       out over a specified period of time. 
  3453.  
  3454.  treble 
  3455.       Sets treble as a percentage of the maximum achievable effect. The effect 
  3456.       applies to the final output mix. Any specification of a channel is 
  3457.       ignored. 
  3458.  
  3459.  bass 
  3460.       Sets bass as a percentage of the maximum achievable effect. The effect 
  3461.       applies to the final output mix. Any specification of a channel is 
  3462.       ignored. 
  3463.  
  3464.  balance 
  3465.       Sets balance. Zero is full left balance, 100 is full right balance. The 
  3466.       effect applies to the final output mix. Any specification of a channel is 
  3467.       ignored. 
  3468.  
  3469.  pitch 
  3470.       Sets pitch as a percentage of the maximum achievable effect. The effect 
  3471.       applies to the final output mix. Any specification of a channel is 
  3472.       ignored. 
  3473.  
  3474.  gain 
  3475.       Sets gain as a percentage of the maximum achievable effect for the 
  3476.       currently selected input. 
  3477.  
  3478.  monitor 
  3479.       Sets monitor on or off. This feature controls whether or not the signal 
  3480.       from an input device is heard when it is routed to another device for 
  3481.       recording. 
  3482.  
  3483.  mute 
  3484.       Sets mute on or off. 
  3485.  
  3486.  loudness 
  3487.       Sets loudness as a percentage of the maximum achievable effect. 
  3488.  
  3489.  mid 
  3490.       Sets mid as a percentage of the maximum achievable effect. 
  3491.  
  3492.  reverb 
  3493.       Sets reverb as a percentage of the maximum achievable effect. 
  3494.  
  3495.  auto level control 
  3496.       Sets auto-level control (ALC) as a percentage of the maximum achievable 
  3497.       effect. 
  3498.  
  3499.  chorus 
  3500.       Sets chorus as a percentage of the maximum achievable effect. 
  3501.  
  3502.  crossover 
  3503.       Sets crossover as a percentage of the maximum achievable effect. 
  3504.  
  3505.  custom1 
  3506.       Sets first custom effect as a percentage of the maximum achievable 
  3507.       effect. 
  3508.  
  3509.  custom2 
  3510.       Sets second custom effect as a percentage of the maximum achievable 
  3511.       effect. 
  3512.  
  3513.  custom3 
  3514.       Sets third custom effect as a percentage of the maximum achievable 
  3515.       effect. 
  3516.  
  3517.  stereoenhance 
  3518.       Sets stereo enhancement as a percentage of the maximum achievable effect. 
  3519.  
  3520.  
  3521. ΓòÉΓòÉΓòÉ 6.4. Amp Mixer Connectors ΓòÉΓòÉΓòÉ
  3522.  
  3523. The following connectors are typically supported by ampmix devices: 
  3524.  
  3525.       MCI_AMP_STREAM_CONNECTOR 
  3526.       MCI_HEADPHONES_CONNECTOR 
  3527.       MCI_LINE_IN_CONNECTOR 
  3528.       MCI_LINE_OUT_CONNECTOR 
  3529.       MCI_MICROPHONE_CONNECTOR 
  3530.       MCI_SPEAKERS_CONNECTOR 
  3531.  
  3532.  The number and type of connectors supported by an audio device varies by 
  3533.  manufacturer. To determine which connectors are supported, an application can 
  3534.  issue the MCI_CONNECTORINFO message. 
  3535.  
  3536.  The ampmix device provides audio attribute control for individual connectors. 
  3537.  An application can set an audio attribute for a connector with MCI_SET by 
  3538.  specifying the connector in the ulValue field of the MCI_AMP_SET_PARMS 
  3539.  structure. If ulValue contains MCI_AMP_STREAM_CONNECTOR, the setting affects 
  3540.  the global output of the device. 
  3541.  
  3542.  An application can query the capabilities of a connector by using the 
  3543.  MCI_GETDEVCAPS_EXTENDED message in combination with the MCI_MIXER_LINE flag in 
  3544.  the ulExtended field of the MCI_AMP_GETDEVCAPS_PARMS structure. The 
  3545.  ulAttribute field contains the audio attribute, and the ulValue field contains 
  3546.  the connector whose capabilities you are querying. 
  3547.  
  3548.  The following example illustrates how an application can determine whether it 
  3549.  can set the volume for a particular connector. 
  3550.  
  3551.   ULONG                      rc;            /* Return code */
  3552.   MCI_AMP_GETDEVCAPS_PARMS   mciAmpCaps;    /* Ampmix caps */
  3553.   USHORT                     usDeviceID;    /* Device ID   */
  3554.  
  3555.   /* Test mixer support for volume changes on the microphone */
  3556.  
  3557.   mciAmpCaps.ulValue     = MCI_MICROPHONE_CONNECTOR;
  3558.   mciAmpCaps.ulAttribute = MCI_AMP_CAN_SET_VOLUME;
  3559.   mciAmpCaps.ulExtended  = MCI_MIXER_LINE;
  3560.  
  3561.   rc = mciSendCommand(usDeviceID,
  3562.                       MCI_GETDEVCAPS,
  3563.                       MCI_WAIT|MCI_GETDEVCAPS_EXTENDED,
  3564.                       (ULONG) &mciAmpCaps,
  3565.                       0);
  3566.  
  3567.  
  3568. ΓòÉΓòÉΓòÉ 6.5. Synchronizing Audio Attribute Settings ΓòÉΓòÉΓòÉ
  3569.  
  3570. In an organized multimedia environment applications must be able to synchronize 
  3571. their audio settings with other applications. Whenever a user makes changes to 
  3572. an application's audio settings, other applications need to be informed of the 
  3573. changes so they can update their settings to conform to the changes made by the 
  3574. user. 
  3575.  
  3576. An application can request notification about mixer events by sending an 
  3577. MCI_MIXNOTIFY message with MCI_MIXNOTIFY_ON specified. The application will 
  3578. then receive an MM_MCIEVENT message whenever a mixer attribute is changed, or a 
  3579. connector is enabled or disabled. When the system passes the MM_MCIEVENT 
  3580. message, the usEventCode field of the MsgParam1 parameter contains MM_MIXEVENT, 
  3581. and the MsgParam2 parameter contains a pointer to MCI_MIXEVENT_PARMS. 
  3582.  
  3583. Attention:  To avoid creating a terminal loop, the application must not set an 
  3584. audio attribute while processing the MM_MCIEVENT message. 
  3585.  
  3586. typedef struct_MCI_MIXEVENT_PARMS {
  3587.  
  3588.   ULONG   ulLength;         /* Length of structure             */
  3589.   HWND    hwndMixer;        /* Window to receive mixer changes */
  3590.   ULONG   ulFlags;          /* Either MCI_MIX_ATTRIBUTE
  3591.                                or MCI_MIX_CONNECTOR            */
  3592.   USHORT  usDeviceID;       /* Device ID to notify of change   */
  3593.   ULONG   ulDeviceType;     /* Device type that caused change  */
  3594.   ULONG   ulDeviceOrdinal;  /* Ordinal of device type          */
  3595.   ULONG   ulAttribute;      /* Attribute that changed          */
  3596.   ULONG   ulValue;          /* New value of changed attribute  */
  3597.   ULONG   ulConnectorType;  /* Connector type                  */
  3598.   ULONG   ulConnectorIndex; /* Connector index                 */
  3599.   ULONG   ulConnStatus;     /* Connector enabled/disabled      */
  3600.  
  3601. } MCI_MIXEVENT_PARMS;
  3602.  
  3603. typedef MCI_MIXEVENT_PARMS *PMCI_MIXEVENT_PARMS;
  3604.  
  3605. The ulFlags field contains one of the following values: 
  3606.  
  3607.      MIX_ATTRIBUTE 
  3608.  
  3609.      MIX_CONNECTOR 
  3610.  
  3611.  If the mixer event is the changing of an attribute, ulAttribute, ulDeviceType, 
  3612.  and ulValue fields are valid. 
  3613.  
  3614.  If the mixer event is the changing of a connector, ulConnectorType, 
  3615.  ulConnectorIndex, and ulConnStatus fields are valid. 
  3616.  
  3617.  The following example illustrates how an application can set up notification 
  3618.  for every audio attribute change. 
  3619.  
  3620.   MCI_GENERIC_PARMS mixevent;
  3621.  
  3622.   mixevent.hwndCallback = hwndmixer;
  3623.  
  3624.   if (hMixer)
  3625.      {
  3626.      mciSendCommand(hMixer,
  3627.                     MCI_MIXNOTIFY,
  3628.                     MCI_WAIT | MCI_MIXNOTIFY_ON
  3629.                     (PVOID) &mixevent,
  3630.                     0);
  3631.  
  3632.  When MCI_MIXNOTIFY_ON is specified, the hwndCallback field of 
  3633.  MCI_GENERIC_PARMS must contain a valid window handle. 
  3634.  
  3635.  
  3636. ΓòÉΓòÉΓòÉ 6.6. Direct Audio RouTines (DART) Interface ΓòÉΓòÉΓòÉ
  3637.  
  3638. OS/2 multimedia provides application developers with a number of choices for 
  3639. playing and recording audio files. They can: 
  3640.  
  3641.      Open the waveaudio device 
  3642.      Open a memory playlist and use operation codes 
  3643.      Use the direct audio interface of the ampmix device 
  3644.  
  3645.  The waveaudio device provides an easy-to-use interface that works well for 
  3646.  applications with simple audio requirements. However time-critical game 
  3647.  applications usually demand a faster response time than the waveaudio device 
  3648.  can achieve, because of the device-independent layers of software between it 
  3649.  and the audio device. 
  3650.  
  3651.  The memory playlist method of audio playback and recording reduces some of the 
  3652.  system overhead that the waveaudio device incurs, because the playlist can 
  3653.  stream audio data directly from application memory buffers to audio device 
  3654.  buffers. But the playlist is not the ideal solution when precise buffer flow 
  3655.  control is needed. 
  3656.  
  3657.  The Direct Audio RouTines (DART) interface for the ampmix device enables games 
  3658.  and multimedia applications to bypass the waveaudio device entirely and 
  3659.  communicate directly with the amp mixer. Using this interface, applications 
  3660.  get the high-speed audio response they require, while remaining compatible 
  3661.  with existing OS/2 multimedia applications. Because DART uses the media 
  3662.  control interface (MCI), applications using DART can share the audio device 
  3663.  with other applications simply by processing the MM_MCIPASSDEVICE message. 
  3664.  
  3665.  DART offers the following advantages: 
  3666.  
  3667.      Preallocation of user memory 
  3668.      No threads 
  3669.      Function pointers instead of API 
  3670.      Time-critical notifications 
  3671.      Tailorable number of buffers 
  3672.  
  3673.  
  3674. ΓòÉΓòÉΓòÉ 6.7. Using the DART Interface ΓòÉΓòÉΓòÉ
  3675.  
  3676. To read and write audio data directly to the mixer device using the DART 
  3677. interface, the application does the following: 
  3678.  
  3679.    1. Opens the mixer device with MCI_OPEN 
  3680.  
  3681.    2. Initializes the mixer to use DART with MCI_MIX_SETUP 
  3682.  
  3683.    3. Allocates memory buffers with MCI_BUFFER 
  3684.  
  3685.    4. Uses function pointers to read and write data from the audio device 
  3686.  
  3687.    5. Uses MCI_STATUS_POSITION for precision timing 
  3688.  
  3689.    6. Controls data transfer with MCI_PAUSE, MCI_RESUME, MCI_STOP 
  3690.  
  3691.    7. Deallocates memory buffers with MCI_BUFFER 
  3692.  
  3693.    8. Closes the mixer device with MCI_CLOSE 
  3694.  
  3695.  
  3696. ΓòÉΓòÉΓòÉ 6.7.1. Setting Up the Mixer ΓòÉΓòÉΓòÉ
  3697.  
  3698. The application sends the MCI_MIX_SETUP message to the amp mixer to initialize 
  3699. the device for direct reading and writing of audio data in the correct mode and 
  3700. format-for example, PCM, MIDI, or MPEG audio. 
  3701.  
  3702. If waveform audio data will be played or recorded, the application fills in the 
  3703. ulDeviceType field with MCI_DEVICETYPE_WAVEFORM_AUDIO. It must also provide 
  3704. values for the following digital-audio-specific fields:  format tag, bits per 
  3705. sample, number of samples per second, and number of channels. 
  3706.  
  3707. If MIDI data will be played, the application fills in the ulDeviceType field 
  3708. with a value of MCI_DEVICETYPE_SEQUENCER and places zeroes in the format 
  3709. specifications fields. 
  3710.  
  3711. typedef struct_MCI_MIXSETUP_PARMS
  3712.   {
  3713.   HWND        hwndCallback;    /* IN  Window for notifications */
  3714.   ULONG       ulBitsPerSample; /* IN  Number of bits per sample */
  3715.   ULONG       ulFormatTag;     /* IN  Format tag */
  3716.   ULONG       ulSamplesPerSec  /* IN  Sampling rate */
  3717.   ULONG       ulChannels;      /* IN  Number of channels */
  3718.   ULONG       ulFormatMode;    /* IN  MCI_RECORD or MCI_PLAY */
  3719.   ULONG       ulDeviceType;    /* IN  MCI_DEVTYPE */
  3720.   ULONG       ulMixHandle;     /* OUT Read/Write handle */
  3721.   PMIXERPROC  pmixWrite;       /* OUT Write routine entry point */
  3722.   PMIXERPROC  pmixRead;        /* OUT Read routine entry point */
  3723.   PMIXEREVENT pmixEvent;       /* IN  Event routine entry point */
  3724.   PVOID       pExtendedInfo;   /* IN  Media-specific info */
  3725.   ULONG       ulBufferSize;    /* OUT Recommended buffer size */
  3726.   ULONG       ulNumBuffers;    /* OUT Recommended num buffers */
  3727.   } MCI_MIXSETUP_PARMS;
  3728.  
  3729. The application must also fill in the pmixEvent field of the MCI_MIXSETUP_PARMS 
  3730. structure with a function pointer for the mixer to use for event notification, 
  3731. such as a full buffer, empty buffer, or an error condition. If the call to the 
  3732. mixer is successful, it returns two function pointers to the application-one 
  3733. for reading data (mixRead) and the other for writing data (mixWrite) to the 
  3734. audio device. 
  3735.  
  3736. An application can use the MCI_MIXSETUP_QUERYMODE flag to query a device to see 
  3737. if a particular mode is supported. The following example illustrates using 
  3738. MCI_MIXSETUP to query and prepare the audio device for playing 16-bit, 22050 
  3739. KHz stereo mode. 
  3740.  
  3741.  
  3742.    // MCI_MIXSETUP informs the mixer device of the entry point
  3743.    // to report buffers being read or written.
  3744.    // We will also need to tell the mixer which media type
  3745.    // we will be streaming.  In this case, we'll use
  3746.    // MCI_DEVTYPE_WAVEFORM_AUDIO.
  3747.  
  3748.     memset( &MixSetupParms, '\0', sizeof( MCI_MIXSETUP_PARMS ) );
  3749.  
  3750.    MixSetupParms.ulBitsPerSample = 16;
  3751.    MixSetupParms.ulFormatTag     = MCI_WAVE_FORMAT_PCM;
  3752.    MixSetupParms.ulSamplesPerSec = 22050;
  3753.    MixSetupParms.ulChannels = 2;    /* Stereo */
  3754.    MixSetupParms.ulFormatMode = MCI_PLAY;
  3755.    MixSetupParms.ulDeviceType = MCI_DEVTYPE_WAVEFORM_AUDIO;
  3756.  
  3757.  
  3758.     rc = mciSendCommand( usDeviceID,
  3759.                          MCI_MIXSETUP,
  3760.                          MCI_WAIT | MCI_MIXSETUP_QUERYMODE,
  3761.                          ( PVOID ) &MixSetupParms,
  3762.                          0 );
  3763.  
  3764.  
  3765.     if ( ULONG_LOWD( rc ) != MCIERR_SUCCESS )
  3766.            {
  3767.            CHAR  szError[255];
  3768.              // The device can't handle this format
  3769.              // get an English error message for the caller.
  3770.            mciGetErrorString( ULONG_LOWD( rc ), szError, 255 );
  3771.            printf("Can't play because of %s", szError );
  3772.            exit( 1 );
  3773.            }
  3774.  
  3775.    // The mixer will inform us of entry points to
  3776.    // read/write buffers to and also give us a
  3777.    // handle to use with these entry points.
  3778.  
  3779.    MixSetupParms.pmixEvent = MyEvent;
  3780.  
  3781.  
  3782.     rc = mciSendCommand( usDeviceID,
  3783.                          MCI_MIXSETUP,
  3784.                          MCI_WAIT | MCI_MIXSETUP_INIT,
  3785.                          ( PVOID ) &MixSetupParms,
  3786.                          0 );
  3787.  
  3788.  
  3789. ΓòÉΓòÉΓòÉ 6.7.2. Allocating Memory Buffers ΓòÉΓòÉΓòÉ
  3790.  
  3791. After the mixer device is set up to use DART, the application instructs the 
  3792. device to allocate memory by sending the MCI_BUFFER message with the 
  3793. MCI_ALLOCATE_MEMORY flag set. The application uses the MCI_BUFFER_PARMS 
  3794. structure to specify the number of buffers it wants and the size to be used for 
  3795. each buffer. 
  3796.  
  3797. Note:  Because of device driver restrictions, buffers are limited to 64KB on 
  3798.        Intel-based systems. No such limit exists on PowerPC systems. 
  3799.  
  3800.  The pBufList field contains a pointer to an array of MCI_MIX_BUFFER structures 
  3801.  where the allocated information is to be returned. 
  3802.  
  3803.   typedef struct_MCI_BUFFER_PARMS {
  3804.     HWND   hwndCallback;    /* Window for notifications */
  3805.     ULONG  ulStructLength;  /* Length of MCI_BUFFER_PARMS */
  3806.     ULONG  ulNumBuffers;    /* Number of buffers to allocate (IN/OUT)*/
  3807.     ULONG  ulBufferSize;    /* Size of buffers mixer should use */
  3808.     ULONG  ulMintoStart;    /* Unused */
  3809.     ULONG  ulSrcStart;      /* Unused */
  3810.     ULONG  ulTgtStart;      /* Unused */
  3811.     PVOID  pBufList;        /* Pointer to array of buffers */
  3812.   } MCI_BUFFER_PARMS;
  3813.  
  3814.   typedef MCI_BUFFER_PARMS *PMCI_BUFFER_PARMS;
  3815.  
  3816.  The following example illustrates using MCI_BUFFER to allocate memory. 
  3817.  
  3818.  
  3819.      MCI_MIX_BUFFER   MyBuffers[ MAX_BUFFERS ];
  3820.  
  3821.       BufferParms.ulNumBuffers = 40;
  3822.       BufferParms.ulBufferSize = 4096;
  3823.       BufferParms.pBufList = MyBuffers;
  3824.  
  3825.        rc = mciSendCommand( usDeviceID,
  3826.                      MCI_BUFFER,
  3827.                      MCI_WAIT | MCI_ALLOCATE_MEMORY,
  3828.                      ( PVOID ) &BufferParms,
  3829.                      0 );
  3830.  
  3831.        if ( ULONG_LOWD( rc) != MCIERR_SUCCESS )
  3832.           {
  3833.           printf( "Error allocating memory.  rc is : %d", rc );
  3834.           exit ( 1 );
  3835.           }
  3836.  
  3837.        // MCI driver will return the number of buffers it
  3838.        // was able to allocate
  3839.        // it will also return the size of the information
  3840.        // allocated with each buffer.
  3841.  
  3842.        ulNumBuffers = BufferParms.ulNumBuffers;
  3843.  
  3844.        for ( ulLoop = 0; ulLoop < ulNumBuffers; ulLoop++ )
  3845.           {
  3846.           rc = mmioRead ( hmmio,
  3847.                          MyBuffers[ ulLoop ].pBuffer,
  3848.                          MyBuffers[ ulLoop ].ulBufferLength);
  3849.  
  3850.           if ( !rc )
  3851.              {
  3852.              exit( rc );
  3853.              }
  3854.           MyBuffers[ ulLoop ].ulUserParm = ulLoop;
  3855.  
  3856.           }
  3857.  
  3858.  
  3859. ΓòÉΓòÉΓòÉ 6.7.3. Reading and Writing Data ΓòÉΓòÉΓòÉ
  3860.  
  3861. The MCI_MIX_BUFFER structure is used for reading and writing data to and from 
  3862. the mixer. 
  3863.  
  3864. Once the device is set up and memory has been allocated, the application can 
  3865. use the function pointers obtained during MCI_MIXSETUP to communicate with the 
  3866. mixer. During a playback operation, the application fills the buffers with 
  3867. audio data and then writes the buffers to the mixer device using the pmixWrite 
  3868. entry point. When audio data is being recorded, the mixer device fills the 
  3869. buffers using the pmixRead entry point. Each buffer returned the the 
  3870. application has a time stamp (in milliseconds) attached so the program can 
  3871. determine the current time of the device. 
  3872.  
  3873. typedef struct_MCI_MIX_BUFFER {
  3874.   ULONG  ulStructLength;  /* Length of the structure */
  3875.   ULONG  pBuffer;         /* Pointer to a buffer */
  3876.   ULONG  ulBufferLength;  /* Length of the buffer */
  3877.   ULONG  ulFlags;         /* Flags */
  3878.   ULONG  ulUserParm;      /* User buffer parameter */
  3879.   ULONG  ulTime;          /* Device time in milliseconds */
  3880.   ULONG  ulReserved1;     /* Unused */
  3881.   ULONG  ulReserved2;     /* Unused */
  3882.   } MCI_MIX_BUFFER;
  3883. typedef MCI_MIX_BUFFER *PMCI_MIX_BUFFER
  3884.  
  3885. MCI_STOP, MCI_PAUSE, and MCI_RESUME are used to stop, pause, or resume the 
  3886. audio device, respectively. MCI_STOP and MCI_PAUSE can only be sent to the 
  3887. mixer device after mixRead and mixWrite have been called. MCI_RESUME will only 
  3888. work after MCI_PAUSE has been sent. 
  3889.  
  3890. Note:  After your application has completed data transfers, issue MCI_STOP to 
  3891.        avoid a pause the next time the mixer device is started. 
  3892.  
  3893.  If your application needs more precise timing information than provided by the 
  3894.  time stamp returned with each buffer, you can use MCI_STATUS with the 
  3895.  MCI_STATUS_POSITION flag to retrieve the current time of the device in MMTIME 
  3896.  units. 
  3897.  
  3898.  
  3899. ΓòÉΓòÉΓòÉ 6.8. Master Volume and the Ampmix Device ΓòÉΓòÉΓòÉ
  3900.  
  3901. The maximum volume level of all logical devices in the system are controlled by 
  3902. the Volume Control application supplied with OS/2 multimedia. The Volume 
  3903. Control application sets a scale by which all subsequent volume commands to the 
  3904. ampmix device are based. For instance, if the Volume Control sets the master 
  3905. volume at 50%, then all volume levels are cut in half. 
  3906.  
  3907. Some devices may only support two levels of volume (on/off). These devices are 
  3908. off when the master volume is set to zero, and on at any other value. 
  3909.  
  3910. Note:  While the MCI_MASTERAUDIO message can be sent by any application, only 
  3911.        the master volume application or a replacement should utilize this 
  3912.        message to set the master volume. Master volume should only be 
  3913.        controlled at the discretion of an end user as implemented in the Volume 
  3914.        Control application. A parameter of the MCI_MASTERAUDIO message allows 
  3915.        an application or a media driver to query the master volume level. 
  3916.  
  3917.  
  3918. ΓòÉΓòÉΓòÉ 6.9. Amplifier-Mixer Command Messages ΓòÉΓòÉΓòÉ
  3919.  
  3920. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  3921. ΓöéMessage             ΓöéDescription                                  Γöé
  3922. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3923. ΓöéMCI_BUFFER          ΓöéAllocates or deallocates memory for use with Γöé
  3924. Γöé                    Γöéthe audio device.                            Γöé
  3925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3926. ΓöéMCI_CONNECTOR       ΓöéEnables, disables, or queries the status of aΓöé
  3927. Γöé                    Γöéconnector on a device.                       Γöé
  3928. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3929. ΓöéMCI_CLOSE           ΓöéCloses the amp mixer instance.               Γöé
  3930. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3931. ΓöéMCI_GETDEVCAPS      ΓöéGets device capabilities.                    Γöé
  3932. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3933. ΓöéMCI_INFO            ΓöéGets device information.                     Γöé
  3934. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3935. ΓöéMCI_MIX_SETUP       ΓöéSets up the device in the correct mode (for  Γöé
  3936. Γöé                    Γöéexample, PCM, MPEG audio, or MIDI).          Γöé
  3937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3938. ΓöéMCI_OPEN            ΓöéOpens an instance of the amp mixer.          Γöé
  3939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3940. ΓöéMCI_PAUSE           ΓöéPauses playback or recording.                Γöé
  3941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3942. ΓöéMCI_RESUME          ΓöéResumes playback or recording.               Γöé
  3943. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3944. ΓöéMCI_SET             ΓöéSets audio attributes using the              Γöé
  3945. Γöé                    ΓöéMCI_AMP_SET_PARMS structure. For a list of   Γöé
  3946. Γöé                    Γöésupported attributes, see Audio Attributes.  Γöé
  3947. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3948. ΓöéMCI_STATUS          ΓöéGets device status.                          Γöé
  3949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  3950. ΓöéMCI_STOP            ΓöéStops playback or recording.                 Γöé
  3951. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  3952.  
  3953.  
  3954. ΓòÉΓòÉΓòÉ 6.10. M-Audio Adapter Specifics ΓòÉΓòÉΓòÉ
  3955.  
  3956.    1. The speakers (1) connector is the external speakers jack on the back of 
  3957.       the card. The speakers (2) connector is really the internal PC speaker. 
  3958.  
  3959.    2. The Line OUT and speakers (1) connectors can be enabled or disabled by 
  3960.       the ampmix device, although the adapter is incapable of actually 
  3961.       switching the output.  The ampmix device does report that the connector 
  3962.       is actually enabled or disabled. 
  3963.  
  3964.    3. The speakers(2) connector can be enabled or disabled, resulting in the PC 
  3965.       internal speaker being turned on or off. 
  3966.  
  3967.    4. The microphone and line IN connectors are mutually exclusive. Enabling 
  3968.       one connector automatically disables the other.  Disabling both 
  3969.       connectors automatically enables the microphone. 
  3970.  
  3971.    5. The amp stream connector represents the transfer of digital audio 
  3972.       information to and from the M-Audio card.  This connector is always 
  3973.       enabled. 
  3974.  
  3975.    6. The M-Audio adapter does not support independent control of volume for 
  3976.       the left and right channels of a stereo signal.  Any device connected to 
  3977.       an M-Audio amplifier-mixer device returns MCIERR_UNSUPPORTED_FLAG if an 
  3978.       attempt is made to independently control the volume of the left and right 
  3979.       channels with the MCI_SET command. 
  3980.  
  3981.  
  3982. ΓòÉΓòÉΓòÉ 7. Waveform Audio Device ΓòÉΓòÉΓòÉ
  3983.  
  3984. The OS/2 waveform audio (waveaudio) device allows an application to play or 
  3985. record digital audio using files or application memory buffers.  While audio 
  3986. refers to the sound waves (changes in air pressure) that have a perceived 
  3987. effect on the human ear, waveform refers to a digital representation of the 
  3988. original audio sound wave.  Using one technique called pulse code modulation 
  3989. (PCM), discrete samples of the sound wave are encoded by an audio adapter at 
  3990. precise intervals. The numerical value of the sample increases when the sound 
  3991. wave's force (loudness) increases. The variation of the sample increases as the 
  3992. frequency of the sound wave increases. 
  3993.  
  3994. The number of samples per second taken of the original sound wave as well as 
  3995. the precision (or resolution) of the sample dictate the quality of the sound 
  3996. reproduction.  Typical sampling rates include 44 kHz, 22 kHz, and 11 kHz, where 
  3997. kHz is an abbreviation for kilohertz or thousands of cycles per second.  The 
  3998. sampling precision is usually measured in bits where 8 or 16 bits per sample 
  3999. are representative of most audio adapters. Mono or stereo refers to the number 
  4000. of channels transferring digital audio. Mono represents one channel and stereo 
  4001. represents two channels. 
  4002.  
  4003. Generally, the higher the sampling rate and resolution, the higher the 
  4004. perceived quality; however this comes at the expense of potentially enormous 
  4005. data rates and file sizes. For example, audio quality equivalent to that 
  4006. produced by a CD audio device requires a sampling rate of 44.1 kHz, and 16-bit 
  4007. resolution for each of the channels in a stereo recording. This information 
  4008. alone results in a data rate of 176 kilobytes per second!  Luckily, many 
  4009. applications of digital audio are adequately supported with sampling rates and 
  4010. resolutions as low as 22 kHz and 8 bits respectively.  The exact choice of 
  4011. parameters will vary, depending on the requirements of the application. 
  4012.  
  4013.  
  4014. ΓòÉΓòÉΓòÉ 7.1. The Wave Stream Connector ΓòÉΓòÉΓòÉ
  4015.  
  4016. The wave stream connector represents the flow of digital information to and 
  4017. from the waveaudio device to its associated amplifier-mixer (ampmix) device. 
  4018. During playback, the waveaudio device sends digitized sounds from either 
  4019. application memory or files to the ampmix device for subsequent conversion into 
  4020. audio that can be heard through conventional speakers or headphones. When 
  4021. recording, the waveaudio device receives waveforms from the ampmix device and 
  4022. stores the digital information in a file or in application memory. 
  4023.  
  4024. Control of the characteristics of the waveform information is provided by the 
  4025. waveaudio device.  The quality of the waveform can be controlled by setting the 
  4026. format, sampling rate, bits per sample, and the number of channels.  As an 
  4027. additional service, the waveaudio device will also allow the volume to be 
  4028. controlled.  This service is actually provided by the ampmix device in a way 
  4029. that is transparent to the calling application. If other advanced audio shaping 
  4030. features are required, the application can retrieve the device ID of the ampmix 
  4031. device using the MCI_CONNECTION message.  Once the device ID has been obtained, 
  4032. the application can send commands directly to the ampmix device.  Examples 
  4033. include set commands to manipulate treble, bass, and balance. 
  4034.  
  4035.  
  4036. ΓòÉΓòÉΓòÉ 7.1.1. Waveaudio Device Features ΓòÉΓòÉΓòÉ
  4037.  
  4038.      Multiple time formats 
  4039.  
  4040.      Waveform characteristics 
  4041.  
  4042.            Data Format 
  4043.            File format (RIFF WAVE, AVC, or others if an MMIO procedure is 
  4044.            supplied) 
  4045.            Sampling rate 
  4046.            Bits per sample (resolution) 
  4047.            Number of channels 
  4048.  
  4049.      Playback and record sources 
  4050.  
  4051.            File system 
  4052.            Application memory 
  4053.  
  4054.      Audio shaping 
  4055.  
  4056.            Volume control 
  4057.            Other features that might be available through the associated ampmix 
  4058.            device 
  4059.  
  4060.      Cue point and position advise notification 
  4061.  
  4062.  
  4063. ΓòÉΓòÉΓòÉ 7.2. Waveform Data Formats ΓòÉΓòÉΓòÉ
  4064.  
  4065. There are several formats used for storing waveform data within a computer 
  4066. system.  OS/2 multimedia recognizes several resolutions of the Pulse Code 
  4067. Modulation (PCM) format, because it is supported by most audio adapters. OS/2 
  4068. multimedia also recognizes ADPCM formats. Refer to the Appendix of the OS/2 
  4069. Multimedia Programming Reference for descriptions of these formats. 
  4070.  
  4071. Pulse Code Modulation (PCM) refers to the variation of a digital signal to 
  4072. represent audio amplitude. This method of assigning binary values to amplitude 
  4073. levels supports the conversion of analog signals to digital signals by adapters 
  4074. such as the M-Audio Capture and Playback Adapter. 
  4075.  
  4076. Adaptive Differential Pulse Code Modulation (ADPCM) is a technique for 
  4077. compressing waveform samples. ADPCM can reduce the amount of data storage 
  4078. required by a factor of 16 to 1, but some price is paid in fidelity for the 
  4079. higher compression rates. 
  4080.  
  4081.  
  4082. ΓòÉΓòÉΓòÉ 7.2.1. M-Audio Adapter Specifics ΓòÉΓòÉΓòÉ
  4083.  
  4084. The following tables list the valid MCI_WAVE_SET items for the operation modes 
  4085. currently supported by the M-Audio Capture and Playback Adapter. 
  4086.  
  4087. Note:  Numbers in table stand for number of channels supported in this mode-- 
  4088.        mono (1), stereo (2), N/A (Not Available) 
  4089.  
  4090.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4091.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  4092.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4093.   Γöé8-bit          Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé
  4094.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4095.   Γöé16-bit         Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé1, 2        Γöé
  4096.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4097.  
  4098.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4099.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  4100.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4101.   Γöé8-bit          ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  4102.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4103.   Γöé16-bit         ΓöéN/A         Γöé1           Γöé1, 2        Γöé1           Γöé
  4104.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4105.  
  4106.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4107.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  4108.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4109.   Γöé8-bit          Γöé1,2         Γöé1,2         Γöé1,2         Γöé1,2         Γöé
  4110.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4111.   Γöé16-bit         ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  4112.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4113.  
  4114.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4115.   ΓöéData Size      Γöé8000 Hz     Γöé11025 Hz    Γöé22050 Hz    Γöé44100 Hz    Γöé
  4116.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4117.   Γöé8-bit          Γöé1,2         Γöé1,2         Γöé1,2         Γöé1,2         Γöé
  4118.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4119.   Γöé16-bit         ΓöéN/A         ΓöéN/A         ΓöéN/A         ΓöéN/A         Γöé
  4120.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4121.  
  4122.  
  4123. ΓòÉΓòÉΓòÉ 7.3. Audio Device Capabilities ΓòÉΓòÉΓòÉ
  4124.  
  4125. If MCI_GETDEVCAPS_EXTENDED is specified in conjunction with 
  4126. MCI_GETDEVCAPS_ITEM, the MCI_GETDEVCAPS_WAVE_FORMAT value can be placed in the 
  4127. ulItem field for the waveaudio device as an extended request. The 
  4128. MCI_GETDEVCAPS_WAVE_FORMAT value allows an application to query if the device 
  4129. supports a specific waveaudio format. The application must fill in the 
  4130. ulBitsPerSample, ulFormatTag, ulSamplesPerSec, ulChannels, and ulFormatMode 
  4131. fields in the MCI_WAVE_GETDEVCAPS_PARMS data structure.  The driver returns 
  4132. MCI_TRUE if the format is supported or returns a specific error describing why 
  4133. the command field failed if the format is not supported. 
  4134.  
  4135. The following code fragment shows a portion of the Audio Recorder Sample 
  4136. program provided in the Toolkit (\TOOLKIT\SAMPLES\MM\RECORDER). This program 
  4137. uses the MCI_GETDEVCAPS message to determine the capabilities of the currently 
  4138. selected waveaudio device. 
  4139.  
  4140.   ULONG                     ulRC;         /* return code from function */
  4141.   MCI_WAVE_GETDEVCAPS_PARMS mciAudioCaps; /* MCI_GETDEVCAPS_PARMS
  4142.                                              structure */
  4143.   memset( &mciAudioCaps , 0, sizeof(MCI_WAVE_GETDEVCAPS_PARMS));
  4144.  
  4145.   /* Test to see if the device can play 11 kHz, 8-bit, mono files. */
  4146.   mciAudioCaps.ulBitsPerSample = 8;
  4147.   mciAudioCaps.ulFormatTag     = DATATYPE_WAVEFORM;
  4148.   mciAudioCaps.ulSamplesPerSec = 11025;
  4149.   mciAudioCaps.ulChannels      = 1;
  4150.   mciAudioCaps.ulFormatMode    = MCI_PLAY;
  4151.   mciAudioCaps.ulItem          = MCI_GETDEVCAPS_WAVE_FORMAT;
  4152.  
  4153.   ulRC = mciSendCommand (mciOpenParms.usDeviceID,   /* Device ID    */
  4154.                          MCI_GETDEVCAPS,
  4155.                          MCI_WAIT | MCI_GETDEVCAPS_EXTENDED
  4156.                               | MCI_GETDEVCAPS_ITEM,
  4157.                          (PVOID) &mciAudioCaps,
  4158.                          0);
  4159.        .
  4160.        .
  4161.        .
  4162.  
  4163. /* Test to see if the device can record 11 kHz, 16-bit, mono files. */
  4164.   mciAudioCaps.ulBitsPerSample = 16;
  4165.   mciAudioCaps.ulFormatTag     = DATATYPE_WAVEFORM;
  4166.   mciAudioCaps.ulSamplesPerSec = 11025;
  4167.   mciAudioCaps.ulChannels      = 1;
  4168.   mciAudioCaps.ulFormatMode    = MCI_RECORD;
  4169.   mciAudioCaps.ulItem          = MCI_GETDEVCAPS_WAVE_FORMAT;
  4170.  
  4171.   ulRC = mciSendCommand (mciOpenParms.usDeviceID,  /* Device ID     */
  4172.                          MCI_GETDEVCAPS,
  4173.                          MCI_WAIT | MCI_GETDEVCAPS_EXTENDED
  4174.                               | MCI_GETDEVCAPS_ITEM,
  4175.                          (PVOID) &mciAudioCaps,
  4176.                          0);
  4177.  
  4178.  
  4179. ΓòÉΓòÉΓòÉ 7.4. Using the Waveform Audio Device ΓòÉΓòÉΓòÉ
  4180.  
  4181. Because the waveaudio device is a compound device, it requires a device 
  4182. element.  The device element is typically a file that contains a sampled 
  4183. waveform for playback.  The waveaudio device can be opened with or without a 
  4184. device element.  A device element can subsequently be specified using the load 
  4185. command. 
  4186.  
  4187.  
  4188. ΓòÉΓòÉΓòÉ 7.4.1. Opening the Waveform Audio Device ΓòÉΓòÉΓòÉ
  4189.  
  4190. The following string commands open the default waveaudio device and load a file 
  4191. onto it. 
  4192.  
  4193. open waveaudio alias wave shareable
  4194. load wave c:\mysounds\train.wav
  4195.  
  4196. OS/2 multimedia allows you to specify the device to be used for a particular 
  4197. file based on the file's extension or its extended attributes (EAs). Using 
  4198. .TYPE EAs is the preferred method, because they remain with the files even when 
  4199. the files are renamed. Both file extensions and extended attributes can be 
  4200. associated with a device using the Multimedia Setup application.  For instance, 
  4201. assuming files with an extension of .WAV have been associated with the 
  4202. waveaudio device, the following command will result in a file being loaded into 
  4203. the waveaudio device: 
  4204.  
  4205. open c:\mysounds\monkey.wav alias monkey shareable
  4206.  
  4207. Finally, both the device element and the device type can be specified: 
  4208.  
  4209. open c:\mysounds\paperjam.wav type waveaudio alias wave shareable
  4210.  
  4211.  
  4212. ΓòÉΓòÉΓòÉ 7.4.2. Recording a Waveform File ΓòÉΓòÉΓòÉ
  4213.  
  4214. One of the typical uses of the waveform audio device is to digitize an input 
  4215. signal or sound into discrete samples for storage in a file.  An example of 
  4216. this would be recording an electronic audio mail message to actually tell 
  4217. someone about an idea, as opposed to typing a memo on the same subject.  An 
  4218. electronic audio mail application would be completely shielded from the 
  4219. complexity of digitizing a signal and would only need to specify a file, while 
  4220. providing the user with a simple control panel to allow the message to be 
  4221. recorded.  The user might press a stop button on the control panel when 
  4222. finished describing the idea.  The application could then issue a stop command 
  4223. to the waveaudio device to discontinue the recording. 
  4224.  
  4225. open myidea.wav waveaudio alias wave wait
  4226. record wave notify
  4227. .
  4228. .
  4229. .
  4230. ** recording the idea into myidea.wav **
  4231. .
  4232. .
  4233. .
  4234. stop wave wait
  4235.  
  4236. Like many text editors, the waveform audio media driver will not actually 
  4237. modify the original file until it receives a command to save the changes.  Any 
  4238. temporary files created during the record operation will be located in the 
  4239. directory specified by the MSV_WORKPATH multimedia system variable.  The path 
  4240. can be specified on the system page of the Multimedia Setup application. The 
  4241. use of temporary files is completely transparent to the application. 
  4242.  
  4243. The file can be saved using the original file name, or a new file name can be 
  4244. specified. If a save command is not issued before closing the waveform audio 
  4245. device, all changes will be discarded. 
  4246.  
  4247. save wave wait
  4248. close wave wait
  4249.  
  4250. It is possible to open or load the waveaudio device specifying a special 
  4251. readonly option.  In this mode, the waveaudio device prevents any modification 
  4252. to the file from either the save or record commands. In certain circumstances, 
  4253. the driver might be able to optimize performance by utilizing the information 
  4254. that the file will not be modified. The option will also allow multiple 
  4255. applications to share the same file for playback purposes and will prevent 
  4256. inadvertent modification of the file. 
  4257.  
  4258. open bigwave.wav type waveaudio alias wave readonly shareable
  4259.  
  4260.  
  4261. ΓòÉΓòÉΓòÉ 7.4.3. Creating New Files ΓòÉΓòÉΓòÉ
  4262.  
  4263. The waveaudio device will create a new file on either the MCI_OPEN or MCI_LOAD 
  4264. commands if a file element is indicated (MCI_OPEN_ELEMENT_ID) and the specified 
  4265. file name does not exist. If no file name is indicated, the waveaudio driver 
  4266. will create an unnamed temporary file.  If an unnamed temporary file is 
  4267. created, it can later be named by issuing the MCI_SAVE command, which must 
  4268. include the permanent name of the new file. 
  4269.  
  4270. To support file creation from the string interface, a special file name called 
  4271. new is reserved for system use.  This file name should be used in place of the 
  4272. usual application supplied file name.  As in the command message interface, the 
  4273. save command must be issued to give the file a permanent name. 
  4274.  
  4275. open new type waveaudio alias wave wait
  4276. record wave notify
  4277. .
  4278. .
  4279. .
  4280. ** recording **
  4281. .
  4282. .
  4283. .
  4284. stop wave wait
  4285. save wave myspeech.wav wait
  4286.  
  4287. When a file is initially created, default settings will be assigned by the 
  4288. media driver and might depend on the capabilities of the audio adapter.  The 
  4289. IBM waveform audio driver will use PCM, 22 kHz, 16 bits per sample, and mono as 
  4290. the default for 16-bit adapters.  If the adapter does not support 16-bit PCM, 
  4291. then the resolution (bits per sample) will be downgraded to 8 bits. 
  4292.  
  4293. The following table lists audio adapters supported by OS/2 multimedia. The 
  4294. default settings are those initially assigned by the media driver to a new file 
  4295. when that particular audio adapter is being used. 
  4296.  
  4297. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4298. ΓöéAudio Adapter            ΓöéFormat    ΓöéSampling  ΓöéBits per  ΓöéChannels  Γöé
  4299. Γöé                         Γöé          ΓöéRate      ΓöéSample    Γöé          Γöé
  4300. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4301. ΓöéIBM M-Audio              ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  4302. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4303. ΓöéSound Blaster            ΓöéPCM       Γöé22 kHz    Γöé8         Γöé1         Γöé
  4304. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4305. ΓöéSound Blaster Pro        ΓöéPCM       Γöé22 kHz    Γöé8         Γöé2         Γöé
  4306. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4307. ΓöéSound Blaster 16         ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  4308. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4309. ΓöéPro AudioSpectrum 16     ΓöéPCM       Γöé22 kHz    Γöé16        Γöé1         Γöé
  4310. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4311.  
  4312. OS/2 multimedia enables recording of digital audio information in the format 
  4313. that fits specific needs, such as space or quality.  For example, assume that a 
  4314. new waveaudio file is created with the following command: 
  4315.  
  4316. open new type waveaudio alias a wait
  4317.  
  4318. When the file is created, you might want a file that is compatible with mu-law 
  4319. (the compression scheme used by the telephone system). To change the 
  4320. compression scheme, the format tag must be set for the file.  The following 
  4321. string commands prepare the file for recording mu-law by setting the format 
  4322. tag: 
  4323.  
  4324. set a format tag mulaw wait
  4325. set a bitspersample 8 wait
  4326. set a channels 1 wait
  4327. set a samplespersec 11025 wait
  4328.  
  4329. If you wanted to record with a compression scheme commonly used in Europe 
  4330. (a-law), the following command could have been issued: 
  4331.  
  4332. set a format tag alaw wait
  4333.  
  4334. An application should always set the waveform format, sampling rate, 
  4335. resolution, and number of channels to ensure that the waveform is created with 
  4336. the desired parameters as shown in the following string interface example. 
  4337.  
  4338. set wave format tag PCM wait
  4339. set wave samplespersec 22050 wait
  4340. set wave bitspersample 8 wait
  4341. set wave channels 1 wait
  4342.  
  4343. Note:  When modifying the settings on a waveaudio device, the format tag should 
  4344.        be changed first, because it might force the automatic modification of 
  4345.        other settings to make them compatible with the new format.  For 
  4346.        instance, a waveaudio device that supports 16-bit PCM might only support 
  4347.        8-bit ADPCM.  Changing the format from PCM to ADPCM will automatically 
  4348.        change the bits per sample setting. 
  4349.  
  4350.  
  4351. ΓòÉΓòÉΓòÉ 7.5. Playing and Recording non-RIFF Waveforms ΓòÉΓòÉΓòÉ
  4352.  
  4353. The waveform audio device will create new waveforms according to the RIFF WAVE 
  4354. data standard.  It is possible, however to play other data formats using OS/2 
  4355. multimedia if the appropriate MMIO procedure has been supplied.  The selection 
  4356. of the appropriate I/O procedure (IOProc) is transparent to the application if 
  4357. the IOProc has been installed. 
  4358.  
  4359. One example of this feature is OS/2 multimedia's ability to play waveform audio 
  4360. files that were created using IBM's AVC application and the M-Audio card.  Note 
  4361. that the AVC support provides playback capabilities only.  The waveform audio 
  4362. device will temporarily report FALSE to the save and record capabilities of the 
  4363. device capabilities (MCI_GETDEVCAPS) function when the underlying I/O procedure 
  4364. does not support the creation of files.  Applications should check the device 
  4365. capabilities to appropriately display a user interface that reflects the true 
  4366. capabilities of the waveaudio driver and its associated I/O procedure. 
  4367.  
  4368. For example, a waveform editor application should grey out its record button 
  4369. when an AVC file is loaded, as only playback operations are supported. 
  4370. Querying the device capabilities would return FALSE for can record.  If a 
  4371. waveform file in the RIFF WAVE format is subsequently loaded, the record button 
  4372. should be enabled, because the same can record query will now return TRUE. In 
  4373. all instances, by using the high-level OS/2 multimedia mciSendString or 
  4374. mciSendCommand interface to reference device capabilities, the application is 
  4375. shielded from the underlying implementation. 
  4376.  
  4377.  
  4378. ΓòÉΓòÉΓòÉ 7.6. Creating a Waveform Playlist ΓòÉΓòÉΓòÉ
  4379.  
  4380. Specialized applications such as a waveform editor might require the capability 
  4381. of playing and recording using application memory buffers instead of files. 
  4382. The memory playlist feature of OS/2 multimedia provides the construct for 
  4383. supplying memory buffers to the waveaudio device.  Besides implementing simple 
  4384. circular buffering schemes, memory playlists can be used to synthesize complex 
  4385. and unique waveform sounds. By following each DATA statement with a MESSAGE 
  4386. statement, an application can be informed as to when the buffer can be reused. 
  4387.  
  4388. Playlist Structure 
  4389.  
  4390. Depending on the complexity of the application, memory playlists can be used to 
  4391. provide a single large memory buffer, or multiple buffers in a circular 
  4392. buffering scheme. The following is an example of how a memory playlist might be 
  4393. constructed to implement a simple circular buffering scheme. 
  4394.  
  4395.     0:    NOP
  4396.     1:    DATA...
  4397.     2:    MESSAGE...
  4398.     3:    DATA...
  4399.     4:    MESSAGE...
  4400.     5:    DATA...
  4401.     6:    MESSAGE...
  4402.     7:    BRANCH 0
  4403.  
  4404. Note that regardless of whether the playlist is being used for play or record 
  4405. operations, the MESSAGE instruction will notify the application when the 
  4406. playlist processor has consumed or filled the preceding DATA buffer.  An 
  4407. MM_MCIPLAYLISTMESSAGE will be sent to the window procedure specified when the 
  4408. waveaudio device was originally opened. 
  4409.  
  4410. The following code fragment shows the SetUpPlaylist procedure that is performed 
  4411. once, during initialization of the Clock Sample program.  It calls the 
  4412. procedure CopyWaveformIntoMemory to copy the waveform files into memory 
  4413. buffers.  It also initializes the playlist data structure by supplying the 
  4414. address and size of the memory buffers holding the data in the appropriate data 
  4415. structure fields. 
  4416.  
  4417. VOID SetupPlayList( VOID )
  4418. {
  4419.  /*
  4420.   * This array keeps the address of each audio chime file.
  4421.   */
  4422.  static LONG *pulBaseAddress[ NUMBER_OF_CHIME_FILES ];
  4423.  
  4424.  USHORT usChimeFileId;            /* Chime audio file ID.        */
  4425.  ULONG  ulSizeOfFile,             /* Size of audio file.         */
  4426.  
  4427. ulMemoryAllocationFlags = PAG_COMMIT | PAG_READ | PAG_WRITE;
  4428. for(usChimeFileId=0; usChimeFileId<NUMBER_OF_CHIME_FILES;
  4429.     usChimeFileId++)
  4430.  {
  4431.  
  4432.     ulSizeOfFile = HowBigIsTheChimeFile( usChimeFileId );
  4433.   /*
  4434.    * If the returned file size is 0, there is a problem with the
  4435.    * chime files.  A message will already have been shown to the user
  4436.    * by the HowBigIsTheChimeFile function so exit this routine.
  4437.    */
  4438.     if ( ulSizeOfFile == 0 )
  4439.     {
  4440.        return;
  4441.     }
  4442.     if ( (pulBaseAddress[ usChimeFileId ] = (LONG *)
  4443.             malloc( ulSizeOfFile )) == (LONG *) NULL )
  4444.     {
  4445.        /*
  4446.         * The memory for the waveform files cannot be allocated.
  4447.         * Notify the user and return from this routine.  No playlist
  4448.         * can be created/played until memory is available.
  4449.         */
  4450.        ShowAMessage(
  4451.           acStringBuffer[
  4452.              IDS_NORMAL_ERROR_MESSAGE_BOX_TEXT - 1 ],
  4453.           IDS_CANNOT_GET_MEMORY, /* ID of the message to show. */
  4454.           MB_OK | MB_INFORMATION | MB_HELP |  MB_APPLMODAL |
  4455.              MB_MOVEABLE );           /* Style of the message box. */
  4456.  
  4457.        return;
  4458.  
  4459.     }  /* End of IF allocation fails. */
  4460.     /*
  4461.      * Place the waveform files into the memory buffer that was just
  4462.      * created.
  4463.      */
  4464.     CopyWaveformIntoMemory(
  4465.        pulBaseAddress[ usChimeFileId ],
  4466.        ulSizeOfFile,
  4467.        usChimeFileId );
  4468.     /*
  4469.      * Now that we've loaded the waveform into memory, we need to put
  4470.      * its address and size into the playlist data statements that
  4471.      * use this particular file.
  4472.      *
  4473.      * Its address must be placed into the data statement's first
  4474.      * operand and its size must be placed in the data
  4475.      * statement's second operand.
  4476.      *
  4477.      * For the four different playlists, one for each chime time
  4478.      * (1/4, 1/2, 3/4 and 1 hour increments),
  4479.      * the address of the chime file and its size will be loaded
  4480.      * into each data statement of the Playlist.
  4481.      */
  4482.     if ( usChimeFileId == 0 )
  4483.     /* If we just loaded CLOCK1.WAV */
  4484.     {
  4485.        /*
  4486.         * Put the address of this chime into the first operand of
  4487.         * every data operation that uses this particular chime.
  4488.         */
  4489.     apltPlayList[ 0 ][ 0 ].ulOperandOne =  /* 1/4 hour 1st data op */
  4490.     apltPlayList[ 1 ][ 0 ].ulOperandOne =  /* 1/2 hour 1st data op */
  4491.     apltPlayList[ 2 ][ 0 ].ulOperandOne =  /* 3/4 hour 1st data op */
  4492.     apltPlayList[ 2 ][ 2 ].ulOperandOne =  /* 3/4 hour 3rd data op */
  4493.     apltPlayList[ 3 ][ 0 ].ulOperandOne =  /* 1   hour 1st data op */
  4494.     apltPlayList[ 3 ][ 2 ].ulOperandOne =  /* 1   hour 3rd data op */
  4495.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address        */
  4496.     /*
  4497.      * Now put the size of the file into the second operand of every
  4498.      * data operation that uses this particular chime.
  4499.      */
  4500.     apltPlayList[ 0 ][ 0 ].ulOperandTwo =  /* 1/4 hour 1st data op */
  4501.     apltPlayList[ 1 ][ 0 ].ulOperandTwo =  /* 1/2 hour 1st data op */
  4502.     apltPlayList[ 2 ][ 0 ].ulOperandTwo =  /* 3/4 hour 1st data op */
  4503.     apltPlayList[ 2 ][ 2 ].ulOperandTwo =  /* 3/4 hour 3rd data op */
  4504.     apltPlayList[ 3 ][ 0 ].ulOperandTwo =  /* 1   hour 1st data op */
  4505.     apltPlayList[ 3 ][ 2 ].ulOperandTwo =  /* 1   hour 3rd data op */
  4506.        ulSizeOfFile;                             /* size         */
  4507.  }
  4508.  else
  4509.  if ( usChimeFileId == 1 )
  4510.  /* If we just loaded CLOCK2.WAV */
  4511.  {
  4512.     /*
  4513.      * Put the address of this chime into the first operand of
  4514.      * every data operation that uses this particular chime.
  4515.      */
  4516.     apltPlayList[ 1 ][ 1 ].ulOperandOne =  /* 1/2 hour 2nd data op */
  4517.     apltPlayList[ 2 ][ 1 ].ulOperandOne =  /* 3/4 hour 2nd data op */
  4518.     apltPlayList[ 3 ][ 1 ].ulOperandOne =  /* 1   hour 2nd data op */
  4519.     apltPlayList[ 3 ][ 3 ].ulOperandOne =  /* 1   hour 4th data op */
  4520.        (ULONG) pulBaseAddress[ usChimeFileId ];  /* address    */
  4521.     /*
  4522.      * Now put the size of the file into the second operand of every
  4523.      * data operation that uses this particular chime.
  4524.      */
  4525.     apltPlayList[ 1 ][ 1 ].ulOperandTwo =  /* 1/2 hour 2nd data op */
  4526.     apltPlayList[ 2 ][ 1 ].ulOperandTwo =  /* 3/4 hour 2nd data op */
  4527.     apltPlayList[ 3 ][ 1 ].ulOperandTwo =  /* 1   hour 2nd data op */
  4528.     apltPlayList[ 3 ][ 3 ].ulOperandTwo =  /* 1   hour 4th data op */
  4529.        ulSizeOfFile;                             /* size        */
  4530.  }
  4531.  else
  4532.  if ( usChimeFileId == 2 )
  4533.  /* If we just loaded CLOCK3.WAV         */
  4534.  /* (this is the gong part of the chime) */
  4535. {
  4536.     /*
  4537.      * Put the address of this chime into the first operand of
  4538.      * every data operation that uses this particular chime.
  4539.      */
  4540.     apltPlayList[ 3 ][ 5 ].ulOperandOne =  /* 1 hour 5th data op */
  4541.        (ULONG) pulBaseAddress[ usChimeFileId ];
  4542.  
  4543.     /*
  4544.      * Now put the size of the file into the second operand of every
  4545.      * data operation that uses this particular chime.
  4546.      */
  4547.  
  4548.     apltPlayList[ 3 ][ 5 ].ulOperandTwo =   /* 1 hour 5th data op */
  4549.        ulSizeOfFile;
  4550.   }
  4551.  
  4552.  }  /* End of For loop of chime files. */
  4553.  
  4554. }  /* End of SetupPlayList */
  4555.  
  4556.  
  4557. ΓòÉΓòÉΓòÉ 7.6.1. Suggested Setups for Playlists ΓòÉΓòÉΓòÉ
  4558.  
  4559. The following tables provide guidelines for setting up playlists to utilize 
  4560. memory more efficiently. 
  4561.  
  4562. For a sampling rate of 8 kHz: 
  4563.  
  4564. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4565. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  4566. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  4567. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  4568. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  4569. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4570. Γöé8         Γöé1         Γöé4KB         Γöé30          Γöé3           Γöé
  4571. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4572. Γöé8         Γöé2         Γöé8KB         Γöé30          Γöé3           Γöé
  4573. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4574. Γöé16        Γöé1         Γöé8KB         Γöé30          Γöé3           Γöé
  4575. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4576. Γöé16        Γöé2         Γöé16KB        Γöé20          Γöé3           Γöé
  4577. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4578.  
  4579. For a sampling rate of 11 kHz: 
  4580.  
  4581. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4582. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  4583. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  4584. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  4585. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  4586. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4587. Γöé8         Γöé1         Γöé4KB         Γöé40          Γöé3           Γöé
  4588. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4589. Γöé8         Γöé2         Γöé8KB         Γöé40          Γöé3           Γöé
  4590. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4591. Γöé16        Γöé1         Γöé8KB         Γöé40          Γöé3           Γöé
  4592. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4593. Γöé16        Γöé2         Γöé16KB        Γöé30          Γöé3           Γöé
  4594. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4595.  
  4596. For a sampling rate of 22 kHz: 
  4597.  
  4598. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4599. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  4600. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  4601. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  4602. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  4603. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4604. Γöé8         Γöé1         Γöé8KB         Γöé40          Γöé3           Γöé
  4605. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4606. Γöé8         Γöé2         Γöé16KB        Γöé30          Γöé3           Γöé
  4607. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4608. Γöé16        Γöé1         Γöé16KB        Γöé30          Γöé3           Γöé
  4609. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4610. Γöé16        Γöé2         Γöé32KB        Γöé20          Γöé3           Γöé
  4611. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4612.  
  4613. For a sampling rate of 44 kHz: 
  4614.  
  4615. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4616. ΓöéBits Per  Γöé# of      ΓöéBuffer Size ΓöéMax. # of   Γöé# of BuffersΓöé
  4617. ΓöéSample    ΓöéChannels  Γöé            ΓöéBuffers     Γöébefore a    Γöé
  4618. Γöé          Γöé          Γöé            Γöé            ΓöéStream is   Γöé
  4619. Γöé          Γöé          Γöé            Γöé            ΓöéStarted     Γöé
  4620. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4621. Γöé8         Γöé1         Γöé16KB        Γöé30          Γöé3           Γöé
  4622. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4623. Γöé8         Γöé2         Γöé32KB        Γöé20          Γöé3           Γöé
  4624. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4625. Γöé16        Γöé1         Γöé32KB        Γöé20          Γöé3           Γöé
  4626. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4627. Γöé16        Γöé2         Γöé60KB        Γöé10          Γöé5           Γöé
  4628. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4629.  
  4630.  
  4631. ΓòÉΓòÉΓòÉ 7.7. Waveform Audio Command Messages ΓòÉΓòÉΓòÉ
  4632.  
  4633. Following are descriptions of the command messages used to control the 
  4634. recording, editing, and playback of waveform data. Analog input devices for 
  4635. recording waveforms are a microphone and tape deck.  Analog output devices for 
  4636. waveform playback are a stereo amplifier or speakers connected to an audio 
  4637. adapter. 
  4638.  
  4639. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4640. ΓöéMessage                ΓöéDescription                                  Γöé
  4641. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4642. ΓöéMCI_CLOSE              ΓöéCloses the waveform audio player.            Γöé
  4643. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4644. ΓöéMCI_CONNECTOR          ΓöéEnables or disables a connector, queries its Γöé
  4645. Γöé                       Γöéstate, or identifies its type.               Γöé
  4646. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4647. ΓöéMCI_COPY               ΓöéCopies data from the device element to the   Γöé
  4648. Γöé                       Γöéclipboard or buffer.                         Γöé
  4649. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4650. ΓöéMCI_CUE                ΓöéCues the device for minimum delay in         Γöé
  4651. Γöé                       Γöérecording or playback.                       Γöé
  4652. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4653. ΓöéMCI_CUT                ΓöéRemoves data from the device element and     Γöé
  4654. Γöé                       Γöéplaces it in the clipboard or buffer.        Γöé
  4655. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4656. ΓöéMCI_DELETE             ΓöéRemoves the specified range of data from the Γöé
  4657. Γöé                       Γöédevice element.                              Γöé
  4658. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4659. ΓöéMCI_GETDEVCAPS         ΓöéGets device capabilities.                    Γöé
  4660. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4661. ΓöéMCI_INFO               ΓöéGets the name of the currently loaded file.  Γöé
  4662. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4663. ΓöéMCI_LOAD               ΓöéLoads a waveform data file.                  Γöé
  4664. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4665. ΓöéMCI_OPEN               ΓöéInitializes the waveform audio player.       Γöé
  4666. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4667. ΓöéMCI_PASTE              ΓöéIssues a DELETE on the selected range and    Γöé
  4668. Γöé                       Γöéinserts data into clipboard or buffer.       Γöé
  4669. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4670. ΓöéMCI_PAUSE              ΓöéSuspends the current play or record action.  Γöé
  4671. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4672. ΓöéMCI_PLAY               ΓöéPlays back waveform data by means of an audioΓöé
  4673. Γöé                       Γöéadapter:                                     Γöé
  4674. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4675. ΓöéMCI_RECORD             ΓöéRecords waveform data.                       Γöé
  4676. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4677. ΓöéMCI_REDO               ΓöéRedoes the CUT, DELETE, PASTE, or RECORD     Γöé
  4678. Γöé                       Γöéoperation most recently done by MCI_UNDO.    Γöé
  4679. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4680. ΓöéMCI_RESUME             ΓöéResumes the current play or record action    Γöé
  4681. Γöé                       Γöéfrom a paused state.                         Γöé
  4682. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4683. ΓöéMCI_SAVE               ΓöéSaves the device element in its current      Γöé
  4684. Γöé                       Γöéformat.                                      Γöé
  4685. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4686. ΓöéMCI_SEEK               ΓöéSeeks to a specified location.               Γöé
  4687. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4688. ΓöéMCI_SET                ΓöéSets device information.                     Γöé
  4689. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4690. ΓöéMCI_SET_CUEPOINT       ΓöéSets a cue point.                            Γöé
  4691. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4692. ΓöéMCI_SET_POSITION_ADVISEΓöéSets a position change notification request. Γöé
  4693. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4694. ΓöéMCI_SET_SYNC_OFFSET    ΓöéSets a synchronization offset.               Γöé
  4695. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4696. ΓöéMCI_STATUS             ΓöéReceives status on current settings for itemsΓöé
  4697. Γöé                       Γöéused for recording, playback, and saving.    Γöé
  4698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4699. ΓöéMCI_STOP               ΓöéStops the waveform device before loading a   Γöé
  4700. Γöé                       Γöénew file.                                    Γöé
  4701. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4702. ΓöéMCI_UNDO               ΓöéUndoes the operation most recently performed Γöé
  4703. Γöé                       Γöéby CUT, DELETE, PASTE, or RECORD.            Γöé
  4704. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4705.  
  4706.  
  4707. ΓòÉΓòÉΓòÉ 7.8. Waveaudio Connectors ΓòÉΓòÉΓòÉ
  4708.  
  4709. The waveaudio device directly supports one wave stream connector which is 
  4710. always enabled.  As it is likely that an application will need to select the 
  4711. recording source or the output destination on the amplifier-mixer device, the 
  4712. waveaudio device will attempt to provide the following connector services to an 
  4713. application.  If the requested connector is not available, the command will 
  4714. fail. 
  4715.  
  4716.      headphones 
  4717.  
  4718.      speakers 
  4719.  
  4720.      line out 
  4721.  
  4722.      microphone 
  4723.  
  4724.      line in 
  4725.  
  4726.  Additional connectors might be available on the ampmix device.  To control 
  4727.  these connectors obtain the device ID of the ampmix device using the 
  4728.  MCI_CONNECTION message and issue the connector command directly to the 
  4729.  associated amplifier-mixer. 
  4730.  
  4731.  To determine which connectors are supported by an amplifier-mixer device, use 
  4732.  the MCI_CONNECTORINFO message. 
  4733.  
  4734.  The Audio Recorder Sample program illustrates the concept of recording audio 
  4735.  data.  In order to do this, it first configures the device settings such as 
  4736.  the input source as shown in the following code fragment. 
  4737.  
  4738.    MCI_CONNECTOR_PARMS  mciConnectorParms;   /* for MCI_CONNECTOR  */
  4739.   /*
  4740.    * Set up input source - microphone or line in.
  4741.    * Initialize MCI_CONNECTOR_PARMS structure with the pertinent
  4742.    * information, and then issue an MCI_CONNECTOR command by way of
  4743.    * mciSendCommand.
  4744.    */
  4745.    mciConnectorParms.ulConnectorType = usDeviceType;
  4746.                                             /* microphone/linein     */
  4747.  
  4748.    ulError = mciSendCommand( mciOpenParms.usDeviceID,
  4749.                              MCI_CONNECTOR,
  4750.                              MCI_WAIT | MCI_CONNECTOR_TYPE |
  4751.                              MCI_ENABLE_CONNECTOR,
  4752.                              (PVOID) &mciConnectorParms,
  4753.                              0 );
  4754.    if (ulError)
  4755.     {
  4756.       ShowMCIErrorMessage( ulError);
  4757.       return( FALSE);
  4758.     }
  4759.  
  4760.  
  4761. ΓòÉΓòÉΓòÉ 8. Sequencer Device ΓòÉΓòÉΓòÉ
  4762.  
  4763. The OS/2 sequencer device plays a MIDI song by sending commands from a MIDI 
  4764. file to a synthesizer, where the commands are converted to the sounds of a 
  4765. specific instrument. Typically, a digital signal processor (DSP) is used to 
  4766. generate the sounds of the instrument, which results in an authentic 
  4767. reproduction of the original performance. 
  4768.  
  4769. General MIDI (Musical Instrument Digital Interface) is a standard specification 
  4770. for playing back music from a series of commands, rather than actual audio 
  4771. data. The commands represent musical events, such as turning a note on and off 
  4772. ("Note On" and "Note Off"), as well as timing mechanisms for specifying the 
  4773. duration of the note sound. The sequencer uses the timing commands to sequence 
  4774. the playing of the music. 
  4775.  
  4776. Following is a text example of the commands generated when someone depresses 
  4777. the "middle C" key of a synthesizer keyboard: a note-on command X'90' and two 
  4778. bytes of data: 
  4779.  
  4780. X'90' - "Note-on" command to MIDI channel 0
  4781. X'3C' - Keyboard note (middle-C)
  4782. X'40' - Velocity (X'00'-X'7F').
  4783.  
  4784. MIDI augments waveform audio as a means of producing sounds in the multimedia 
  4785. environment.  MIDI data offers the advantage of requiring far less storage than 
  4786. waveform data.  For example, suppose a three-note chord-middle-C, E and G- is 
  4787. held for one second. Following are the MIDI commands required to reproduce the 
  4788. chord on a synthesizer: 
  4789.  
  4790. TIME = 0 sec.  90 3C 40  90 40 40  90 43 40
  4791.                (C-on)    (E-on)    (G-on)
  4792. .
  4793. .
  4794. .
  4795. TIME = 1 sec.  90 3C 00  90 40 00  90 43 00
  4796.                (C-off)   (E-off)   (G-off)
  4797.  
  4798. The storage required for the MIDI commands is 18 bytes. To store the same 
  4799. information as 16-bit, PCM, 44 kHz, stereo waveform audio data requires 176KB. 
  4800.  
  4801. Another advantage of storing musical performances as a series of instructions 
  4802. is that the information can be edited, the same way words in a document can be 
  4803. edited by a word processor. The musical editing process can be used, for 
  4804. example, to correct mistakes in an artist's original interpretation, or to 
  4805. change certain points of style before playback or final recording. Playback of 
  4806. MIDI data using the sequencer media device can be used to reproduce the 
  4807. original performance or to print out musical scores. 
  4808.  
  4809. Sequencer Device Specifics 
  4810.  
  4811. The sequencer device sends MIDI messages and data to the audio adapter.  Some 
  4812. audio adapters, such as the M-Audio adapter, perform FM synthesis to produce 
  4813. music. Other audio adapters, such as the Sound Blaster adapter, have the 
  4814. capability to send the MIDI data through a MIDI port to an external synthesizer 
  4815. device. 
  4816.  
  4817. The OS/2 sequencer device does not currently support recording new MIDI 
  4818. information. 
  4819.  
  4820.  
  4821. ΓòÉΓòÉΓòÉ 8.1. MIDI Stream Connector ΓòÉΓòÉΓòÉ
  4822.  
  4823. The MIDI stream connector represents the flow of MIDI information from the 
  4824. sequencer device to its associated amplifier-mixer (ampmix) device.  During 
  4825. playback, the sequencer device sends MIDI information from either application 
  4826. memory or files to the ampmix device for subsequent conversion into audio that 
  4827. can be heard through conventional speakers or headphones. 
  4828.  
  4829. Control of the characteristics of the MIDI information is provided by the 
  4830. sequencer device. Volume control is provided as an additional service, although 
  4831. this feature is actually provided by the ampmix device in a way that is 
  4832. transparent to the calling application. If other advanced audio-shaping 
  4833. features are required, the application can retrieve the device ID of the ampmix 
  4834. device using the MCI_CONNECTION message. Once the device ID has been obtained, 
  4835. the application can send set commands directly to the ampmix device to 
  4836. manipulate audio attributes, such as treble, bass, balance, and so on. 
  4837.  
  4838.  
  4839. ΓòÉΓòÉΓòÉ 8.2. MIDI Data Formats ΓòÉΓòÉΓòÉ
  4840.  
  4841. The MIDI support for the OS/2 multimedia system handles the RIFF RMID data 
  4842. type, as well as standard MIDI file formats 0 and 1. MIDI file format 0 merges 
  4843. tracks of MIDI data into one track; MIDI file format 1 preserves the separate 
  4844. tracks of data. MIDI file format 2 is not supported. 
  4845.  
  4846. MIDI files are made up of chunks, similar to RIFF chunks.  In MIDI files, there 
  4847. are two types of chunks:  header chunks and track chunks. A header chunk 
  4848. provides a minimal amount of information pertaining to the entire file. A track 
  4849. chunk contains a sequential stream of MIDI data, which can contain information 
  4850. for up to 16 MIDI channels. 
  4851.  
  4852.  
  4853. ΓòÉΓòÉΓòÉ 8.3. General MIDI Specification ΓòÉΓòÉΓòÉ
  4854.  
  4855. The standard MIDI channel, patch, and percussion key assignments shown in the 
  4856. following tables are defined in the General MIDI Specification issued by the 
  4857. MIDI Manufacturers Association (MMA). A detailed specification can be ordered 
  4858. from: 
  4859.  
  4860. International MIDI Association
  4861. 5316 West 57 Street
  4862. Los Angeles, CA 90056
  4863.  
  4864.  
  4865. ΓòÉΓòÉΓòÉ 8.3.1. Channel Assignments ΓòÉΓòÉΓòÉ
  4866.  
  4867. Channels are divided into two general categories, low-end synthesizer support 
  4868. and high-end synthesizer support. The following table shows the channel 
  4869. assignments for this standard. 
  4870.  
  4871. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4872. ΓöéChannel Range ΓöéUse Description               ΓöéPolyphony   Γöé
  4873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4874. Γöé1 through 9   ΓöéExtended Melodic Tracks       Γöé16 Notes    Γöé
  4875. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4876. Γöé10 Only       ΓöéExtended Percussion Track     Γöé16 Notes    Γöé
  4877. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4878. Γöé11 through 12 ΓöéUnused Tracks                 Γöé            Γöé
  4879. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4880. Γöé13 through 15 ΓöéBase-Level Melodic Tracks     Γöé6 Notes     Γöé
  4881. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4882. Γöé16 Only       ΓöéBase-Level Percussion Track   Γöé3 Notes     Γöé
  4883. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4884.  
  4885.  
  4886. ΓòÉΓòÉΓòÉ 8.3.2. Patch Assignments ΓòÉΓòÉΓòÉ
  4887.  
  4888. The following table shows the standard patch definitions for MIDI instruments. 
  4889. Each family of instruments (for example, strings or brass) has eight different 
  4890. voice numbers reserved for patch definitions. 
  4891.  
  4892. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  4893. ΓöéPiano               ΓöéChromatic PercussionΓöéOrgan               ΓöéGuitar              Γöé
  4894. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4895. Γöé0  Acoustic Grand   Γöé8  Celesta          Γöé16 Hammond Organ    Γöé24 Acoustic Guitar  Γöé
  4896. ΓöéPiano               Γöé                    Γöé                    Γöé(nylon)             Γöé
  4897. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4898. Γöé1  Bright Acoustic  Γöé9  Glockenspiel     Γöé17 Percussive Organ Γöé25 Acoustic Guitar  Γöé
  4899. ΓöéPiano               Γöé                    Γöé                    Γöé(steel)             Γöé
  4900. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4901. Γöé2  Electric Grand   Γöé10 Music box        Γöé18 Rock Organ       Γöé26 Electric Guitar  Γöé
  4902. ΓöéPiano               Γöé                    Γöé                    Γöé(jazz)              Γöé
  4903. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4904. Γöé3  Honky-Tonk Piano Γöé11 Vibraphone       Γöé19 Church Organ     Γöé27 Electric Guitar  Γöé
  4905. Γöé                    Γöé                    Γöé                    Γöé(clean)             Γöé
  4906. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4907. Γöé4  Rhodes Piano     Γöé12 Marimba          Γöé20 Reed Organ       Γöé28 Electric Guitar  Γöé
  4908. Γöé                    Γöé                    Γöé                    Γöé(muted)             Γöé
  4909. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4910. Γöé5  Chorused Piano   Γöé13 Xylophone        Γöé21 Accordion        Γöé29 Overdriven GuitarΓöé
  4911. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4912. Γöé6  Harpsichord      Γöé14 Tubular Bells    Γöé22 Harmonica        Γöé30 Distortion GuitarΓöé
  4913. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4914. Γöé7  Clavinet         Γöé15 Dulcimer         Γöé23 Tango Accordion  Γöé31 Guitar Harmonics Γöé
  4915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4916. ΓöéBass                ΓöéStrings             ΓöéEnsemble            ΓöéBrass               Γöé
  4917. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4918. Γöé32 Acoustic Bass    Γöé40 Violin           Γöé48 String Ensemble 1Γöé56 Trumpet          Γöé
  4919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4920. Γöé33 Electric Bass    Γöé41 Viola            Γöé49 String Ensemble 2Γöé57 Trombone         Γöé
  4921. Γöé(finger)            Γöé                    Γöé                    Γöé                    Γöé
  4922. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4923. Γöé34 Electric Bass    Γöé42 Cello            Γöé50 Synth Strings 1  Γöé58 Tuba             Γöé
  4924. Γöé(pick)              Γöé                    Γöé                    Γöé                    Γöé
  4925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4926. Γöé35 Fretless Bass    Γöé43 Contrabass       Γöé51 Synth Strings 2  Γöé59 Muted Trumpet    Γöé
  4927. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4928. Γöé36 Slap Bass 1      Γöé44 Tremolo Strings  Γöé52 Choir Aahs       Γöé60 French Horn      Γöé
  4929. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4930. Γöé37 Slap Bass 2      Γöé45 Pizzicato StringsΓöé53 Voice Oohs       Γöé61 Brass Section    Γöé
  4931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4932. Γöé38 Synth Bass 1     Γöé46 Orchestral Harp  Γöé54 Synth Voice      Γöé62 Synth Brass 1    Γöé
  4933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4934. Γöé39 Synth Bass 2     Γöé47 Timpani          Γöé55 Orchestra Hit    Γöé63 Synth Brass 2    Γöé
  4935. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4936. ΓöéReed                ΓöéPipe                ΓöéSynth Lead          ΓöéSynth Pad           Γöé
  4937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4938. Γöé64 Soprano Sax      Γöé72 Piccolo          Γöé80 Lead 1 (square)  Γöé88 Pad 1 (New Age)  Γöé
  4939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4940. Γöé65 Alto Sax         Γöé73 Flute            Γöé81 Lead 2 (sawtooth)Γöé89 Pad (warm)       Γöé
  4941. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4942. Γöé66 Tenor Sax        Γöé74 Recorder         Γöé82 Lead 3 (calliope Γöé90 Pad 3 (polysynth)Γöé
  4943. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4945. Γöé67 Baritone Sax     Γöé75 Pan Flute        Γöé83 Lead 4 (chiff    Γöé91 Pad 4 (choir)    Γöé
  4946. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4947. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4948. Γöé68 Oboe             Γöé76 Bottle Blow      Γöé84 Lead 5 (charang) Γöé92 Pad 5 (bowed)    Γöé
  4949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4950. Γöé69 English Horn     Γöé77 Shakuhachi       Γöé85 Lead 6 (voice)   Γöé93 Pad 6 (metallic) Γöé
  4951. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4952. Γöé70 Bassoon          Γöé78 Whistle          Γöé86 Lead 7 (fifths)  Γöé94 Pad 7 (halo)     Γöé
  4953. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4954. Γöé71 Clarinet         Γöé79 Ocarina          Γöé87 Lead 8 (bass +   Γöé95 Pad 8 (sweep)    Γöé
  4955. Γöé                    Γöé                    Γöélead)               Γöé                    Γöé
  4956. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4957. ΓöéSynth Effects       ΓöéEthnic              ΓöéPercussive          ΓöéSound Effects       Γöé
  4958. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4959. Γöé96  FX 1 (rain)     Γöé104 Sitar           Γöé112 Tinkle Bell     Γöé120 Guitar Fret     Γöé
  4960. Γöé                    Γöé                    Γöé                    ΓöéNoise               Γöé
  4961. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4962. Γöé97  FX 2            Γöé105 Banjo           Γöé113 Agogo           Γöé121 Breath Noise    Γöé
  4963. Γöé(soundtrack)        Γöé                    Γöé                    Γöé                    Γöé
  4964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4965. Γöé98  FX 3 (crystal)  Γöé106 Shamisen        Γöé114 Steel Drums     Γöé122 Seashore        Γöé
  4966. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4967. Γöé99  FX 4            Γöé107 Koto            Γöé115 Woodblock       Γöé123 Bird Tweet      Γöé
  4968. Γöé(atmosphere)        Γöé                    Γöé                    Γöé                    Γöé
  4969. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4970. Γöé100 FX 5            Γöé108 Kalimba         Γöé116 Taiko Drum      Γöé124 Telephone Ring  Γöé
  4971. Γöé(brightness)        Γöé                    Γöé                    Γöé                    Γöé
  4972. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4973. Γöé101 FX 6 (goblins)  Γöé109 Bagpipe         Γöé117 Melodic Drum    Γöé125 Helicopter      Γöé
  4974. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4975. Γöé102 FX 7 (echoes)   Γöé110 Fiddle          Γöé118 Synth Drum      Γöé126 Applause        Γöé
  4976. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  4977. Γöé103 FX 8 (sci-fi)   Γöé111 Shanai          Γöé119 Reverse Cymbal  Γöé127 Gunshot         Γöé
  4978. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  4979.  
  4980.  
  4981. ΓòÉΓòÉΓòÉ 8.3.3. Percussion Key Assignments ΓòÉΓòÉΓòÉ
  4982.  
  4983. In MIDI, timbre (the sound of a specific instrument; for example, a violin or a 
  4984. trumpet) for most instruments is assigned a specific number. For example, voice 
  4985. 56 represents a trumpet sound. Thus, all note values for voice 56 produce notes 
  4986. having the distinctive sound of a trumpet. 
  4987.  
  4988. Typically, number assignments for percussion instruments are handled 
  4989. differently. Although each percussion instrument has a distinctive sound, all 
  4990. percussion instruments for a particular synthesizer are assigned one voice or 
  4991. timbre number. For example, if a synthesizer specifies that timbre 45 is a PCM 
  4992. percussion set, then note 60 (Middle C) might be for a kettle drum, 61 for a 
  4993. bass drum, 62 for a triangle and so on. 
  4994.  
  4995. Many manufacturers use percussion and note number assignments that are unique 
  4996. to their hardware. For example, note 60 might be assigned to a kettle drum on 
  4997. one synthesizer model and to castanets on another. 
  4998.  
  4999. The following figure shows the standard percussion key definitions. 
  5000.  
  5001.  
  5002. ΓòÉΓòÉΓòÉ 8.4. MIDI Mapping Function ΓòÉΓòÉΓòÉ
  5003.  
  5004. The MIDI mapping function provided with the sequencer device offers a level of 
  5005. device independence to application developers. Because MIDI patch assignments 
  5006. and percussion key assignments of different MIDI manufacturers vary, the MIDI 
  5007. mapper can be enabled to dynamically translate MIDI data in real-time, as a 
  5008. MIDI song is played. An application enables the mapper by setting the port with 
  5009. the MCI_SET command: 
  5010.  
  5011. set sequencer port mapper
  5012.  
  5013. The user can configure the sequencer device by selecting from a list of 
  5014. available device types.  The list is provided on the mapper page of the 
  5015. Multimedia Setup application. OS/2 multimedia provides a General MIDI map, as 
  5016. well as a map for each sequencer device supported by OS/2 multimedia. A mapper 
  5017. page (shown below) also allows the user to enable or disable specific channels. 
  5018.  
  5019. Once the MIDI mapper is enabled, the Sequencer expects the MIDI files it plays 
  5020. to conform to the General MIDI Specification. The MIDI mapper translates the 
  5021. General MIDI format to the appropriate device format as specified in the Mapper 
  5022. page of a MIDI device in Multimedia Setup. 
  5023.  
  5024.  
  5025. ΓòÉΓòÉΓòÉ 8.5. Guidelines for MIDI Song Authors ΓòÉΓòÉΓòÉ
  5026.  
  5027. MIDI authors should be aware of several design concerns when producing a MIDI 
  5028. song: 
  5029.  
  5030.      The General MIDI specification defines a base-level configuration and an 
  5031.       extended-level configuration for synthesizers. Because you cannot control 
  5032.       which synthesizer is used to play your song, you should provide 
  5033.       percussion and melody tracks for both configurations. The table in the 
  5034.       Channel Assignments section shows you which channels to allocate. 
  5035.  
  5036.      Put your important melody sounds in the lower-numbered channels. By 
  5037.       prioritizing channel use, you ensure that your song sounds reasonable 
  5038.       when it is played on hardware that supports only a few channels. 
  5039.  
  5040.      When selecting instruments for your MIDI song, use the instruments that 
  5041.       are defined for the most popular MIDI devices. Your song can then be 
  5042.       easily and accurately mapped to other hardware formats. 
  5043.  
  5044.      When using nonpercussive channels, limit the polyphony (number of 
  5045.       simultaneous notes) to 6 notes for the base level and 16 notes for the 
  5046.       extended level. 
  5047.  
  5048.      When using percussion channels, limit the polyphony to 3 notes for the 
  5049.       base level and 16 notes for the extended level. 
  5050.  
  5051.      Use the standard General MIDI patch assignments and percussion key 
  5052.       assignments shown in the table in the Patch Assignments section and the 
  5053.       figure in the Percussion Key Assignments section. 
  5054.  
  5055.      Always send a program change command to a channel before sending other 
  5056.       commands to the channel.  For channels 10 and 16, which are used for 
  5057.       percussion, select patch 0. 
  5058.  
  5059.      Always send a MIDI main volume controller command (controller number 7) 
  5060.       to a channel after selecting a patch by sending a program change command. 
  5061.       Use the value of 80 (X'50') for normal listening levels. 
  5062.  
  5063.  
  5064. ΓòÉΓòÉΓòÉ 8.6. Using the Sequencer Device ΓòÉΓòÉΓòÉ
  5065.  
  5066. After you open the sequencer device, query the division type of the device 
  5067. element with a status command. Division type refers to the method used to 
  5068. represent the time between MIDI events in the sequence. 
  5069.  
  5070. open mysong.mid alias midi1 shareable
  5071. status midi1 division type wait
  5072.  
  5073. A MIDI file's division type can be either PPQN or any of the following SMPTE 
  5074. formats: 
  5075.  
  5076.       PPQN (parts-per-quarter-note) 
  5077.       SMPTE 24 frame 
  5078.       SMPTE 25 frame 
  5079.       SMPTE 30 frame 
  5080.       SMPTE 30 drop frame 
  5081.  
  5082.  After you determine the file division type, you can make other status queries 
  5083.  such as: 
  5084.  
  5085.  Query                 Response 
  5086.  length                Length of sequence 
  5087.  length track n        Length of track n 
  5088.  position              Current position of sequence 
  5089.  position track n      Current position of track n 
  5090.  tempo                 Current tempo. 
  5091.  
  5092.  Responses are all in the current time format. PPQN files return length and 
  5093.  position information in song pointer units. However, SMPTE files return the 
  5094.  information in colon format HOURS:MINUTES:SECONDS:FRAMES. 
  5095.  
  5096.  PPQN files return the tempo in beats per minute; SMPTE files return the tempo 
  5097.  in frames per second. 
  5098.  
  5099.  
  5100. ΓòÉΓòÉΓòÉ 8.6.1. Playing A MIDI Song ΓòÉΓòÉΓòÉ
  5101.  
  5102. Before you start playing MIDI music, you may want to set the port to the MIDI 
  5103. mapper so that channel and patch reassignments can be made. 
  5104.  
  5105. set midi1 port mapper
  5106. seek midi1 to start wait
  5107. play midi1 notify
  5108. .
  5109. .
  5110. .
  5111. ** playing **
  5112. .
  5113. .
  5114. .
  5115. close midi1
  5116.  
  5117.  
  5118. ΓòÉΓòÉΓòÉ 8.6.2. Creating MIDI Memory Files ΓòÉΓòÉΓòÉ
  5119.  
  5120. Applications that access memory buffers to store and access MIDI data can use 
  5121. the memory I/O features of the multimedia input/output (MMIO) file services. 
  5122. This technique consists of opening a memory file using mmioOpen.  mmioOpen has 
  5123. a pointer to the buffer of MIDI data as a parameter.  This buffer can then be 
  5124. operated on by MCI and MMIO as if it were a file. 
  5125.  
  5126. The details of opening the file and setting up the MIDI buffer varies depending 
  5127. on an application's requirements. For example, the memory buffer can be 
  5128. allocated by the MMIO system and filled subsequently by the application, or the 
  5129. memory buffer can be allocated by the application and passed to MMIO.  The 
  5130. buffer can be filled in different ways such as mmioRead, mmioWrite, and 
  5131. mmioAdvance. 
  5132.  
  5133. Care must be taken when calling MMIO functions and sending MCI messages to the 
  5134. same memory file.  MMIO and MCI are independent subsystems linked only through 
  5135. the MMIO memory handle passed to MCI_OPEN.  There is for example, no 
  5136. relationship between MCI_SEEK and mmioSeek.  Each subsystem keeps its own set 
  5137. of relevant files and stream pointers.  If one subsystem changes the data in 
  5138. memory, but the memory had previously been cued with MCI_CUE, the change of 
  5139. data will not be recognized by MCI until a call to reload the streams has been 
  5140. issued. 
  5141.  
  5142. The following code fragment shows the opening of a memory file with a 
  5143. user-supplied MIDI buffer of untranslated (format 0 or 1) data and the playing 
  5144. of that data through MCI. 
  5145.  
  5146.  
  5147. {
  5148.    /* variable for IOProc */
  5149.    PMMIOPROC  pIOProc;
  5150.    HMODULE    hModMidiio;
  5151.  
  5152.    /* variables for memory file */
  5153.    MMIOINFO  mmioInfo;
  5154.    CHAR      UserBuffer[SIZE_OF_BUFFER];
  5155.    HMMIO     hmmio;
  5156.  
  5157.    /* variables for MCI commands */
  5158.    MCI_OPEN_PARMS  mop;
  5159.    MCI_PLAY_PARMS  mpp;
  5160.  
  5161.  
  5162.    /* Open memory file. Provide MIDI-filled data buffer to MMIO, so
  5163.     * data buffer becomes file image in memory.  Also specify that
  5164.     * the data will need to be translated.
  5165.     */
  5166.  
  5167.  mmioInfo.pchBuffer = UserBuffer; /* Filled with untranslated
  5168.                                      MIDI data                */
  5169.  mmioInfo.cchBuffer = SIZE_OF_BUFFER; /* User-defined         */
  5170.  mmioInfo.ulTranslate = MMIO_TRANSLATEDATA | MMIO_TRANSLATEHEADER;
  5171.                                  /* Need to translate data    */
  5172.  mmioInfo.fccIOProc = mmioFOURCC( 'M', 'I', 'D', 'I');/* Data
  5173.                                                           format */
  5174.  mmioMemInfo.fccChildIOProc = FOURCC_MEM;        /* Storage type */
  5175.  hmmio = mmioOpen ( NULL, mmioInfo, MMIO_READWRITE );
  5176.  
  5177.     /* open MIDI device */
  5178.  
  5179.     mop.pszElementName = (PSZ) hmmiomem;
  5180.  
  5181.     mciSendCommand(
  5182.          0,                        /* We don't know the device yet. */
  5183.          MCI_OPEN,                 /* MCI message                   */
  5184.          MCI_WAIT | MCI_OPEN_MMIO |
  5185.          MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE
  5186.          (ULONG) &mop,         /* Parameters for the message    */
  5187.          0 );                      /* Parameter for notify message  */
  5188.  
  5189.     /* play MIDI memory file for 1 second */
  5190.  
  5191.     mpp.ulFrom=0;
  5192.     mpp.ulTo=3000;    /* default is MMTIME units (1/3000 second) */
  5193.     mciSendCommand(
  5194.             mop.usDeviceID,        /* Device to play the data    */
  5195.             MCI_PLAY,              /* MCI message                */
  5196.             MCI_WAIT |
  5197.             MCI_FROM | MCI_TO,     /* Flags for the MCI message  */
  5198.             (ULONG) &mpp,          /* Parameters for the message */
  5199.             0 );                   /* No parm necessary          */
  5200.  
  5201.      /* close device */
  5202.  
  5203.      mciSendCommand(
  5204.             mop.usDeviceID,        /* Device to play this          */
  5205.             MCI_CLOSE,             /* MCI message                  */
  5206.             MCI_WAIT,              /* Flags for the MCI message    */
  5207.             (ULONG) NULL,          /* Parameters for the message   */
  5208.             (ULONG) NULL );        /* Parameter for notify message */
  5209.  
  5210. }
  5211.  
  5212.  
  5213. ΓòÉΓòÉΓòÉ 8.7. Sequencer Command Messages ΓòÉΓòÉΓòÉ
  5214.  
  5215. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5216. ΓöéMessage                ΓöéDescription                                  Γöé
  5217. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5218. ΓöéMCI_CLOSE              ΓöéCloses the sequencer device.                 Γöé
  5219. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5220. ΓöéMCI_CONNECTOR          ΓöéEnables or disables a connector, queries its Γöé
  5221. Γöé                       Γöéstate or identifies its type.                Γöé
  5222. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5223. ΓöéMCI_CUE                ΓöéCues the device for minimum delay in playbackΓöé
  5224. Γöé                       Γöéor recording:                                Γöé
  5225. Γöé                       Γöé-Cues a sequencer input device               Γöé
  5226. Γöé                       Γöé-Cues a sequencer output device              Γöé
  5227. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5228. ΓöéMCI_GETDEVCAPS         ΓöéGets device capabilities.                    Γöé
  5229. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5230. ΓöéMCI_INFO               ΓöéGets the following information:              Γöé
  5231. Γöé                       Γöé-Sequencer product name                      Γöé
  5232. Γöé                       Γöé-Name of the currently loaded file           Γöé
  5233. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5234. ΓöéMCI_LOAD               ΓöéLoads a sequencer data file.                 Γöé
  5235. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5236. ΓöéMCI_OPEN               ΓöéInitializes the sequencer device.            Γöé
  5237. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5238. ΓöéMCI_PLAY               ΓöéPlays back MIDI data by means of the audio   Γöé
  5239. Γöé                       Γöéadapter. The following optional action       Γöé
  5240. Γöé                       Γöémodifies MCI_PLAY:                           Γöé
  5241. Γöé                       Γöé-Specify start and stop positions in the     Γöé
  5242. Γöé                       Γöédevice element                               Γöé
  5243. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5244. ΓöéMCI_PAUSE              ΓöéSuspends the current playback action.        Γöé
  5245. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5246. ΓöéMCI_RESUME             ΓöéResumes playing from a paused state, keeping Γöé
  5247. Γöé                       Γöépreviously specified parameters in effect.   Γöé
  5248. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5249. ΓöéMCI_SAVE               ΓöéSaves the device element in its current      Γöé
  5250. Γöé                       Γöéformat.                                      Γöé
  5251. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5252. ΓöéMCI_SEEK               ΓöéMoves to the specified position in the deviceΓöé
  5253. Γöé                       Γöéelement.                                     Γöé
  5254. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5255. ΓöéMCI_SET                ΓöéSets audio attributes:                       Γöé
  5256. Γöé                       Γöé-Identify the channels to be used            Γöé
  5257. Γöé                       Γöé-Set the volume                              Γöé
  5258. Γöé                       Γöé-Enable or disable the audio output          Γöé
  5259. Γöé                       ΓöéSets sequencer information in the            Γöé
  5260. Γöé                       ΓöéPMCI_SEQ_SET_PARMS structure of MCI_SET:     Γöé
  5261. Γöé                       Γöé-Set the sequencer as master and specify the Γöé
  5262. Γöé                       Γöétype of MIDI data it uses                    Γöé
  5263. Γöé                       Γöé-Change the SMPTE offset of a sequence       Γöé
  5264. Γöé                       Γöé-Set the output MIDI port of the sequencer   Γöé
  5265. Γöé                       Γöé-Set the MIDI mapper as the port to receive  Γöé
  5266. Γöé                       Γöésequencer messages                           Γöé
  5267. Γöé                       Γöé-Set the sequencer as slave and identify any Γöé
  5268. Γöé                       Γöésync data it needs                           Γöé
  5269. Γöé                       Γöé-Set the tempo of the MIDI sequence accordingΓöé
  5270. Γöé                       Γöéto the current time format                   Γöé
  5271. Γöé                       ΓöéSets time format to be used for sequencer    Γöé
  5272. Γöé                       Γöédata:                                        Γöé
  5273. Γöé                       Γöé-Song pointer                                Γöé
  5274. Γöé                       Γöé-SMPTE 24                                    Γöé
  5275. Γöé                       Γöé-SMPTE 25                                    Γöé
  5276. Γöé                       Γöé-SMPTE 30                                    Γöé
  5277. Γöé                       Γöé-SMPTE 30 drop                               Γöé
  5278. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5279. ΓöéMCI_SET_CUEPOINT       ΓöéSets a cue point.                            Γöé
  5280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5281. ΓöéMCI_SET_POSITION_ADVISEΓöéSets a position change notification request. Γöé
  5282. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5283. ΓöéMCI_SET_SYNC_OFFSET    ΓöéSets a synchronization offset.               Γöé
  5284. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5285. ΓöéMCI_STATUS             ΓöéReceives status on items such as the         Γöé
  5286. Γöé                       Γöéfollowing:                                   Γöé
  5287. Γöé                       Γöé-File division type                          Γöé
  5288. Γöé                       Γöé-Length of sequence in current time format   Γöé
  5289. Γöé                       Γöé-Whether the device is the sync master or a  Γöé
  5290. Γöé                       Γöéslave                                        Γöé
  5291. Γöé                       Γöé-Which MIDI port is assigned to the sequencerΓöé
  5292. Γöé                       Γöé-What the offset is for a SMPTE-based file   Γöé
  5293. Γöé                       Γöé-What the current tempo and time format is   Γöé
  5294. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5295. ΓöéMCI_STOP               ΓöéStops the sequencer device before loading a  Γöé
  5296. Γöé                       Γöéfile.                                        Γöé
  5297. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5298.  
  5299.  
  5300. ΓòÉΓòÉΓòÉ 8.8. Sequencer Connectors ΓòÉΓòÉΓòÉ
  5301.  
  5302. The sequencer device directly supports one MIDI stream connector that is always 
  5303. enabled.  As it is likely that an application will need to select the output 
  5304. destination on the amplifier-mixer device, the sequencer device will attempt to 
  5305. provide the following connector services to an application.  If the requested 
  5306. connector is not available, the command will fail. 
  5307.  
  5308.      headphones 
  5309.  
  5310.      speakers 
  5311.  
  5312.      line out 
  5313.  
  5314.  Additional connectors may be available on the ampmix device.  To control these 
  5315.  connectors, obtain the device ID of the ampmix device using the MCI_CONNECTION 
  5316.  message and issue the connector command directly to the associated 
  5317.  amplifier-mixer. 
  5318.  
  5319.  To determine which connectors are supported by an amplifier-mixer device, use 
  5320.  the MCI_CONNECTORINFO message. 
  5321.  
  5322.  
  5323. ΓòÉΓòÉΓòÉ 9. CD Audio Device ΓòÉΓòÉΓòÉ
  5324.  
  5325. The CD audio media device provides access to devices that read compact discs 
  5326. for the purpose of playing CD audio. A typical use for CD audio is to provide 
  5327. high quality audio for use in a presentation.  Another use of CD audio would be 
  5328. to provide detailed audio help for an application user.  Instead of the usual 
  5329. hyperlinked text and graphics, an entire step by step audio tutorial might be 
  5330. stored on a compact disc in several different languages. 
  5331.  
  5332.  
  5333. ΓòÉΓòÉΓòÉ 9.1. Compact Disc Formats ΓòÉΓòÉΓòÉ
  5334.  
  5335. A compact disc can contain several different kinds of information.  Many 
  5336. compact discs appear to be very similar to other forms of permanent storage 
  5337. such as hard or floppy disks. CD-ROM (Compact Disc - Read Only Memory) refers 
  5338. to a file format used for compact discs containing data that can be read by a 
  5339. computer's file system. This format is also known as Yellow Book. Yellow Book 
  5340. refers to the specification published by Philips Consumer Electronics Company 
  5341. and Sony Corporation that describes the physical layout of the CD-ROM disc 
  5342. format. This document evolved into the ISO (International Organization for 
  5343. Standardization) 9660 standard. 
  5344.  
  5345. Another form of compact disc data is Compact Disc Digital Audio (CD-DA) and is 
  5346. also known as Red Book.  This format is used for compact discs containing 
  5347. digital audio. CD-DA discs are encoded as 16-bit stereo PCM (Pulse Code 
  5348. Modulation) at 44.1 kHz.  See Waveform Data Formats for more information on 
  5349. this recording method. 
  5350.  
  5351. For every second of CD-DA audio data, 172KB of disc storage is required. 
  5352. Therefore, the sustained data rate required to play back a selection from a 
  5353. CD-DA track is 172KB per second. The CD-DA track format typically has an error 
  5354. recovery rate of 90 percent.  A 10 percent error rate is acceptable for audio 
  5355. discs, because errors that escape the correction mechanism are usually 
  5356. compensated for by audio filters in the CD player hardware. 
  5357.  
  5358. Unlike CD-DA data, information stored in a CD-ROM file system cannot tolerate 
  5359. such a relatively high error rate.  As a result, CD-ROM format data is 
  5360. transferred to an application at an apparent data rate of 150KB per second. The 
  5361. lower data rate results from the additional error correction bits utilized by 
  5362. the file system to produce an acceptable error rate. 
  5363.  
  5364.  
  5365. ΓòÉΓòÉΓòÉ 9.2. Mixed Format Compact Discs ΓòÉΓòÉΓòÉ
  5366.  
  5367. A mixed format compact disc holds CD-ROM file system data as well as CD-DA 
  5368. track format data.  An example of the use of a mixed format disc is an 
  5369. application that contains several symphonies by a famous composer. The actual 
  5370. audio is stored as a series of CD-DA tracks. Also stored on the disc (but in 
  5371. CD-ROM file format) is a program, the actual music score, and perhaps a data 
  5372. base on the composer's life. When the application is started, the audio from a 
  5373. symphony can be played using the CD audio media driver, while the user is 
  5374. allowed to study the music score. Additionally, the user might retrieve facts 
  5375. on the composer, such as how old the composer was when the symphony was 
  5376. written. 
  5377.  
  5378. By issuing the MCI_GETTOC message with mciSendCommand, an application can 
  5379. retrieve a table of contents (TOC) for a disc. This function is particularly 
  5380. useful for a mixed format disc. The starting and ending addresses (time) of 
  5381. each audio track are listed as well as the type of track.  Using the table of 
  5382. contents, an application can immediately determine which tracks can be played 
  5383. using the CD audio device.  Additionally, an application can determine the 
  5384. track type by issuing the status command to determine the type of any 
  5385. individual track. 
  5386.  
  5387. open cdaudio alias mycd shareable
  5388. status mycd type track 1 wait
  5389.  
  5390. Note:  The CD audio device processes only CD-DA tracks. 
  5391.  
  5392.  
  5393. ΓòÉΓòÉΓòÉ 9.3. CD-ROM Drives and Streaming ΓòÉΓòÉΓòÉ
  5394.  
  5395. Depending on the type of CD-ROM drive installed, the audio data on a CD-DA disc 
  5396. is either processed by a Digital-to-Analog Converter (DAC) that is built into 
  5397. the drive, or it is moved through the system to a Digital Signal Processor 
  5398. (DSP) on an audio adapter. Some CD-ROM drives can only play CD-DA audio data 
  5399. through the built-in DAC. Others, like the IBM Personal System/2 (PS/2) 
  5400. CD-ROM-II Drive, can play through the DAC, or they can stream data through the 
  5401. audio adapter DSP. 
  5402.  
  5403. The advantage offered by playing CD-DA through the DAC is that it is a simple 
  5404. operation that greatly reduces system and resource overhead. The advantage 
  5405. gained by streaming data through an audio adapter DSP is that you can 
  5406. potentially enhance the signal beyond the capabilities of the DAC by adding 
  5407. special effects such as reverberation and tremolo, or by modifying treble and 
  5408. bass-capabilities the DAC cannot provide. 
  5409.  
  5410. The default mode for the CD audio device is playback processed by the DAC 
  5411. through the internal headphones connector.  To switch to playback through the 
  5412. audio adapter DSP, the application sends the connector command enabling the cd 
  5413. stream connector. 
  5414.  
  5415. connector mycd enable type cd stream wait
  5416.  
  5417. To resume playback through the internal CD DAC, the application should 
  5418. re-enable the headphones connector.  This will automatically disable the 
  5419. streaming connector. 
  5420.  
  5421. connector mycd enable type headphones wait
  5422.  
  5423. Contention for the Amplifier-Mixer Device 
  5424.  
  5425. Because the audio adapter is modeled as an amplifier-mixer (ampmix) device, the 
  5426. CD audio device will automatically open and connect to its default 
  5427. amplifier-mixer when streaming CD-DA data.  If the amplifier-mixer device is 
  5428. currently opened exclusively by another application, enabling the cd stream 
  5429. connector will fail.  If the amplifier-mixer is available, then other 
  5430. applications using the same ampmix device might temporarily lose use of the 
  5431. device if the audio adapter cannot simultaneously process all requests.  The 
  5432. Media Device Manager (MDM) will handle all resource allocation automatically, 
  5433. however it should be realized that streaming CD-DA data using the CD audio 
  5434. device can effect applications using the waveaudio and sequencer devices as 
  5435. these devices also use the ampmix device.  Conversely, a waveaudio device could 
  5436. cause the loss of a streaming CD audio device if the waveaudio device requires 
  5437. the use of the same shared ampmix device. 
  5438.  
  5439.  
  5440. ΓòÉΓòÉΓòÉ 9.4. Using the CD Audio Device ΓòÉΓòÉΓòÉ
  5441.  
  5442. The CD audio device is a dynamic single context device and is serially 
  5443. shareable. 
  5444.  
  5445. open cdaudio alias mycd shareable wait
  5446.  
  5447. By setting the shareable flag, an application allows other applications to 
  5448. share the device. When the device context is about to become active, the 
  5449. multimedia system posts an MM_MCIPASSDEVICE message with an event of 
  5450. MCI_GAINING_USE to your application. 
  5451.  
  5452. Another common aspect of using the CD audio device is controlling the volume. 
  5453. Volume is controlled by indicating a percentage of the maximum achievable 
  5454. effect.  Like all other devices in OS/2 multimedia, this volume level is 
  5455. automatically tempered by the master volume level that was set using the Volume 
  5456. Control application. 
  5457.  
  5458. Volume Control Using the Internal DAC 
  5459.  
  5460. By default the CD audio device utilizes the internal DAC on the CD drive which 
  5461. is represented by an enabled headphones connector.  When the internal DAC is 
  5462. being used to process the CD audio data, requests to set the volume should be 
  5463. sent directly to the CD device. 
  5464.  
  5465. set mycd audio volume 50 all wait
  5466.  
  5467. Depending on the capabilities of the actual CD-ROM drive, the degree of volume 
  5468. control might vary from on or off, to a reasonably linear range of settings. 
  5469. For example, the IBM PS/2 CD-ROM-II Drive supports 16 different levels of 
  5470. volume.  An application might want to display either a simple two state mute 
  5471. button or a volume slider or dial depending on the degree of volume control 
  5472. provided by the CD drive.  If a CD audio device can set the volume to some 
  5473. value other than 0 or 100, then it is likely the device supports several volume 
  5474. levels.  For more information on two-state graphical buttons, see OS/2 
  5475. Multimedia Controls.  Refer to the PM Programming Reference for information on 
  5476. linear sliders and circular sliders (dials). 
  5477.  
  5478. Volume Control Using the Ampmix Device 
  5479.  
  5480. As stated previously, some CD audio devices have the capability to stream the 
  5481. audio data to a connected amplifier-mixer device.  To determine if a particular 
  5482. CD audio device can stream CD audio data the device capabilities command can be 
  5483. used.  If TRUE is returned, then the cd stream connector can subsequently be 
  5484. enabled. 
  5485.  
  5486. capability mycd can stream wait
  5487. .
  5488. .
  5489. .
  5490. ** If this CD audio device can stream **
  5491. .
  5492. .
  5493. .
  5494. connector mycd enable type cd stream wait
  5495.  
  5496. After enabling the cd stream, the CD audio device is utilizing the 
  5497. amplifier-mixer device to convert the audio data into sound.  As such, the 
  5498. application must now send all volume commands to the connected ampmix device. 
  5499. Before a command can be sent to the ampmix device, the application must obtain 
  5500. the device ID of the amplifier-mixer device using the MCI_CONNECTION message. 
  5501. If using the string interface, an alias can be assigned to the connected ampmix 
  5502. device as follows: 
  5503.  
  5504. connection mycd query type cd stream alias amp wait
  5505.  
  5506. In the previous example, the alias "amp" is assigned to the connected ampmix 
  5507. device.  To set the volume or to control other audio attributes, the 
  5508. application can now send messages directly to the ampmix device. 
  5509.  
  5510. set amp audio volume 25 over 2000 all wait
  5511. set amp audio treble 50 wait
  5512.  
  5513.  
  5514. ΓòÉΓòÉΓòÉ 9.4.1. Playing a Compact Disc ΓòÉΓòÉΓòÉ
  5515.  
  5516. Before issuing a play command, suitable media should be present in the CD 
  5517. drive.  The following status command will return TRUE if the disc contains 
  5518. CD-DA tracks that can be played by the CD audio device: 
  5519.  
  5520. status mycd media present wait
  5521.  
  5522. The CD audio device operates only on discs that contain CD-DA tracks.  If a 
  5523. disc contains no CD-DA tracks, then the MCIERR_INVALID_MEDIA error can be 
  5524. returned on any command that requires a CD-DA track format in order to 
  5525. complete. Example commands include play, seek, and the media present function 
  5526. of the status command. 
  5527.  
  5528. Other pertinent information regarding the CD audio device can be obtained using 
  5529. the status command: 
  5530.  
  5531.  Query                 Response 
  5532.  ready                 TRUE or FALSE 
  5533.  mode                  not ready, open, paused, playing, seeking, or stopped 
  5534.  time format           milliseconds, MMTIME, MSF, TMSF 
  5535.  volume                Current volume setting 
  5536.  
  5537.  The status command will also return the following information about the 
  5538.  currently inserted media: 
  5539.  
  5540.  Query                    Response 
  5541.  current track            Number of current track 
  5542.  position in track        Current position relative to track start 
  5543.  length track n           Length of track n 
  5544.  position track n         Starting position of track n 
  5545.  type track n             Audio or data 
  5546.  copypermitted track n    TRUE, if digital copying permitted 
  5547.  channels track n         Number of audio channels on track 
  5548.  preemphasis              TRUE, if track was recorded with preemphasis 
  5549.  start position           Starting position of the disc 
  5550.  position                 Position in current time format 
  5551.  number of tracks         Number of audio tracks on the disc 
  5552.  length                   Total length of tracks on the disc 
  5553.  
  5554.  Changing the Media 
  5555.  
  5556.  It is the responsibility of the application to ensure that the appropriate 
  5557.  compact disc is in the CD drive if having a particular disc is essential to 
  5558.  the application.  For example, a CD player application might simply update its 
  5559.  track and time displays if a new disc is inserted.  Other applications might 
  5560.  be so dependent on a specific disc that the user must be prompted to re-insert 
  5561.  the appropriate disc.  An application can choose to disable the manual eject 
  5562.  button on the physical CD drive to prevent the disc from being changed. 
  5563.  
  5564.   capability mycd can lockeject wait
  5565.   .
  5566.   .
  5567.   .
  5568.   ** If the door can be locked, lock it! **
  5569.   .
  5570.   .
  5571.   .
  5572.   set mycd door locked wait
  5573.  
  5574.  If the drive does not support disabling the manual eject, then the application 
  5575.  can check the disc identity by obtaining the UPC code (serial number) or the 
  5576.  more general CD ID.  The CD ID is an 8-byte identifier which can be obtained 
  5577.  using the info command and is constructed from the following information: 
  5578.  
  5579.      Starting track address 
  5580.  
  5581.      Ending track number 
  5582.  
  5583.      Lead-out track address. 
  5584.  
  5585.   info mycd ID wait
  5586.  
  5587.  The UPC code is a serial number which has been assigned to a particular 
  5588.  compact disc and can also be obtained using the info command, however not all 
  5589.  disc manufacturers utilize a UPC code. The UPC code is represented as a binary 
  5590.  coded decimal (BCD) number. 
  5591.  
  5592.   info mycd UPC wait
  5593.  
  5594.  If a play is in progress and the manual eject button is pressed on the CD 
  5595.  drive, the application will receive the MCIERR_DEVICE_NOT_READY error when the 
  5596.  play command is aborted. 
  5597.  
  5598.  
  5599. ΓòÉΓòÉΓòÉ 9.4.2. Unique Considerations for Streaming ΓòÉΓòÉΓòÉ
  5600.  
  5601. When the OS/2 multimedia system is streaming multimedia information from a 
  5602. CD-ROM drive, attempts by other applications to access and control the CD drive 
  5603. for normal file system operations can be suspended until the streaming 
  5604. operation is ended. The stream can be interrupted by a pause or a stop command, 
  5605. the completion of playback, or the ejection of the disc.  Once the stream is 
  5606. interrupted, any applications that were waiting can resume their attempts to 
  5607. gain control of the device. 
  5608.  
  5609. If the CD audio device is being shared and the disc is changed on an 
  5610. application which had lost use of the device, any active play command may be 
  5611. aborted with an error of MCIERR_MEDIA_CHANGED when use of the device is 
  5612. subsequently regained. 
  5613.  
  5614.  
  5615. ΓòÉΓòÉΓòÉ 9.5. CD-DA Command Messages ΓòÉΓòÉΓòÉ
  5616.  
  5617. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5618. ΓöéMessage                    ΓöéDescription                                       Γöé
  5619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5620. ΓöéMCI_OPEN                   ΓöéInitializes the CD-DA device.                     Γöé
  5621. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5622. ΓöéMCI_GETDEVCAPS             ΓöéGets device capabilities.                         Γöé
  5623. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5624. ΓöéMCI_GETTOC                 ΓöéGets a table of contents structure for the        Γöé
  5625. Γöé                           Γöécurrently loaded disc.                            Γöé
  5626. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5627. ΓöéMCI_CUE                    ΓöéCues the device for minimum delay in playback.    Γöé
  5628. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5629. ΓöéMCI_PLAY                   ΓöéStarts playing audio data from the disc. The      Γöé
  5630. Γöé                           Γöéfollowing optional action modifies MCI_PLAY:      Γöé
  5631. Γöé                           Γöé-Specify start and stop positions on the disc     Γöé
  5632. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5633. ΓöéMCI_PAUSE                  ΓöéSuspends the current playback action.             Γöé
  5634. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5635. ΓöéMCI_RESUME                 ΓöéResumes playing from a paused state, keeping      Γöé
  5636. Γöé                           Γöépreviously specified parameters in effect.        Γöé
  5637. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5638. ΓöéMCI_SEEK                   ΓöéMoves to the specified position on the disc.      Γöé
  5639. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5640. ΓöéMCI_SET                    ΓöéSets audio attributes:                            Γöé
  5641. Γöé                           Γöé-Identify the channels to be used                 Γöé
  5642. Γöé                           Γöé-Set the volume                                   Γöé
  5643. Γöé                           Γöé-Apply the audio attribute change over a period ofΓöé
  5644. Γöé                           Γöétime (fade)                                       Γöé
  5645. Γöé                           Γöé-Enable or disable the audio output               Γöé
  5646. Γöé                           ΓöéRetract the tray and close the door, if possible  Γöé
  5647. Γöé                           Γöé-Open the door and eject the tray, if possible    Γöé
  5648. Γöé                           Γöé-Set the time format in milliseconds, MSF, TMSF,  Γöé
  5649. Γöé                           Γöéor MMTIME                                         Γöé
  5650. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5651. ΓöéMCI_SET_SYNC_OFFSET        ΓöéSpecifies positional offsets.                     Γöé
  5652. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5653. ΓöéMCI_STATUS                 ΓöéReceives status on items such as the following:   Γöé
  5654. Γöé                           Γöé-Current volume setting                           Γöé
  5655. Γöé                           Γöé-Length of the disc                               Γöé
  5656. Γöé                           Γöé-Whether the media is present in the device       Γöé
  5657. Γöé                           Γöé-Current mode of the device; for example,         Γöé
  5658. Γöé                           Γöé"stopped"                                         Γöé
  5659. Γöé                           Γöé-Current position in the media                    Γöé
  5660. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5661. ΓöéMCI_INFO                   ΓöéFills a user-supplied buffer with the following   Γöé
  5662. Γöé                           Γöéinformation:                                      Γöé
  5663. Γöé                           Γöé-Product name and model number of the current     Γöé
  5664. Γöé                           Γöéaudio device                                      Γöé
  5665. Γöé                           Γöé-Serial number (UPC) of the current disc          Γöé
  5666. Γöé                           Γöé-ID of the current disc                           Γöé
  5667. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5668. ΓöéMCI_STOP                   ΓöéStops playing the CD-DA device.                   Γöé
  5669. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5670. ΓöéMCI_SET_CUEPOINT           ΓöéSets a cue point.                                 Γöé
  5671. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5672. ΓöéMCI_SET_POSITION_ADVISE    ΓöéSets a position change notification request.      Γöé
  5673. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5674. ΓöéMCI_CLOSE                  ΓöéCloses the CD-DA device.                          Γöé
  5675. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5676. ΓöéMCI_CONNECTOR              ΓöéEnables or disables a connector, queries its stateΓöé
  5677. Γöé                           Γöéor identifies its type.                           Γöé
  5678. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5679.  
  5680.  
  5681. ΓòÉΓòÉΓòÉ 9.5.1. CD Audio Connectors ΓòÉΓòÉΓòÉ
  5682.  
  5683. The number and type of connectors can vary by manufacturer.  To determine which 
  5684. connectors are supported, an application can issue the MCI_CONNECTORINFO 
  5685. message.  Also, the device capabilities command can be issued to determine if 
  5686. the CD drive can stream audio to an amplifier-mixer device.  The following are 
  5687. typical of the connectors supported by CD audio devices: 
  5688.  
  5689.      Headphones 
  5690.  
  5691.      CD stream 
  5692.  
  5693.  
  5694. ΓòÉΓòÉΓòÉ 10. CD-XA Device ΓòÉΓòÉΓòÉ
  5695.  
  5696. CD-XA Disc Formats 
  5697.  
  5698. The CD-XA media driver provides access to devices that support CD-ROM/XA discs. 
  5699. CD-XA (Compact Disc-Extended Architecture) refers to a storage format that 
  5700. accommodates interleaved storage of audio, video and standard file system data. 
  5701. CD-XA data is stored in a file system format on the discs, and playback control 
  5702. is managed by the CD-XA media device in cooperation with the amplifier-mixer 
  5703. device. 
  5704.  
  5705. CD-XA takes advantage of a special ADPCM audio compression mechanism that not 
  5706. only yields a low data rate but also enables more audio data to be stored on a 
  5707. disc than that allowed by a CD-DA disc. ADPCM (Adaptive Delta Pulse Code 
  5708. Modulation) is an audio compression technique that allows up to a 16 to 1 
  5709. compression of audio data. 
  5710.  
  5711. By compressing the audio data (in some cases to 1/16 the size of CD-DA data) it 
  5712. now becomes possible to record multiple audio tracks on a single disc. With 
  5713. CD-XA level C, recorded in stereo, it is possible to interleave 8 different 
  5714. audio tracks on a single disc. With CD-XA level C, recorded in mono, this 
  5715. number climbs to 16 different tracks on a single disc. 
  5716.  
  5717. The following table summarizes the different compression levels available with 
  5718. CD-XA and compares them to CD-DA. 
  5719.  
  5720. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5721. ΓöéType      ΓöéAudio      ΓöéVideo     ΓöéFile ΓöéData Rate ΓöéOne Sec of     ΓöéSpec      Γöé
  5722. Γöé          Γöé           Γöé          ΓöéSys  Γöéper Sec   ΓöéAudio Data     Γöé          Γöé
  5723. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5724. ΓöéCD-DA     Γöé16-bit PCM ΓöéNo        ΓöéNo   Γöé172KB     ΓöéStereo: 172KB  ΓöéRed Book  Γöé
  5725. Γöé          Γöéat 44.1 kHzΓöé          Γöé     Γöé          Γöé               Γöé          Γöé
  5726. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5727. ΓöéCD-DA+G   Γöé16-bit PCM Γöé288 x 192 ΓöéNo   Γöé172KB     ΓöéStereo: 172KB  ΓöéRed Book  Γöé
  5728. Γöé          Γöéat 44.1 kHzΓöéCLUT4     Γöé     Γöé          Γöé               Γöé          Γöé
  5729. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5730. ΓöéCD-ROM    ΓöéNo         ΓöéNo        ΓöéYes  Γöé150KB     ΓöéN/A            ΓöéHigh      Γöé
  5731. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéSierra,   Γöé
  5732. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéISO 9660, Γöé
  5733. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéYellow    Γöé
  5734. Γöé          Γöé           Γöé          Γöé     Γöé          Γöé               ΓöéBook      Γöé
  5735. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5736. ΓöéCD-XA     Γöé4-bit ADPCMΓöé320 x 200 ΓöéYes  Γöé150KB     ΓöéMono: 18.75KB  ΓöéGreen BookΓöé
  5737. ΓöéLevel B   Γöéat 37.8 kHzΓöé640 x 480 Γöé     Γöé          ΓöéStereo: 37.5KB Γöé          Γöé
  5738. Γöé          Γöé           ΓöéCLUT1,    Γöé     Γöé          Γöé               Γöé          Γöé
  5739. Γöé          Γöé           Γöé4 or 8    Γöé     Γöé          Γöé               Γöé          Γöé
  5740. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5741. ΓöéCD-XA     Γöé4-bit ADPCMΓöé320 x 200 ΓöéYes  Γöé150KB     ΓöéMono: 9.4KB    ΓöéGreen BookΓöé
  5742. ΓöéLevel C   Γöéat 18.9 kHzΓöé640 x 480 Γöé     Γöé          ΓöéStereo: 18.75KBΓöé          Γöé
  5743. Γöé          Γöé           ΓöéCLUT1,    Γöé     Γöé          Γöé               Γöé          Γöé
  5744. Γöé          Γöé           Γöé4 or 8    Γöé     Γöé          Γöé               Γöé          Γöé
  5745. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5746.  
  5747.  
  5748. ΓòÉΓòÉΓòÉ 10.1. CD-XA Data Types ΓòÉΓòÉΓòÉ
  5749.  
  5750. The CD-XA media device can play four streams of CD-XA data types simultaneously 
  5751. from the same CD-XA file. CD-XA data streams are set up by specifying the 
  5752. following flags with MCI_SET: 
  5753.  
  5754.  Flag                          CD-XA Stream Data Type 
  5755.  
  5756.  MCI_CDXA_AUDIO_DEVICE         CD-XA audio channel to an audio adapter. 
  5757.  
  5758.  MCI_CDXA_AUDIO_BUFFER         CD-XA audio channel to an audio memory playlist. 
  5759.  
  5760.  MCI_CDXA_VIDEO_BUFFER         CD-XA video channel to a video memory playlist. 
  5761.  
  5762.  MCI_CDXA_DATA_BUFFER          CD-XA data channel to a data memory playlist. 
  5763.  
  5764.  In the future IBM may provide the capability of setting up additional streams 
  5765.  to more than one audio device, or more than one audio, video, or data buffer 
  5766.  playlist. 
  5767.  
  5768.  If a channel contains data of more than one CD-XA data type (data and video), 
  5769.  and an MCI_SET is done, only data of the type specified is returned.  For 
  5770.  example, suppose an MCI_SET message is sent with MCI_CDXA_VIDEO_BUFFER, 
  5771.  channel 0, and a playlist specified. Although channel 0 contains sectors of 
  5772.  both audio and video, only the video sectors are sent to the memory playlist 
  5773.  buffers specified with the MCI_SET. If your application wants to retrieve the 
  5774.  audio sectors from channel 0, it must do another MCI_SET, this time specifying 
  5775.  MCI_CDXA_AUDIO_BUFFER, channel 0, and a playlist that is different from the 
  5776.  one specified for the video data. The audio would then be sent to the playlist 
  5777.  specified for MCI_CDXA_AUDIO_BUFFER, and the video sectors would be sent to 
  5778.  the playlist specified for MCI_CDXA_VIDEO_BUFFER. 
  5779.  
  5780.  
  5781. ΓòÉΓòÉΓòÉ 10.2. Using the CD-XA Device ΓòÉΓòÉΓòÉ
  5782.  
  5783. When an MCI_OPEN or MCI_LOAD request is made, it is recommended that a drive 
  5784. letter not be included as part of the element name. If a drive letter is 
  5785. specified, it must match the drive letter of the open device; otherwise, the 
  5786. error MCI_FILE_NOT_FOUND is returned. 
  5787.  
  5788. Setting Up the Primary Stream 
  5789.  
  5790. The first stream is set up by calling MCI_SET with one of the four target 
  5791. specifications: 
  5792.  
  5793.       MCI_CDXA_AUDIO_DEVICE 
  5794.       MCI_CDXA_AUDIO_BUFFER 
  5795.       MCI_CDXA_VIDEO_BUFFER 
  5796.       MCI_CDXA_DATA_BUFFER 
  5797.  
  5798.  The first stream to be set up is called the primary stream, because it 
  5799.  controls much of the operation of the CD-XA device. When stream control 
  5800.  operations are done on the CD-XA media device, they are done to the primary 
  5801.  stream.  For example, when an MCI_SEEK is done, only the primary stream is 
  5802.  seeked. This makes sense because the media is the same for all streams, and 
  5803.  seeking one of the streams affects the disc position for all the other 
  5804.  streams. 
  5805.  
  5806.  Because the primary stream is the control focus for the entire device, if an 
  5807.  MCI_SET is done while the MCI_SET_OFF flag is in effect for the primary 
  5808.  stream, the device is stopped. If the MCI_SET is done on a secondary stream, 
  5809.  only that secondary stream is stopped. 
  5810.  
  5811.  If an MCI_SET with MCI_SET_ON is not done before an MCI_PLAY, MCI_CUE, or 
  5812.  MCI_SEEK is sent, the first audio channel found on the CD-XA file is used as 
  5813.  the default and is set up as the primary stream using the 
  5814.  MCI_CDXA_AUDIO_DEVICE. It is recommended that an MCI_SET be sent for the 
  5815.  primary stream before an MCI_PLAY, MCI_CUE or MCI_SEEK. It is also recommended 
  5816.  that MCI_CDXA_AUDIO_DEVICE be used as the primary stream, because seeking and 
  5817.  playing with FROM and TO positions specified can only be done on a stream to 
  5818.  an audio device. The video, data and audio buffers do not have seek or time 
  5819.  capability.  When CD-XA data types are streamed to memory playlists, this 
  5820.  operation is done as a data transport and does not have a real timing aspect 
  5821.  associated with it.  For example, if an MCI_SET with an MCI_CDXA_DATA_BUFFER 
  5822.  stream was set as the primary stream, a seek or a status position to an MMTIME 
  5823.  unit or millisecond does not make sense, because there is no correlation of 
  5824.  time to the data volumes. 
  5825.  
  5826.  When an MCI_SET with MCI_CDXA_AUDIO_DEVICE is done, the audio quality level is 
  5827.  set by the media device, based on the quality level found in the first sector. 
  5828.  The audio quality level must be constant within a channel within a single file 
  5829.  when streamed to an audio device. The current CD-XA software does not detect 
  5830.  any deviations that occur. If the quality level changes in a channel, the 
  5831.  output audio may be garbled and the stream time will be inaccurate. 
  5832.  
  5833.  If the channel associated with the primary stream is set off and a PLAY 
  5834.  command is received, the error MCIERR_CHANNEL_OFF will be returned. 
  5835.  
  5836.  The valid range for audio channels is 0-15.  The valid range for video and 
  5837.  data channels is 0-31.  These ranges are defined by CD-XA specifications. 
  5838.  MCIERR_OUTOFRANGE is returned if the channel specified on the MCI_SET is 
  5839.  outside the range. 
  5840.  
  5841.  The channel assigned to a secondary target specification 
  5842.  (MCI_CDXA_AUDIO_DEVICE, MCI_CDXA_AUDIO_BUFFER, MCI_CDXA_VIDEO_BUFFER, or 
  5843.  MCI_CDXA_DATA_BUFFER) can be changed without closing the CD-XA media device. 
  5844.  To do this, your application calls MCI_SET with the MCI_SET_OFF flag for that 
  5845.  channel and then calls MCI_SET with the MCI_SET_ON flag and the new channel 
  5846.  number.  If MCI_SET with the MCI_SET_ON flag is called for a target 
  5847.  specification already in use, MCIERR_RESOURCE_NOT_AVAILABLE is returned if the 
  5848.  system or underlying hardware cannot support the additional resource demands. 
  5849.  
  5850.  The channel assigned to the primary target specification can be changed just 
  5851.  like a secondary one can. For example, a series of MCI_SET commands could be 
  5852.  made, specifying the following parameter sequences: 
  5853.  
  5854.       MCI_CDXA_AUDIO_DEVICE channel 0 MCI_SET_ON 
  5855.       MCI_CDXA_AUDIO_DEVICE channel 0 MCI_SET_OFF 
  5856.       MCI_CDXA_AUDIO_DEVICE channel 1 MCI_SET_ON 
  5857.  
  5858.  The MCI_SET commands would change the channel of the MCI_CDXA_AUDIO_DEVICE 
  5859.  from 0 to 1. 
  5860.  
  5861.  
  5862. ΓòÉΓòÉΓòÉ 10.2.1. XA Stream Connector ΓòÉΓòÉΓòÉ
  5863.  
  5864. The XA stream connector represents the flow of XA ADPCM audio from the CD-XA 
  5865. device to its associated amplifier-mixer (ampmix) device.  During playback, the 
  5866. CD-XA device sends audio information from a CD-ROM/XA disc to the ampmix device 
  5867. for subsequent conversion into audio that can be heard through conventional 
  5868. speakers or headphones. 
  5869.  
  5870. Although volume control is provided by the CD-XA device, the device actually 
  5871. uses the services provided by the ampmix device to modify the perceived volume 
  5872. level. If other advanced audio-shaping features are required, the application 
  5873. can retrieve the device ID of the ampmix device using the MCI_CONNECTION 
  5874. message. Once the device ID has been obtained, the application can send set 
  5875. commands directly to the ampmix device to manipulate audio attributes, such as 
  5876. treble, bass, balance, and so forth. 
  5877.  
  5878.  
  5879. ΓòÉΓòÉΓòÉ 10.2.2. Changing the Disc ΓòÉΓòÉΓòÉ
  5880.  
  5881. If the user ejects a disc while the CD-XA device is playing, the device is 
  5882. stopped. When the CD-XA device detects that the disc has been changed and a 
  5883. file was opened on the previous disc, it closes the current CD-XA file and 
  5884. resets to the default state of the device.  This state is identical to opening 
  5885. the CD-XA device without specifying a file. Following the reset, the CD-XA 
  5886. device returns MCIERR_MEDIA_CHANGED on the first command following detection of 
  5887. the disc change. 
  5888.  
  5889. To avoid the interruption of play by the ejection of the disc, the application 
  5890. can disable a manual eject with an MCI_SET command before beginning playback. 
  5891.  
  5892.  
  5893. ΓòÉΓòÉΓòÉ 10.3. CD-XA Command Messages ΓòÉΓòÉΓòÉ
  5894.  
  5895. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  5896. ΓöéMessage                       ΓöéDescription                        Γöé
  5897. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5898. ΓöéMCI_CLOSE                     ΓöéCloses the CD-XA device.           Γöé
  5899. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5900. ΓöéMCI_CONNECTOR                 ΓöéEnables or disables a connector,   Γöé
  5901. Γöé                              Γöéqueries its state or identifies itsΓöé
  5902. Γöé                              Γöétype.                              Γöé
  5903. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5904. ΓöéMCI_CUE                       ΓöéCues the device for minimum delay  Γöé
  5905. Γöé                              Γöéin playback.                       Γöé
  5906. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5907. ΓöéMCI_GETDEVCAPS                ΓöéGets device capabilities.          Γöé
  5908. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5909. ΓöéMCI_INFO                      ΓöéFills a user-supplied buffer with  Γöé
  5910. Γöé                              Γöéthe following information:         Γöé
  5911. Γöé                              Γöé-Product name and model number of  Γöé
  5912. Γöé                              Γöéthe current audio device           Γöé
  5913. Γöé                              Γöé-Serial number (UPC) of the disc   Γöé
  5914. Γöé                              Γöé-Name of the currently loaded file Γöé
  5915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5916. ΓöéMCI_LOAD                      ΓöéLoads a data element into the CD-XAΓöé
  5917. Γöé                              Γöédevice.                            Γöé
  5918. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5919. ΓöéMCI_OPEN                      ΓöéInitializes the CD-XA device.      Γöé
  5920. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5921. ΓöéMCI_PAUSE                     ΓöéSuspends the current playback      Γöé
  5922. Γöé                              Γöéaction.                            Γöé
  5923. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5924. ΓöéMCI_PLAY                      ΓöéStarts playing audio data from the Γöé
  5925. Γöé                              Γöédevice element. The following      Γöé
  5926. Γöé                              Γöéoptional action modifies MCI_PLAY: Γöé
  5927. Γöé                              Γöé-Specify start and stop positions  Γöé
  5928. Γöé                              Γöéin the device element              Γöé
  5929. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5930. ΓöéMCI_RESUME                    ΓöéResumes playing from a paused      Γöé
  5931. Γöé                              Γöéstate, keeping previously specifiedΓöé
  5932. Γöé                              Γöéparameters in effect.              Γöé
  5933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5934. ΓöéMCI_SEEK                      ΓöéMoves to the specified position in Γöé
  5935. Γöé                              Γöéthe device element.                Γöé
  5936. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5937. ΓöéMCI_SET                       ΓöéSets audio attributes:             Γöé
  5938. Γöé                              Γöé-Identify the channels to be used  Γöé
  5939. Γöé                              Γöé-Set the volume                    Γöé
  5940. Γöé                              Γöé-Enable or disable the audio outputΓöé
  5941. Γöé                              ΓöéRetracts the tray and closes the   Γöé
  5942. Γöé                              Γöédoor, if possible                  Γöé
  5943. Γöé                              ΓöéOpens the door and ejects the tray,Γöé
  5944. Γöé                              Γöéif possible                        Γöé
  5945. Γöé                              ΓöéSets the time format in            Γöé
  5946. Γöé                              Γöémilliseconds or MMTIME             Γöé
  5947. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5948. ΓöéMCI_SET_CUEPOINT              ΓöéSets a cue point.                  Γöé
  5949. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5950. ΓöéMCI_SET_POSITION_ADVISE       ΓöéSets a position change notificationΓöé
  5951. Γöé                              Γöérequest.                           Γöé
  5952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5953. ΓöéMCI_SET_SYNC_OFFSET           ΓöéSets a synchronization offset.     Γöé
  5954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5955. ΓöéMCI_STATUS                    ΓöéReceives status on items such as   Γöé
  5956. Γöé                              Γöéthe following:                     Γöé
  5957. Γöé                              Γöé-Current volume setting            Γöé
  5958. Γöé                              Γöé-Whether the media is present in   Γöé
  5959. Γöé                              Γöéthe device;                        Γöé
  5960. Γöé                              Γöé-Current mode of the device, for   Γöé
  5961. Γöé                              Γöéexample, "stopped"                 Γöé
  5962. Γöé                              Γöé-Current position in the media     Γöé
  5963. Γöé                              Γöé-Destination of the data identifiedΓöé
  5964. Γöé                              Γöéby channel number                  Γöé
  5965. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  5966. ΓöéMCI_STOP                      ΓöéStops playing the CD-XA device.    Γöé
  5967. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  5968.  
  5969.  
  5970. ΓòÉΓòÉΓòÉ 11. Videodisc Device ΓòÉΓòÉΓòÉ
  5971.  
  5972. The physical videodisc device is an external hardware device that plays 
  5973. videodiscs, producing an analog video and audio signal. The analog video output 
  5974. can be connected to an analog video digitizer component that produces output on 
  5975. the display, or it can simply be connected to a an external video monitor. The 
  5976. audio output can be connected to amplified speakers, headphones, or other audio 
  5977. media drivers. 
  5978.  
  5979.  
  5980. ΓòÉΓòÉΓòÉ 11.1. Device Specifics ΓòÉΓòÉΓòÉ
  5981.  
  5982. The videodisc media device supports Pioneer models 4200, 4300D, 4400, and 8000. 
  5983. The 4300D supports both the American (NTSC) and European (PAL) TV standards for 
  5984. storing analog video signals. Default communications settings for the players 
  5985. are:  8 data bits, no parity, 1 stop bit with a baud rate of 4800.  The first 
  5986. communications port is also selected by default. These settings may be changed 
  5987. using the Multimedia Setup application if they do not match the current 
  5988. settings of the actual videodisc device.  It is highly recommended that 
  5989. communication speeds at or above 4800 bits per second (bps) be utilized to 
  5990. ensure reliable and optimized performance. 
  5991.  
  5992. Because the physical connections on the back of each videodisc device varies, 
  5993. the driver updates the connector and product information when the device is 
  5994. first opened. Applications can retrieve connector information, using 
  5995. MCI_CONNECTORINFO, and product information, using MCI_INFO. 
  5996.  
  5997.  
  5998. ΓòÉΓòÉΓòÉ 11.1.1. Videodisc Formats ΓòÉΓòÉΓòÉ
  5999.  
  6000. A videodisc has one of two formats:  CAV or CLV. 
  6001.  
  6002. CAV (constant angular velocity) is the interactive format of videodiscs, which 
  6003. allows freeze frame and slow motion. The CAV videodisc can be addressed by 
  6004. chapter or by frame. A CAV videodisc can contain up to 30 minutes of video on 
  6005. each side of the disc. One disc holds up to 54,000 frames. 
  6006.  
  6007. With a CAV format videodisc, the angular velocity of the disc is always the 
  6008. same (1800 RPM), no matter what track is being read, which is similar to the 
  6009. way a phonograph record is played. 
  6010.  
  6011. CLV (constant linear velocity) is the format for extended-play videodiscs. The 
  6012. CLV videodisc can be addressed by chapter or by time. A CLV videodisc can 
  6013. contain up to 60 minutes of video on each side of the disc. 
  6014.  
  6015. With a CLV format videodisc, the linear velocity of the disc is constant under 
  6016. the laser head; the disc spins slower when the outside tracks are read. 
  6017.  
  6018. Note:  The number of chapters on CAV and CLV discs varies, depending on the 
  6019.        manufacturer of the disc. 
  6020.  
  6021.  
  6022. ΓòÉΓòÉΓòÉ 11.2. Using the Videodisc Device ΓòÉΓòÉΓòÉ
  6023.  
  6024. Using the videodisc device consists of opening, configuring, seeking/stepping, 
  6025. playing, and setting cue points. 
  6026.  
  6027.  
  6028. ΓòÉΓòÉΓòÉ 11.2.1. Opening the Device ΓòÉΓòÉΓòÉ
  6029.  
  6030. The videodisc player is a dynamic single context device and therefore is 
  6031. serially shareable. When you open the videodisc player, it takes about 60 
  6032. seconds for the disc to load and spin up to a playing position. Specifying a 
  6033. notify flag on the open request allows your application window procedure to 
  6034. remain available to process PM messages. 
  6035.  
  6036. open videodisc alias video1 notify shareable
  6037.  
  6038. If you set the shareable flag, you should not start a playback operation until 
  6039. the system posts the asynchronous MM_MCIPASSDEVICE message with an event of 
  6040. MCI_GAINING_USE to your application. 
  6041.  
  6042. When the system posts the asynchronous MM_MCINOTIFY message with a return code 
  6043. of MCI_NOTIFY_SUCCESSFUL message to your application, this indicates a device 
  6044. context is created. Although you may not have received the MCI_GAINING_USE 
  6045. event in a MM_MCIPASSDEVICE message, you can still make inquiries about the 
  6046. device and the media. The status, capability, info, and close commands can be 
  6047. sent to an inactive device context. 
  6048.  
  6049. You may want to ensure that the disc in the player is not changed by the user. 
  6050. Some devices allow you to disable the manual eject.  Other devices allow you to 
  6051. check the label on the disc: 
  6052.  
  6053. info video1 label wait
  6054.  
  6055. Specify the wait flag with commands that return information. A string for the 
  6056. label is returned in the user-supplied buffer specified with mciSendString. 
  6057.  
  6058. Use the status command to determine the current state of the videodisc player: 
  6059.  
  6060.  Query                 Response 
  6061.  ready                 TRUE or FALSE 
  6062.  mode                  not ready, open, pause, park, play, scan, seek, or stop. 
  6063.  forward               TRUE, if player is set to play in forward direction. 
  6064.  time format           milliseconds, MMTIME, frames, chapters, HMS, HMSF. 
  6065.  position              Position in current format. 
  6066.  speed format          % or FPS. 
  6067.  speed                 Speed in current format. 
  6068.  
  6069.  The status command also returns a lot of information about the disc: 
  6070.  
  6071.   status video1 media present wait
  6072.  
  6073.  Query                 Response 
  6074.  media present         TRUE or FALSE 
  6075.  media type            CAV, CLV, other 
  6076.  disc size             8 or 12 
  6077.  disc side             1 or 2 
  6078.  number of tracks      Number of tracks on the disc. 
  6079.  current track         Chapter number, if applicable. 
  6080.  length                Length of the current segment. 
  6081.  Start                 Starting position of the media. 
  6082.  
  6083.  Use the capability command to query device capabilities for a particular 
  6084.  format. You can request either CAV or CLV information. If no format is 
  6085.  indicated, the default is CAV. 
  6086.  
  6087.   capability video1 clv can reverse wait
  6088.  
  6089.  
  6090. ΓòÉΓòÉΓòÉ 11.2.2. Configuring the Device ΓòÉΓòÉΓòÉ
  6091.  
  6092. Before you begin playing the disc, you may want to set the audio channels. Most 
  6093. videodisc players have two channels for audio. On some videodisc players, the 
  6094. channels are used to produce a stereo effect.  Other videodisc players allow 
  6095. you to turn one of the channels off, based on a selection by the user. This 
  6096. feature is useful for offering the user a choice of language, a level of 
  6097. instruction, and so forth. 
  6098.  
  6099. Most videodisc players allow you to set the volume off (zero) or on (greater 
  6100. than zero) but do not offer a range of values for volume. 
  6101.  
  6102. set video1 audio left off
  6103.  
  6104. You can set the speed format to frames-per-second or a percentage of the normal 
  6105. rate.  The default for the speed format is frames-per-second, and the default 
  6106. for the time format is frames. 
  6107.  
  6108. Most videodisc players have an on-screen display that you can set on or off. 
  6109. The display is a counter that keeps track of your position. The on-screen 
  6110. display is useful for debugging an application-for example, an interactive 
  6111. course. The display shows you where you are in relation to where you may want 
  6112. to be. 
  6113.  
  6114.  
  6115. ΓòÉΓòÉΓòÉ 11.2.3. Seeking and Stepping ΓòÉΓòÉΓòÉ
  6116.  
  6117. You can seek and step to a location on the disc using any of the videodisc time 
  6118. formats. Seeking is a fast-forward or fast-reverse to an absolute position. 
  6119. Stepping is done, backward and forward, in time units relative to the current 
  6120. position.  The default for a step is one time unit forward. 
  6121.  
  6122. seek video1 to start
  6123. step video1 by 1
  6124.  
  6125. Some videodisc players do not display a picture when you do a step. You get a 
  6126. "squelch" color, which is the color of the screen when a frame is not yet 
  6127. displayed. Some devices, particularly for CLV, cannot be frame accurate. 
  6128.  
  6129.  
  6130. ΓòÉΓòÉΓòÉ 11.2.4. Playing a Videodisc ΓòÉΓòÉΓòÉ
  6131.  
  6132. Some videodisc players can vary the playback speed of the CAV disc and also 
  6133. play the disc in reverse. Some players also can perform these operations on a 
  6134. CLV disc. Following are capability queries and the responses generated by a 
  6135. Pioneer 8000 device for CAV and CLV discs: 
  6136.  
  6137.  Query                 Response 
  6138.  can reverse           TRUE 
  6139.  normal play rate      30 fps or 100% 
  6140.  fast play rate        90 fps or 300% 
  6141.  slow play rate        10 fps or 33.33% 
  6142.  maximum play rate     127 fps or 423.33% 
  6143.  minimum play rate     1 fps or 3.33% 
  6144.  
  6145.  Specifying a seek command before a play command can reduce the delay 
  6146.  associated with a PLAY command. 
  6147.  
  6148.  A play command can specify a to and from position. If from is omitted, playing 
  6149.  begins at the current position. If to is omitted, playing stops at the end of 
  6150.  the disc, or at the beginning of the disc, if playing in reverse. 
  6151.  
  6152.   play video1 speed 30 fps
  6153.  
  6154.  Note:  Some videodisc players that cannot vary the playback speed return the 
  6155.         same playback rate in response to these queries. 
  6156.  
  6157.  
  6158. ΓòÉΓòÉΓòÉ 11.2.5. Setting Cue Points and Position Advises ΓòÉΓòÉΓòÉ
  6159.  
  6160. A cue point is a location in the media that issues an MM_MCICUEPOINT 
  6161. notification message whenever it is encountered. The message is returned to the 
  6162. window specified when the cue point was set. Although a cue point is specified 
  6163. in the current time format with setcuepoint, the MM_MCICUEPOINT message is 
  6164. always returned in MMTIME units. MMTIME units are used because the time format 
  6165. set when the cue point is set and the time format set when the cue point is 
  6166. reached may be different.  An application specific value can also be associated 
  6167. with a particular cue point for return in the MM_MCICUEPOINT message.  The 
  6168. value can be anything which has meaning to the application. Generally, up to 20 
  6169. cue points can be set. 
  6170.  
  6171. set video1 time format frames
  6172. setcuepoint video1 on at 1500 return 1
  6173. setcuepoint video1 on at 4000 return 2
  6174.  
  6175. An MM_MCIPOSITIONCHANGE notification message is issued at periodic intervals as 
  6176. time elapses in the media for a particular device context. The message is 
  6177. returned to the window specified when the position advise was set with 
  6178. setpositionadvise. Only one position advise can be set for a device context. 
  6179. As with setcuepoint, the position specified is assumed to be in the currently 
  6180. selected time format while the position reported in the MM_MCIPOSITIONCHANGE 
  6181. notification is in MMTIME units. 
  6182.  
  6183. For more information on cue points and position advises, see Cue Points and 
  6184. Position Advises. 
  6185.  
  6186. setpositionadvise video1 on every 100
  6187.  
  6188. Because videodisc players are external devices and not part of the computer 
  6189. system, the IBM videodisc media driver can guarantee the accuracy of 
  6190. setcuepoint and setpositionadvise functions only within 10 frames, rather than 
  6191. the desired 100 milliseconds (3 frames) of the specified value. 
  6192.  
  6193.  
  6194. ΓòÉΓòÉΓòÉ 11.3. Videodisc Player Error Return Values ΓòÉΓòÉΓòÉ
  6195.  
  6196. The following table contains a list of error messages specific to videodisc 
  6197. players. 
  6198.  
  6199. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6200. ΓöéReturn Code                   ΓöéCause of the Error Message                   Γöé
  6201. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6202. ΓöéMCIERR_VDP_COMMANDFAILURE     ΓöéVideodisc players are external RS-232        Γöé
  6203. Γöé                              Γöédevices; therefore, it is possible for a     Γöé
  6204. Γöé                              Γöécommand to fail because of a device failure. Γöé
  6205. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6206. ΓöéMCIERR_VDP_COMMANDCANCELLED   ΓöéA command with the MCI_WAIT flag specified isΓöé
  6207. Γöé                              Γöéeither aborted or superseded.                Γöé
  6208. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6209. ΓöéMCIERR_VDP_NOSIDE             ΓöéThe videodisc player is unable to determine  Γöé
  6210. Γöé                              Γöéthe side of the videodisc. This message can  Γöé
  6211. Γöé                              Γöébe returned by an MCI_STATUS                 Γöé
  6212. Γöé                              ΓöéMCI_VD_STATUS_SIDE request.                  Γöé
  6213. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6214. ΓöéMCIERR_VDP_NOSIZE             ΓöéThe videodisc player is unable to determine  Γöé
  6215. Γöé                              Γöéthe size of the videodisc. This message can  Γöé
  6216. Γöé                              Γöébe returned by an MCI_STATUS                 Γöé
  6217. Γöé                              ΓöéMCI_VD_STATUS_DISC_SIZE request.             Γöé
  6218. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6219. ΓöéMCIERR_VDP_INVALID_TIMEFORMAT ΓöéThis message can be returned by any command  Γöé
  6220. Γöé                              Γöéspecifying a chapter-specific parameter for aΓöé
  6221. Γöé                              Γöédevice that does not have chapters. It also  Γöé
  6222. Γöé                              Γöécan be returned if MCI_SET_SYNC_OFFSET is    Γöé
  6223. Γöé                              Γöéissued when the device is set to the chapter Γöé
  6224. Γöé                              Γöétime format.                                 Γöé
  6225. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6226. ΓöéMCIERR_VDP_NOCHAPTER          ΓöéChapter information is not present on the    Γöé
  6227. Γöé                              Γöédisc. The following commands require chapter Γöé
  6228. Γöé                              Γöéinformation to be present on the disc:       Γöé
  6229. Γöé                              ΓöéMCI_SET_TIME_FORMAT MCI_FORMAT CHAPTERS,     Γöé
  6230. Γöé                              ΓöéMCI_STATUS MCI_STATUS_CURRENT_TRACK,         Γöé
  6231. Γöé                              ΓöéMCI_STATUS MCI_STATUS_NUMBER_OF_TRACKS.      Γöé
  6232. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6233. ΓöéMCIERR_VDP_NOTSPUNUP          ΓöéThe following commands require the videodisc Γöé
  6234. Γöé                              Γöéto be spun up: MCI_INFO MCI_VD_INFO_LABEL andΓöé
  6235. Γöé                              ΓöéMCI_STATUS with the following parameters     Γöé
  6236. Γöé                              Γöéspecified: MCI_STATUS_POSITION,              Γöé
  6237. Γöé                              ΓöéMCI_STATUS_CURRENT_TRACK,                    Γöé
  6238. Γöé                              ΓöéMCI_STATUS_NUMBER_OF_TRACKS,                 Γöé
  6239. Γöé                              ΓöéMCI_STATUS_LENGTH, MCI_VD_MEDIA_TYPE,        Γöé
  6240. Γöé                              ΓöéMCI_VD_STATUS_SIDE, MCI_VD_STATUS_SPEED,     Γöé
  6241. Γöé                              ΓöéMCI_VD_STATUS_DISC_SIZE.                     Γöé
  6242. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6243.  
  6244.  
  6245. ΓòÉΓòÉΓòÉ 11.4. Videodisc Command Messages ΓòÉΓòÉΓòÉ
  6246.  
  6247. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6248. ΓöéMessage                 ΓöéDescription                                  Γöé
  6249. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6250. ΓöéMCI_OPEN                ΓöéInitializes the videodisc device.            Γöé
  6251. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6252. ΓöéMCI_GETDEVCAPS          ΓöéGets device capabilities.                    Γöé
  6253. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6254. ΓöéMCI_ESCAPE              ΓöéSends custom information to the media driver.Γöé
  6255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6256. ΓöéMCI_CUE                 ΓöéCues the device for minimum delay in         Γöé
  6257. Γöé                        Γöéplayback.                                    Γöé
  6258. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6259. ΓöéMCI_PLAY                ΓöéStarts playing the videodisc. The following  Γöé
  6260. Γöé                        Γöéoptional actions modify MCI_PLAY:            Γöé
  6261. Γöé                        Γöé-Specify start and stop positions            Γöé
  6262. Γöé                        Γöé-Play faster than normal                     Γöé
  6263. Γöé                        Γöé-Play slower than normal                     Γöé
  6264. Γöé                        Γöé-Play in reverse                             Γöé
  6265. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6266. ΓöéMCI_PAUSE               ΓöéSuspends the current playback action for CLV Γöé
  6267. Γöé                        Γöéand CAV discs. Some players may also freeze  Γöé
  6268. Γöé                        Γöéthe video frame.                             Γöé
  6269. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6270. ΓöéMCI_RESUME              ΓöéResumes playing from a paused state, keeping Γöé
  6271. Γöé                        Γöépreviously specified parameters in effect.   Γöé
  6272. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6273. ΓöéMCI_SEEK                ΓöéSearches, using fast forward or fast reverse,Γöé
  6274. Γöé                        Γöéwith video and audio off.  The following     Γöé
  6275. Γöé                        Γöéoptional actions modify MCI_SEEK:            Γöé
  6276. Γöé                        Γöé-Seek in reverse                             Γöé
  6277. Γöé                        Γöé-Seek to the start or the end of the disc    Γöé
  6278. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6279. ΓöéMCI_SET                 ΓöéSets audio attributes:                       Γöé
  6280. Γöé                        Γöé-Identify the channels to be used            Γöé
  6281. Γöé                        Γöé-Set the volume                              Γöé
  6282. Γöé                        Γöé-Enable or disable the audio output.         Γöé
  6283. Γöé                        ΓöéRetracts the tray and closes the door, if    Γöé
  6284. Γöé                        Γöépossible                                     Γöé
  6285. Γöé                        ΓöéOpens the door and ejects the tray, if       Γöé
  6286. Γöé                        Γöépossible                                     Γöé
  6287. Γöé                        ΓöéSets position format in frames, HMS, HMSF,   Γöé
  6288. Γöé                        Γöémilliseconds, MMTIME, or chapters            Γöé
  6289. Γöé                        ΓöéSets speed format in frames-per-second or as Γöé
  6290. Γöé                        Γöéa percentage                                 Γöé
  6291. Γöé                        ΓöéDisables or enables video output.            Γöé
  6292. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6293. ΓöéMCI_STATUS              ΓöéReceives status on items such as the         Γöé
  6294. Γöé                        Γöéfollowing:                                   Γöé
  6295. Γöé                        Γöé-Disc size                                   Γöé
  6296. Γöé                        Γöé-Which side of the disc is loaded            Γöé
  6297. Γöé                        Γöé-Whether current play direction is forward orΓöé
  6298. Γöé                        Γöébackward                                     Γöé
  6299. Γöé                        Γöé-Length of the segment                       Γöé
  6300. Γöé                        Γöé-Whether the media is present in the device  Γöé
  6301. Γöé                        Γöé-What the media type is: CAV, CLV, or other  Γöé
  6302. Γöé                        Γöé-What the current speed format is            Γöé
  6303. Γöé                        Γöé-Current mode of the device; for example,    Γöé
  6304. Γöé                        Γöé"stopped"                                    Γöé
  6305. Γöé                        Γöé-Current position in the media.              Γöé
  6306. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6307. ΓöéMCI_INFO                ΓöéFills a user-supplied buffer with the        Γöé
  6308. Γöé                        Γöéfollowing information:                       Γöé
  6309. Γöé                        Γöé-Product name of the device the peripheral isΓöé
  6310. Γöé                        Γöécontrolling.                                 Γöé
  6311. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6312. ΓöéMCI_STOP                ΓöéStops playing the videodisc device.          Γöé
  6313. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6314. ΓöéMCI_SET_CUEPOINT        ΓöéSets a cue point.                            Γöé
  6315. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6316. ΓöéMCI_SET_POSITION_ADVISE ΓöéSets a position change notification request. Γöé
  6317. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6318. ΓöéMCI_SPIN                ΓöéStarts or stop the disc from spinning.       Γöé
  6319. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6320. ΓöéMCI_STEP                ΓöéSteps the play one or more time units forwardΓöé
  6321. Γöé                        Γöéor backward.                                 Γöé
  6322. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6323. ΓöéMCI_CLOSE               ΓöéCloses the videodisc device.                 Γöé
  6324. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6325. ΓöéMCI_CONNECTOR           ΓöéEnables or disables a connector, query its   Γöé
  6326. Γöé                        Γöéstate or identify its type.                  Γöé
  6327. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6328.  
  6329.  
  6330. ΓòÉΓòÉΓòÉ 12. Digital Video Device ΓòÉΓòÉΓòÉ
  6331.  
  6332. OS/2 Version 2.1 or later supports playback of software motion videos. The 
  6333. ability to create and record movies is provided by the Video IN product (part 
  6334. of the OS/2 BonusPak). The OS/2 digital video device (digitalvideo) provides 
  6335. file-format support through the multimedia input/output (MMIO) architecture. 
  6336. Several movie file formats including AVI, MPEG, FLC/FLI animation are 
  6337. supported. Several decompression types, like Ultimotion, Indeo 2.1, 3.1, and 
  6338. 3.2, FLC/FLI animation, and MPEG-1 are also supported. Files containing 
  6339. interleaved video and audio are supported, as well as video-only files. 
  6340.  
  6341.  
  6342. ΓòÉΓòÉΓòÉ 12.1. Compression Formats ΓòÉΓòÉΓòÉ
  6343.  
  6344. The digital video device provides video playback and recording support through 
  6345. its open compressor/decompressor (CODEC) architecture. 
  6346.  
  6347. The following table describes the digital video compressors and decompressors 
  6348. (CODECs) available with OS/2. The CODECs are represented by unique FOURCC 
  6349. identifiers. A FOURCC is a 32-bit quantity representing a sequence of one to 
  6350. four ASCII alphanumeric characters (padded on the right with blank characters). 
  6351. For more information on CODEC procedures, see CODEC Procedures. 
  6352.  
  6353. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6354. ΓöéCODEC         ΓöéFOURCC                ΓöéDescription               Γöé
  6355. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6356. ΓöéUltimotion    ΓöéULTI                  ΓöéCompressor/Decompressor   Γöé
  6357. Γöé              Γöé                      Γöé(Real-time and Asymmetric Γöé
  6358. Γöé              Γöé                      ΓöéCompression)              Γöé
  6359. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6360. ΓöéIndeo 2.1     Γöért21/RT21             ΓöéCompressor/Decompressor   Γöé
  6361. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6362. ΓöéIndeo 3.1     Γöéiv31/IV31             ΓöéCompressor/Decompressor   Γöé
  6363. Γöé              Γöé                      Γöé(Real-time and Asymmetric Γöé
  6364. Γöé              Γöé                      ΓöéCompression)              Γöé
  6365. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6366. ΓöéIndeo 3.2     Γöéiv32/IV32             ΓöéDecompressor              Γöé
  6367. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6368. ΓöéUncompressed  ΓöéDIB                   ΓöéDecompressor              Γöé
  6369. Γöé(RAW)         Γöé                      Γöé                          Γöé
  6370. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6371. ΓöéFLI/FLC       ΓöéFLIC                  ΓöéDecompressor              Γöé
  6372. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6373. ΓöéMPEG-1        ΓöéMPEG                  ΓöéDecompressor (RealMagic HWΓöé
  6374. Γöé              Γöé                      ΓöéDecompression)            Γöé
  6375. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6376.  
  6377.  
  6378. ΓòÉΓòÉΓòÉ 12.2. About Ultimotion ΓòÉΓòÉΓòÉ
  6379.  
  6380. Advances in microprocessor power, data storage, and compression technology have 
  6381. provided key technologies for creating and playing digital video data on 
  6382. personal computers.  The high-capacity disk drives and CD-ROMs satisfy the 
  6383. large storage needs of digital video data.  Additionally, today's more powerful 
  6384. microprocessors provide sufficient power to handle digital video data in real 
  6385. time. When these advances are combined with image compression techniques, the 
  6386. result is a powerful integration of video and the personal computer. 
  6387.  
  6388. Several compression algorithms are currently in use throughout the industry. 
  6389. Some of these algorithms, like MPEG, use additional video hardware to compress 
  6390. and decompress the digitized video. Others are less numerically intensive and 
  6391. can be handled by software running on the main CPU and still maintain 
  6392. sufficient frame rates to provide motion.  These are referred to as 
  6393. software-only algorithms or software motion video. 
  6394.  
  6395. Ultimotion is IBM's technology for software motion video. It is a 
  6396. cross-platform algorithm that uses no hardware acceleration for capture or 
  6397. playback. The following sections describe Ultimotion, a single compression 
  6398. technique capable of providing a spectrum of quality levels from a single copy 
  6399. of the digital video data: 
  6400.  
  6401.      Data Stream Capabilities 
  6402.         -  Playback Characteristics 
  6403.         -  Resolution Scalability 
  6404.         -  Color Scalability 
  6405.      Compression Ratios 
  6406.         -  Symmetric Compression 
  6407.         -  Asymmetric Compression 
  6408.      Standard Ultimotion Movie 
  6409.  
  6410.  
  6411. ΓòÉΓòÉΓòÉ 12.2.1. Data Stream Capabilities ΓòÉΓòÉΓòÉ
  6412.  
  6413. Ultimotion is a playback-time scalable-video data stream. While the frame rate, 
  6414. output resolution, and color depth characteristics of a video are set when the 
  6415. video is created, the characteristics of a playback-scalable video are modified 
  6416. during playback utilizing the capabilities of the playback platform. These 
  6417. playback-platform capabilities depend on the type of microprocessor, display 
  6418. driver, video adapter, and data bandwidth available during playback. 
  6419.  
  6420.  
  6421. ΓòÉΓòÉΓòÉ 12.2.1.1. Playback Characteristics ΓòÉΓòÉΓòÉ
  6422.  
  6423. While Ultimotion is a playback-time scalable-video data stream, the magnitude 
  6424. that the data stream will "scale" is determined by the amount of information 
  6425. that is encoded in the data stream when it was created; that is, the amount of 
  6426. data placed in the data stream at creation time determines the "maximum" 
  6427. playback characteristics that a particular stream can achieve. In turn, the 
  6428. processing capabilities of the playback system determine how much of the data 
  6429. can be processed and presented during playback.  Therefore, the playback 
  6430. characteristics of a given video are a function of the data put into the video 
  6431. by the author and the processing capabilities of the playback system. 
  6432.  
  6433. The factors affecting the data stream at creation time are: 
  6434.  
  6435.  Resolution          Width and height of video 
  6436.  Frame duration      Frequency at which frames are to be created 
  6437.  I-frame rate        Frequency at which reference frames are to occur 
  6438.  Data rate           Average amount of data allowed for a second of video 
  6439.  
  6440.  Factors affecting the playback of a video are: 
  6441.  
  6442.      Processing power of the CPU 
  6443.      Throughput of data storage (for example, CD-ROM, hard disk, LAN) 
  6444.      Efficiency of the display subsystem (such as the video adapter and 
  6445.       display driver) 
  6446.  
  6447.  
  6448. ΓòÉΓòÉΓòÉ 12.2.1.2. Resolution Scalability ΓòÉΓòÉΓòÉ
  6449.  
  6450. Resolution of video determines how much spatial information is in a video file. 
  6451. Ultimotion compression algorithms organize this data so that it can be easily 
  6452. scaled up or down by factors of two as it is decompressed. Furthermore, as the 
  6453. data is decompressed, a sufficiently powered playback system can duplicate the 
  6454. data during output and display the video at four times its original size. This 
  6455. results in an effective output size larger than the input size.  In this way, 
  6456. Ultimotion can be scaled down on systems incapable of processing the authored 
  6457. video resolution and scaled up on systems with more processing capability than 
  6458. the authored video requires. 
  6459.  
  6460.  
  6461. ΓòÉΓòÉΓòÉ 12.2.1.3. Color Scalability ΓòÉΓòÉΓòÉ
  6462.  
  6463. Ultimotion compression algorithms store images in 16-bit true color.  This 
  6464. color is scaled down to the number of colors available on the playback system. 
  6465.  
  6466.  
  6467. ΓòÉΓòÉΓòÉ 12.2.2. Compression Ratios ΓòÉΓòÉΓòÉ
  6468.  
  6469. Ultimotion compressed frames use a coherent set of techniques for encoding a 
  6470. series of images. Different techniques are used for different purposes. Some 
  6471. represent detail very well while others represent large uniform areas with only 
  6472. a little data, and others fall in between but are very easily detected. 
  6473. Techniques can be mixed according to the needs of the image being compressed 
  6474. and are organized in an efficient manner for both compression and 
  6475. decompression. The result of mixing techniques is a data stream robust enough 
  6476. to be generated by software both asymmetrically and symmetrically. 
  6477.  
  6478.  
  6479. ΓòÉΓòÉΓòÉ 12.2.2.1. Symmetric Compression ΓòÉΓòÉΓòÉ
  6480.  
  6481. The Ultimotion compression techniques used on live video sources balance how 
  6482. well an image's detail is retained with how much time can be taken to analyze 
  6483. and compress the image. Symmetric Ultimotion compression uses the following 
  6484. items to determine the size and speed of symmetrically compressed Ultimotion 
  6485. videos: 
  6486.  
  6487.      Image size 
  6488.      Image quality (high, medium, low) 
  6489.      Processor speed of the capture system 
  6490.  
  6491.  A 320 x 240 movie recorded at 15 frames per second at medium quality requires 
  6492.  9MB per minute of video.  Reducing either the resolution, frame rate, or 
  6493.  quality setting reduces the amount of storage required. 
  6494.  
  6495.  
  6496. ΓòÉΓòÉΓòÉ 12.2.2.2. Asymmetric Compression ΓòÉΓòÉΓòÉ
  6497.  
  6498. The Ultimotion compression techniques used during offline or asymmetric video 
  6499. recording take more time during the compression phase than it takes to 
  6500. decompress the video when the movie is played.  By spending more time on 
  6501. compression, these techniques produce higher quality images and can compress 
  6502. the video data more effectively. Ultimotion asymmetric compression techniques 
  6503. produce movies stored using 320 x 240 resolution, 15 frame per second, and can 
  6504. be played from a CD.  Movies made with these specifications require 9MB per 
  6505. minute. Reducing either the resolution, frame rate, or quality setting reduces 
  6506. the amount of storage required.  Increasing these specifications require faster 
  6507. storage devices (for example, double speed CD-ROM or hard disk) and faster 
  6508. playback systems. 
  6509.  
  6510.  
  6511. ΓòÉΓòÉΓòÉ 12.2.3. Standard Ultimotion Movie ΓòÉΓòÉΓòÉ
  6512.  
  6513. Ultimotion compression algorithms use byte-oriented data structures and 
  6514. efficient data organization to provide software-only decompression. Since frame 
  6515. rate, resolution, and data rate are set when a movie is created, these settings 
  6516. determine the minimum platform required for playback.  The "standard Ultimotion 
  6517. movie" is defined as 320 x 240, 15 frames per second at a 150KB per second data 
  6518. rate. This movie can be played on at least a 25 MHz 80386 microprocessor and an 
  6519. SVGA display adapter. Computers with 33 MHz 80486 microprocessors are capable 
  6520. of displaying 320 x 240 resolution at 24 frames per second or 640 x 480 
  6521. resolution at 15 frames per second. The frame rate increases as the the data 
  6522. rate of the source device and the machine speed increases. A frame rate of 30 
  6523. frames per second is possible on a machine with a 66 MHz 80486 microprocessor. 
  6524.  
  6525.  
  6526. ΓòÉΓòÉΓòÉ 12.3. Playback and Recording ΓòÉΓòÉΓòÉ
  6527.  
  6528. OS/2 multimedia provides support to OS/2 Presentation Manager applications for 
  6529. controlling playback and recording of motion video.  Playback of video can be 
  6530. performed in either a default window or an application window. Recording can be 
  6531. performed using video capture hardware devices with appropriate device driver 
  6532. support.  The digital video device can also be used to capture still image 
  6533. (bitmap) data from video capture hardware or previously recorded motion video 
  6534. files. 
  6535.  
  6536. This section describes digital video functions and provides examples using 
  6537. media control interface string commands. 
  6538.  
  6539.  
  6540. ΓòÉΓòÉΓòÉ 12.4. Digital Video Windows ΓòÉΓòÉΓòÉ
  6541.  
  6542. The digital video device provides two methods of displaying the video for a 
  6543. movie:  a default window and an application-defined window. 
  6544.  
  6545. Attention:  To avoid unpredictable results, it is important that a Workplace 
  6546. Shell application does not create a PM window for digital video on the main 
  6547. thread. The application must start a separate thread, create the window on that 
  6548. thread, and then create a new message queue on that thread to service the 
  6549. window. 
  6550.  
  6551.  
  6552. ΓòÉΓòÉΓòÉ 12.4.1. Default Window ΓòÉΓòÉΓòÉ
  6553.  
  6554. The default window is used if no other window handle is specified with the 
  6555. window command. The parent of the default video window is HWND_DESKTOP unless 
  6556. otherwise specified with the open command. It provides a basic desktop window 
  6557. in which to display video that can be moved, sized, and minimized by the user. 
  6558. The default window is sized to the size of the video. The digital video device 
  6559. provides and manages this window for the application. 
  6560.  
  6561. The default window has Normal Size, Double Size, and Half Size options on its 
  6562. settings menu. Selecting these options cause the window to be resized. The 
  6563. window can also be resized to other sizes, including icon size. 
  6564.  
  6565.  
  6566. ΓòÉΓòÉΓòÉ 12.4.2. Application-Defined Window ΓòÉΓòÉΓòÉ
  6567.  
  6568. An application-defined window can be used when the application requires more 
  6569. control over the window.  The application can place video in its own client 
  6570. area or in a child window, add menus, and so on. If an application specifies a 
  6571. parent window handle when opening the device, it must close the logical video 
  6572. device before destroying the parent window. 
  6573.  
  6574. If an application passes a window handle to the digital video device with 
  6575. MCI_WINDOW, it is essential that the application ensure that this window will 
  6576. receive all WM_REALIZEPALETTE messages sent to the message queue.  If the 
  6577. window is a client-frame window (its parent has a style of CS_FRAME and the 
  6578. window has an ID of FID_CLIENT) or the child of a client window, it will 
  6579. receive this message automatically.  If, however, the window has an ancestor 
  6580. that is not a client window and does not pass WM_REALIZEPALETTE to 
  6581. WinDefWindowProc, the window will not automatically receive the message. For 
  6582. example, WinDefDlgProc does not pass WM_REALIZEPALETTE on to child windows. 
  6583. So, if an ancestor of the window is a dialog window, the dialog procedure must 
  6584. explicitly pass the WM_REALIZEPALETTE message to the window. If the window does 
  6585. not receive this message, then incorrect colors will appear in video displayed 
  6586. in the window, whenever another application changes the system palette. 
  6587.  
  6588. When an application-defined window is used to display video, the digital video 
  6589. device subclasses the window to ensure that video updating is maintained 
  6590. correctly. Subclassing the window does the following: 
  6591.  
  6592.      Positions and sizes the window 
  6593.  
  6594.      Prevents the window from being sized above the maximum supported size 
  6595.  
  6596.      Modifies the tracking rectangle so the user cannot drag the size border 
  6597.       beyond the screen boundaries 
  6598.  
  6599.  
  6600. ΓòÉΓòÉΓòÉ 12.4.3. Opening the Device ΓòÉΓòÉΓòÉ
  6601.  
  6602. The MCI_OPEN message is issued to create a device context of the digital video 
  6603. device. A default window is created and displayed when the device is opened if 
  6604. the device is cued for output or a movie is loaded. The video device directs 
  6605. its output to the default window. If a window is specified with the MCI_WINDOW 
  6606. message the video device directs its output to the window specified. For the 
  6607. convenience of applications that are using the string interface, some 
  6608. window-style control functions are also exported as flags to the MCI_WINDOW 
  6609. message. 
  6610.  
  6611. Whether the default window or an application-defined window is used for output, 
  6612. the digital video device confines its output to the device coordinates of the 
  6613. specified window. 
  6614.  
  6615. The default video window is invisible when the device is first opened. This 
  6616. allows the user or application to prepare the size, position, and contents of 
  6617. the window before it is displayed. It is created in a frame window, which can 
  6618. be sized, moved, maximized, and minimized. It is also created with an ideal 
  6619. aspect ratio in the center of the display and occupies approximately one 
  6620. quarter of the screen. As the user changes the size of the window, the digital 
  6621. video device scales the video image as required to maintain the video within 
  6622. the current coordinates. Maintaining a constant aspect ratio is the 
  6623. responsibility of the application program. 
  6624.  
  6625. The parent of the default video window is HWND_DESKTOP unless otherwise 
  6626. specified in the MCI_OPEN message. The owner of the default video window is 
  6627. NULL. An application can specify a parent window handle for the default video 
  6628. window using hwndParent when the device is opened. This is the only 
  6629. window-related parameter that can be specified using media control interface 
  6630. commands that changes the behavior of the default video window. 
  6631.  
  6632.  
  6633. ΓòÉΓòÉΓòÉ 12.4.4. Playing Motion Video Files ΓòÉΓòÉΓòÉ
  6634.  
  6635. By default, playback of digital motion video is displayed in the window 
  6636. supplied by the digital video device. This window is created and displayed when 
  6637. the video is cued for output. 
  6638.  
  6639. The following string commands illustrate playing an entire AVI format file. 
  6640. Because to and from flags are not specified, the file is played from the 
  6641. current position to the end of the file. When a motion video device element is 
  6642. opened, the current position in the media is the first playable area after any 
  6643. header or table of contents information. 
  6644.  
  6645. open movie.avi type digitalvideo alias myvideo wait
  6646. play myvideo notify
  6647. close myvideo
  6648.  
  6649. Each frame in a motion video file has a number associated with it. From the 
  6650. perspective of the digital video device, each file is zero-based. That is, the 
  6651. first frame is frame 0, the second frame is frame 1, and so forth. This means 
  6652. the number of the last frame in a file is 1 less than the total number of 
  6653. frames in the file. 
  6654.  
  6655. The current position always indicates the frame that is about to be displayed 
  6656. rather than the frame that is currently displayed. 
  6657.  
  6658. When a play position is specified with the from flag, the actual position 
  6659. reached is accurate only to the nearest intracoded frame (I-frame). However, a 
  6660. position specified with the to flag is exact. 
  6661.  
  6662. If you need to specify an exact position in the video file to play from, you 
  6663. can issue the seek command, which moves the current position in a file to an 
  6664. exact point. The following string commands illustrate moving the current 
  6665. position to frame 20 and then playing to frame 100. 
  6666.  
  6667. open movie.avi type digitalvideo alias myvideo
  6668. set myvideo time format frames wait
  6669. seek myvideo to 20 wait
  6670. play myvideo to 100 notify
  6671. close myvideo
  6672.  
  6673. The cue command can also be used to seek and cue a particular frame. By 
  6674. specifying the show or noshow flag, you can control whether the video window 
  6675. will be displayed or hidden when the cue operation is performed. This can be 
  6676. useful for displaying video frames as a user moves the position slider, 
  6677. providing visual feedback of the location in the video a user is seeking to. 
  6678.  
  6679. cue myvideo show to 20 wait
  6680.  
  6681. If a to position is not specified, the current frame is displayed and the media 
  6682. position will advance by one (frame). 
  6683.  
  6684.  
  6685. ΓòÉΓòÉΓòÉ 12.4.5. Playing Hardware-Assisted MPEG Files ΓòÉΓòÉΓòÉ
  6686.  
  6687. The RealMagic adapter enables hardware-assisted playback of MPEG files. MPEG 
  6688. video content is contained in an MPEG-specific file format.  This file format, 
  6689. like AVI, interleaves audio and video data but is quite different from the 
  6690. tagged AVI format and requires a unique IOProc.  The MPEG IOProc performs the 
  6691. file-format processing in the hardware-assisted environment, while 
  6692. decompression of both audio and video is performed by the hardware. 
  6693.  
  6694. The digital video device provides normal-speed playback support (in the forward 
  6695. direction only) of MPEG files. The common file extension for MPEG files is 
  6696. .MPG. Seeking is supported, however seeking is an approximation to the nearest 
  6697. MPEG picture group.  The size of a picture group is movie-dependent but is 
  6698. commonly 8 frames, so seeking takes place to within one-third of a second, in 
  6699. most cases. 
  6700.  
  6701.  
  6702. ΓòÉΓòÉΓòÉ 12.4.6. Playing Animation Files ΓòÉΓòÉΓòÉ
  6703.  
  6704. In addition to playing motion video with the digital video device, you can also 
  6705. play FLC and FLI animation files. FLC and FLI are the standard file formats for 
  6706. most animation tools. The FLI file format is most common. FLI is limited to a 
  6707. 320 x 200 display resolution and a custom 256-color palette. The FLC file 
  6708. format is an extension to FLI and allows a 640 x 480 resolution. 
  6709.  
  6710. open cartoon.flc type digitalvideo alias animate
  6711. play animate notify
  6712. close animate
  6713.  
  6714. The FLC/FLI video files do not contain any audio data. However, the digital 
  6715. video device will search for an audio file (.WAV) with the same base name as 
  6716. the animation file in the same directory. If such a file exists, the audio is 
  6717. played with the animation file In the previous example, if a file named 
  6718. CARTOON.WAV exists, the audio file plays with the animation file and continues 
  6719. to play until CARTOON.FLC ends. 
  6720.  
  6721. Seeking within a FLC/FLI file is not supported because these files contain only 
  6722. one initial I-frame. All other frames in the file are delta frames. All seek 
  6723. requests result in a seek to the beginning of the file. 
  6724.  
  6725.  
  6726. ΓòÉΓòÉΓòÉ 12.4.7. Recording Motion Video ΓòÉΓòÉΓòÉ
  6727.  
  6728. The digital video device supports real-time recording of motion video into AVI 
  6729. files.  The supported compression algorithms for recording video are 
  6730. Ultimotion, Indeo 2.1, and Indeo 3.1. The default settings for real-time 
  6731. recording are 160 x 120 resolution, 15 frames per second, and Ultimotion 
  6732. compression type. 
  6733.  
  6734. Recording into new and existing files is supported. The following example 
  6735. illustrates recording live video. As recording takes place, the digital audio 
  6736. and video data is stored in the temporary file created for the video device 
  6737. element. After the recording operation is complete, the device element is 
  6738. played back so it can be viewed before it is saved as a permanent file on disk. 
  6739.  
  6740. To save the data as a video file, you can specify an existing file name or a 
  6741. new file name with the save command. If you indicate an existing file name, the 
  6742. data in the disk file is completely replaced by the data in the temporary file. 
  6743. You can also indicate that the file being saved is a video file; however, it is 
  6744. not necessary because this is the default. 
  6745.  
  6746. In the example, monitoring is set on, so that the incoming video signal can be 
  6747. viewed in the default video window before it is recorded. Monitoring of live 
  6748. video can also be done without recording. 
  6749.  
  6750. open digitalvideo alias myvideo wait
  6751. set myvideo time format frames wait
  6752. set myvideo monitor on wait
  6753. record myvideo to 99 wait
  6754. play myvideo wait
  6755. save myvideo newvid.avi video wait
  6756. close myvideo
  6757.  
  6758. Applications can specify that only video or only audio is to be recorded. In 
  6759. the following example, audio recording is turned off, so that only video will 
  6760. be recorded. 
  6761.  
  6762. Specifying the cue input command causes the default window to become visible, 
  6763. so it is not necessary to set the monitoring function on. The cue command 
  6764. ensures the device is initialized and ready to record, preventing the 
  6765. possibility of losing any initial video when recording begins. As in the 
  6766. previous example, the device element is played back before it is saved as a 
  6767. file on disk. 
  6768.  
  6769. open digitalvideo alias myvideo wait
  6770. set myvideo record audio off wait
  6771. set myvideo time format hms wait
  6772. cue myvideo input wait
  6773. record myvideo to 00:02:00 wait
  6774. play myvideo wait
  6775. save myvideo newvid.avi wait
  6776. close myvideo
  6777.  
  6778.  
  6779. ΓòÉΓòÉΓòÉ 12.5. Image Support ΓòÉΓòÉΓòÉ
  6780.  
  6781. The digital video device provides image support to applications that have the 
  6782. following requirements for digital video: 
  6783.  
  6784.      Display an image of the current frame when the movie is stopped. 
  6785.  
  6786.      Create and save an image in the specified format. 
  6787.  
  6788.      Provide an image buffer to drag and drop cut-and-paste objects. 
  6789.  
  6790.  
  6791. ΓòÉΓòÉΓòÉ 12.5.1. Capturing a Still Image ΓòÉΓòÉΓòÉ
  6792.  
  6793. There are two functions applications can use to capture an image: 
  6794.  
  6795.      MCI_GETIMAGEBUFFER 
  6796.      MCI_CAPTURE 
  6797.  
  6798.  An application uses MCI_GETIMAGEBUFFER to capture an image when it wants to 
  6799.  keep the image in an application buffer. The application can capture the image 
  6800.  from either a movie file, or the buffer of a video capture card. This command 
  6801.  message returns the image in the format specified by the application. 
  6802.  
  6803.  An application uses MCI_CAPTURE to capture an image from a movie file when it 
  6804.  wants the image kept in a digital video device element. 
  6805.  
  6806.  
  6807. ΓòÉΓòÉΓòÉ 12.6. Editing Operations ΓòÉΓòÉΓòÉ
  6808.  
  6809. The digital video device supports the use of application buffers by editing 
  6810. commands to support drag and drop functions. The following flags are supported 
  6811. by the editing commands: 
  6812.  
  6813.  Message             Flags 
  6814.  
  6815.  MCI_CUT             MCI_TO_BUFFER 
  6816.  
  6817.  MCI_COPY            MCI_FROM_BUFFER, MCI_TO_BUFFER 
  6818.  
  6819.  MCI_PASTE           MCI_FROM_BUFFER, MCI_TO_BUFFER 
  6820.  
  6821.  To determine the buffer length for an editing operation, the application can 
  6822.  issue MCI_CUT or MCI_COPY with either the MCI_FROM_BUFFER or MCI_TO_BUFFER 
  6823.  flag set and a zero buffer length. The editing operation will not be 
  6824.  performed, but the length of the buffer that is necessary for the operation 
  6825.  will be returned in the buffer length field. 
  6826.  
  6827.  
  6828. ΓòÉΓòÉΓòÉ 12.7. Setting the Tuner Device ΓòÉΓòÉΓòÉ
  6829.  
  6830. With the appropriate hardware, the digital video device is able to monitor a TV 
  6831. channel.  The WinTV card is an overlay card that has video capture support as 
  6832. well as television signal support.  The monitor window displays the TV signal. 
  6833. The tuner is selected by setting the digital video device connector type to 
  6834. video in and the connector number to the tuner connector number of the adapter. 
  6835. The tuner connector number varies from adapter to adapter. On the WinTV 
  6836. adapter, this is connector number 2. 
  6837.  
  6838. connector digitalvideo02 enable type video in number 2 wait
  6839.  
  6840. An application can use the settuner command to set the region, channel, and 
  6841. fine-tuning values.  These flags are valid when used individually or in any 
  6842. combination. The digital video device uses these three values to calculate a 
  6843. frequency to send to the device. See the following example. 
  6844.  
  6845. open digitalvideo03 alias mytuner wait
  6846. settuner mytuner tv channel 3 region usa finetune plus 1 wait
  6847.  
  6848. The following example illustrates setting the frequency directly.  Setting the 
  6849. frequency directly causes channel, region, and fine-tuning values to be 
  6850. ignored. 
  6851.  
  6852. settuner mytuner frequency 80 wait
  6853.  
  6854. The region value must have a corresponding ASCII file (region.RGN) located in 
  6855. the \MMOS2\REGION subdirectory. When an application selects the region with the 
  6856. settuner command, the digital video device reads in the region file and fills a 
  6857. region array.  The channel is used as an index into this array, which 
  6858. identifies the frequency.  Fine-tuning is then added to the frequency.  Region 
  6859. files are keyword-driven and have the following format: 
  6860.  
  6861. [tuner]
  6862.   description=USA Cable
  6863.   lowchannel=2
  6864.   highchannel=99
  6865.   frequencies=0,0, 10050, -1, ... 29000
  6866.  
  6867. The description keyword identifies a descriptive string displayed on the 
  6868. corresponding Multimedia Setup page. The lowchannel and highchannel keywords 
  6869. indicate the range of channels available for the region.  The frequencies 
  6870. correspond to the channel values, beginning with channel 0 and continuing to 
  6871. the highest available channel. The frequencies must be listed in columns of 
  6872. nine; otherwise, the region is invalid. A frequency value of 0 indicates the 
  6873. channel is out of range. A frequency value of -1 indicates a skipped channel, 
  6874. allowing the user to "block" certain channels from being viewed. 
  6875.  
  6876.  
  6877. ΓòÉΓòÉΓòÉ 12.8. Digital Video Command Messages ΓòÉΓòÉΓòÉ
  6878.  
  6879. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  6880. ΓöéMessage                 ΓöéDescription                                  Γöé
  6881. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6882. ΓöéMCI_CAPTURE             ΓöéCaptures the current video image and stores  Γöé
  6883. Γöé                        Γöéit as an image device element.               Γöé
  6884. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6885. ΓöéMCI_CLOSE               ΓöéCloses the device element and any resources  Γöé
  6886. Γöé                        Γöéassociated with it.                          Γöé
  6887. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6888. ΓöéMCI_CONNECTOR           ΓöéEnables, disables, or queries the status of  Γöé
  6889. Γöé                        Γöéconnectors on a device.                      Γöé
  6890. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6891. ΓöéMCI_COPY                ΓöéCopies specified data range into clipboard orΓöé
  6892. Γöé                        Γöébuffer.                                      Γöé
  6893. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6894. ΓöéMCI_CUE                 ΓöéPrompts the device to ready itself for a     Γöé
  6895. Γöé                        Γöésubsequent playback or recording operation   Γöé
  6896. Γöé                        Γöéwith minimum delay.                          Γöé
  6897. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6898. ΓöéMCI_CUT                 ΓöéRemoves specified data range and places it   Γöé
  6899. Γöé                        Γöéinto clipboard or buffer.                    Γöé
  6900. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6901. ΓöéMCI_DELETE              ΓöéDeletes specified data range.  Clipboard or  Γöé
  6902. Γöé                        Γöébuffer is not used.                          Γöé
  6903. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6904. ΓöéMCI_GETDEVCAPS          ΓöéGets device capabilities.                    Γöé
  6905. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6906. ΓöéMCI_GETIMAGEBUFFER      ΓöéRetrieves the contents of the capture video  Γöé
  6907. Γöé                        Γöébuffer or the current movie frame.           Γöé
  6908. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6909. ΓöéMCI_INFO                ΓöéReturns string information from the device.  Γöé
  6910. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6911. ΓöéMCI_LOAD                ΓöéSpecifies a new file to be loaded onto an    Γöé
  6912. Γöé                        Γöéalready existing device element.             Γöé
  6913. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6914. ΓöéMCI_OPEN                ΓöéInitializes the device.                      Γöé
  6915. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6916. ΓöéMCI_PASTE               ΓöéDeletes selected data range if difference    Γöé
  6917. Γöé                        Γöébetween FROM and TO is more than zero, then  Γöé
  6918. Γöé                        Γöéinserts data from buffer or clipboard.       Γöé
  6919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6920. ΓöéMCI_PAUSE               ΓöéPauses playback or recording.                Γöé
  6921. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6922. ΓöéMCI_PLAY                ΓöéStarts a play operation on the device.       Γöé
  6923. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6924. ΓöéMCI_PUT                 ΓöéDefines the source and destination rectanglesΓöé
  6925. Γöé                        Γöéwindows.                                     Γöé
  6926. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6927. ΓöéMCI_RECORD              ΓöéStarts a recording operation on the device.  Γöé
  6928. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6929. ΓöéMCI_REDO                ΓöéReverses previous MCI_UNDO command.          Γöé
  6930. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6931. ΓöéMCI_RESTORE             ΓöéTransfers an image from the element buffer toΓöé
  6932. Γöé                        Γöéthe display surface.                         Γöé
  6933. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6934. ΓöéMCI_RESUME              ΓöéResumes playing or recording from a paused   Γöé
  6935. Γöé                        Γöéstate, keeping previously specified          Γöé
  6936. Γöé                        Γöéparameters in effect.                        Γöé
  6937. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6938. ΓöéMCI_REWIND              ΓöéRewinds or seeks the device element to the   Γöé
  6939. Γöé                        Γöéfirst playable position (beginning).         Γöé
  6940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6941. ΓöéMCI_SAVE                ΓöéSaves the current file to disk.              Γöé
  6942. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6943. ΓöéMCI_SEEK                ΓöéMoves to the specified position in the file. Γöé
  6944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6945. ΓöéMCI_SET                 ΓöéSets device information.                     Γöé
  6946. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6947. ΓöéMCI_SET_CUEPOINT        ΓöéSets a cue point.                            Γöé
  6948. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6949. ΓöéMCI_SET_POSITION_ADVISE ΓöéSets a position change notification for the  Γöé
  6950. Γöé                        Γöédevice.                                      Γöé
  6951. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6952. ΓöéMCI_SETTUNER            ΓöéSets the frequency for the tuner device.     Γöé
  6953. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6954. ΓöéMCI_STATUS              ΓöéObtains status information for the device.   Γöé
  6955. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6956. ΓöéMCI_STEP                ΓöéSteps the playback one or more frames forwardΓöé
  6957. Γöé                        Γöéor backward.                                 Γöé
  6958. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6959. ΓöéMCI_STOP                ΓöéStops playing or recording.                  Γöé
  6960. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6961. ΓöéMCI_UNDO                ΓöéCancels previous RECORD, CUT, PASTE, or      Γöé
  6962. Γöé                        ΓöéDELETE.                                      Γöé
  6963. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6964. ΓöéMCI_WHERE               ΓöéObtains a rectangle array, specifying the    Γöé
  6965. Γöé                        Γöésource or destination area.                  Γöé
  6966. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  6967. ΓöéMCI_WINDOW              ΓöéSpecifies the window and the window          Γöé
  6968. Γöé                        Γöécharacteristics that the device should use   Γöé
  6969. Γöé                        Γöéfor display.                                 Γöé
  6970. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  6971.  
  6972.  
  6973. ΓòÉΓòÉΓòÉ 13. Direct Interface Video Extensions (DIVE) ΓòÉΓòÉΓòÉ
  6974.  
  6975. Software motion video implementation under OS/2 has attained sizable 
  6976. performance advantages by enabling video decompressors to directly write to 
  6977. video memory. While this technique provides good performance, it has the 
  6978. disadvantage that each decompressor must deal with the pel format of the 
  6979. display in various modes, clipping the output to visible regions, and any 
  6980. scaling that is to be performed. Additionally, on bank-switched video displays, 
  6981. the decompressor must return on partial frames to enable the video stream 
  6982. handler to switch banks. The direct interface video extensions (DIVE) 
  6983. consolidate the complexities of dealing with direct video frame buffer access 
  6984. (sometimes referred to as "direct access" or "black hole") into a single API 
  6985. DLL that enables efficient transfer to video memory with clipping, scaling, and 
  6986. color space conversion. The optimized screen access functionality provided by 
  6987. DIVE can be used for motion video display, fast image updates for interactive 
  6988. games, and fast screen display by 3-D graphics libraries. 
  6989.  
  6990.  
  6991. ΓòÉΓòÉΓòÉ 13.1. About DIVE ΓòÉΓòÉΓòÉ
  6992.  
  6993. DIVE is a DLL that provides optimized blitting performance for motion video 
  6994. subsystems and applications that perform rapid screen updates in the OS/2 PM 
  6995. and full-screen environments. Using DIVE functions, applications can either 
  6996. write directly to video memory or use the DIVE blitter to get a high level of 
  6997. screen update performance, image scaling, color space conversion, and 
  6998. bank-switch display support. The DIVE blitter utilizes acceleration hardware 
  6999. when present and applicable to the function being performed. 
  7000.  
  7001.  
  7002. ΓòÉΓòÉΓòÉ 13.1.1. DIVE Display Engine Functional Characteristics ΓòÉΓòÉΓòÉ
  7003.  
  7004. The DIVE system-level interface abstracts the low-level device driver DIVE 
  7005. interface to a higher level and adds software emulation for operations that 
  7006. digital video CODECs were previously required to do. This system-level 
  7007. interface is referred to as the DIVE display engine. 
  7008.  
  7009. The DIVE display engine consists of a single, stand-alone DLL that exports the 
  7010. following functions: 
  7011.  
  7012.      Query for display capabilities 
  7013.      Open instance 
  7014.      Visible region specification 
  7015.      Allocation of image data buffers 
  7016.      Buffer-to-screen/buffer-to-buffer transfer (blitter) setup 
  7017.      8-bit CLUT color palette simulation/specification 
  7018.      Transfer buffer to image display/transfer buffer to buffer 
  7019.      Utility functions useful for direct access, including window 
  7020.       starting-address calculation 
  7021.      Frame buffer acquire/deacquire 
  7022.      VRAM bank selection (for bank-switched displays) 
  7023.      Close instance 
  7024.  
  7025.  The display engine enables subsystem components (for example, video CODECs) 
  7026.  and applications to either directly access the video buffer or to use the 
  7027.  display engine screen transfer functions. If direct access is used, the using 
  7028.  component or application is responsible for writing to the frame buffer format 
  7029.  for the current display mode and correctly clipping the output. In addition, 
  7030.  the component is responsible for acquiring and bank switching the display 
  7031.  apertures. If display engine screen transfer functions are used, the display 
  7032.  engine handles clipping, pel format and color space conversions, and any 
  7033.  necessary hardware serialization. The input formats and their corresponding 
  7034.  color encoding specification values are: 
  7035.  
  7036.      CLUT 8 (256 color) - "LUT8" 
  7037.      8-bit greyscale - "GREY" 
  7038.      RGB 16 (5-6-5, 5-5-5) - "R565", "R555", "R664" 
  7039.      RGB 24 (R-G-B, B-G-R) - "RGB3", "BGR3" 
  7040.      RGB 32 (R-G-B, B-G-R) - "RGB4", "BGR4" 
  7041.      YUV 9 - DVI/Indeo three-plane color subsampled - "YUV9" 
  7042.      YUV 422 -  "Y422" 
  7043.      YUV CCIR601 - three-plane 2x2 color subsampled (MJPEG, MPEG) - "Y2X2" 
  7044.      YUV CCIR601 - three-plane 4x4 color subsampled  - "Y4X4" 
  7045.  
  7046.  The output formats are: 
  7047.  
  7048.      CLUT 8 (256 color) 
  7049.      RGB 16 (5-6-5, 5-5-5, 6-6-4) 
  7050.      RGB 24 (R-G-B, B-G-R) 
  7051.      RGB 32 (R-G-B-x,  B-G-R-x) 
  7052.      YUV 422 (Y-U-Y-V) 
  7053.  
  7054.  
  7055. ΓòÉΓòÉΓòÉ 13.2. Using Dive ΓòÉΓòÉΓòÉ
  7056.  
  7057. There are two main ways to use DIVE:  using the DIVE blitter and using direct 
  7058. frame-buffer access. DIVE applications gain access to DIVE functions by 
  7059. obtaining a DIVE handle: 
  7060.  
  7061. ULONG       ulErrorCode;
  7062. HDIVE       *phDiveInst;
  7063. BOOL        fNonScreenInstance;
  7064. PVOID       ppFrameBuffer;
  7065.  
  7066. ulErrorCode = DiveOpen( *phDiveInst, fNonScreenInstance, ppFrameBuffer );
  7067.  
  7068. A corresponding DiveClose function must be called at application termination. 
  7069. If DIVE is to be used for blitting to the screen, set fNonScreenInstance to 
  7070. FALSE.  Otherwise, if DIVE is to be used only for off-screen sizing or color 
  7071. format conversion, set fNonScreenInstance to TRUE.  If fNonScreenInstance is 
  7072. FALSE, a pointer to the frame buffer is returned in ppFrameBuffer. 
  7073.  
  7074.  
  7075. ΓòÉΓòÉΓòÉ 13.2.1. DIVE Image Buffers ΓòÉΓòÉΓòÉ
  7076.  
  7077. Because DIVE will use off-screen VRAM where available for acceleration of 
  7078. blitting operations, the application should allocate all source blitting 
  7079. buffers from DIVE whenever possible.  To allocate a buffer, the application 
  7080. would make the following call: 
  7081.  
  7082. ULONG   ulBufNum;
  7083. FOURCC  fccColorSpace;
  7084. ULONG   ulWidth, ulHeight, ulLineSizeBytes;
  7085. PBYTE   pbImageBuffer;
  7086.  
  7087. ulErrorCode = DiveAllocImageBuffer(
  7088.         hDive,          /* DIVE handle  */
  7089.         &ulBufNum,     /* Buffer number (output)       */
  7090.         fccColorSpace,  /* Color format */
  7091.         ulWidth, ulHeight,     /* Size of maximum image        */
  7092.         ulLineSizeBytes,
  7093.         &pbImageBuffer);
  7094.  
  7095. A corresponding DiveFreeImageBuffer function call is used to deallocate the 
  7096. buffer when it is no longer needed.  The color format of the image buffer is 
  7097. described by fccColorSpace. The DIVE interface defines constants for a variety 
  7098. of 8-, 16-, and 24-bit color encoding schemes.  After a buffer is allocated and 
  7099. before it can be used for blitting, it must be accessed as shown in the 
  7100. following example: 
  7101.  
  7102. PBYTE   pbImageBuffer;
  7103. ULONG   ulBufferScanLineBytes, ulBufferScanLines;
  7104.  
  7105. ulErrorCode = DiveBeginImageBufferAccess(
  7106.         hDiveInst,          /* DIVE handle   */
  7107.         ulBufferNumber,       /* Buffer number */
  7108.         &pbImageBuffer,    /* Ptr to image buffer (output) */
  7109.         &ulBufferScanLineBytes);  /* Scan line length (output)    */
  7110.         &ulBufferScanLines);  /* Scan lines (output)    */
  7111.  
  7112. DIVE calculates the number of bytes per scan line for the image buffer (based 
  7113. on the color format) and returns the value in ulBufferScanLineBytes.  The 
  7114. application can now write color data into pbImageBuffer.  For example, the 
  7115. application could open a bit-map file and read the bit-map data directly into 
  7116. the image buffer.  After the data has been written, the application calls 
  7117. DiveEndImageBufferAccess to deaccess the buffer. Be sure to use scan line bytes 
  7118. (you might have to read a line at a time). 
  7119.  
  7120.  
  7121. ΓòÉΓòÉΓòÉ 13.2.2. DIVE Palettes ΓòÉΓòÉΓòÉ
  7122.  
  7123. Applications must inform DIVE of the state of the physical palette upon 
  7124. initialization and whenever the physical palette changes.  At application 
  7125. initialization, and in response to a WM_REALIZEPALETTE message, the application 
  7126. calls the following sequence: 
  7127.  
  7128. BYTE       pbPal[1024];
  7129.  
  7130. /* Query the physical palette from PM   */
  7131. GpiQueryRealColors( hps, 0, 0, 256, (PLONG)pbPal);
  7132.  
  7133. /* Pass it to DIVE              */
  7134. DiveSetDestinationPalette( hDive, (PBYTE)pbPal);
  7135.  
  7136. If the application itself is using palettes, these palettes must also be 
  7137. communicated to DIVE through the DiveSetSourcePalette function. For example, if 
  7138. the application is using DIVE to blit 256-color palettized images to the 
  7139. screen, the application must send the image palette with a call to 
  7140. DiveSetSourcePalette.  If a sequence of images is being used for animation and 
  7141. the palette remains constant through the series, it is necessary to call 
  7142. DiveSetSourcePalette only once before blitting the first image in the series. 
  7143.  
  7144. DIVE provides high-speed screen updates by bypassing PM. In order to maintain 
  7145. the integrity of the PM desktop, DIVE applications must notify DIVE whenever 
  7146. the visible region of the application window changes so that output may be 
  7147. clipped accordingly. 
  7148.  
  7149. Every DIVE application will request visible region notification at window 
  7150. initialization time with the following call: 
  7151.  
  7152. WinSetVisibleRegionNotify( hwnd, TRUE);
  7153.  
  7154. The first parameter is the handle of the window where the graphics operations 
  7155. will appear, and the second parameter turns on notification for that window. 
  7156. (A corresponding WinSetVisibleRegionNotify(hwnd, FALSE) call should be made to 
  7157. turn notification off at window termination time.) 
  7158.  
  7159. Whenever the window's visible region begins to change, either because the 
  7160. window is being moved or sized or another window or icon overlaying the window 
  7161. is being moved or sized, the window will receive a WM_VRNDISABLED message.  In 
  7162. response to this message, the DIVE application will call DiveSetupBlitter 
  7163. (hDiveInst, 0).  Once the movement is complete, the window will receive a 
  7164. WM_VRNENABLED message.  In response to this message, the DIVE application will 
  7165. query the new visible region, using WinQueryVisibleRegion as follows: 
  7166.  
  7167. hps = WinGetPS( hwnd );
  7168. hrgn = GpiCreateRegion( hps, 0, NULL);
  7169. WinQueryVisibleRegion( hwnd, hrgn);
  7170.  
  7171. Whenever the visible region, source color format, or image source or 
  7172. destination size changes, the DIVE application must pass the changes to DIVE 
  7173. with a call to DiveSetupBlitter.  Note that it is necessary to pass the 
  7174. rectangles for the region in window coordinates and the position of the window 
  7175. in desktop coordinates.  First, get the rectangles and window coordinates: 
  7176.  
  7177. RECTL   rctls[50];      /* Rectangles for visible rgn   */
  7178. RGNRECT rgnCtl;         /* Region control struct        */
  7179. SETUP_BLITTER   SetupBlitter;   /* DiveSetupBlitter struct      */
  7180. POINTL  pointl;
  7181. SWP     swp;
  7182. HPS     hps;
  7183. HRGN    hrgn;
  7184.  
  7185. rgnCtl.ircStart = 0;    /* Enumerate rectangles */
  7186. rgnCtl.crc = 50;        /* Starting with first  */
  7187. rgnCtl.ulDirection = RECTDIR_LFRT_TOPBOT;
  7188.  
  7189. /* Get rectangles for the visible region        */
  7190. GpiQueryRegionRects( hps, hrgn, NULL, &rgnCtl, rctls);
  7191.  
  7192. /* Find the window position relative to its parent.     */
  7193. WinQueryWindowPos( hwnd, &swp );
  7194.  
  7195. /* Map window position to the desktop.  */
  7196. pointl.x = swp.x;
  7197. pointl.y = swp.y;
  7198. WinMapWindowPoints( WinQueryWindow( hwnd, QW_PARENT ),
  7199.         HWND_DESKTOP, &pointl, 1);
  7200.  
  7201. Then, pass the information to DIVE: 
  7202.  
  7203. /* Tell DIVE about the new settings.  */
  7204. SIZEL   sizlSrcImg;     /* Size of source image */
  7205. FOURCC  fccSrcColors;   /* Source image format  */
  7206.  
  7207. SetupBlitter.ulStructLen = sizeof ( SETUP_BLITTER );
  7208. SetupBlitter.fInvert = 0;
  7209. SetupBlitter.fccSrcColorFormat = fccSrcColors;
  7210. SetupBlitter.ulSrcLineSizeBytes = ulScanLineBytes;
  7211. SetupBlitter.ulSrcWidth = sizlSrcImg.cx;
  7212. SetupBlitter.ulSrcHeight = sizlSrcImg.cy;
  7213. SetupBlitter.ulSrcPosX = 0;
  7214. SetupBlitter.ulSrcPosY = 0;
  7215. SetupBlitter.fccDstColorFormat = FOURCC_SCRN;
  7216. SetupBlitter.ulDstLineSizeBytes = 0;
  7217. SetupBlitter.ulDstWidth = swp.cx;
  7218. SetupBlitter.ulDstHeight = swp.cy;
  7219. SetupBlitter.ulDstPosX = 0;
  7220. SetupBlitter.ulDstPosY = 0;
  7221. SetupBlitter.lScreenPosX = pointl.x;
  7222. SetupBlitter.lScreenPosY = pointl.y;
  7223. SetupBlitter.ulNumDstRects = rgnCtl.crcReturned;
  7224. SetupBlitter.pVisDstRects = rctls;
  7225. DiveSetupBlitter ( hDive, &SetupBlitter );
  7226.  
  7227. The color format of the source image is described by fccSrcColors. 
  7228.  
  7229. Note that, in this example, the DIVE blitter is set up to blit to the screen, 
  7230. but that need not be the case.  DIVE could also be used to perform color 
  7231. conversion and/or stretch blitting to a destination image.  The destination 
  7232. color-encoding format would be indicated in fccDstColorFormat; ulDstWidth and 
  7233. ulDstHeight would be set to the size of the destination image; ulNumDstRects 
  7234. would be set to 1; and pVisDstRects would point to a single rectangle with 
  7235. xLeft=yBottom=0 xRight=ulDstWidth and yTop=ulDstHeight. 
  7236.  
  7237.  
  7238. ΓòÉΓòÉΓòÉ 13.2.3. Blitter Operation ΓòÉΓòÉΓòÉ
  7239.  
  7240. The following illustrates buffer-to-buffer transfer using DiveBlitImage. 
  7241.  
  7242. The following illustrates buffer-to-screen transfer using DiveBlitImage. 
  7243.  
  7244. Note:  The screen cannot be used as a source for blitting using DIVE. 
  7245.  
  7246.  
  7247. ΓòÉΓòÉΓòÉ 13.2.4. Transparent Blitting ΓòÉΓòÉΓòÉ
  7248.  
  7249. DIVE transparent blitting functions enable an interactive game or imaging 
  7250. application to create composites of graphics and image data using a 
  7251. transparency key color. 
  7252.  
  7253. To set up for transparent blitting, the application calls 
  7254. DiveSetTransparentBlitMode before it calls DiveSetupBlitter. 
  7255.  
  7256. ULONG APIENTRY DiveSetTransparentBlitMode (HDIVE hDiveInst,
  7257.                                            ULONG ulTransBlitMode,
  7258.                                            ULONG ulValue1,
  7259.                                            ULONG ulValue2);
  7260.  
  7261. The following transparent blitting modes can be specified for ulTransBlitMode: 
  7262.  
  7263.      DIVE_TBM_NONE 
  7264.      DIVE_TBM_EXCLUDE_SOURCE_VALUE 
  7265.      DIVE_TBM_EXCLUDE_SOURCE_RGB_RANGE 
  7266.      DIVE_TBM_INCLUDE_SOURCE_RGB_RANGE 
  7267.      DIVE_TBM_EXCLUDE_SOURCE_YUV_RANGE 
  7268.      DIVE_TBM_INCLUDE_SOURCE_YUV_RANGE 
  7269.  
  7270.  Transparent blitting functions are based on source pixel values. If the pixel 
  7271.  value in the source image buffer is the key color, the value of the 
  7272.  corresponding pixel in the destination buffer is not modified. Interpretation 
  7273.  of color values specified in ulValue1 and ulValue2 parameters is dependent on 
  7274.  the source image color format specified in the fccSrcColorFormat field of the 
  7275.  SetupBlitter structure and the transparent blitting mode. 
  7276.  
  7277.  
  7278. ΓòÉΓòÉΓòÉ 13.2.5. Direct Frame-Buffer Access ΓòÉΓòÉΓòÉ
  7279.  
  7280. As mentioned earlier, *ppFrameBuffer returned by DiveOpen gives direct 
  7281. addressability to the frame buffer.  In order to write directly to the frame 
  7282. buffer, the DIVE application must perform its own clipping, color conversion, 
  7283. and bank switching. The following functions are provided for direct 
  7284. frame-buffer access:  DiveAcquireFrameBuffer, DiveDeacquireFrameBuffer, 
  7285. DiveSwitchBank, and DiveCalcFrameBufferAddress. 
  7286.  
  7287. The DiveQueryCaps function returns whether the display subsystem is 
  7288. bank-switched. DIVE provides another function called DiveCalcFrameBufferAddress 
  7289. to get to a location in the frame buffer that corresponds to a rectangle in 
  7290. desktop coordinates: 
  7291.  
  7292. PRECTL prectlDest;            /* Image rectangle in desktop coors  */
  7293. PVOID pDestinationAddress;    /* Frame buffer address - output     */
  7294. PULONG pulBankNumber;         /* Display h/w bank number - output  */
  7295. PULONG pulRemlinesInBank;     /* Lines left in bank - output       */
  7296.  
  7297. ulErrorCode = DiveCalcFrameBufferAddress(
  7298.         hDiveInst, &prectlDest, &pDestinationAddress,
  7299.         &pulBankNumber, &pulRemlinesInBank);
  7300.  
  7301. To accomplish correct clipping, prectlDest must be in the application window's 
  7302. visible region.  If the display hardware is bank-switched, then the application 
  7303. must not write more than pulRemlinesInBank lines of output before switching 
  7304. banks.  The data written to pDestinationAddress must be in the color-encoding 
  7305. scheme of the screen (also provided by DiveQueryCaps).  (Of course, DIVE can be 
  7306. used to convert to the correct screen color-encoding prior to writing to the 
  7307. frame buffer by doing a DiveBlitImage to a destination buffer with the same 
  7308. color-encoding.)  Additionally, if the screen supports only 256 colors, the 
  7309. data must match the current physical palette. 
  7310.  
  7311. All write access to the frame buffer must be bracketed by calls to 
  7312. DiveAcquireFrameBuffer and DiveDeacquireFrameBuffer.  Also, the application 
  7313. must not attempt to access the frame buffer between receipt of a WM_VRNDISABLED 
  7314. message and a WM_VRNENABLED message. 
  7315.  
  7316. A typical application would do the following: 
  7317.  
  7318. BOOL  fKeepBlitting = TRUE;
  7319. BOOL  fFBAccessOK;
  7320. RECTL rectlOutput;      /* Image rectangle in desktop coors  */
  7321. RECTL rectlDest;        /* Portion to blit in this bank */
  7322. ULONG ulMoreLines;      /* Lines in image left to blit  */
  7323. LONG  lBlitTop;         /* Top of next blit     */
  7324. PVOID pDestinationAddress;   /* Frame buffer address - output */
  7325. ULONG ulBankNumber;          /* Display h/w bank number - output */
  7326. ULONG ulRemlinesInAperature; /* Lines left in bank - output  */
  7327. BOOL  fAcquired = FALSE;     /* Acquired frame buffer yet    */
  7328.  
  7329. while (fKeepBlitting)
  7330.   {
  7331.   /* ... Call DiveSetupBlitter as before ...    */
  7332.  
  7333.   /********************************************************/
  7334.   /* Calculate total number of lines to blit.  Then blit  */
  7335.   /* only those lines that will fit in the current bank.  */
  7336.   /* Switch to successive banks until the entire image is */
  7337.   /* blitted.                                             */
  7338.   /********************************************************/
  7339.   ulMoreLines = rectlDest.yTop - rectlDest.yBottom;
  7340.   memcpy( &rectlDest, &rectlOutput, sizeof(RECTL));
  7341.   while (ulMoreLines && fFBAccessOK)
  7342.     {
  7343.     ulErrorCode = DiveCalcFrameBufferAddress(
  7344.         hDive, rectlDest, &pDestinationAddress,
  7345.         &ulBankNumber, &ulRemlinesInAperture);
  7346.     if (!fAcquired)
  7347.       if (!DiveAcquireFrameBuffer( hDive, ulBankNumber))
  7348.         fAcquired = TRUE;
  7349.       else break;
  7350.     DiveSwitchBank( hDive, ulBankNumber);
  7351.       {
  7352.       /* ... write data for (ulRemlinesInAperture) top lines of */
  7353.       /* rectlDest to pDestinationAddress ...   */
  7354.       if (ulRemlinesInAperture < ulMoreLines)
  7355.         {               /* if need next bank    */
  7356.         rectlDest.yTop -= ulRemlinesInAperture;
  7357.         ulMoreLines -= ulRemlinesInAperture;
  7358.         }
  7359.       else ulMoreLines = 0;
  7360.       }
  7361.     if (fAcquired)
  7362.       DiveDeacquireFrameBuffer( hDive);
  7363.     }           /* end: while more lines to blit */
  7364.   }             /* end: blitter loop    */
  7365.  
  7366. Note:  This method works only on even bank breaks; indirect access through 
  7367.        DiveBlitImage is recommended on displays with bank breaks that are not 
  7368.        aligned on scan-line boundaries. 
  7369.  
  7370.  In the previous example, the application spins off a separate thread to 
  7371.  perform blitting.  The procedure for this thread contains a nested loop that 
  7372.  switches display banks for each image blitted as long as blitting is needed. 
  7373.  The flag fFBAccessOK is turned off whenever the application window received 
  7374.  WM_VRNDISABLED and is turned on whenever WM_VRNENABLED is received. 
  7375.  
  7376.  
  7377. ΓòÉΓòÉΓòÉ 14. Captioning ΓòÉΓòÉΓòÉ
  7378.  
  7379. The Toolkit provides a sample captioning system to assist application 
  7380. programmers in adding captioning to multimedia applications. The sample 
  7381. captioning system consists of three parts: the Caption Creation Utility 
  7382. program, Caption DLL, and Caption Sample Application.  The Caption Creation 
  7383. Utility program (located in \TOOLKIT\SAMPLES\MM\CAPTION subdirectory) creates a 
  7384. "caption" file.  This is a text file containing timing information relating to 
  7385. its associated audio file.  The Caption DLL (located in the 
  7386. \TOOLKIT\SAMPLES\MM\CAPDLL directory) provides functions that drive the display 
  7387. and management of the caption file in a "caption window" in a PM application. 
  7388. The Caption Sample Application (located in the \TOOLKIT\SAMPLES\MM\CAPSAMP 
  7389. subdirectory) demonstrates how an application uses the functions provided by 
  7390. the Caption DLL to take advantage of its services.  As with all OS/2 multimedia 
  7391. samples, the source code is provided for all three components.  You can use the 
  7392. three components as provided or modify them to meet specific requirements. See 
  7393. Sample Application Programs for more information on the captioning components. 
  7394.  
  7395.  
  7396. ΓòÉΓòÉΓòÉ 14.1. Creating a Caption File ΓòÉΓòÉΓòÉ
  7397.  
  7398. The Caption Creation Utility enables synchronization of the line-by-line 
  7399. display of a text file with the playing of an audio file. You can start this 
  7400. program from either an OS/2 command prompt by typing CAPTION (while in the 
  7401. \TOOLKIT\SAMPLES\MM\CAPTION subdirectory), or by selecting the Caption Creation 
  7402. Utility object from the Toolkit folder. You can open an audio file, open a text 
  7403. file to synchronize with it, play the audio file, and select (by clicking a 
  7404. mouse button) the moment in the audio when the current line of text should 
  7405. scroll to display the next line of text. This allows the user to synchronize an 
  7406. audio file with a text file. 
  7407.  
  7408.            ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7409.            Γöé  Text   Γöé         Γöé  Audio  Γöé
  7410.            Γöé  File   Γöé         Γöé  File   Γöé
  7411.            ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7412.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7413.                             
  7414.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7415.                     Γöé  Caption  Γöé
  7416.                     Γöé Creation  Γöé
  7417.                     Γöé  Utility  Γöé
  7418.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7419.                           
  7420.                      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7421.                      Γöé Caption Γöé
  7422.                      Γöé  File   Γöé
  7423.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7424.  
  7425. In order to start the synchronization process, the user selects Start timing. 
  7426. The audio file begins playing and Advance line is enabled. When you want to 
  7427. scroll to the next line of text, you select Advance line.  This scrolls the 
  7428. line of text in the text window and displays the next line.  When Advance line 
  7429. is selected, the Caption Creation Utility issues an MCI_STATUS message with 
  7430. mciSendCommand as shown in the following figure. The device ID passed is 
  7431. obtained when the application opens the audio device. The MCI_STATUS_ITEM flag 
  7432. is set and the ulItem field in the MCI_STATUS_PARMS data structure contains 
  7433. MCI_STATUS_POSITION.  Upon return, the ulReturn field in the MCI_STATUS_PARMS 
  7434. data structure contains the current position of the device in MMTIME units. 
  7435.  
  7436.  
  7437.      case ID_NEXTLINE:
  7438.         if ( usNextline < usLineCount ) /* (1) Check usNextline.   */
  7439.         {
  7440.            msp.hwndCallback = (HWND) NULL; /* (2) Get audio
  7441.                                                position.           */
  7442.  
  7443.            msp.ulItem     = MCI_STATUS_POSITION;
  7444.            ulError = mciSendCommand ( mop.usDeviceID,
  7445.                                       MCI_STATUS,
  7446.                                       MCI_WAIT | MCI_STATUS_ITEM,
  7447.                                       (PVOID) &msp,
  7448.                                       (USHORT)  UP_STATUS );
  7449.  
  7450. When the Caption Creation Utility receives the position value, it writes the 
  7451. time value and the line of text to the caption file. A caption file contains a 
  7452. copy of the text file and (before each line of text) the multimedia time unit 
  7453. when that line of text should be displayed in conjunction with the audio file. 
  7454. The file name of the caption file is the same as the file name of the text 
  7455. file, with an extension of ._CC.  The caption file can then be used by an 
  7456. application in conjunction with the Caption DLL to caption an application. 
  7457.  
  7458.  
  7459. ΓòÉΓòÉΓòÉ 14.2. Displaying Captions in a Window ΓòÉΓòÉΓòÉ
  7460.  
  7461. The Caption DLL works with an application to display caption files in the 
  7462. requesting application's window. The DLL does all of the work to display the 
  7463. text window and scroll the text in synchronization with the appropriate audio 
  7464. file. Applications can utilize this DLL to display captioned text (in 
  7465. synchronization with an audio file) in their application's window.  To perform 
  7466. this function, the Caption DLL utilizes the captioned text files, created by 
  7467. the Caption Creation Utility, and position advise messages that it sets on the 
  7468. specified audio device.  As described earlier, the caption files contain an 
  7469. MMTIME unit before every line of text.  The Caption DLL requests position 
  7470. advise messages from the Media Device Manager (MDM) every 1500 MMTIME units on 
  7471. the specified device.  When it receives MM_MCIPOSITIONCHANGE messages from MDM, 
  7472. it examines the MMTIME units in front of the text lines and displays the 
  7473. correct line of text in the text window of the application. The maximum size of 
  7474. the caption file is 500 lines long, but this can be modified by changing the 
  7475. limit in the Caption DLL source code. This DLL supports the following 
  7476. functions: 
  7477.  
  7478.  ccInitialize        Creates a captioning window and returns the handle of the 
  7479.                      window to the application. 
  7480.  
  7481.  ccSendCommand       Controls the captioning window, when it has been created, 
  7482.                      using the following commands: CC_START, CC_STOP, 
  7483.                      CC_STATUS, and CC_SET. 
  7484.  
  7485.  ccTerminate         Destroys the captioning window and releases any resources 
  7486.                      allocated for captioning. 
  7487.  
  7488.  See Caption DLL for more information on the captioning functions and data 
  7489.  structures. 
  7490.  
  7491.  
  7492. ΓòÉΓòÉΓòÉ 14.3. Caption Sample Application ΓòÉΓòÉΓòÉ
  7493.  
  7494. The Caption Sample Application demonstrates the incorporation of captioning in 
  7495. an application using caption files and the Caption DLL. 
  7496.  
  7497. As part of its initialization and termination routines, the Caption Sample 
  7498. Application issues ccInitialize and ccTerminate respectively.  This notifies 
  7499. the DLL to begin and end captioning. 
  7500.  
  7501.    /*
  7502.     * Create the caption window and save the handle for further use.
  7503.     */
  7504.    hwndCaption = ccInitialize ( (HWND) hwndMainDialogBox );
  7505.  
  7506. When the ccInitialize function is called, the DLL creates the caption window, 
  7507. but keeps it hidden until the DLL receives a ccSendCommand with a CC_START 
  7508. message. 
  7509.  
  7510.  /*
  7511.   * Close the captioning system. This will release all the resources
  7512.   * that were allocated.
  7513.   */
  7514.    ccTerminate(hwndCaption);
  7515.  
  7516. When the user selects Play, the Caption Sample Application opens the audio file 
  7517. and obtains a device ID.  It then plays the audio file.  Finally, it checks the 
  7518. system's captioning flag.  If it is set, the Caption Sample Application issues 
  7519. ccSendCommand with a CC_START command. This is all an application must do to 
  7520. implement captioning with OS/2 multimedia. The Caption DLL then starts 
  7521. providing captioning for the application. Three important parameters are sent 
  7522. with this function. First, the device ID or alias is passed.  This tells the 
  7523. DLL the correct audio device for which to request position-advise messages. 
  7524. Second, the name of the caption file is passed, and third, the application's 
  7525. window handle is passed.  This tells the DLL which caption file to display and 
  7526. the handle of the window to display it in. 
  7527.  
  7528.  /*
  7529.   * Test the MMPM/2 Captioning Flag.  If it is ON, then the user
  7530.   * wants to see captioning.  If it is OFF, the user does not want to
  7531.   * see captioning.
  7532.   */
  7533.  mciQuerySysValue ( MSV_CLOSEDCAPTION, &bCCflag );
  7534.      .
  7535.      .
  7536.      .
  7537.  
  7538.  /*
  7539.   * Captioning flag is ON.
  7540.   * Fill in the CC_START_PARMS structure and then call ccSendCommand
  7541.   * to make the captioning window visible.  The hwndOwner field holds
  7542.   * the window handle that we want the Caption DLL to send the
  7543.   * position change messages to, when it is done processing them.
  7544.   */
  7545.  
  7546.  csp.pszDeviceName    = (PSZ) "capsamp";     /* Alias name          */
  7547.  csp.pszCaptionFile   = (PSZ) "CAPSAMP._CC"; /* File name to use    */
  7548.  csp.hwndOwner        =  hwnd;               /* for position change */
  7549.  
  7550.  ulReturn = ccSendCommand ( CC_START, MPFROMHWND(hwndCaption), &csp );
  7551.                                              /* Start captioning    */
  7552.  
  7553. If you pause the audio file, change the volume, or move the audio slider 
  7554. position, the Caption Sample Application does not have to do any special 
  7555. processing to manage the caption window. The Caption DLL handles this. 
  7556.  
  7557. If you select Stop, the Caption Sample Application issues an MCI_STOP to the 
  7558. audio device, and then it issues a ccSendCommand of CC_STOP to the Caption DLL. 
  7559. This function informs the Caption DLL to stop displaying the caption window in 
  7560. the application and hide the caption window. 
  7561.  
  7562.         case IDC_GPB_STOP:     /* User selected "Stop" push button */
  7563.            /*
  7564.             * If the audio is not in stopped state, stop the device
  7565.             * and hide the text window.
  7566.             */
  7567.            if (eState != ST_STOPPED)
  7568.            {
  7569.               StopTheDevice();
  7570.               ccSendCommand( CC_STOP, MPFROMHWND(hwndCaption), 0 );
  7571.            }
  7572.            break;
  7573.  
  7574. The application issues a ccSendCommand with CC_STATUS to determine the current 
  7575. properties of the caption window.  This function initializes the settings 
  7576. dialog box to display it to the user. The following figure shows the status 
  7577. request for the text columns. Requests for the status of the text rows, 
  7578. background color, text color, and window position are handled similarly. 
  7579.  
  7580.  
  7581.    /*
  7582.     * Query the current status of the text columns.
  7583.     * The CC_STATUS returns the actual value in the ulReturn field.
  7584.     */
  7585.   ccStatusParms.ulItem = CC_STATUS_TEXT_COLUMNS;
  7586.   ccSendCommand( CC_STATUS, MPFROMHWND(hwndCaption), &ccStatusParms );
  7587.  
  7588.    /*
  7589.     * Get the index value for the ulReturn field.
  7590.     */
  7591.    if (ccStatusParms.ulReturn == 15)
  7592.       ulArrayIndexValue = 0;
  7593.    else
  7594.    if (ccStatusParms.ulReturn == 35)
  7595.       ulArrayIndexValue = 1;
  7596.    else
  7597.    if (ccStatusParms.ulReturn == 50)
  7598.       ulArrayIndexValue = 2;
  7599.  
  7600. /*
  7601.  * Set the current index value in the spin button.
  7602.  */
  7603. WinSendDlgItemMsg( hwnd,                 /* Handle to the dialog box  */
  7604.                    IDC_TEXT_COLUMNS_SB,  /* ID of the spin button  */
  7605.                    SPBM_SETCURRENTVALUE, /* Set current index value */
  7606.                    MPFROMLONG(ulArrayIndexValue),/* Current index */
  7607.                    NULL );                       /* Ignore        */
  7608.  
  7609. You can change several properties of the caption window by selecting Settings 
  7610. from the Options pull-down menu of the Caption Sample Application. When you 
  7611. select OK to save the desired properties, the Caption Sample Application issues 
  7612. ccSendCommand with a CC_SET message.  The Caption DLL handles changing and 
  7613. displaying the new properties of the caption window. The following figure shows 
  7614. sample code from the Caption Sample Application that sets up the CC_SET_PARMS 
  7615. data structure for the text rows.  Changing the settings for the background 
  7616. color, text color, window position, and text columns is handled similarly. 
  7617.  
  7618.    CC_SET_PARMS       ccSetParms;    /* Set parms for CC_SET   */
  7619.    ULONG              ulArrayIndexValue=0; /* For spin button return
  7620.                                               value            */
  7621.  
  7622.  
  7623.     /*
  7624.      * Query the text rows spin button. The array index
  7625.      * value will be returned in ulArrayIndexValue variable.
  7626.      */
  7627.     WinSendDlgItemMsg(
  7628.        hwnd,
  7629.        IDC_TEXT_ROWS_SB,
  7630.        SPBM_QUERYVALUE,
  7631.        (MPARAM) &ulArrayIndexValue,
  7632.        MPFROMLONG(0));
  7633.  
  7634.     /*
  7635.      * Get the actual value and initialize the CC_SET_PARMS
  7636.      * data structure with the appropriate information.
  7637.      */
  7638.     ccSetParms.ulRows = (ULONG) atoi( textRows[ulArrayIndexValue] );
  7639.  
  7640.     /*
  7641.      * Issue the CC_SET command with the ccSendCommand and close
  7642.      * the dialog box.
  7643.      */
  7644.     ccSendCommand(CC_SET, MPFROMHWND(hwndCaption), &ccSetParms);
  7645.     WinDismissDlg( hwnd, TRUE );
  7646.  
  7647.     return( 0 );
  7648.  
  7649.  
  7650. ΓòÉΓòÉΓòÉ 15. OS/2 Multimedia Controls ΓòÉΓòÉΓòÉ
  7651.  
  7652. This chapter describes how to create and manage your own customized windows, 
  7653. graphic buttons and secondary windows. OS/2 multimedia applications, such as 
  7654. Volume Control shown in the following figure provide you with examples of 
  7655. multimedia control implementations. 
  7656.  
  7657. The SW.DLL dynamic link library, located in the \MMOS2\DLL subdirectory 
  7658. contains the functions that support creating and manipulating these controls. 
  7659. (The SW.H file is included with the Toolkit and contains the prototypes, 
  7660. constants, and data structures your application needs.) Refer to the PM Guide 
  7661. and Reference for information on creating circular sliders (dials). 
  7662.  
  7663. Refer to the CUA Guide to Multimedia User Interface Design for more information 
  7664. about creating consistent user interfaces for multimedia controls. 
  7665.  
  7666.  
  7667. ΓòÉΓòÉΓòÉ 15.1. Graphic Buttons ΓòÉΓòÉΓòÉ
  7668.  
  7669. A graphic button is a specialized push button that displays text, or graphics, 
  7670. or both. If a graphic button is defined as a two-state graphic button, it can 
  7671. have an up or down appearance. The two-state button remembers its state and 
  7672. thus can be toggled from up to down and down to up. Unlike a standard push 
  7673. button, the graphic button remains in the changed state after the user has 
  7674. clicked on it. 
  7675.  
  7676. Individual bitmaps can be displayed along with text while the button is in an 
  7677. up, down, highlighted, or unhighlighted state. A graphic button is highlighted 
  7678. when the mouse select button is held down while the pointer is on the graphic 
  7679. button. 
  7680.  
  7681. Typically, when a two-state button is up, it is selectable, and when it is 
  7682. down, an action is being processed. The bitmap shown in the up state reflects 
  7683. the action to be processed. 
  7684.  
  7685. If the button has been defined as an animated graphic button, a series of 
  7686. bitmaps can be displayed to produce an animated effect. If the button is a 
  7687. two-state button, animation can be done for a particular button state, or it 
  7688. can be independent of the change of button state. The drawing of animation 
  7689. bitmaps takes precedence over the current state bitmap. 
  7690.  
  7691. Any graphic button that draws a bitmap while the button is highlighted or 
  7692. unhighlighted is not intended to be animated. Combining an animation button 
  7693. style with either of these two button styles can produce unpredictable results. 
  7694.  
  7695. Graphic button text can appear as flat on the button surface, or as 
  7696. three-dimensional, with its z-order raised or recessed, relative to the button 
  7697. surface. 
  7698.  
  7699. These functional capabilities make graphic buttons ideal to use when designing 
  7700. a multimedia device control panel. 
  7701.  
  7702.  
  7703. ΓòÉΓòÉΓòÉ 15.1.1. Styles ΓòÉΓòÉΓòÉ
  7704.  
  7705. The following table identifies the graphic button styles that can be specified 
  7706. for a graphic button to increase its functionality. A graphic button with no 
  7707. style bits set has an "up" state and the capability to display bitmaps, or 
  7708. text, or both. 
  7709.  
  7710. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7711. ΓöéStyle               ΓöéDescription                             Γöé
  7712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7713. ΓöéGBS_TWOSTATE        ΓöéCreates a graphic button that has two   Γöé
  7714. Γöé                    Γöéstates: up and down. When the button is Γöé
  7715. Γöé                    Γöéin the up state (drawn with its z-order Γöé
  7716. Γöé                    Γöéabove the owner), this usually indicatesΓöé
  7717. Γöé                    Γöéit is selectable.  When the button is inΓöé
  7718. Γöé                    Γöéthe down state (drawn with its z-order  Γöé
  7719. Γöé                    Γöébelow the owner), this usually indicatesΓöé
  7720. Γöé                    Γöéan action is being processed.           Γöé
  7721. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7722. ΓöéGBS_AUTOTWOSTATE    ΓöéCreates a two-state graphic button that Γöé
  7723. Γöé                    Γöéautomatically toggles its state from up Γöé
  7724. Γöé                    Γöéto down or down to up whenever the user Γöé
  7725. Γöé                    Γöéclicks on it.  No messages from the     Γöé
  7726. Γöé                    Γöéowner are required for the button to    Γöé
  7727. Γöé                    Γöétoggle its state.                       Γöé
  7728. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7729. ΓöéGBS_ANIMATION       ΓöéCreates an animated graphic button that Γöé
  7730. Γöé                    Γöédisplays a series of bitmaps. Display ofΓöé
  7731. Γöé                    Γöéthe series is handled like a circular   Γöé
  7732. Γöé                    Γöélist; after the last bitmap in the      Γöé
  7733. Γöé                    Γöéseries is displayed, the first bitmap inΓöé
  7734. Γöé                    Γöéthe series is displayed, and so forth.  Γöé
  7735. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7736. ΓöéGBS_AUTOANIMATION   ΓöéCreates an animated graphic button that Γöé
  7737. Γöé                    Γöéautomatically toggles its animation fromΓöé
  7738. Γöé                    Γöéoff to on or on to off whenever the userΓöé
  7739. Γöé                    Γöéclicks on it. Usually, when the button'sΓöé
  7740. Γöé                    Γöéanimation is off, the button is         Γöé
  7741. Γöé                    Γöéselectable. Conversely, when the        Γöé
  7742. Γöé                    Γöéanimation is on, an action is being     Γöé
  7743. Γöé                    Γöéprocessed.                              Γöé
  7744. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7745. ΓöéGBS_HILITEBITMAP    ΓöéCreates a graphic button that displays aΓöé
  7746. Γöé                    Γöédifferent bitmap when the button is in aΓöé
  7747. Γöé                    Γöéhighlighted paint state.  The           Γöé
  7748. Γöé                    Γöéhighlighted paint state occurs when the Γöé
  7749. Γöé                    Γöéuser presses the mouse button while the Γöé
  7750. Γöé                    Γöépointer is over the graphic button (or  Γöé
  7751. Γöé                    Γöéthe user holds the spacebar down while  Γöé
  7752. Γöé                    Γöéthe graphic button has the focus).      Γöé
  7753. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7754. ΓöéGBS_DISABLEBITMAP   ΓöéCreates a graphic button that displays aΓöé
  7755. Γöé                    Γöédifferent bitmap when the highlighted   Γöé
  7756. Γöé                    Γöépaint state of the button is disabled.  Γöé
  7757. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7758. ΓöéGBS_3D_TEXTRECESSED ΓöéCreates a graphic button that has       Γöé
  7759. Γöé                    Γöéthree-dimensional text.  The text       Γöé
  7760. Γöé                    Γöéz-order is below the face of the button.Γöé
  7761. Γöé                    ΓöéThe main body of the text is black, and Γöé
  7762. Γöé                    Γöéits bottom and right edges are white.   Γöé
  7763. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7764. ΓöéGBS_3D_TEXTRAISED   ΓöéCreates a graphic button that has       Γöé
  7765. Γöé                    Γöéthree-dimensional text.  The text       Γöé
  7766. Γöé                    Γöéz-order is above the face of the button.Γöé
  7767. Γöé                    ΓöéThe main body of the text is white, and Γöé
  7768. Γöé                    Γöéits bottom and right edges are black.   Γöé
  7769. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7770. Note: Setting both GBS_3D_TEXTRECESSED and GBS_3D_TEXTRAISED is not 
  7771. recommended, because this can cause unpredictable behavior. 
  7772.  
  7773.  
  7774. ΓòÉΓòÉΓòÉ 15.1.2. Owner Notifications ΓòÉΓòÉΓòÉ
  7775.  
  7776. The owner window of a graphic button is sent a notification code with the 
  7777. WM_CONTROL message whenever the graphic button changes state. The notification 
  7778. code indicates the new state of the button. WM_CONTROL messages are sent with 
  7779. WinSendMsg, which does not return until the application processes the message. 
  7780. These notifications are provided for an application that requires synchronous 
  7781. knowledge of when a graphic button changes state. An example of this type of 
  7782. graphic button is the music scan button shown in the example in section 
  7783. Processing Messages for a CD Player Graphic Button. 
  7784.  
  7785. At the same time a WM_CONTROL message is sent to the owner, a WM_COMMAND 
  7786. message is also posted to the application message queue with WinPostMsg. The 
  7787. WM_COMMAND informs the application that the graphic button has been selected. 
  7788. If you want to implement a simple graphic button that performs an action, such 
  7789. as a playback operation, you can use code developed for a PM pushbutton, which 
  7790. uses the WM_COMMAND means of notification.  The only change you have to make to 
  7791. the code is the window class. 
  7792.  
  7793. When you create your graphic button, you can take advantage of either of these 
  7794. means of notification. 
  7795.  
  7796. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7797. ΓöéNotification Code       ΓöéDescription                         Γöé
  7798. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7799. ΓöéGBN_BUTTONUP            ΓöéThe graphic button is changing to anΓöé
  7800. Γöé                        Γöéup paint state from either a down orΓöé
  7801. Γöé                        Γöéhighlighted paint state.            Γöé
  7802. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7803. ΓöéGBN_BUTTONDOWN          ΓöéThe graphic button is changing to a Γöé
  7804. Γöé                        Γöédown paint state from either an up  Γöé
  7805. Γöé                        Γöéor highlighted paint state.         Γöé
  7806. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7807. ΓöéGBN_BUTTONHILITE        ΓöéThe graphic button is changing to a Γöé
  7808. Γöé                        Γöéhighlighted paint state from either Γöé
  7809. Γöé                        Γöéan up or down paint state.          Γöé
  7810. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7811.  
  7812.  
  7813. ΓòÉΓòÉΓòÉ 15.1.3. Control Messages ΓòÉΓòÉΓòÉ
  7814.  
  7815. The following table describes the graphic button control messages that can be 
  7816. used by a graphic button window procedure to manipulate a graphic button: 
  7817.  
  7818. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  7819. ΓöéControl Message               ΓöéDescription                   Γöé
  7820. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7821. ΓöéGBM_SETGRAPHICDATA            ΓöéSets the graphical data       Γöé
  7822. Γöé                              Γöé(graphic button text, bitmaps)Γöé
  7823. Γöé                              Γöéfor a graphic button and      Γöé
  7824. Γöé                              Γöéerases all previous data      Γöé
  7825. Γöé                              Γöérelating to the state of the  Γöé
  7826. Γöé                              Γöébutton.                       Γöé
  7827. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7828. ΓöéGBM_ANIMATE                   ΓöéSets the animation of an      Γöé
  7829. Γöé                              Γöéanimated graphic button to    Γöé
  7830. Γöé                              Γöéstart or stop at the first    Γöé
  7831. Γöé                              Γöébitmap in the series or at a  Γöé
  7832. Γöé                              Γöébitmap within the series.     Γöé
  7833. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7834. ΓöéGBM_QUERYANIMATIONACTIVE      ΓöéGets the animation state of anΓöé
  7835. Γöé                              Γöéanimated graphic button.      Γöé
  7836. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7837. ΓöéGBM_SETANIMATIONRATE          ΓöéSets, in milliseconds, the    Γöé
  7838. Γöé                              Γöéperiod between bitmap updates Γöé
  7839. Γöé                              Γöéfor an animated graphic       Γöé
  7840. Γöé                              Γöébutton.                       Γöé
  7841. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7842. ΓöéGBM_QUERYANIMATIONRATE        ΓöéGets the animation rate that  Γöé
  7843. Γöé                              Γöéis set for an animated graphicΓöé
  7844. Γöé                              Γöébutton.                       Γöé
  7845. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7846. ΓöéGBM_SETSTATE                  ΓöéSets a two-state graphic      Γöé
  7847. Γöé                              Γöébutton to up or down, or      Γöé
  7848. Γöé                              Γöétoggles its state.            Γöé
  7849. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7850. ΓöéGBM_QUERYSTATE                ΓöéGets the state of a graphic   Γöé
  7851. Γöé                              Γöébutton.                       Γöé
  7852. Γöé                              ΓöéNote: For a graphic button    Γöé
  7853. Γöé                              Γöéthat does not have a two-stateΓöé
  7854. Γöé                              Γöéstyle, its state is always    Γöé
  7855. Γöé                              Γöéconsidered to be "up."        Γöé
  7856. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7857. ΓöéGBM_SETBITMAPINDEX            ΓöéSets the bitmap index to use  Γöé
  7858. Γöé                              Γöéfor the various states of the Γöé
  7859. Γöé                              Γöégraphic button; up, down,     Γöé
  7860. Γöé                              Γöéhighlighted, not highlighted, Γöé
  7861. Γöé                              Γöébeginning of animation series,Γöé
  7862. Γöé                              Γöéend of animation series,      Γöé
  7863. Γöé                              Γöécurrent state (refers to      Γöé
  7864. Γöé                              Γöéeither the up or down bitmap).Γöé
  7865. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7866. ΓöéGBM_QUERYBITMAPINDEX          ΓöéGets the bitmap index used forΓöé
  7867. Γöé                              Γöéa particular button state.    Γöé
  7868. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7869. ΓöéGBM_SETTEXTPOSITION           ΓöéSets graphic button text      Γöé
  7870. Γöé                              Γöéposition above or below the   Γöé
  7871. Γöé                              Γöébitmap.                       Γöé
  7872. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  7873. ΓöéGBM_QUERYTEXTPOSITION         ΓöéGets graphic button text      Γöé
  7874. Γöé                              Γöéposition relative to the      Γöé
  7875. Γöé                              Γöébitmap.                       Γöé
  7876. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  7877.  
  7878.  
  7879. ΓòÉΓòÉΓòÉ 15.1.4. Creating Graphic Buttons ΓòÉΓòÉΓòÉ
  7880.  
  7881. The graphic button PM window class WC_GRAPHICBUTTON is similar to the window 
  7882. class of a push button. This window class must be registered with the function 
  7883. WinRegisterGraphicButton before you can create a graphic button. 
  7884.  
  7885. A graphic button can be created by a CONTROL statement in a dialog resource. A 
  7886. graphic button also can be created by specifying the WC_GRAPHICBUTTON window 
  7887. class parameter of the WinCreateWindow call. 
  7888.  
  7889. The graphic button should be initialized when its owner receives a WM_INITDLG 
  7890. message. By doing the initializations at this time, the owner has the 
  7891. capability to change the graphic button's bitmaps, text positioning, state, 
  7892. animation rate, and so on, before the button is displayed on the screen. 
  7893.  
  7894. The GBTNCDATA data structure shown below is the data structure that is 
  7895. allocated to initialize graphic button control data. This structure is required 
  7896. when sending the GBM_SETGRAPHICDATA message. 
  7897.  
  7898. Note:  If you create a graphic button with WinCreateWindow and initialize the 
  7899.        GBTNCDATA structure; set the usReserved field to GB_STRUCTURE, rather 
  7900.        than GB_RESOURCE, to indicate the structure contains a module handle. 
  7901.  
  7902.         typedef struct _GBTNCDATA
  7903.         {
  7904.            USHORT  usReserved;   /* Reserved                       */
  7905.            PSZ     pszText;      /* Initial graphic button text    */
  7906.            HMODULE hmod;         /* Handle of bitmap resource      */
  7907.            USHORT  cBitmaps;     /* Number of button bitmaps       */
  7908.            USHORT  aidBitmap[1]; /* Array of bitmap resource IDs   */
  7909.         } GBTNCDATA;
  7910.  
  7911.  Graphic button data is set or changed by sending the GBM_SETGRAPHICDATA 
  7912.  message with WinSendMsg to the graphic button control window procedure. Using 
  7913.  this message to change graphic button data erases any data relating to the 
  7914.  button state and sets the button state to the default parameters. The default 
  7915.  state of a graphic button is "up." If you want to change only the text of the 
  7916.  graphic button without affecting the button state data, use WinSetWindowText. 
  7917.  
  7918.  Mnemonics are supported for graphic button text. As with push buttons, a 
  7919.  character in the text is designated as the mnemonic for the button by a 
  7920.  preceding tilde (~) character. If the button does not have any text, a null 
  7921.  string must be specified. 
  7922.  
  7923.  The number specified for bitmaps associated with the graphic button does not 
  7924.  necessarily represent the number of unique bitmaps. A graphic button can have 
  7925.  duplicate bitmaps associated with it for animation purposes. 
  7926.  
  7927.  It is assumed that all the bitmaps associated with a particular graphic button 
  7928.  are of equal size.  The size of a graphic button is determined by the 
  7929.  dimensions specified in the CONTROL statement of the dialog resource, as well 
  7930.  as the size of the bitmap.  If the dimensions in the CONTROL statement are too 
  7931.  small to contain the bitmap and the text, the button size is made larger to 
  7932.  accommodate the width of the bitmap and the depth of the bitmap plus the text. 
  7933.  However, if the width of the text exceeds the width determined by the 
  7934.  specified dimensions or the actual bitmap (whichever is greater), the text is 
  7935.  truncated. 
  7936.  
  7937.  
  7938. ΓòÉΓòÉΓòÉ 15.1.5. Animated Graphic Button ΓòÉΓòÉΓòÉ
  7939.  
  7940. The following code fragment is a sample definition for creating an animated 
  7941. graphic button with a CONTROL statement in a dialog resource. 
  7942.  
  7943. CONTROL "", IDD_TESTPLAY1, 120, 70, 45, 35,
  7944.             WC_GRAPHICBUTTON,
  7945.             GBS_AUTOANIMATION | GBS_3D_TEXTRAISED |
  7946.             WS_VISIBLE | WS_TABSTOP
  7947.             CTLDATA GB_RESOURCE, "PLAY", 16, ID_PLAY1, ID_PLAY 2, ID_PLAY3,
  7948.                                            ID_PLAY4,  ID_PLAY5,  ID_PLAY6,
  7949.                                            ID_PLAY7,  ID_PLAY8,  ID_PLAY9,
  7950.                                            ID_PLAY10, ID_PLAY11, ID_PLAY12,
  7951.                                            ID_PLAY13, ID_PLAY14, ID_PLAY15,
  7952.                                            ID_PLAY16, 0
  7953.  
  7954. The control data for the graphic button provides the text "PLAY" (with no 
  7955. mnemonic) for the button face and associates the names of 16 bitmaps with the 
  7956. button. The bitmaps are assigned indexes 1 through 16, according to the order 
  7957. they appear in the control data. 
  7958.  
  7959. The list of bitmap IDs is preceded by a number and ends with a zero. The number 
  7960. indicates the total of defined bitmaps. The zero indicates the end of the 
  7961. bitmap array. The number of bitmaps that actually are displayed is determined 
  7962. by the bitmap total or the zero-terminated array, whichever is less.  If the 
  7963. number of bitmap IDs is greater than the bitmap total, the extraneous bitmap 
  7964. IDs are ignored.  A bitmap cannot have an ID of zero. 
  7965.  
  7966. Because the style of this graphic button includes GBS_AUTOANIMATION, when the 
  7967. user clicks on this button, it automatically toggles the animation on or off 
  7968. without intervention from the owner window of the graphic button. 
  7969.  
  7970. An animated graphic button can also be created by specifying the 
  7971. WS_GRAPHICBUTTON window class name as a parameter of the WinCreateWindow call. 
  7972. The following code fragment shows an example of setting up the GBTNCDATA 
  7973. structure with the graphic button data and using the WinCreateWindow call. 
  7974.  
  7975. HWND        hwndGB;        /* Graphic button window handle   */
  7976. PGBTNCDATA  pgbtn;         /* Pointer to graphic button data */
  7977. LONG        lSize;         /* Size of graphic data           */
  7978. #define NUMBITMAPS   4     /* Number of bitmaps for button   */
  7979.  
  7980. lSize = sizeof(GBTNCDATA) + sizeof(USHORT) * (NUMBITMAPS - 1);
  7981. pgbtn = (PGBTNCDATA)malloc(lSize);
  7982.  
  7983. if (pgbtn)
  7984.  {
  7985.   memset(pgbtn, 0, lSize);
  7986.  
  7987.   pgbtnpszText     = "Text";
  7988.   pgbtncBitmaps    = NUMBITMAPS;
  7989.   pgbtnaidBitmap[0] = BMP0;
  7990.   pgbtnaidBitmap[1] = BMP1;
  7991.   pgbtnaidBitmap[2] = BMP2;
  7992.   pgbtnaidBitmap[3] = BMP3;
  7993.  
  7994.   WinRegisterGraphicButton();
  7995.  
  7996.   /* Create the graphic button.  hwnd is the window handle
  7997.    * of the owning window (for example, client window)
  7998.    */
  7999.  
  8000.    hwndGB = WinCreateWindow (hwnd,
  8001.      WC_GRAPHICBUTTON,
  8002.      "",               /* No text here; see pgbtnpszText */
  8003.      WS_VISIBLE | WS_TABSTOP | WS_POINTSELECT |
  8004.      GBS_AUTOANIMATION | GBS_3D_TEXTRECESSED,
  8005.      0,0,80,40,
  8006.      hwnd,
  8007.      HWND_TOP,
  8008.      ID_GB,            /* Graphic button identifier */
  8009.      MPFROMP(pgbtn),
  8010.      NULL);
  8011.  
  8012.   WinSendMsg( hwndGB, GBM_SETGRAPHICDATA, MPFROMP(pgbtn), 0);
  8013. }
  8014.  
  8015.  
  8016. ΓòÉΓòÉΓòÉ 15.1.6. Two-State Graphic Button ΓòÉΓòÉΓòÉ
  8017.  
  8018. The following figure is a sample definition for creating a two-state graphic 
  8019. button in a dialog resource. 
  8020.  
  8021. CONTROL "", IDD_MP_PAUSE, 65, 10, 40, 30,
  8022.             WC_GRAPHICBUTTON,
  8023.             GBS_TWOSTATE | GBS_3D_TEXTRECESSED |
  8024.             WS_VISIBLE | WS_TABSTOP
  8025.             CTLDATA GB_RESOURCE, "PAUSE", 3, ID_MP_PAUS0, ID_MP_PAUS1,
  8026.                                              ID_MP_PAUS2, 0
  8027.  
  8028. The control data for the graphic button provides the text "PAUSE" (with no 
  8029. mnemonic) for the button face and associates the names of three bitmaps with 
  8030. the button. The bitmaps are assigned indexes 0, 1, and 2, according to the 
  8031. order they appear in the control data. In this case, the bitmaps are used to 
  8032. indicate the various states of the button:  up, down, and highlighted. 
  8033.  
  8034. Because the button does not have a GBS_AUTOTWOSTATE style, the owner window 
  8035. must send a GBM_SETSTATE message to the graphic button, requesting the button 
  8036. change its state. 
  8037.  
  8038. A two-state graphic button can also be created by specifying the 
  8039. WC_GRAPHICBUTTON window class name as a parameter of the WinCreateWindow call. 
  8040. The following figure shows an example of setting up the GBTNCDATA structure 
  8041. with the graphic button data and using the WinCreateWindow call. 
  8042.  
  8043. HWND        hwndTSB;    /* Two-state window handle             */
  8044. PGBTNCDATA  pgbtn;      /* Graphic button control data         */
  8045. LONG        lSize;      /* Size of graphic button control data */
  8046. # define NUMBITMAPS  2  /* Number of bitmaps for button */
  8047.  
  8048. lSize = sizeof(GBTNCDATA) + sizeof(USHORT) * (NUMBITMAPS - 1);
  8049. pgbtn = (PGBTNCDATA)malloc(lSize);
  8050.  
  8051. if (pgbtn)
  8052. {
  8053.   memset(pgbtn, 0, lSize);
  8054.  
  8055.   pgbtnpszText    = "Text";
  8056.   pgbtncBitmaps   = NUMBITMAPS;
  8057.   pgbtnaidBitmap[0] = BMP0;
  8058.   pgbtnaidBitmap[1] = BMP1;
  8059.  
  8060.   WinRegisterGraphicButton();
  8061.  
  8062.   /* Create the two-state graphic button.  hwnd is the window handle
  8063.    * of the owning window (for example, client window)
  8064.    */
  8065.   hwndTSB = WinCreateWindow (hwnd,
  8066.     WC_GRAPHICBUTTON,   /* No text here; see pgbtnpszText */
  8067.     "",
  8068.     WS_VISIBLE |, WS_TABSTOP | WS_POINTSELECT
  8069.     | GBS_AUTOTWOSTATE | GBS_3D_TEXTRECESSED,
  8070.     0,0,80,40,
  8071.     hwnd,
  8072.     HWND_TOP,
  8073.     ID_TSB,            /* Graphic button identifier */
  8074.     MPFROMP(pgbtn),
  8075.     NULL);
  8076.  
  8077.   WinSendMsg(hwndTSB, GBM_SETGRAPHICDATA, MPFROMP(pgbtn), 0);
  8078.  
  8079.   WinSendMsg(hwndTSB, GBM_SETBITMAPINDEX,
  8080.              MPFROMSHORT(GB_DOWN),           /* Which state  */
  8081.              MPFROMSHORT(GB_INDEX_LAST));    /* Which bitmap */
  8082. }
  8083.  
  8084.  
  8085. ΓòÉΓòÉΓòÉ 15.1.7. Processing Messages for a CD Player Graphic Button ΓòÉΓòÉΓòÉ
  8086.  
  8087. The following code fragment illustrates a message-handling procedure for a CD 
  8088. player window. This example demonstrates synchronization of a graphic button 
  8089. and control of a CD player. 
  8090.  
  8091.   CD_Player_Message_Proc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  8092.   {
  8093.       switch (msg)  {
  8094.         ...
  8095.         case WM_CONTROL:
  8096.  
  8097.         /* If the Music Scan GraphicButton sent the notification...   */
  8098.             if (SHORT1FROMMP(mp1) == ID_MUSIC_SCAN) {
  8099.  
  8100.                switch (SHORT2FROMMP(mp1)) {  /* type of notification */
  8101.  
  8102.                   case GBN_BUTTONHILITE:  /* button held down */
  8103.                      CD_Music_Scan_Start (...);
  8104.                      break;
  8105.  
  8106.                   case GBN_BUTTONUP:      /* button released */
  8107.                      CD_Music_Scan_Stop (...);
  8108.                      break;
  8109.                   ...
  8110.                }
  8111.             ...
  8112.             }
  8113.             ...
  8114.             break;
  8115.         ...
  8116.      }
  8117.   }
  8118.  
  8119. When the music scan button on a physical CD player is held down, it allows the 
  8120. listener to hear the music played at an accelerated rate. In the example shown 
  8121. in the previous figure, the effect of the message procedure is similar.  If the 
  8122. user holds the mouse button down and the pointer is over the Music Scan graphic 
  8123. button, the CD_Music_Scan_Start function is called.  If the mouse button is 
  8124. released, or the pointer is removed from the Music Scan graphic button, then 
  8125. the CD_Music_Scan_Stop function is called. 
  8126.  
  8127.  
  8128. ΓòÉΓòÉΓòÉ 15.2. Secondary Windows ΓòÉΓòÉΓòÉ
  8129.  
  8130. A secondary window provides a sizeable and scrollable dialog interface. 
  8131. Secondary window functions are compatible with PM dialog window functions, so 
  8132. it is an easy task to make changes to existing code that uses the PM dialog 
  8133. window functions. 
  8134.  
  8135. The secondary window uses two frame windows, a standard frame and a dialog 
  8136. frame. The standard frame window offers the standard services-moving, sizing, 
  8137. minimizing, maximizing, and closing-as well as a service for resizing the 
  8138. window to a default size. 
  8139.  
  8140. The window handle returned by WinLoadSecondaryWindow is the handle to the 
  8141. standard frame. This handle is used when associating a help instance, modifying 
  8142. the title bar or system menu, and doing WinSetWindowPos operations. 
  8143.  
  8144. The window handle that is used to pass messages to the secondary window 
  8145. procedure pointed to by WinLoadSecondaryWindow is the dialog window handle. 
  8146. This handle is used to access controls on the dialog with the WinWindowFromID 
  8147. function. An application can get a handle to the dialog window by passing the 
  8148. outer frame window handle to WinQuerySecondaryHWND. The dialog window is a 
  8149. child of the standard window's FID_CLIENT window. 
  8150.  
  8151. When the secondary window is opened, the frame window is set to the default 
  8152. size, which accommodates the dimensions of the dialog window. If the user makes 
  8153. the client window smaller by sizing the frame window, the dialog window is 
  8154. clipped and vertical and horizontal scroll bars appear. Selecting Default Size 
  8155. restores the frame window to the optimal size for displaying the dialog. 
  8156. Because the Sizeable Dialog Frame Manager manages the display of the standard 
  8157. window and its scroll bars automatically, the application needs to manage only 
  8158. the dialog window. 
  8159.  
  8160. The OS/2 multimedia Volume Control application, shown in the beginning of the 
  8161. OS/2 Multimedia Controls section, provides an example of a modeless secondary 
  8162. window implementation. 
  8163.  
  8164.  
  8165. ΓòÉΓòÉΓòÉ 15.2.1. Compatibility with PM Dialog Window Functions ΓòÉΓòÉΓòÉ
  8166.  
  8167. The design of secondary window functions is very much like the design of dialog 
  8168. window functions. The following table, which lists the secondary window 
  8169. functions, includes the names of PM dialog window equivalent functions. 
  8170.  
  8171. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8172. ΓöéSecondary Window Function   ΓöéPM Dialog Window ΓöéDescription                   Γöé
  8173. Γöé                            ΓöéEquivalent       Γöé                              Γöé
  8174. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8175. ΓöéWinLoadSecondaryWindow      ΓöéWinLoadDlg       ΓöéCreates a modeless secondary  Γöé
  8176. Γöé                            Γöé                 Γöéwindow from a dialog template Γöé
  8177. Γöé                            Γöé                 Γöéin a resource.                Γöé
  8178. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8179. ΓöéWinSecondaryWindow          ΓöéWinDlgBox        ΓöéCreates a modal secondary     Γöé
  8180. Γöé                            Γöé                 Γöéwindow from a dialog template Γöé
  8181. Γöé                            Γöé                 Γöéin a resource DLL and returns Γöé
  8182. Γöé                            Γöé                 Γöéthe result value established  Γöé
  8183. Γöé                            Γöé                 Γöéby the                        Γöé
  8184. Γöé                            Γöé                 ΓöéWinDismissSecondaryWindow     Γöé
  8185. Γöé                            Γöé                 Γöécall.                         Γöé
  8186. Γöé                            Γöé                 ΓöéWinSecondaryWindow combines   Γöé
  8187. Γöé                            Γöé                 Γöéthe functions of              Γöé
  8188. Γöé                            Γöé                 ΓöéWinLoadSecondaryWindow,       Γöé
  8189. Γöé                            Γöé                 ΓöéWinProcessSecondaryWindow, andΓöé
  8190. Γöé                            Γöé                 ΓöéWinDestroySecondaryWindow.    Γöé
  8191. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8192. ΓöéWinProcessSecondaryWindow   ΓöéWinProcessDlg    ΓöéProcesses a modal secondary   Γöé
  8193. Γöé                            Γöé                 Γöéwindow by dispatching messagesΓöé
  8194. Γöé                            Γöé                 Γöéwhile the modal window is     Γöé
  8195. Γöé                            Γöé                 Γöédisplayed.                    Γöé
  8196. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8197. ΓöéWinDismissSecondaryWindow   ΓöéWinDismissDlg    ΓöéCauses modal                  Γöé
  8198. Γöé                            Γöé                 ΓöéWinProcessSecondaryWindow or  Γöé
  8199. Γöé                            Γöé                 ΓöéWinSecondaryWindow calls to   Γöé
  8200. Γöé                            Γöé                 Γöéreturn.                       Γöé
  8201. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8202. ΓöéWinDestroySecondaryWindow   ΓöéWinDestroyWindow ΓöéDestroys a secondary window.  Γöé
  8203. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8204. ΓöéWinDefSecondaryWindowProc   ΓöéWinDefDlgProc    ΓöéProvides the default behavior Γöé
  8205. Γöé                            Γöé                 Γöéfor a secondary window. A     Γöé
  8206. Γöé                            Γöé                 Γöésecondary window procedure    Γöé
  8207. Γöé                            Γöé                 Γöémust reference this function  Γöé
  8208. Γöé                            Γöé                 Γöéfor messages that are not     Γöé
  8209. Γöé                            Γöé                 Γöéhandled explicitly.           Γöé
  8210. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8211. ΓöéWinCreateSecondaryWindow    ΓöéWinCreateDlg     ΓöéCreates a Secondary Window    Γöé
  8212. Γöé                            Γöé                 Γöéfrom a dialog template in the Γöé
  8213. Γöé                            Γöé                 Γöéapplication's executable file.Γöé
  8214. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8215. ΓöéWinSecondaryMessageBox      ΓöéWinMessageBox    ΓöéCreates a modal window that   Γöé
  8216. Γöé                            Γöé                 Γöécan be used to display error  Γöé
  8217. Γöé                            Γöé                 Γöémessages and ask questions.   Γöé
  8218. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8219. ΓöéWinQuerySecondaryHWND       ΓöéWinQueryWindow   ΓöéReturns either the handle to  Γöé
  8220. Γöé                            Γöé                 Γöéthe outer frame or inner      Γöé
  8221. Γöé                            Γöé                 Γöédialog window of a secondary  Γöé
  8222. Γöé                            Γöé                 Γöéwindow, depending on the      Γöé
  8223. Γöé                            Γöé                 Γöéhandle supplied as input.     Γöé
  8224. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8225. ΓöéWinDefaultSize              ΓöéNone             ΓöéSizes the dialog window to itsΓöé
  8226. Γöé                            Γöé                 Γöérecommended, optimal size.    Γöé
  8227. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8228. ΓöéWinInsertDefaultSize        ΓöéNone             ΓöéAdds the Default Size item to Γöé
  8229. Γöé                            Γöé                 Γöéthe system menu of a secondaryΓöé
  8230. Γöé                            Γöé                 Γöéwindow.                       Γöé
  8231. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8232.  
  8233.  
  8234. ΓòÉΓòÉΓòÉ 15.2.2. Creating a Secondary Window ΓòÉΓòÉΓòÉ
  8235.  
  8236. WinLoadSecondaryWindow and WinSecondaryWindow create secondary windows from 
  8237. dialog templates in a resource file. WinSecondaryWindow creates a modal window 
  8238. and supports the processing and destruction of the modal dialog window. 
  8239. WinSecondaryWindow is equivalent to the the following code sequence. 
  8240.  
  8241. hwndSW = WinLoadSecondaryWindow(...);
  8242. usResult = WinProcessSecondaryWindow(hwndSW);
  8243. WinDestroySecondaryWindow(hwndSW);
  8244.  
  8245. WinSecondaryWindow and WinProcessSecondaryWindow functions do not return until 
  8246. WinDismissSecondaryWindow is called. If your secondary window procedure handles 
  8247. WM_COMMAND messages, it must call WinDismissSecondaryWindow after calling the 
  8248. WinSecondaryWindow or the WinProcessSecondaryWindow function.  Optionally, your 
  8249. window procedure can pass WM_COMMAND messages to WinDefSecondaryWindowProc, 
  8250. which calls WinDismissSecondaryWindow. 
  8251.  
  8252. WinDismissSecondaryWindow hides the secondary window and returns a result code 
  8253. for a WM_COMMAND message, causing WinSecondaryWindow and 
  8254. WinProcessSecondaryWindow to return. For example, if the user selects the OK 
  8255. button, your window procedure passes the DID_OK code with 
  8256. WinDismissSecondaryWindow. Although the secondary window is hidden, it still 
  8257. exists. In the case of WinProcessSecondaryWindow, the window procedure must 
  8258. call WinDestroySecondaryWindow. Before WinSecondaryWindow returns, it destroys 
  8259. the secondary window. 
  8260.  
  8261.  
  8262. ΓòÉΓòÉΓòÉ 15.2.3. Modeless Secondary Window ΓòÉΓòÉΓòÉ
  8263.  
  8264. WinCreateSecondaryWindow or WinLoadSecondaryWindow can be used to create a 
  8265. modeless secondary window. WinCreateSecondaryWindow creates a secondary window 
  8266. from a dialog template that is stored in the application's executable file. 
  8267. WinLoadSecondaryWindow creates a secondary window from a dialog template that 
  8268. is stored in a dynamic link library. 
  8269.  
  8270. If the template is a resource in a dynamic link library, the application loads 
  8271. the dynamic link library by calling DosLoadModule, and then loads the dialog by 
  8272. calling WinLoadSecondaryWindow (or WinSecondaryWindow, which calls 
  8273. WinLoadSecondaryWindow). A WM_INITDLG message is sent to the secondary window 
  8274. procedure before WinLoadSecondaryWindow returns. 
  8275.  
  8276. #define INCL_SECONDARYWINDOW             /* Secondary window functions */
  8277. #include <sw.h>
  8278.  
  8279. PDLGTEMPLATE pdlgt;
  8280.  
  8281. DosGetResource (NULL, RT_DIALOG, ID_DIALOG, (PVOID) pdlgt);
  8282.  
  8283. WinCreateSecondaryWindow ( HWND_DESKTOP, /*  Parent window     */
  8284.                 NULL                     /*  Owner window      */
  8285.                 MyDlgProc                /*  Dialog procedure  */
  8286.                 pdlgt                    /*  Dialog template   */
  8287.                 NULL);                   /*  Create parameters */
  8288.  
  8289. If the template is a resource in the application's executable file, the 
  8290. application loads the resource by calling DosGetResource (as shown in the 
  8291. previous figure) and then uses the template with WinCreateSecondaryWindow to 
  8292. create a secondary window.  This method of using a dialog template gives the 
  8293. application the advantage of reviewing and modifying the template before 
  8294. creating the secondary window. 
  8295.  
  8296. The difference between a modal and a modeless secondary window is the way the 
  8297. windows handle input. For a modal secondary window, WinSecondaryWindow and 
  8298. WinProcessSecondaryWindow handle all user input to the window with an internal 
  8299. message loop and prevent access to other windows in the application. For a 
  8300. modeless secondary window, the application relies on a normal message loop to 
  8301. dispatch messages to the secondary window procedure and does not use 
  8302. WinSecondaryWindow or WinProcessSecondaryWindow. 
  8303.  
  8304.  
  8305. ΓòÉΓòÉΓòÉ 15.2.4. Secondary Window Message Box ΓòÉΓòÉΓòÉ
  8306.  
  8307. WinSecondaryMessageBox is analagous to WinMessageBox. Both functions create a 
  8308. modal message box that can be used to display error messages and ask questions. 
  8309.  
  8310. WinSecondaryMessageBox allows more flexibility than WinMessageBox, because you 
  8311. can define the text that appears on the buttons, rather than choosing from a 
  8312. set of standard buttons with predetermined text (OK, Cancel, and so forth). 
  8313. WinSecondaryMessageBox uses the SMBD and SMBINFO data structures, found in the 
  8314. SW.H file. 
  8315.  
  8316. The SMBD structure defines the button style, text and ID for each button 
  8317. included in the secondary message box: 
  8318.  
  8319.  typedef struct _SMBD {
  8320.     CHAR   achText[MAX_SMBDTEXT + 1]; /* Text of the button, */
  8321.                                          for example, "~Cancel". */
  8322.     ULONG  idButton;                  /* Button ID returned when user
  8323.                                          chooses button. */
  8324.     LONG   flStyle;                   /* Button style ORed with
  8325.                                          internal styles. */
  8326.  } SMBD;
  8327.  typedef SMBD * PSMBD;
  8328.  
  8329. The SMBINFO structure defines the icon used in the message box, specifies the 
  8330. number of buttons in the message box, and points to the array of button 
  8331. definitions. 
  8332.  
  8333.    typedef struct _SMBINFO {
  8334.       HPOINTER hIcon;         /* Icon handle                        */
  8335.       ULONG    cButtons;      /* Number of buttons                  */
  8336.       ULONG    flStyle;       /* Icon style flags (MB_ICONQUESTION) */
  8337.       HWND     hwndNotify;    /* Reserved                           */
  8338.       PSMBD    psmbd;         /* Array of button definitions        */
  8339.    } SMBINFO;
  8340.    typedef SMBINFO * PSMBINFO;
  8341.  
  8342.  
  8343. ΓòÉΓòÉΓòÉ 15.2.5. Adding Default Size to the System Menu ΓòÉΓòÉΓòÉ
  8344.  
  8345. The WinInsertDefaultSize adds the Default Size selection to the system menu of 
  8346. the secondary window.  This call should be made during the initialization of 
  8347. the secondary window. 
  8348.  
  8349. When the user selects Default Size from the system menu, an SC_DEFAULTSIZE 
  8350. system command is sent to the secondary window procedure, which calls 
  8351. WinDefaultSize to size the window to its optimal default size. 
  8352.  
  8353. #define INCL_SECONDARYWINDOW
  8354. #include <sw.h>
  8355.  
  8356. HWND hwndFrame
  8357.  
  8358. hwndFrame = WinLoadSecondaryWindow (HWND_DESKTOP, /* Parent window  */
  8359.                                     HWND_DESKTOP, /* Owner window   */
  8360.                                     MyDlgProc,    /* Dialog proc    */
  8361.                                     NULL,         /* Module handle  */
  8362.                                     ID_DIALOG,    /* Resource ID    */
  8363.                                     NULL);        /* Create params  */
  8364.  
  8365. WinInsertDefaultSize (hwndFrame, "~Default size"); /* Insert
  8366.                                                       menu item     */
  8367.  
  8368. WinDefaultSize (hwndFrame);          /* Set window to its
  8369.                                         default size                */
  8370.  
  8371.  
  8372. ΓòÉΓòÉΓòÉ 16. Multimedia I/O File Services ΓòÉΓòÉΓòÉ
  8373.  
  8374. The multimedia input/output (MMIO) file services are an extension of the base 
  8375. OS/2 file services.  Designed to be simple, fast, and flexible, MMIO functions 
  8376. enable an application to access and manipulate multimedia data files in a 
  8377. transparent manner. 
  8378.  
  8379. Multimedia files contain a variety of media elements such as images, graphics, 
  8380. digital audio and video.  These elements can be in different file formats:  for 
  8381. example, RIFF, M-Motion, and AVI.  Multimedia files can also be stored as 
  8382. memory files, elements of a compound file storage system, or as DOS files. 
  8383. MMIO provides a consistent programming interface so that an application can 
  8384. refer to these files, read and write data to the files, and query the contents 
  8385. of the files, while remaining independent of the underlying file formats or the 
  8386. storage systems that contain the files.  In addition, MMIO now enables 
  8387. compressors and decompressors (CODEC procedures) to operate on data objects. 
  8388. See CODEC Procedures for more a more detailed description of CODEC procedures. 
  8389.  
  8390.  
  8391. ΓòÉΓòÉΓòÉ 16.1. MMIO Architecture ΓòÉΓòÉΓòÉ
  8392.  
  8393. Because files services have unique characteristics, the architecture of MMIO is 
  8394. stand-alone and separate from the notion of the media control interface, 
  8395. although some media drivers and file system stream handlers still require file 
  8396. services from MMIO. 
  8397.  
  8398. When an application calls multimedia I/O functions, the MMIO Manager calls the 
  8399. appropriate I/O procedure (IOProc) if necessary, or processes the function 
  8400. within the MMIO Manager itself. The MMIO Manager uses IOProcs to direct the 
  8401. input and output associated with reading from and writing to different types of 
  8402. storage systems or file formats.  IOProcs provide an abstract of the file 
  8403. format, allowing operations such as read, write, and seek to be independent of 
  8404. the specific format in use.  The handler is responsible for translating a 
  8405. generic application request into the necessary format-specific operations. 
  8406.  
  8407. The MMIO architecture provides for CODEC procedures to operate on data objects 
  8408. as required.  A given file format I/O procedure might support none, one, or 
  8409. many CODEC procedures operating on a single format. 
  8410.  
  8411. The following figure illustrates the architecture of the MMIO subsystem. 
  8412.  
  8413.  
  8414.  
  8415.             ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8416.             Γöé            Γöé  Γöé   MEDIA    Γöé  Γöé   STREAM   Γöé
  8417.             ΓöéAPPLICATIONSΓöé  Γöé  DRIVERS   Γöé  Γöé   HANDLER  Γöé
  8418.             ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8419.                   Γöé               Γöé               Γöé
  8420.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8421.                                   
  8422.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8423.                     Γöé        MMIO MANAGER       Γöé
  8424.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8425.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     Γöé    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8426.        ΓöéFile Format IOProcs Γöé     Γöé    ΓöéFile Format IOProcs Γöé
  8427.        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé     Γöé    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé
  8428.        Γöé Γöé      WAVE     Γöé  Γöé     Γöé    Γöé Γöé  AVC image    Γöé  Γöé
  8429.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  8430.        Γöé Γöé    CLI VOC    Γöé  Γöé     Γöé    Γöé ΓöéM-Motion image Γöé  Γöé
  8431.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöñ Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  8432.        Γöé Γöé   AVC audio   Γöé  Γöé     Γöé    Γöé Γöé1.3 & 2.0 BMP  Γöé  Γöé
  8433.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  8434.        Γöé Γöé  RMID & MID   Γöé  Γöé     Γöé    Γöé Γöé RDIB & DIB    Γöé  Γöé
  8435.        Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé     Γöé    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé
  8436.        Γöé Γöé     AVI       Γöé  Γöé     Γöé    Γöé         .          Γöé
  8437.        Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé     Γöé    Γöé         .          Γöé
  8438.        Γöé                    Γöé     Γöé    Γöé         .          Γöé
  8439.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8440.                                   Γöé
  8441.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8442.        Γöé  Codec Procedures Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Codec Procedures Γöé
  8443.        Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé      Γöé     Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé
  8444.        Γöé Γöé  Ultimotion   Γöé Γöé      Γöé     Γöé Γöé     Others    Γöé Γöé
  8445.        Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé      Γöé     Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé
  8446.        ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8447. - - - - - - - - - - - - - - - - - Γöé - - - - - - - - - - - - - - -
  8448.                ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8449.                                                 
  8450.           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8451. System    Γöé   DOS    ΓöéΓöé  MEMORY  ΓöéΓöé COMPOUND ΓöéΓöé  OTHERS  Γöé
  8452. Storage   Γöé   FILE   ΓöéΓöé  FILE    ΓöéΓöé FILE     ΓöéΓöé          Γöé
  8453. IOProcs   ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  8454.                Γöé                       Γöé            Γöé      Ring 3
  8455. - - - - - - - -Γöé- - - - - - - - - - - -Γöé- - - - - - Γöé- - - - - - -
  8456.                                                         Ring 0
  8457.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8458.    Γöé                        File System                        Γöé
  8459.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8460.  
  8461.  
  8462. ΓòÉΓòÉΓòÉ 16.2. Installable I/O Procedures ΓòÉΓòÉΓòÉ
  8463.  
  8464. The MMIO Manager uses I/O procedures to direct the input and output associated 
  8465. with reading and writing to different types of storage systems or file formats. 
  8466. Applications and the MMIO subsystem communicate to IOProcs (DLL files) through 
  8467. the use of MMIO messages.  When MMIO receives a request from an application 
  8468. through a function call, messages are created by the MMIO Manager.  Next, MMIO 
  8469. sends a predefined message for that operation to the IOProc that supports that 
  8470. particular file format or storage system.  These messages are designed for 
  8471. efficient communications to all IOProcs.  The IOProcs, however, must be able to 
  8472. handle the messages sent by the MMIO Manager to be processed, or pass them on 
  8473. to a child I/O procedure. 
  8474.  
  8475.  
  8476. ΓòÉΓòÉΓòÉ 16.2.1. Types of I/O Procedures ΓòÉΓòÉΓòÉ
  8477.  
  8478. Two types of I/O procedures are as follows: 
  8479.  
  8480. Storage System IOProcs unwrap data objects such as RIFF files, compound RIFF 
  8481. files, or AVC files.  These IOProcs are ignorant to the content of the data 
  8482. they contain.  A storage system IOProc goes directly to the OS/2 (or native) 
  8483. file system (memory in the case of a MEM file) and does not pass information to 
  8484. any other file format or storage system IOProc.  The internal I/O procedures 
  8485. provided for DOS files, memory files, and RIFF compound files are examples of 
  8486. storage system IOProcs because they operate on the storage mechanism rather 
  8487. than the data content itself. See the table in the Internal Storage System 
  8488. Procedures section. 
  8489.  
  8490. File Format IOProcs manipulate multimedia data at the element level (not to be 
  8491. confused with an element of a RIFF compound file).  Each IOProc handles a 
  8492. different element type such as audio, image, or MIDI.  A file format IOProc 
  8493. handles the element type it was written for and does not rely on any other file 
  8494. format IOProcs to do any processing.  However, a file format IOProc might need 
  8495. to call a storage system IOProc to obtain data within a file containing 
  8496. multiple file elements.  For example, the MIDI IOProc calls MMIO functions to 
  8497. access data from other storage system IOProcs supported by MMIO. See the table 
  8498. in the File Format I/O Procedures Provided With OS/2 Multimedia section. 
  8499.  
  8500.  
  8501. ΓòÉΓòÉΓòÉ 16.2.2. Identifying an I/O Procedure ΓòÉΓòÉΓòÉ
  8502.  
  8503. Each file format is represented by a unique identifier called a four-character 
  8504. code (FOURCC).  A FOURCC is a 32-bit quantity representing a sequence of one to 
  8505. four ASCII alphanumeric characters (padded on the right with blank characters). 
  8506.  
  8507. Each IOProc supports a specific file format.  The file format and IOProc are 
  8508. represented by a specific FOURCC code.  This permits the FOURCC to be used as 
  8509. an ID value, rather than the string-name of the file format or a file name 
  8510. extension.  Their use is supported by a set of functions to pack or unpack 
  8511. FOURCC values from or to their component characters.  Examples of FOURCC values 
  8512. are: WAVE for RIFF waveform audio files, RMID for RIFF MIDI files, and AVCA for 
  8513. AVC audio files. 
  8514.  
  8515. Formats that support multiple media types require a different FOURCC for each 
  8516. variation.  This appears as a different IOProc for each media type.  For 
  8517. example, an Audio Visual Connection (AVC) program might have an IOProc to 
  8518. process image, an IOProc to process audio, and an IOProc to process MIDI.  You 
  8519. can, however, include more than one IOProc in a dynamic-link library (DLL) file 
  8520. by providing different entry points in the DLL file. 
  8521.  
  8522. The data type for a four-character code is FOURCC.  The mmioFOURCC function 
  8523. converts four characters to a four-character code as shown: 
  8524.  
  8525.             FOURCC   fccIOProc;
  8526.  
  8527.             fccIOProc = mmioFOURCC( 'A', 'V', 'C', 'A' ) ;
  8528.  
  8529. The mmioFOURCC function is called by the application and passed in subsequent 
  8530. MMIO calls to route the file to the correct IOProc. 
  8531.  
  8532. Note:  Another way to create a four-character code is to use the 
  8533.        mmioStringToFOURCC function, which converts a null-terminated string to 
  8534.        a four-character code.  The second parameter in mmioStringToFOURCC 
  8535.        specifies options for converting the string to a four-character code. 
  8536.        If you specify the MMIO_TOUPPER flag, mmioStringToFOURCC converts all 
  8537.        alphabetic characters in the string to uppercase. 
  8538.  
  8539.  
  8540. ΓòÉΓòÉΓòÉ 16.2.3. Internal Storage System Procedures ΓòÉΓòÉΓòÉ
  8541.  
  8542. The following table lists the MMIO services provided by internal I/O 
  8543. procedures: 
  8544.  
  8545. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8546. ΓöéIOProc            ΓöéDescription                         Γöé
  8547. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8548. ΓöéDOS               ΓöéHandles standard OS/2 disk files.   Γöé
  8549. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8550. ΓöéMEM (memory)      ΓöéManages memory files without        Γöé
  8551. Γöé                  Γöéaccessing the file system.          Γöé
  8552. Γöé                  ΓöéA memory file is a block of memory  Γöé
  8553. Γöé                  Γöéthat is perceived as a file to an   Γöé
  8554. Γöé                  Γöéapplication.  This unifies the      Γöé
  8555. Γöé                  Γöéinterface for applications that     Γöé
  8556. Γöé                  Γöéaccess both files and memory.       Γöé
  8557. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8558. ΓöéCF (compound file)ΓöéSupports the RIFF compound file     Γöé
  8559. Γöé                  Γöéformat.                             Γöé
  8560. Γöé                  ΓöéThe CF IOProc operates on a compoundΓöé
  8561. Γöé                  Γöéfile. The MMIO Manager provides     Γöé
  8562. Γöé                  Γöéservices to find, query, and access Γöé
  8563. Γöé                  Γöéfile elements in a compound file.   Γöé
  8564. Γöé                  ΓöéIt also supports the function of    Γöé
  8565. Γöé                  Γöéfile compaction.                    Γöé
  8566. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8567.  
  8568.  
  8569. ΓòÉΓòÉΓòÉ 16.2.4. File Format I/O Procedures Provided With OS/2 Multimedia ΓòÉΓòÉΓòÉ
  8570.  
  8571. The MMIO Manager calls a file format I/O procedure to handle I/O to files of a 
  8572. certain media type and format: for example, AVC or M-Motion files.  File format 
  8573. I/O procedures are available with the installation of OS/2 multimedia.  These 
  8574. I/O procedures are enabled for data and file format translation.  They provide 
  8575. conversion support for the Multimedia Data Converter program.  By installing 
  8576. file format I/O procedures, existing applications no longer need to store 
  8577. multiple copies of the same media file for running on various platforms using 
  8578. different file formats. 
  8579.  
  8580. The information in the following table serves as a guide to application 
  8581. developers who would like to access the functions that deal with particular 
  8582. file formats. OS/2 multimedia provides the following file format IOProcs, which 
  8583. can be used to access non-RIFF data and perform multimedia data conversions. 
  8584. Each I/O procedure can read or write format-specific data or standardized data. 
  8585.  
  8586. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8587. ΓöéIOProc     ΓöéFOURCCΓöéDescription                           ΓöéCommon    Γöé
  8588. Γöé           Γöé      Γöé                                      ΓöéExtension Γöé
  8589. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8590. ΓöéAIFF       ΓöéAIFF  ΓöéSupports AIFF waveform digital audio  Γöé.AIF      Γöé
  8591. Γöé           Γöé      Γöéfiles.                                Γöé          Γöé
  8592. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8593. ΓöéAVC Audio  ΓöéAVCA  ΓöéSupports IBM Audio Visual Connection  Γöé._AU, ._ADΓöé
  8594. Γöé           Γöé      Γöé(AVC) digital audio files of type     Γöé          Γöé
  8595. Γöé           Γöé      ΓöéADPCM and native ACPA formats.        Γöé          Γöé
  8596. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8597. ΓöéAVC Image  ΓöéAVCI  ΓöéSupports IBM Audio Visual Connection  Γöé._IM,     Γöé
  8598. Γöé           Γöé      Γöé(AVC) digital image files.            Γöé.!IM, ._IDΓöé
  8599. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8600. ΓöéAVI Movie  ΓöéAVI   ΓöéSupports audio/video interleaved (AVI)Γöé.AVI      Γöé
  8601. Γöé           Γöé      Γöémovie files.                          Γöé          Γöé
  8602. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8603. ΓöéCLI VOC    ΓöéVOC   ΓöéSupports Creative Technology Voice    Γöé.VOC      Γöé
  8604. Γöé           Γöé      Γöéfiles.                                Γöé          Γöé
  8605. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8606. ΓöéDIB        ΓöéWI30  ΓöéSupports device independent bitmap    Γöé.DIB      Γöé
  8607. Γöé           Γöé      Γöéimage files.                          Γöé          Γöé
  8608. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8609. ΓöéFLC/FLI    ΓöéFLIC  ΓöéSupports multi-track read requests    Γöé.FLC, .FLIΓöé
  8610. ΓöéAnimation  Γöé      Γöéfrom AutoDesk animation files.        Γöé          Γöé
  8611. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8612. ΓöéGIF        ΓöéGIFC  ΓöéSupports compressed GIF image files.  Γöé.GIF      Γöé
  8613. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8614. ΓöéJPEG Still ΓöéJPEG  ΓöéSupports translated read and write    Γöé.JPG      Γöé
  8615. ΓöéImage      Γöé      Γöéaccess to JPEG still image files.     Γöé          Γöé
  8616. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8617. ΓöéOS/2 1.3   ΓöéOS13  ΓöéSupports OS/2 1.3 and Windows 3.0     Γöé.BMP      Γöé
  8618. ΓöéBitmap     Γöé      Γöéuncompressed bitmap image files.      Γöé          Γöé
  8619. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8620. ΓöéOS/2 2.0   ΓöéOS20  ΓöéSupports OS/2 2.0 and Windows 3.0 1,  Γöé.BMP      Γöé
  8621. ΓöéBitmap     Γöé      Γöé4, 8-bit palettized and 24-bit RGB    Γöé          Γöé
  8622. Γöé           Γöé      Γöébitmap image files.                   Γöé          Γöé
  8623. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8624. ΓöéMIDI       ΓöéMIDI, ΓöéSupports MIDI files (format 0 and     Γöé.MID      Γöé
  8625. Γöé           ΓöéRMID  Γöéformat 1 data), in RIFF or non-RIFF   Γöé          Γöé
  8626. Γöé           Γöé      Γöéformat.                               Γöé          Γöé
  8627. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8628. ΓöéM-Motion   ΓöéMMOT  ΓöéSupports translated and untranslated  Γöé.VID      Γöé
  8629. ΓöéStill      Γöé      Γöéaccess to IBM M-Motion/M-Control YUV  Γöé          Γöé
  8630. Γöé           Γöé      Γöévideo still image files of type packedΓöé          Γöé
  8631. Γöé           Γöé      Γöé12-bit YUV data.                      Γöé          Γöé
  8632. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8633. ΓöéMPEG-1     ΓöéMPEG  ΓöéSupports multi-track read requests    Γöé.MPG      Γöé
  8634. ΓöéMovie      Γöé      Γöéfrom an MPEG-1 movie file.            Γöé          Γöé
  8635. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8636. ΓöéPCX        ΓöéPCXC  ΓöéSupports compressed PCX image files.  Γöé.PCX      Γöé
  8637. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8638. ΓöéPhotoCD    ΓöéPCD   ΓöéSupports translated read-only access  Γöé.PCD      Γöé
  8639. Γöé           Γöé      Γöéto PhotoCD image files.               Γöé          Γöé
  8640. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8641. ΓöéRIFF DIB   ΓöéRDIB  ΓöéSupports RIFF device independent      Γöé.RDI      Γöé
  8642. Γöé           Γöé      Γöébitmap image files.                   Γöé          Γöé
  8643. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8644. ΓöéRIFF       ΓöéWAVE  ΓöéSupports RIFF waveform digital audio  Γöé.WAV      Γöé
  8645. ΓöéWaveform   Γöé      Γöéfiles, including PCM, IBM ADPCM, IBM  Γöé          Γöé
  8646. Γöé           Γöé      ΓöéMu-Law, and A-Law.                    Γöé          Γöé
  8647. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8648. ΓöéTARGA      ΓöéTGAU, ΓöéSupports uncompressed and compressed  Γöé.TGA      Γöé
  8649. Γöé           ΓöéTGAC  ΓöéTARGA image files.                    Γöé          Γöé
  8650. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8651. ΓöéTIFF       ΓöéTFIU, ΓöéSupports compressed and uncompressed  Γöé.TIF      Γöé
  8652. Γöé           ΓöéTFIC, ΓöéIntel or Motorola TIFF image files andΓöé          Γöé
  8653. Γöé           ΓöéTFMU, Γöécompressed TIFF FAX image files.      Γöé          Γöé
  8654. Γöé           ΓöéTFMC, Γöé                                      Γöé          Γöé
  8655. Γöé           ΓöéTFFC  Γöé                                      Γöé          Γöé
  8656. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8657. ΓöéUNIX SND   ΓöéSND   ΓöéSupports UNIX (NeXT/Sun) SND digital  Γöé.SND      Γöé
  8658. Γöé           Γöé      Γöéaudio files.                          Γöé          Γöé
  8659. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8660.  
  8661.  
  8662. ΓòÉΓòÉΓòÉ 16.2.5. Installing an I/O Procedure ΓòÉΓòÉΓòÉ
  8663.  
  8664. Certain factors must be considered when installing an IOProc; for example, the 
  8665. number of processes that use the IOProc might help you decide which method you 
  8666. use to install an IOProc.  Depending on the requirements of your application, 
  8667. you can choose to install an IOProc on a temporary, semipermanent, or permanent 
  8668. basis. 
  8669.  
  8670. The following MMIO functions allow you to install an IOProc: 
  8671.  
  8672. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8673. ΓöéFunction                      ΓöéDescription                   Γöé
  8674. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8675. ΓöémmioOpen                      ΓöéTemporarily installs an I/O   Γöé
  8676. Γöé                              Γöéprocedure.                    Γöé
  8677. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8678. ΓöémmioInstallIOProc             ΓöéAdds, replaces, finds, or     Γöé
  8679. Γöé                              Γöéremoves an entry in the MMIO  Γöé
  8680. Γöé                              ΓöéIOProc table.                 Γöé
  8681. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8682. ΓöémmioIniFileHandler            ΓöéAdds, replaces, finds, or     Γöé
  8683. Γöé                              Γöéremoves an entry in the       Γöé
  8684. Γöé                              Γöéinitialization file           Γöé
  8685. Γöé                              Γöé(MMPMMMIO.INI).               Γöé
  8686. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8687.  
  8688. Temporary Installation Using mmioOpen 
  8689.  
  8690. You can temporarily install an I/O procedure using mmioOpen.  In this case, the 
  8691. IOProc is only used when a file opened by the MMIO Manager does not install the 
  8692. IOProc in the I/O procedure table. 
  8693.  
  8694. To specify an I/O procedure when you open a file using mmioOpen, use the 
  8695. pmmioinfo parameter to reference an MMIOINFO structure as follows: 
  8696.  
  8697.    1. Load the DLL using the DosLoadModule and DosQueryProcAddr functions to 
  8698.       install and obtain the procedure address of the IOProc as shown in the 
  8699.       following code fragment. 
  8700.  
  8701.             strcpy( acMMIOProcName,
  8702.                     acStringBuffer[ IDS_MMIO_INSTALLPROC_NAME - 1 ] );
  8703.  
  8704.             ldosAPIRc =
  8705.               DosLoadModule(
  8706.                &acFailureNameBuffer[ 0 ],    /* Object name if failure occurs.  */
  8707.                FILE_NAME_SIZE,               /* Size of the name buffer.        */
  8708.                acStringBuffer[ IDS_MMIO_INSTALLPROC_DLL_NAME - 1 ], /* DLL Name.*/
  8709.                &hmModHandle );               /* Handle to the module.           */
  8710.                  .
  8711.                  .
  8712.                  .
  8713.  
  8714.             ldosAPIRc =
  8715.               DosQueryProcAddr(
  8716.                hmModHandle,                /* Handle to the DLL module.         */
  8717.                (ULONG) NULL,               /* NULL gives the entry point.       */
  8718.                acMMIOProcName,             /* Name of the Installable procedure.*/
  8719.                (PFN *) &pmmioprocIoProc ); /* Pointer to the Installable proc.  */
  8720.  
  8721.    2. In the MMIOINFO structure passed to mmioOpen, store the procedure address 
  8722.       of the IOProc type in the pIOProc field.  Set the fccIOProc field to 
  8723.       NULL. 
  8724.  
  8725.    3. Call mmioOpen to use the IOProc with a file, passing the MMIOINFO 
  8726.       structure in as the second parameter.  This sends a MMIOM_OPEN message to 
  8727.       the temporary IOProc.  (Note that this does not make the IOProc available 
  8728.       for use with other files.) 
  8729.  
  8730.    4. Set all other fields to 0 (unless you are opening a memory file, or 
  8731.       directly reading or writing to the file I/O buffer). 
  8732.  
  8733.  This strategy allows a file format IOProc to replace a default IOProc (such as 
  8734.  the DOS IOProc), simply by using the address of a replacement custom routine. 
  8735.  
  8736.  Semipermanent Installation Using mmioInstallIOProc 
  8737.  
  8738.  You can install an IOProc during run-time from your application. This method 
  8739.  is semipermanent because the IOProc can only be called while the process is 
  8740.  active.  When the process terminates, it is removed from the IOProc table. 
  8741.  Once the DLL is removed from memory, the next loading of the MMIO DLL does not 
  8742.  load this IOProc.  Because this IOProc is installed by specifically calling 
  8743.  mmioInstallIOProc, as shown in the following figure, the IOProc is available 
  8744.  for any files opened within that process. 
  8745.  
  8746.   PMMIOPROC  pmmioprocSpecialIOProc; /* Pointer once IOProc
  8747.                                         is installed.       */
  8748.  
  8749.  
  8750.    pmmioprocSpecialIOProc =
  8751.      mmioInstallIOProc(
  8752.       fccIOProc,          /* The identifier (FOURCC) of the procedure.*/
  8753.       pmmioprocIoProc,    /* Pointer to the installable procedure.    */
  8754.       MMIO_INSTALLPROC ); /* Flag to install the procedure.           */
  8755.  
  8756.  The mmioInstallIOProc function maintains a separate list of installed I/O 
  8757.  procedures for each OS/2 application that uses MMIO.  This allows different 
  8758.  applications to use the same I/O procedure identifier for different I/O 
  8759.  procedures without causing conflict.  When you install an I/O procedure using 
  8760.  mmioInstallIOProc, the procedure remains installed until you remove it.  The 
  8761.  mmioInstallIOProc function does not prevent an application from installing two 
  8762.  different I/O procedures with the same identifier, or installing an I/O 
  8763.  procedure with the same identifier as a internal I/O procedure (DOS, MEM, or 
  8764.  CF).  When mmioInstallIOProc is called with the MMIO_REMOVEPROC flag set, as 
  8765.  shown in the following code fragment, the most recently installed procedure is 
  8766.  the first one to be removed. 
  8767.  
  8768.   PMMIOPROC  pmmioprocSpecialIOProc; /* Pointer once IOProc
  8769.                                         is installed.               */
  8770.  
  8771.    pmmioprocSpecialIOProc =
  8772.      mmioInstallIOProc(
  8773.        fccIOProc,               /* The identifier of the procedure. */
  8774.        pmmioprocIoProc,         /* Pointer to the Installable proc. */
  8775.        MMIO_REMOVEPROC );       /* Flag to deinstall the proc.      */
  8776.  
  8777.  Permanent Installation Using mmioIniFileHandler 
  8778.  
  8779.  You can permanently install an IOProc in your system by identifying the IOProc 
  8780.  in the initialization file (MMPMMMIO.INI) when you start your system.  This 
  8781.  method allows the IOProc to be used by any process because it is installed in 
  8782.  the IOProc table for every process (like the internal I/O procedures). 
  8783.  Therefore, a call to mmioInstallIOProc is not necessary every time the IOProc 
  8784.  is needed. 
  8785.  
  8786.  The advantage of installing I/O procedures in the MMPMMMIO.INI file is to 
  8787.  achieve application transparency; I/O procedures become built-in as soon as 
  8788.  you restart your system.  Note that the IOProc must be contained in a DLL 
  8789.  file, although more than one IOProc can be contained in the DLL if necessary. 
  8790.  
  8791.  To permanently install an IOProc, an IOProc entry is added to the MMPMMMIO.INI 
  8792.  file.  This is accomplished by either writing an INI change control file or 
  8793.  writing an application using the mmioIniFileHandler function with the 
  8794.  MMIO_INSTALLPROC specified.  The IOProc is installed in the IOProc table ahead 
  8795.  of the MMIO default IOProcs (DOS, MEM, and CF). 
  8796.  
  8797.  The following code fragment is an example of how an application uses the 
  8798.  mmioIniFileHandler function to permanently install the OS/2 1.3 PM bitmap 
  8799.  image IOProc. 
  8800.  
  8801.   #define FOURCC_OS13   mmioFOURCC( 'O', 'S', '1', '3' )
  8802.  
  8803.   #pragma linkage( mmioIniFileHandler, system )
  8804.  
  8805.   void main ()
  8806.   {
  8807.    ULONG   ul;
  8808.    MMINIFILEINFO  mminifileinfo;
  8809.    mminifileinfo.fccIOProc = FOURCC_OS13;
  8810.    strcpy (mminifileinfo.szDLLName, "OS13PROC");
  8811.    strcpy (mminifileinfo.szProcName, "OS13BITMAPIOPROC");
  8812.    mminifileinfo.ulExtendLen = 16L;
  8813.    mminifileinfo.ulFlags = 0L;
  8814.    mminifileinfo.ulMediaType = MMIO_MEDIA_IMAGE;
  8815.    mminifileinfo.ulIOProcType = MMIO_IOPROC_FILEFORMAT;
  8816.    strcpy (mmioinifileinfo.szDefExt, "");
  8817.  
  8818.    printf ("Installing OS/2 PM Bitmap (V1.3) IOProc\n");
  8819.  
  8820.    rc = mmioIniFileHandler (&mminifileinfo, MMIO_INSTALLPROC);
  8821.    switch (rc)
  8822.    {
  8823.    case MMIO_SUCCESS:
  8824.     printf ("Installing Complete\n");
  8825.     break;
  8826.    case MMIOERR_INVALID_PARAMETER:
  8827.     printf ("Error in this install program\n");
  8828.     break;
  8829.    case MMIOERR_INTERNAL_SYSTEM:
  8830.     printf ("OS/2 MPM System Error\n");
  8831.     break;
  8832.    case MMIOERR_NO_CORE:
  8833.     printf ("Memory unavailable for this IOProc\n");
  8834.     break;
  8835.    case MMIOERR_INI_OPEN:
  8836.     printf ("Unable to access the OS/2 MMPMMMIO.INI file\n");
  8837.     break;
  8838.    case MMIOERR_INVALID_FILENAME:
  8839.     printf ("Cannot find the file : OS13PROC.DLL\n");
  8840.     break;
  8841.    default:
  8842.     printf ("Unknown error attempting to install OS/2 Bitmap V(1.3)\n");
  8843.     break;
  8844.    }
  8845.   }
  8846.  
  8847.  
  8848. ΓòÉΓòÉΓòÉ 16.3. CODEC Procedures ΓòÉΓòÉΓòÉ
  8849.  
  8850. CODEC procedures are similar to I/O procedures (IOProcs). They are dynamic-link 
  8851. library (DLL) routines that operate on data within a file or buffer.  Based on 
  8852. the data content, a particular CODEC procedure is loaded typically by a file 
  8853. format IOProc to either compress or decompress the data 
  8854.  
  8855. OS/2 multimedia currently supports image and digital video CODECs. The 
  8856. following table describes the video CODEC procedures provided with OS/2 
  8857. multimedia. 
  8858.  
  8859. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8860. ΓöéCODEC     ΓöéFormat        ΓöéFOURCC                ΓöéDescription               Γöé
  8861. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8862. ΓöéULDC      ΓöéUltimotion    ΓöéULTI                  ΓöéDecompressor              Γöé
  8863. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8864. ΓöéINDEO     ΓöéIndeo 2.1     Γöért21/RT21             ΓöéCompressor/Decompressor   Γöé
  8865. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8866. ΓöéINDDEC32  ΓöéIndeo 3.1/3.2 Γöéiv31/IV31/iv32/IV32   ΓöéDecompressor              Γöé
  8867. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8868. ΓöéULCORT    ΓöéUltimotion    ΓöéULTI                  ΓöéReal-time compressor      Γöé
  8869. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8870. ΓöéULCOASYM  ΓöéUltimotion    ΓöéULTI                  ΓöéFrame-step compressor     Γöé
  8871. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8872. ΓöéINDRTR31  ΓöéIndeo 3.1     ΓöéIV31                  ΓöéReal-time compressor      Γöé
  8873. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8874. ΓöéINDFSR31  ΓöéIndeo 3.1     ΓöéIV31                  ΓöéFrame-step compressor     Γöé
  8875. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8876. ΓöéMONDO     ΓöéUncompressed  ΓöéDIB                   ΓöéSupports SW               Γöé
  8877. Γöé          Γöé              Γöé                      Γöémonitor/RGB16-YUV411      Γöé
  8878. Γöé          Γöé              Γöé                      Γöéplayback                  Γöé
  8879. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8880. ΓöéAUTOPROC  ΓöéFLI/FLC       Γöéflic                  ΓöéSupports AutoDesk AnimatorΓöé
  8881. Γöé          Γöé              Γöé                      Γöéplayback                  Γöé
  8882. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8883. ΓöéMPGDC     ΓöéMPEG          ΓöéMPEG                  ΓöéMPEG hardware interface   Γöé
  8884. Γöé          Γöé              Γöé                      ΓöéCODEC                     Γöé
  8885. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8886.  
  8887. OS/2 multimedia also provides a set of audio CODECs; however, there is no 
  8888. public interface to install new audio CODECs or to interface to audio CODECs 
  8889. directly. 
  8890.  
  8891. The following table describes the audio CODEC procedures used internally within 
  8892. OS/2 multimedia for playing files that contain compressed audio. 
  8893.  
  8894. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8895. ΓöéCODEC     ΓöéFormat        ΓöéFormat TagΓöéComp.  ΓöéDecomp.ΓöéDescription               Γöé
  8896. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8897. ΓöéIMAADPCM  ΓöéMS ADPCM      Γöé2         ΓöéX      ΓöéX      ΓöéCompression is not        Γöé
  8898. Γöé          Γöé              Γöé          Γöé       Γöé       Γöéreal-time                 Γöé
  8899. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8900. ΓöéIMAADPCM  ΓöéIMA ADPCM     Γöé17        ΓöéX      ΓöéX      ΓöéReal-time compression     Γöé
  8901. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8902.  
  8903.  
  8904. ΓòÉΓòÉΓòÉ 16.3.1. CODEC Functions, Messages, and Data Structures ΓòÉΓòÉΓòÉ
  8905.  
  8906. There are enough differences between CODEC procedures and I/O procedures that 
  8907. several additional functions and messages are needed for CODEC processing. Both 
  8908. applications and I/O procedures can call these CODEC functions and messages. 
  8909.  
  8910. The MMIO subsystem supports the CODEC functions listed in the following table. 
  8911.  
  8912. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8913. ΓöéFunction                 ΓöéDescription                                  Γöé
  8914. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8915. ΓöémmioIniFileCODEC         ΓöéAdds, replaces, removes, or finds a CODEC    Γöé
  8916. Γöé                         Γöéentry in the MMPMMMIO.INI file.              Γöé
  8917. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8918. ΓöémmioQueryCODECName       ΓöéQueries the ID string of a CODEC procedure.  Γöé
  8919. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8920. ΓöémmioQueryCODECNameLength ΓöéQueries the length of a CODEC procedure ID   Γöé
  8921. Γöé                         Γöéstring.                                      Γöé
  8922. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8923. ΓöémmioLoadCODECProc        ΓöéLoads the CODEC procedure and returns the    Γöé
  8924. Γöé                         Γöéentry point.                                 Γöé
  8925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8926. ΓöémmioSet                  ΓöéSets or queries extended file information.   Γöé
  8927. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8928. The messages listed in the following table are supported by I/O procedures. 
  8929.  
  8930. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8931. ΓöéMessage                   ΓöéDescription                                 Γöé
  8932. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8933. ΓöéMMIOM_COMPRESS            ΓöéSent to an IOProc to compress data.         Γöé
  8934. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8935. ΓöéMMIOM_DECOMPRESS          ΓöéSent to an IOProc to decompress data.       Γöé
  8936. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8937. ΓöéMMIOM_MULTITRACKREAD      ΓöéSent to an IOProc to read multi-track data  Γöé
  8938. Γöé                          Γöéfrom a file.                                Γöé
  8939. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8940. ΓöéMMIOM_MULTITRACKWRITE     ΓöéSent to an IOProc to writes multi-track dataΓöé
  8941. Γöé                          Γöéto a file.                                  Γöé
  8942. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8943. ΓöéMMIOM_SET                 ΓöéSets and queries CODEC attributes of the    Γöé
  8944. Γöé                          ΓöéCODEC procedure.                            Γöé
  8945. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8946. The messages listed in the following table are supported by CODEC procedures. 
  8947.  
  8948. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8949. ΓöéMessage                            ΓöéDescription                        Γöé
  8950. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8951. ΓöéMMIOM_CODEC_OPEN                   ΓöéOpens a CODEC instance.            Γöé
  8952. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8953. ΓöéMMIOM_CODEC_CLOSE                  ΓöéCloses a CODEC instance.           Γöé
  8954. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8955. ΓöéMMIOM_CODEC_QUERYNAME              ΓöéQueries the CODEC procedure ID     Γöé
  8956. Γöé                                   Γöéstring.                            Γöé
  8957. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8958. ΓöéMMIOM_CODEC_QUERYNAMELENGTH        ΓöéQueries the length of the CODEC    Γöé
  8959. Γöé                                   Γöéprocedure ID string.               Γöé
  8960. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8961. ΓöéMMIOM_CODEC_COMPRESS               ΓöéCompresses data.                   Γöé
  8962. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8963. ΓöéMMIOM_CODEC_DECOMPRESS             ΓöéDecompresses data.                 Γöé
  8964. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8965. The data structures listed in the following table are supported by I/O 
  8966. procedures and CODEC procedures. The CODEC.H and MMIOOS2.H header files define 
  8967. these data structures. Include the CODEC.H and MMIOOS2.H header files and 
  8968. define INCL_MMIO_CODEC in any source that uses CODEC functions. 
  8969.  
  8970. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  8971. ΓöéData Structure           ΓöéDescription                                  Γöé
  8972. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8973. ΓöéMMEXTENDINFO             ΓöéUsed by mmioSet and MMIOM_SET.               Γöé
  8974. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8975. ΓöéMMMULTITRACKREAD         ΓöéUsed by MMIOM_MULTITRACKREAD.                Γöé
  8976. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8977. ΓöéMMMULTITRACKWRITE        ΓöéUsed by MMIOM_MULTITRACKWRITE.               Γöé
  8978. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8979. ΓöéMMMOVIEHEADER            ΓöéStandard presentation movie header.          Γöé
  8980. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8981. ΓöéMMVIDEOHEADER            ΓöéStandard presentation video header.          Γöé
  8982. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8983. ΓöéMMVIDEOOPEN              ΓöéUsed by MMIOM_OPEN.                          Γöé
  8984. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8985. ΓöéMMCOMPRESS               ΓöéUsed by MMIOM_CODEC_COMPRESS and             Γöé
  8986. Γöé                         ΓöéMMIOM_COMPRESS.                              Γöé
  8987. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8988. ΓöéMMDECOMPRESS             ΓöéUsed by MMIOM_CODEC_DECOMPRESS and           Γöé
  8989. Γöé                         ΓöéMMIOM_DECOMPRESS.                            Γöé
  8990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8991. ΓöéCODECVIDEOHEADER         ΓöéUsed by MMIOM_CODEC_OPEN.                    Γöé
  8992. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8993. ΓöéCODECOPEN                ΓöéUsed by MMIOM_CODEC_OPEN.                    Γöé
  8994. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  8995. ΓöéCODECINIFILEINFO         ΓöéUsed by mmioIniFileCODEC.                    Γöé
  8996. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  8997.  
  8998.  
  8999. ΓòÉΓòÉΓòÉ 16.3.2. Installing a CODEC Procedure ΓòÉΓòÉΓòÉ
  9000.  
  9001. Unlike I/O procedures that have several methods of installation, CODEC 
  9002. procedures are installed by registering them in the MMPMMMIO.INI file using the 
  9003. mmioIniFileCODEC function.  Once registered in the MMPMMMIO.INI file, queries 
  9004. can be made on CODEC properties associated with the file format of the opened 
  9005. file.  A particular CODEC procedure can be associated with different file 
  9006. formats.  A separate entry is required for each different file format a CODEC 
  9007. procedure supports.  Allowing CODEC procedures to be queried and dynamically 
  9008. loaded based on the data content alleviates the need to statically load CODEC 
  9009. procedures with the file format IOProc, or hard code DLL names with the IOProc. 
  9010. The following code fragment shows how to install a CODEC procedure using 
  9011. mmioIniFileCODEC. 
  9012.  
  9013.  
  9014.  CODECINIFILEINFO codecIniFileInfo;
  9015.  ULONG ulFlags = 0L;
  9016.  ULONG rc;
  9017.        .
  9018.        .
  9019.        .
  9020.  memset( &codecIniFileInfo, '\0', sizeof(CODECINIFILEINFO) );
  9021.  codecIniFileInfo.ulStructLen = sizeof(CODECINIFILEINFO);
  9022.  codecIniFileInfo.fcc = FOURCC_MYPROC;
  9023.  codecIniFileInfo.ulCompressType = COMPRESSTYPE_MYPROC;
  9024.  codecIniFileInfo.ulCompressSubType = COMPRESSSUBTYPE_MYPROC;
  9025.  codecIniFileInfo.ulMediaType = MEDIATYPE_MYPROC;
  9026.  codecIniFileInfo.ulCapsFlags = CODEC_DECOMPRESS;
  9027.  codecIniFileInfo.ulFlags = 0;
  9028.  codecIniFileInfo.szHWID = HWID_MYPROC;
  9029.  codecIniFileInfo.ulMaxSrcBufLen = MAXBUFLEN_MYPROC;
  9030.  codecIniFileInfo.ulSyncMethod = 1;
  9031.  codecIniFileInfo.ulReserved1 = 0;
  9032.  codecIniFileInfo.ulXalignment = XALIGNMENT_MYPROC;
  9033.  codecIniFileInfo.ulYalignment = YALIGNMENT_MYPROC;
  9034.  strncpy( codecIniFileInfo.szDLLName, "MYPROC.DLL", DLLNAME_SIZE );
  9035.  strncpy( codecIniFileInfo.szProcName, "MyCODECProc", PROCNAME_SIZE );
  9036.  ulFlags = MMIO_INSTALLPROC | MMIO_MATCHCOMPRESSTYPE |
  9037.            MMIO_MATCHCOMPRESSSUBTYPE |
  9038.            MMIO_MATCHCAPSFLAGS | MMIO_MATCHHWID;
  9039.  
  9040.  rc = mmioIniFileCODEC( &codecIniFileInfo,
  9041.                          ulFlags);
  9042.  if (rc)
  9043.    /* error */
  9044.  else
  9045.        .
  9046.        .
  9047.        .
  9048.  
  9049.  
  9050. ΓòÉΓòÉΓòÉ 16.4. MMIO Data Structures ΓòÉΓòÉΓòÉ
  9051.  
  9052. The MMIOOS2.H header file, supplied with the Toolkit, defines data structures 
  9053. used in passing information between an application and MMIO file services. 
  9054. Include the MMIOOS2.H file in any source that uses multimedia file I/O 
  9055. functions.  Also include the main header file, OS2.H, which contains a 
  9056. declaration statement for the MMIOOS2.H file.  The MMIOOS2.H file defines MMIO 
  9057. data structures listed in the following table. 
  9058.  
  9059. Note:  The MMMIDIHEADER data structure is defined in the MIDIOS2.H file. 
  9060.  
  9061.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9062.   ΓöéData Structure  ΓöéDescription                                  Γöé
  9063.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9064.   ΓöéMMAUDIOHEADER   ΓöéContains descriptive information about a     Γöé
  9065.   Γöé                Γöédigital audio element (such as the sample    Γöé
  9066.   Γöé                Γöérate, bits per sample, and so forth).        Γöé
  9067.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9068.   ΓöéMMCFINFO        ΓöéContains information about a RIFF compound   Γöé
  9069.   Γöé                Γöéfile.                                        Γöé
  9070.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9071.   ΓöéMMCKINFO        ΓöéContains information about a chunk in a RIFF Γöé
  9072.   Γöé                Γöéfile.                                        Γöé
  9073.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9074.   ΓöéMMCTOCENTRY     ΓöéContains information about an entry in the   Γöé
  9075.   Γöé                Γöécompound file table of contents (CTOC) of a  Γöé
  9076.   Γöé                ΓöéRIFF compound file.                          Γöé
  9077.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9078.   ΓöéMMFORMATINFO    ΓöéContains information about the format of a   Γöé
  9079.   Γöé                Γöéfile or file element.                        Γöé
  9080.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9081.   ΓöéMMIMAGEHEADER   ΓöéContains descriptive information about an    Γöé
  9082.   Γöé                Γöéimage (such as the size, color type and      Γöé
  9083.   Γöé                Γöéextent, palette information, and so forth).  Γöé
  9084.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9085.   ΓöéMMINIFILEINFO   ΓöéContains information about the MMPMMMIO.INI  Γöé
  9086.   Γöé                Γöéfile.                                        Γöé
  9087.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9088.   ΓöéMMIOINFO        ΓöéDescribes the current state of an open file. Γöé
  9089.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9090.   ΓöéMMMIDIHEADER    ΓöéContains descriptive information about a MIDIΓöé
  9091.   Γöé                Γöéfile.                                        Γöé
  9092.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9093.  
  9094.  Note:  Initialize all fields in MMIO data structures that are not used in a 
  9095.         given function to NULL.  In addition, set unused flags and bits in 
  9096.         flags that are not used to 0. 
  9097.  
  9098.  
  9099. ΓòÉΓòÉΓòÉ 16.5. Basic I/O Functions ΓòÉΓòÉΓòÉ
  9100.  
  9101. The following MMIO functions enable applications to manage basic multimedia 
  9102. file I/O operations.  These functions, together with media independent 
  9103. operations, provide applications independence from a specific media type. 
  9104. Basic multimedia file I/O services are shown in the following table. 
  9105.  
  9106. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9107. ΓöéFunction       ΓöéDescription                                  Γöé
  9108. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9109. ΓöémmioOpen       ΓöéOpens or creates a file for reading, writing,Γöé
  9110. Γöé               Γöéor both.                                     Γöé
  9111. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9112. ΓöémmioRead       ΓöéReads a specified number of bytes from an    Γöé
  9113. Γöé               Γöéopen file.                                   Γöé
  9114. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9115. ΓöémmioWrite      ΓöéWrites a specified number of bytes to an openΓöé
  9116. Γöé               Γöéfile.                                        Γöé
  9117. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9118. ΓöémmioSeek       ΓöéChanges the current position for reading,    Γöé
  9119. Γöé               Γöéwriting, or both in an open file.            Γöé
  9120. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9121. ΓöémmioClose      ΓöéCloses an open file.                         Γöé
  9122. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9123.  
  9124.  
  9125. ΓòÉΓòÉΓòÉ 16.5.1. Opening or Creating a File ΓòÉΓòÉΓòÉ
  9126.  
  9127. To perform I/O operations on a new or existing file, an application must first 
  9128. establish a connection by calling the mmioOpen function.  This returns a file 
  9129. handle, which identifies the open file when calling other file I/O functions. 
  9130. Specify the pmmioinfo parameter to identify a pointer to a caller-provided 
  9131. MMIOINFO block containing extra parameters used by mmioOpen.  pmmioinfo may be 
  9132. NULL if the default values of the fields of pmmioinfo are sufficient.  By 
  9133. specifying an MMIOINFO structure, you can open a memory file, specify a file 
  9134. format I/O procedure, supply a buffer, or specify data transfers in a standard 
  9135. presentation format.  For basic file I/O services, set pmmioinfo to NULL.  For 
  9136. example, the following code sample shows how to open a data file without a 
  9137. buffer. 
  9138.  
  9139. hmmio = mmioOpen("filename.ext", NULL, 0);
  9140.  
  9141. Basic options for mmioOpen are shown in the following table. 
  9142.  
  9143. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9144. ΓöéFlag                          ΓöéDescription                   Γöé
  9145. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9146. ΓöéMMIO_ALLOCBUF                 ΓöéSystem allocates an internal  Γöé
  9147. Γöé                              ΓöéI/O buffer.                   Γöé
  9148. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9149. ΓöéMMIO_APPEND                   ΓöéAllows appending to the end ofΓöé
  9150. Γöé                              Γöéa file.                       Γöé
  9151. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9152. ΓöéMMIO_BUFSHARED                ΓöéUses shared memory if MMIO    Γöé
  9153. Γöé                              Γöéallocates an I/O buffer.      Γöé
  9154. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9155. ΓöéMMIO_CREATE                   ΓöéCreates a new file.           Γöé
  9156. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9157. ΓöéMMIO_DELETE                   ΓöéDeletes the file if it alreadyΓöé
  9158. Γöé                              Γöéexists.                       Γöé
  9159. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9160. ΓöéMMIO_NOIDENTIFY               ΓöéDoes not attempt to identify  Γöé
  9161. Γöé                              Γöéthe file type.                Γöé
  9162. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9163. ΓöéMMIO_READ                     ΓöéOpens a file for reading only Γöé
  9164. Γöé                              Γöé(default).                    Γöé
  9165. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9166. ΓöéMMIO_READWRITE                ΓöéOpens a file for both reading Γöé
  9167. Γöé                              Γöéand writing.                  Γöé
  9168. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9169. ΓöéMMIO_VERTBAR                  ΓöéUses the vertical bar         Γöé
  9170. Γöé                              Γöécharacter (|) as a file       Γöé
  9171. Γöé                              Γöéseparator character rather    Γöé
  9172. Γöé                              Γöéthan the plus sign (+).       Γöé
  9173. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9174. ΓöéMMIO_WRITE                    ΓöéOpens a file for writing only.Γöé
  9175. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9176.  
  9177. The following example creates a new file named NEW.TXT and opens it for 
  9178. writing: 
  9179.  
  9180. hmmio = mmioOpen("NEW.TXT", NULL, MMIO_CREATE | MMIO_WRITE);
  9181.  
  9182. You can also use mmioOpen to specify sharing options for data files.  These 
  9183. options enable DOS files to be opened and accessed by more than one process, 
  9184. allowing an application to take advantage of the multi-processing feature of 
  9185. the OS/2 operating system. 
  9186.  
  9187. Sharing options for data files are shown in the following table. 
  9188.  
  9189. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9190. ΓöéFlag           ΓöéDescription                                  Γöé
  9191. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9192. ΓöéMMIO_DENYNONE  ΓöéOpens a file without denying other processes Γöé
  9193. Γöé               Γöéread or write access to the file.            Γöé
  9194. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9195. ΓöéMMIO_DENYREAD  ΓöéOpens a file and denies other processes read Γöé
  9196. Γöé               Γöéaccess to the file.                          Γöé
  9197. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9198. ΓöéMMIO_DENYWRITE ΓöéOpens a file and denies other processes writeΓöé
  9199. Γöé               Γöéaccess to the file.                          Γöé
  9200. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9201. ΓöéMMIO_EXCLUSIVE ΓöéOpens a file with exclusive mode, denying    Γöé
  9202. Γöé               Γöéother processes both read and write access toΓöé
  9203. Γöé               Γöéthe file.                                    Γöé
  9204. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9205.  
  9206.  
  9207. ΓòÉΓòÉΓòÉ 16.5.2. Reading from and Writing to a File ΓòÉΓòÉΓòÉ
  9208.  
  9209. Use the mmioRead and mmioWrite functions to read and write to files opened by 
  9210. mmioOpen.  Use the pch parameter to specify the buffer to read to (mmioRead) or 
  9211. the buffer to write from (mmioWrite).  Use the cch parameter to specify the 
  9212. number of bytes to read to or write from pch to the file.  (The read and write 
  9213. operations are not limited to 64KB.) 
  9214.  
  9215. The following example shows how to read 20 bytes from a file. 
  9216.  
  9217. mmioRead(hmmio, achBuffer, 20)
  9218.  
  9219. The following example shows how to write 20 bytes to a file. 
  9220.  
  9221. mmioWrite(hmmio, achBuffer, 20)
  9222.  
  9223. Note:  Where translation (MMIO_TRANSLATEDATA) is enabled, the translation takes 
  9224.        place during the read and write operation. 
  9225.  
  9226.  
  9227. ΓòÉΓòÉΓòÉ 16.5.3. Changing the Position in a File ΓòÉΓòÉΓòÉ
  9228.  
  9229. Use the mmioSeek function to change the current position of the file pointer in 
  9230. an open file.  This is the place where the next read or write operation is 
  9231. going to take place.  The lOffset parameter specifies an offset to move the 
  9232. file position to.  The lOrigin parameter specifies how the offset is 
  9233. interpreted. 
  9234.  
  9235. The following example illustrates how to seek to the beginning of an open file. 
  9236.  
  9237. mmioSeek(hFile, 0L, SEEK_SET);
  9238.  
  9239. To seek to the current file position: 
  9240.  
  9241. mmioSeek(hFile, 0L, SEEK_CUR);
  9242.  
  9243. To seek to the end of a file: 
  9244.  
  9245. mmioSeek(hFile, 0L, SEEK_END);
  9246.  
  9247. To seek to a position 20 bytes from the end of an open file: 
  9248.  
  9249. mmioSeek(hFile, -20L, SEEK_END);
  9250.  
  9251. The return value is the new file position (specified in bytes) from the 
  9252. beginning of the file.  If an error occurs, the return code is MMIO_ERROR.  Use 
  9253. caution when seeking past the end of the file.  Instead of returning 
  9254. MMIO_ERROR, mmioSeek returns the offset of the new file position. 
  9255.  
  9256. Note:  The mmioSeek function supports seeking in translation mode within the 
  9257.        limits and capabilities of the specific file format IOProc that handles 
  9258.        that format. 
  9259.  
  9260.  
  9261. ΓòÉΓòÉΓòÉ 16.5.4. Retrieving an Error ΓòÉΓòÉΓòÉ
  9262.  
  9263. Use the mmioGetLastError function to return the last error condition stored in 
  9264. the system for this process.  This function assists you in obtaining additional 
  9265. information about the failing condition for error routine analysis. 
  9266.  
  9267. Note:  This function only works if you have an MMIO handle. 
  9268.  
  9269.  
  9270. ΓòÉΓòÉΓòÉ 16.6. Buffered File I/O ΓòÉΓòÉΓòÉ
  9271.  
  9272. Using buffers improves the performance of multimedia applications that perform 
  9273. numerous file I/O operations when accessing media devices.  With buffered file 
  9274. I/O, the system maintains a block of memory that the operating system uses to 
  9275. store data as it is read from (or written to) the disk.  If data is already in 
  9276. the buffer, the operating system can transfer the record to the application's 
  9277. area without reading the sector from the disk.  This improves performance by 
  9278. reducing the number of times the application accesses the disk for read or 
  9279. write operations.  The application only accesses the media device when the 
  9280. buffer must be filled from or written to the disk. 
  9281.  
  9282. Many factors must be considered when deciding whether or not to use buffered 
  9283. file I/O; for example, the number and size of read and write operations. 
  9284. Although it is difficult to identify criteria for using buffered I/O, there are 
  9285. some general guidelines you can follow.  It is a good idea to use buffered I/O 
  9286. for applications that perform many I/O operations, less than 4KB each. 
  9287. However, if you are performing I/O operations where buffer sizes may be larger 
  9288. than 4KB (as in the case of streaming), it might be best to use unbuffered I/O. 
  9289. If an application such as the Sync/Stream Manager (SSM) provides its own 
  9290. internal buffers, a secondary set of buffers during run-time may hinder, rather 
  9291. than improve, performance.  Experiment to optimize file I/O for your 
  9292. application's requirements. 
  9293.  
  9294.  
  9295. ΓòÉΓòÉΓòÉ 16.6.1. Opening a File Using Buffered File I/O ΓòÉΓòÉΓòÉ
  9296.  
  9297. When a file is opened for buffered I/O, the buffer is essentially transparent 
  9298. to the application.  You can read, write, and seek in the same way as 
  9299. unbuffered I/O.  To open a file using buffered file I/O, you can either provide 
  9300. an I/O buffer in an application, or allow the system to allocate an internal 
  9301. buffer.  To provide a user-supplied I/O buffer, you can either use mmioOpen and 
  9302. have the pmmioinfo field point to the buffer, or use mmioSetBuffer (see the 
  9303. table of buffered I/O functions in the next subsection.) To provide a 
  9304. system-supplied buffer, specify the MMIO_ALLOCBUF option of the mmioOpen 
  9305. function.  Unless you have a performance-sensitive application that directly 
  9306. accesses an I/O buffer or opens a memory file, it is a good idea to use the 
  9307. MMIO Manager to allocate the buffer.  For example, the following code sample 
  9308. opens a DOS file and directs mmioOpen to allocate a standard-sized buffer. 
  9309.  
  9310. hmmio = mmioOpen("EXAMPLE.DIB", NULL, MMIO_ALLOCBUF);
  9311.  
  9312.  
  9313. ΓòÉΓòÉΓòÉ 16.6.2. Managing Buffered I/O ΓòÉΓòÉΓòÉ
  9314.  
  9315. The MMIO functions shown in the following table allow you to manage an I/O 
  9316. buffer. 
  9317.  
  9318. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9319. ΓöéFunction          ΓöéDescription                                  Γöé
  9320. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9321. ΓöémmioFlush         ΓöéForces the contents of an I/O buffer to be   Γöé
  9322. Γöé                  Γöéwritten to disk.                             Γöé
  9323. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9324. ΓöémmioSetBuffer     ΓöéEnables or disables buffered I/O, and changesΓöé
  9325. Γöé                  Γöéthe buffer or buffer size for an open file.  Γöé
  9326. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9327.  
  9328.  
  9329. ΓòÉΓòÉΓòÉ 16.6.3. Emptying the Contents of an I/O Buffer ΓòÉΓòÉΓòÉ
  9330.  
  9331. Emptying the contents of an I/O buffer means that the contents of the buffer 
  9332. are written to disk.  You can empty the contents of a buffer by calling 
  9333. mmioFlush or mmioClose.  The buffer is automatically emptied when you close a 
  9334. file by calling mmioClose.  If you do not close a file immediately after 
  9335. writing to it, empty the contents of the buffer to make sure the information is 
  9336. written to disk.  You can also use the MMIO_EMPTYBUF flag of mmioFlush to clear 
  9337. the I/O buffer without deallocating the buffer. 
  9338.  
  9339. Note:  The mmioFlush function may fail if there is insufficient disk space to 
  9340.        write the buffer, even if the preceding mmioWrite functions succeeded. 
  9341.  
  9342.  
  9343. ΓòÉΓòÉΓòÉ 16.6.4. Setting or Changing an I/O Buffer ΓòÉΓòÉΓòÉ
  9344.  
  9345. Use the mmioSetBuffer function to enable or disable I/O buffering for reading 
  9346. to or writing from files.  You can also change the size of the internal I/O 
  9347. buffer (8KB default) or supply your own buffer for use as a memory file. 
  9348.  
  9349. The mmioSetBuffer function requires a pchBuffer parameter, which identifies the 
  9350. pointer to a user-supplied buffer for buffered I/O.  If you want mmioSetBuffer 
  9351. to allocate the buffer, or if you want to disable any predefined I/O buffers, 
  9352. set pchBuffer to NULL.  A second parameter, cchBuffer, specifies the size of 
  9353. the caller-supplied buffer.  If you set pchBuffer to NULL, cchBuffer is the 
  9354. size of the buffer that the you want mmioSetBuffer to allocate.  To disable 
  9355. buffering, set pchBuffer and cchBuffer to NULL. 
  9356.  
  9357. The following example illustrates how to open an unbuffered file named TESTING 
  9358. and then allocate an internal 16KB buffer. 
  9359.  
  9360. HMMIO hFile;
  9361. .
  9362. .
  9363. .
  9364. if ((hFile = mmioOpen("TESTING", NULL, MMIO_READ)) !=NULL) {
  9365.    /* File opened successfully; request an I/O buffer */
  9366.    if (mmioSetBuffer(hFile, NULL, 16384L, 0))
  9367.        /* Buffer cannot be allocated */
  9368.    else
  9369.        /* Buffer allocated successfully */
  9370. }
  9371. else
  9372.      /* File cannot be opened */
  9373.  
  9374. The following example illustrates how to open a buffered file named TESTING and 
  9375. then disable buffered I/O. 
  9376.  
  9377. HMMIO hmmio;
  9378. .
  9379. .
  9380. .
  9381. if ((hmmio = mmioOpen("TESTING", NULL, MMIO_ALLOCBUF)) !=NULL) {
  9382.    /* File opened successfully; disable buffered I/O */
  9383.    if (mmioSetBuffer(hFile, NULL, NULL, 0))
  9384.        /* Cannot disable buffered I/O  */
  9385.    else
  9386.        /* Buffered I/O disabled successfully */
  9387. }
  9388. else
  9389.        /* File cannot be opened */
  9390.  
  9391.  
  9392. ΓòÉΓòÉΓòÉ 16.7. Directly Accessing a File I/O Buffer ΓòÉΓòÉΓòÉ
  9393.  
  9394. Applications that are performance-sensitive can optimize file I/O performance 
  9395. by directly accessing the file I/O buffer.  Exercise care if you choose to do 
  9396. this-by accessing the file I/O buffer directly, you bypass some of the 
  9397. safeguards and error checking provided by the MMIO Manager. 
  9398.  
  9399. The MMIO functions shown in the following table allow you to support direct I/O 
  9400. buffer access on a file opened for buffered I/O. 
  9401.  
  9402. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9403. ΓöéFunction          ΓöéDescription                                  Γöé
  9404. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9405. ΓöémmioGetInfo       ΓöéRetrieves information on the file I/O buffer Γöé
  9406. Γöé                  Γöéof a file opened for buffered I/O.           Γöé
  9407. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9408. ΓöémmioAdvance       ΓöéFills and empties the contents of an I/O     Γöé
  9409. Γöé                  Γöébuffer of a file set up for direct I/O bufferΓöé
  9410. Γöé                  Γöéaccess.                                      Γöé
  9411. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9412. ΓöémmioSetInfo       ΓöéChanges information on the file I/O buffer ofΓöé
  9413. Γöé                  Γöéa file opened for buffered I/O.              Γöé
  9414. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9415.  
  9416. Note:  After you call mmioGetInfo, do not call any MMIO functions other than 
  9417.        mmioAdvance.  You can begin calling MMIO functions again after you call 
  9418.        the mmioSetInfo function. 
  9419.  
  9420.  The MMIO Manager uses the MMIOINFO data structure to maintain state 
  9421.  information on an open file.  The MMIOINFO data structure is defined in the 
  9422.  MMIOOS2.H header file as as shown. 
  9423.  
  9424.   typedef struct _MMIOINFO {       /* mmioinfo                    */
  9425.      ULONG       ulFlags;          /* Open flags                  */
  9426.      FOURCC      fccIOProc;        /* FOURCC of the IOProc to use */
  9427.      PMMIOPROC   pIOProc;          /* Function Pointer to IOProc to use */
  9428.      ULONG       ulErrorRet;       /* Extended Error return code  */
  9429.      LONG        cchBuffer;        /* I/O buff size (if used), Fsize if MEM */
  9430.      PCHAR       pchBuffer;        /* Start of I/O buff           */
  9431.      PCHAR       pchNext;          /* Next char to read or write in buff */
  9432.      PCHAR       pchEndRead;       /* Last char in buff can be read + 1  */
  9433.      PCHAR       pchEndWrite;      /* Last char in buff can be written + 1 */
  9434.      LONG        lBufOffset;       /* Offset in buff to pchNext */
  9435.      LONG        lDiskOffset;      /* Disk offset in file       */
  9436.      ULONG       aulInfo[4];       /* IOProc specific fields    */
  9437.      LONG        lLogicalFilePos;  /* Actual file position, buffered or not */
  9438.      ULONG       ulTranslate;      /* Translation field         */
  9439.      FOURCC      fccChildIOProc;   /* FOURCC of Child IOProc    */
  9440.      PVOID       pExtraInfoStruct; /* Pointer to a structure of related data */
  9441.      HMMIO       hmmio;            /* Handle to media element   */
  9442.      } MMIOINFO;
  9443.  
  9444.  
  9445. ΓòÉΓòÉΓòÉ 16.7.1. Getting Buffer Information ΓòÉΓòÉΓòÉ
  9446.  
  9447. Use mmioGetInfo to obtain information about a file I/O buffer, such as the 
  9448. buffer size and address.  The mmioGetInfo function also sets up a file for 
  9449. direct I/O buffer manipulation. 
  9450.  
  9451. The mmioGetInfo function identifies a pointer to an MMIOINFO structure that 
  9452. mmioGetInfo fills with information about the file I/O buffer.  The return value 
  9453. is 0 if the operation is successful; otherwise, the return value specifies an 
  9454. error code. 
  9455.  
  9456.  
  9457. ΓòÉΓòÉΓòÉ 16.7.2. Reading from and Writing to the Buffer ΓòÉΓòÉΓòÉ
  9458.  
  9459. The following table shows three fields in the MMIOINFO structure used for 
  9460. reading from and writing to the file I/O buffer. 
  9461.  
  9462. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9463. ΓöéField        ΓöéDescription                                  Γöé
  9464. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9465. ΓöépchNext      ΓöéPoints to the next location in the buffer to Γöé
  9466. Γöé             Γöéread or write.  You must increment pchNext asΓöé
  9467. Γöé             Γöéyou read and write the buffer.               Γöé
  9468. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9469. ΓöépchEndRead   ΓöéIdentifies the location containing the last  Γöé
  9470. Γöé             Γöévalid character you can read from the buffer.Γöé
  9471. Γöé             ΓöéThis is the memory location following the    Γöé
  9472. Γöé             Γöélast valid data in the buffer.               Γöé
  9473. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9474. ΓöépchEndWrite  ΓöéIdentifies the last location in the buffer   Γöé
  9475. Γöé             Γöéyou can write to.  This is the memory        Γöé
  9476. Γöé             Γöélocation following the end of buffer.        Γöé
  9477. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9478.  
  9479.  
  9480. ΓòÉΓòÉΓòÉ 16.7.3. Advancing the File I/O Buffer ΓòÉΓòÉΓòÉ
  9481.  
  9482. When you reach the end of the file I/O buffer, use mmioAdvance to advance the 
  9483. buffer.  Advancing the buffer allows you to fill a file I/O buffer from disk 
  9484. (MMIO_READ).  If there is not enough data remaining in the file to fill the 
  9485. buffer, the pchEndRead field in the MMIOINFO structure points to the location 
  9486. following the last valid byte in the buffer. 
  9487.  
  9488. mmioAdvance also allows you to empty the contents of the current buffer to disk 
  9489. (MMIO_WRITE) by setting the MMIO_DIRTY flag in the ulFlags field of the 
  9490. MMIOINFO structure.  mmioAdvance updates the fields in the MMIOINFO structure 
  9491. to reflect the new state of the I/O buffer (including pchNext, pchEndRead, and 
  9492. pchEndWrite). 
  9493.  
  9494.  
  9495. ΓòÉΓòÉΓòÉ 16.7.3.1. Advancing a File I/O Buffer for Reading ΓòÉΓòÉΓòÉ
  9496.  
  9497. The following figure shows how the file I/O buffer is advanced as a file is 
  9498. read from. 
  9499.  
  9500.  (1)    The application opens the file for buffered I/O.  The buffer is 
  9501.         initially empty, so mmioOpen sets pchNext and pchEndRead to point to 
  9502.         the beginning of the file I/O buffer. 
  9503.  
  9504.  (2)    The application calls mmioAdvance to fill the I/O buffer.  The 
  9505.         mmioAdvance function fills the buffer and sets pchNext to point to the 
  9506.         beginning of the buffer. 
  9507.  
  9508.  (3)    The application reads from the I/O buffer and increments pchNext. 
  9509.  
  9510.  (4)    The application continues to read the buffer and call mmioAdvance to 
  9511.         refill the buffer when it is empty.  When mmioAdvance reaches the end 
  9512.         of the file, there is not enough information to fill the buffer.  The 
  9513.         mmioAdvance function sets pchEndRead to point to the end of the valid 
  9514.         data in the buffer. 
  9515.  
  9516.  
  9517. ΓòÉΓòÉΓòÉ 16.7.3.2. Advancing a File I/O Buffer for Writing ΓòÉΓòÉΓòÉ
  9518.  
  9519. The following figure shows how the file I/O buffer is advanced as a file is 
  9520. written to. 
  9521.  
  9522.  (1)    The application opens the file for buffered I/O by calling mmioOpen. 
  9523.         The mmioOpen function sets pchNext to point to the beginning of the 
  9524.         file I/O buffer and pchEndWrite to point to the end of the buffer. 
  9525.  
  9526.  (2)    The application writes to the I/O buffer and increments pchNext. 
  9527.  
  9528.  (3)    Once the application fills the buffer, it calls mmioAdvance to empty 
  9529.         the contents of the buffer to disk.  The mmioAdvance function resets 
  9530.         pchNext to point to the beginning of the buffer. 
  9531.  
  9532.  (4)    The application continues to write to the buffer and call mmioAdvance 
  9533.         to empty the contents of the buffer when its full.  At the end of the 
  9534.         file, there is not enough information to fill the buffer.  When the 
  9535.         application calls mmioAdvance to empty the contents of the buffer, 
  9536.         pchNext points to the end of the valid data in the buffer. 
  9537.  
  9538.  
  9539. ΓòÉΓòÉΓòÉ 16.7.4. Ending Direct Access of a File I/O Buffer ΓòÉΓòÉΓòÉ
  9540.  
  9541. When you finish accessing a file I/O buffer, pass the MMIOINFO structure filled 
  9542. by mmioGetInfo to mmioSetInfo to end direct access to the I/O buffer.  Before 
  9543. calling mmioSetInfo, make sure that you set the MMIO_DIRTY flag of the ulFlags 
  9544. field of pmmioinfo if you have written to the buffer.  Otherwise, the contents 
  9545. of the buffer will not get emptied to disk.  When mmioSetInfo is called, then 
  9546. the caller should stop accessing the I/O buffer directly and revert to using 
  9547. mmioRead and mmioWrite to read from and write to the file. 
  9548.  
  9549. The following code fragment illustrates how to directly read an I/O buffer. 
  9550.  
  9551. mmioGetInfo(hmmio, &mmioinfo, 0)
  9552. mmioAdvance(hmmio, &mmioinfo, MMIO_READ)
  9553. for (i=0, iCount=0;  i<20; i++)
  9554.  iCount += *(mmioinfo.pchNext)++;
  9555. mmioSetInfo(hmmio, &mmioinfo, 0);
  9556.  
  9557.  
  9558. ΓòÉΓòÉΓòÉ 16.8. File I/O in Memory ΓòÉΓòÉΓòÉ
  9559.  
  9560. A memory file is a block of memory that is perceived as a file by an 
  9561. application.  This can be useful if you already have a file image in memory. 
  9562. Memory files let you reduce the number of special-case conditions in your code 
  9563. because, for I/O purposes, you can treat file memory images as if they were 
  9564. disk-based files. 
  9565.  
  9566. Like I/O buffers, memory files can use memory allocated by the application or 
  9567. by the MMIO Manager.  In addition, memory files can be expandable or 
  9568. non-expandable. 
  9569.  
  9570. Memory is expandable when the system allocates an internal buffer using the 
  9571. MMIO_ALLOCBUF flag of the mmioOpen function.  When the MMIO Manager reaches the 
  9572. end of an expandable memory file, it expands the memory file by a predefined 
  9573. increment. 
  9574.  
  9575. Use the mmioOpen function to open a memory file.  Specify NULL for the 
  9576. szFileName parameter and the MMIO_READWRITE flag, as shown: 
  9577.  
  9578. hmmio = mmioOpen(NULL, &mmioinfo, MMIO_READWRITE);
  9579.  
  9580. In addition, set the pmmioinfo parameter to point to an MMIOINFO structure set 
  9581. up as follows: 
  9582.  
  9583.      Set the pIOProc field to NULL. 
  9584.      Set the fccIOProc field to FOURCC_MEM. 
  9585.      Set the pchBuffer field to point to the memory block.  To request that 
  9586.       the MMIO Manager allocate the memory block, set pchBuffer to NULL. 
  9587.      Set the cchBuffer field to the initial size of the memory block. 
  9588.      Set the aulInfo[0] field to the minimum expansion size of the memory 
  9589.       block.  For a non-expandable memory file, set aulInfo[0] to NULL. 
  9590.      Set all other fields to 0. 
  9591.  
  9592.  The following code fragment shows how to open a memory file using a buffer 
  9593.  named achMyBuffer. 
  9594.  
  9595.           /* set mmioinfo structure to 0 */
  9596.           mmioinfo.fccIOProc= FOURCC_MEM
  9597.           mmioinfo.pchBuffer= achMyBuffer
  9598.           mmioinfo.cchBuffer= cchMyBuffer
  9599.   hmmio = mmioOpen("NULL", &mmioinfo, 0);
  9600.  
  9601.  The following code fragment shows how to open a memory file with 1 byte 
  9602.  initially and expand up to 1KB as required. 
  9603.  
  9604.           /* set mmioinfo structure to 0 */
  9605.           mmioinfo.fccIOProc= FOURCC_MEM
  9606.           mmioinfo.pchBuffer= NULL
  9607.           mmioinfo.cchBuffer= 1
  9608.           mmioinfo.aulInfo[0] = 1024;
  9609.   hmmio = mmioOpen("NULL", &mmioinfo, MMIO_CREATE)
  9610.  
  9611.  Allocating Memory for Memory Files 
  9612.  
  9613.  There are no restrictions on allocating memory for use as a non-expandable 
  9614.  memory file.  You can use static memory or stack memory, or you can use 
  9615.  locally allocated or globally allocated memory. 
  9616.  
  9617.  
  9618. ΓòÉΓòÉΓòÉ 17. Resource Interchange File Format (RIFF) Services ΓòÉΓòÉΓòÉ
  9619.  
  9620. The Resource Interchange File Format (RIFF) is the standard file format used 
  9621. for storing multimedia files.  RIFF enables audio, image, animation, and other 
  9622. multimedia elements to be stored in a common format.  RIFF is also used as the 
  9623. basis for defining new file formats for OS/2 multimedia software. 
  9624.  
  9625. RIFF file I/O provides simple functions to locate, create, enter, exit, and 
  9626. access the RIFF chunk-the basic building block of a RIFF file.  You can open, 
  9627. read from, and write to RIFF files the same way as other file types.  Blocks of 
  9628. data are identified by tags.  An advantage of tagged file formats is that an 
  9629. application can process blocks that it understands while ignoring blocks that 
  9630. do not concern it.  RIFF can also be expanded upon (by adding new tags) without 
  9631. breaking existing applications. 
  9632.  
  9633. A RIFF file created with mmioOpen can hold a single data object or, if it is 
  9634. built as a compound file, multiple data objects.  Data objects in a compound 
  9635. file are referred to as chunks.  Chunks in a compound file are its table of 
  9636. contents, and the multiple data objects stored in the resource group. 
  9637.  
  9638. Note:  Refer to the OS/2 Multimedia Programming Reference for detailed 
  9639.        information on how to define an application using the RIFF tagged file 
  9640.        structure. 
  9641.  
  9642.  
  9643. ΓòÉΓòÉΓòÉ 17.1. RIFF File Structural Overview ΓòÉΓòÉΓòÉ
  9644.  
  9645. A RIFF chunk begins with a chunk ID, which is a four-character code (FOURCC) 
  9646. that identifies the representation of the chunk data.  A program reading a RIFF 
  9647. file can skip over any chunk whose chunk ID it does not recognize.  The chunk 
  9648. ID is followed by a four-character chunk size (ULONG) specifying the size of 
  9649. the data field in the chunk.  Lastly, it contains a data field containing the 
  9650. actual data of the chunk. If the chunk ID is RIFF, the first four characters of 
  9651. the data portion of the chunk are a form type; if the chunk ID is LIST, the 
  9652. first four characters are a list type. 
  9653.  
  9654. The only chunks allowed to contain other chunks (subchunks) are those with a 
  9655. chunk ID of RIFF or LIST.  The first chunk in a RIFF file must be a RIFF chunk. 
  9656. All other chunks in the file are subchunks of the RIFF chunk as shown. 
  9657.  
  9658.  
  9659. ΓòÉΓòÉΓòÉ 17.1.1. RIFF Chunks ΓòÉΓòÉΓòÉ
  9660.  
  9661. RIFF chunks include an additional field in the first 4 bytes of the data field. 
  9662. This additional field provides the form type of the field, which is a 
  9663. four-character code identifying the format of the data stored in the file.  A 
  9664. RIFF form is simply a chunk with a chunk ID of RIFF.  For example, waveform 
  9665. audio files (WAVE files) have a form type of WAVE. 
  9666.  
  9667.  
  9668. ΓòÉΓòÉΓòÉ 17.1.2. LIST Chunks ΓòÉΓòÉΓòÉ
  9669.  
  9670. A LIST chunk contains a list, or ordered sequence, of subchunks.  LIST chunks 
  9671. also include an additional field in the first 4 bytes of the data field.  This 
  9672. additional field contains the list type of the field, which is a four-character 
  9673. code identifying the contents of the list.  For example, a LIST chunk with a 
  9674. list type of INFO can contain ICOP and ICRD chunks providing copyright and 
  9675. creation date information. 
  9676.  
  9677. If an application recognizes the list type, it should know how to interpret the 
  9678. sequence of subchunks.  However, since a LIST chunk may contain only subchunks 
  9679. (after the list type), an application that does not know about a specific list 
  9680. type can still navigate through the sequence of subchunks. 
  9681.  
  9682.  
  9683. ΓòÉΓòÉΓòÉ 17.2. RIFF File Functions ΓòÉΓòÉΓòÉ
  9684.  
  9685. The following MMIO functions enable you to manage RIFF files: 
  9686.  
  9687. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9688. ΓöéFunction               ΓöéDescription                                  Γöé
  9689. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9690. ΓöémmioFOURCC             ΓöéConverts four characters into a              Γöé
  9691. Γöé                       Γöéfour-character code (FOURCC).                Γöé
  9692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9693. ΓöémmioStringToFOURCC     ΓöéConverts a null-terminated string into a     Γöé
  9694. Γöé                       Γöéfour-character code.                         Γöé
  9695. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9696. ΓöémmioCreateChunk        ΓöéCreates a chunk in a RIFF file that was      Γöé
  9697. Γöé                       Γöéopened by mmioOpen.                          Γöé
  9698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9699. ΓöémmioAscend             ΓöéAscends out of a chunk in a RIFF file that   Γöé
  9700. Γöé                       Γöéwas descended into by mmioDescend or created Γöé
  9701. Γöé                       Γöéby mmioCreateChunk.                          Γöé
  9702. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9703. ΓöémmioDescend            ΓöéDescends into a RIFF file chunk beginning at Γöé
  9704. Γöé                       Γöéthe current file position, or searches for a Γöé
  9705. Γöé                       Γöéspecified chunk.                             Γöé
  9706. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9707.  
  9708.  
  9709. ΓòÉΓòÉΓòÉ 17.2.1. The MMCKINFO Data Structure ΓòÉΓòÉΓòÉ
  9710.  
  9711. Several multimedia file I/O functions use the MMCKINFO structure to specify and 
  9712. retrieve information about a chunk in a RIFF file.  The MMIOOS2.H header file 
  9713. defines the MMCKINFO structure as as shown. 
  9714.  
  9715. typedef struct _MMCKINFO {   /* mmckinfo                              */
  9716.   FOURCC      ckid;          /* Chunk id (FOURCC)                     */
  9717.   ULONG       ulSize;        /* Chunk size (bytes)                    */
  9718.   FOURCC      fccType;       /* FOURCC type (if ckid RIFF or LIST)    */
  9719.   ULONG       ulDataOffset;  /* File offset of data portion of chunk  */
  9720.   ULONG       ulFlags;       /* MMIO_DIRTY (if new chunk)             */
  9721. } MMCKINFO;
  9722.  
  9723.  
  9724. ΓòÉΓòÉΓòÉ 17.2.2. Four-Character Codes ΓòÉΓòÉΓòÉ
  9725.  
  9726. A four-character code is a 32-bit quantity representing a sequence of one to 
  9727. four ASCII alphanumeric characters, padded on the right with blank characters. 
  9728. The data type for a four-character code is FOURCC.  Use the mmioFOURCC function 
  9729. to convert four characters to a four-character code.  For example, to use a 
  9730. four-character code for WAVE: 
  9731.  
  9732.             FOURCC   fccIOProc;
  9733.  
  9734.             fccIOProc = mmioFOURCC( 'W', 'A', 'V', 'E' ) ;
  9735.  
  9736. To convert a null-terminated string into a four-character code, use the 
  9737. mmioStringToFOURCC function.  The following example also generates a 
  9738. four-character code for WAVE. 
  9739.  
  9740.             FOURCC fccIOProc;
  9741.  
  9742.             fccIOProc = mmioStringToFOURCC("WAVE", 0);
  9743.  
  9744. The second parameter in mmioStringToFOURCC specifies options for converting the 
  9745. string to a four-character code.  If you specify the MMIO_TOUPPER flag, 
  9746. mmioStringToFOURCC converts all alphabetic characters in the string to 
  9747. uppercase.  This is useful when you need to specify a four-character code to 
  9748. identify a custom I/O procedure.  (Four-character codes are case-sensitive.) 
  9749.  
  9750.  
  9751. ΓòÉΓòÉΓòÉ 17.2.3. Creating RIFF Chunks ΓòÉΓòÉΓòÉ
  9752.  
  9753. Use the mmioCreateChunk function to create a new chunk by writing a chunk 
  9754. header at the current position in an open file and then "descending" into the 
  9755. chunk.  (See Descending into a Chunk for further information.)  You must 
  9756. specify a pointer to a MMCKINFO structure containing information about the new 
  9757. chunk.  You also need to determine which chunk type to create by specifying 
  9758. MMIO_CREATERIFF or MMIO_CREATELIST.  The return value is 0 if the chunk is 
  9759. successfully created; otherwise, the return value specifies an error code. 
  9760.  
  9761. The following code fragment illustrates how to create a new chunk with a chunk 
  9762. ID of RIFF and the form type of WAVE. 
  9763.  
  9764. HMMIO         hmmio;
  9765. MMCKINFO      mmckinfo;
  9766. .
  9767. .
  9768. .
  9769. mmckinfo.fccType = mmioFOURCC('W', 'A', 'V', 'E');
  9770. mmioCreateChunk(hmmio, mmckinfo, MMIO_CREATERIFF);
  9771.  
  9772. If you are creating a RIFF or LIST chunk, you must specify the form type in the 
  9773. fccType field of the MMCKINFO structure.  In the previous example, the form 
  9774. type is WAVE. 
  9775.  
  9776. If you know the size of the data field in the new chunk, set the ckSize field 
  9777. in the MMCKINFO structure when you create the chunk.  This value is written to 
  9778. the ckSize field in the new chunk.  If this value is not correct when you call 
  9779. mmioAscend to mark the end of the chunk, it is automatically rewritten to 
  9780. reflect the correct size of the data field. 
  9781.  
  9782. After you create a new chunk using mmioCreateChunk, the file position is set to 
  9783. the data field of the chunk (8 bytes from the beginning of the chunk).  If the 
  9784. chunk is a RIFF or LIST chunk, the file position is set to the location 
  9785. following the form type or list type (12 bytes from the beginning of the 
  9786. chunk).  The ckSize field is assumed to be a "proposed chunk size" if it turns 
  9787. out to be correct (if you write that much data into the chunk before calling 
  9788. mmioAscend to end the chunk, the mmioAscend will not have to seek back and 
  9789. correct the chunk header.) 
  9790.  
  9791.  
  9792. ΓòÉΓòÉΓòÉ 17.2.4. Moving between Chunks ΓòÉΓòÉΓòÉ
  9793.  
  9794. RIFF files may consist of nested chunks of information.  MMIO services include 
  9795. two functions you can use to move between chunks in a RIFF file:  mmioAscend 
  9796. and mmioDescend.  You might think of these functions as high-level seek 
  9797. functions.  When you descend into a chunk, the file position is set to the data 
  9798. field of the chunk (8 bytes from the beginning of the chunk).  For RIFF and 
  9799. LIST chunks, the file position is set to the location following the form type 
  9800. or list type (12 bytes from the beginning of the chunk).  When you ascend out 
  9801. of a chunk, the file position is set to the location following the end of the 
  9802. chunk. 
  9803.  
  9804.  
  9805. ΓòÉΓòÉΓòÉ 17.2.5. Descending into a Chunk ΓòÉΓòÉΓòÉ
  9806.  
  9807. The mmioDescend function descends into a chunk or searches for a chunk, 
  9808. beginning at the current file position.  The mmioDescend function requires a 
  9809. pckinfo parameter, which specifies a pointer to a MMCKINFO structure that 
  9810. mmioDescend fills with information on the current chunk.  You can also specify 
  9811. the pckinfoParent parameter, which specifies an optional caller-supplied 
  9812. structure that refers to the parent of the chunk that is being searched for. 
  9813. If there is no parent chunk, set pckinfoParent to NULL. 
  9814.  
  9815. The usFlags parameter specifies options for searching for a chunk.  Choose from 
  9816. the following options: 
  9817.  
  9818. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9819. ΓöéFlag             ΓöéDescription                        Γöé
  9820. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9821. ΓöéMMIO_FINDCHUNK   ΓöéSearches for a chunk with a        Γöé
  9822. Γöé                 Γöéspecific chunk ID.  The ckid field Γöé
  9823. Γöé                 Γöépckinfo should contain the chunk IDΓöé
  9824. Γöé                 Γöéof the chunk to search for when    Γöé
  9825. Γöé                 ΓöémmioDescend is called.             Γöé
  9826. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9827. ΓöéMMIO_FINDRIFF    ΓöéSearches for a chunk with a RIFF   Γöé
  9828. Γöé                 Γöéchunk ID and with a specific form  Γöé
  9829. Γöé                 Γöétype.  The fccType field of pckinfoΓöé
  9830. Γöé                 Γöéshould contain the form type of theΓöé
  9831. Γöé                 ΓöéRIFF chunk to search for when      Γöé
  9832. Γöé                 ΓöémmioDescend is called.             Γöé
  9833. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9834. ΓöéMMIO_FINDLIST    ΓöéSearches for a chunk with a chunk  Γöé
  9835. Γöé                 ΓöéID of LIST and with a specific listΓöé
  9836. Γöé                 Γöétype.  The fccType field of pckinfoΓöé
  9837. Γöé                 Γöéshould contain the list type of theΓöé
  9838. Γöé                 ΓöéLIST chunk to search for when      Γöé
  9839. Γöé                 ΓöémmioDescend is called.             Γöé
  9840. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9841.  
  9842. Note:  If you do not specify any flags, mmioDescend descends into the chunk 
  9843.        that starts at the current file position. 
  9844.  
  9845.  The mmioDescend function fills an MMCKINFO structure with information on the 
  9846.  chunk.  This information includes the chunk ID (ckid), the size of the data 
  9847.  field (ckSize), and the form type, or list type, depending on whether the 
  9848.  chunk is a RIFF or LIST chunk.  The mmioDescend function assumes that the 
  9849.  current file position is the beginning of a chunk header when mmioDescend is 
  9850.  called.  If pckinfoParent is given, mmioDescend assumes that the current file 
  9851.  position is within pckinfoParent (a RIFF or LIST chunk). 
  9852.  
  9853.  
  9854. ΓòÉΓòÉΓòÉ 17.2.6. Searching for a Chunk ΓòÉΓòÉΓòÉ
  9855.  
  9856. To search for a chunk in an open RIFF file, use mmioDescend with the 
  9857. MMIO_FINDCHUNK parameter.  Also set the ckid field of the MMCKINFO structure 
  9858. referenced by pckinfo to the four-character code of the chunk you want to 
  9859. search for. 
  9860.  
  9861. If you are searching for a RIFF or LIST chunk, the mmioDescend function sets 
  9862. the ckid field of the MMCKINFO structure.  Set the fccType field to the 
  9863. four-character code of the form type or list type of the chunk. 
  9864.  
  9865.  
  9866. ΓòÉΓòÉΓòÉ 17.2.7. Ascending out of a Chunk ΓòÉΓòÉΓòÉ
  9867.  
  9868. After you descend into a chunk and read the data in the chunk, you can move the 
  9869. file position (pointer) to the beginning of the next chunk.  This is 
  9870. accomplished by ascending out of the chunk using the mmioAscend function.  The 
  9871. mmioAscend function specifies a pointer to an MMCKINFO structure identifying a 
  9872. chunk.  The function ascends to the location following the end of this chunk. 
  9873. The return value is 0 if the operation is successful; otherwise, the return 
  9874. value specifies an error code. 
  9875.  
  9876. If the chunk was descended into using mmioDescend, then mmioAscend seeks to the 
  9877. location following the end of the chunk (past the extra pad byte, if any). 
  9878.  
  9879. If the chunk was created and descended into using mmioCreateChunk (the 
  9880. MMIO_DIRTY flag in the ulFlags field of pckinfo is set), then the current file 
  9881. position is assumed to mark the end of the data portion of the chunk.  If the 
  9882. chunk size is not the same as the value that was stored in ckSize of pckinfo 
  9883. before mmioCreateChunk was called, then mmioAscend seeks back and corrects the 
  9884. chunk size in the chunk header before ascending from the chunk.  Also, if the 
  9885. chunk size is odd, then mmioAscend writes a null pad byte at the end of the 
  9886. chunk. 
  9887.  
  9888.  
  9889. ΓòÉΓòÉΓòÉ 17.3. RIFF Compound File Overview ΓòÉΓòÉΓòÉ
  9890.  
  9891. Files based upon the compound file structure contain the following two RIFF 
  9892. chunks at the "top level" of a RIFF file-(as subchunks of the RIFF chunk): 
  9893.  
  9894.      Compound File Resource Group (CGRP) chunk 
  9895.  
  9896.      Compound File Table of Contents (CTOC) chunk 
  9897.  
  9898.  The CGRP chunk contains all the compound file elements, concatenated together. 
  9899.  An element may be a RIFF file, but it may also be a non-RIFF file, or an 
  9900.  arbitrary RIFF chunk, or arbitrary binary data.  The definition of the form 
  9901.  that contains the CGRP chunk may specify exactly what the elements of the CGRP 
  9902.  chunk may be.  The CTOC chunk indexes the CGRP chunk, which contains the 
  9903.  actual multimedia data elements.  Each entry contains the name of the element 
  9904.  and other information about the element, including the offset of the element 
  9905.  within the CGRP chunk.  All the CTOC entries of a table are of the same length 
  9906.  and can be specified when the file is created. 
  9907.  
  9908.  The CTOC chunk may appear either before or after the CGRP chunk.  Generally, 
  9909.  the CTOC chunk is placed at the front of the file to reduce the seek and read 
  9910.  times required to access it.  See the following figure. 
  9911.  
  9912.  
  9913. ΓòÉΓòÉΓòÉ 17.4. RIFF Compound File Functions ΓòÉΓòÉΓòÉ
  9914.  
  9915. A RIFF compound file can contain multiple file elements.  A file element is an 
  9916. individual file that is part of a RIFF compound file.  An element of a compound 
  9917. file also could be an entire RIFF file.  The MMIO Manager provides service to 
  9918. find, query, and access any file elements in a compound file.  It also supports 
  9919. the function of file compaction. 
  9920.  
  9921. The following MMIO functions enable you to manage RIFF compound files: 
  9922.  
  9923. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  9924. ΓöéFunction                      ΓöéDescription                   Γöé
  9925. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9926. ΓöémmioCFOpen                    ΓöéOpens a RIFF compound file by Γöé
  9927. Γöé                              Γöéname.                         Γöé
  9928. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9929. ΓöémmioCFClose                   ΓöéCloses a RIFF compound file   Γöé
  9930. Γöé                              Γöéthat was opened by mmioCFOpen.Γöé
  9931. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9932. ΓöémmioCFGetInfo                 ΓöéRetrieves the CTOC header of  Γöé
  9933. Γöé                              Γöéan open RIFF compound file.   Γöé
  9934. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9935. ΓöémmioCFSetInfo                 ΓöéModifies information that is  Γöé
  9936. Γöé                              Γöéstored in the CTOC header of  Γöé
  9937. Γöé                              Γöéan open RIFF compound file.   Γöé
  9938. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9939. ΓöémmioCFAddEntry                ΓöéAdds an entry to the CTOC     Γöé
  9940. Γöé                              Γöéchunk of an open RIFF compoundΓöé
  9941. Γöé                              Γöéfile.                         Γöé
  9942. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9943. ΓöémmioCFChangeEntry             ΓöéChanges a CTOC entry in an    Γöé
  9944. Γöé                              Γöéopen RIFF compound file.      Γöé
  9945. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9946. ΓöémmioCFFindEntry               ΓöéFinds a CTOC entry in an open Γöé
  9947. Γöé                              ΓöéRIFF compound file.           Γöé
  9948. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9949. ΓöémmioCFDeleteEntry             ΓöéDeletes a CTOC entry in an    Γöé
  9950. Γöé                              Γöéopen RIFF compound file.      Γöé
  9951. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9952. ΓöémmioCFAddElement              ΓöéAdds an element to the CGRP   Γöé
  9953. Γöé                              Γöéchunk of an open RIFF compoundΓöé
  9954. Γöé                              Γöéfile.                         Γöé
  9955. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9956. ΓöémmioCFCopy                    ΓöéCopies the CTOC and CGRP      Γöé
  9957. Γöé                              Γöéchunks from an open RIFF      Γöé
  9958. Γöé                              Γöécompound file to another RIFF Γöé
  9959. Γöé                              Γöécompound file.                Γöé
  9960. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9961. ΓöémmioCFCompact                 ΓöéCompacts a RIFF compound file Γöé
  9962. Γöé                              Γöéby removing elements marked asΓöé
  9963. Γöé                              Γöédeleted.                      Γöé
  9964. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9965. ΓöémmioFindElement               ΓöéEnumerates the entries of a   Γöé
  9966. Γöé                              Γöécompound file.                Γöé
  9967. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  9968. ΓöémmioRemoveElement             ΓöéRemoves the specified element Γöé
  9969. Γöé                              Γöéin a compound file.           Γöé
  9970. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  9971.  
  9972.  
  9973. ΓòÉΓòÉΓòÉ 17.4.1. The MMCFINFO Structure ΓòÉΓòÉΓòÉ
  9974.  
  9975. The MMIO Manager uses the MMCFINFO data structure to maintain state information 
  9976. on an open file.  The MMCFINFO data structure is defined in the MMIOOS2.H 
  9977. header file as shown. 
  9978.  
  9979. typedef struct _MMCFINFO  /* mmcfinfo                                   */
  9980.  {
  9981.  ULONG  ulHeaderSize;     /* CTOC header size                            */
  9982.  ULONG  ulEntriesTotal;   /* Num of CTOC table entries                   */
  9983.  ULONG  ulEntriesDeleted; /* Num of CTOC table entries to deleted CGRP   */
  9984.  ULONG  ulEntriesUnused;  /* Num of unused CTOC entries                  */
  9985.  ULONG  ulBytesTotal;     /* Combined byte size of all CGRP elements     */
  9986.  ULONG  ulBytesDeleted;   /* Byte size of all deleted CGRP elements      */
  9987.  ULONG  ulHeaderFlags;    /* Information about entire compound file (CF) */
  9988.  USHORT usEntrySize;      /* Size of each CTOC table entry               */
  9989.  USHORT usNameSize;       /* Size of name field in entry, default 13     */
  9990.  USHORT usExHdrFields;    /* Num CTOC header extra fields                */
  9991.  USHORT usExEntFields;    /* Num CTOC entry extra fields                 */
  9992.  } MMCFINFO;
  9993.  
  9994.  
  9995. ΓòÉΓòÉΓòÉ 17.4.2. Opening or Creating a RIFF Compound File ΓòÉΓòÉΓòÉ
  9996.  
  9997. To perform I/O procedures on a new or existing RIFF compound file, an 
  9998. application issues the mmioCFOpen function.  This function constructs a CTOC in 
  9999. memory for a RIFF compound file.  Specify the pmmiocfinfo parameter to identify 
  10000. a pointer to a user-supplied CTOC header structure containing optional header 
  10001. information.  The pmmiocfinfo parameter can be NULL if the default values of 
  10002. the fields are sufficient.  You can also specify the pmmioinfo parameter, which 
  10003. identifies a pointer to a user-supplied info structure containing optional open 
  10004. information that is passed to mmioOpen. 
  10005.  
  10006. The ulFlags options for mmioCFOpen include the following. 
  10007.  
  10008. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10009. ΓöéFlag                ΓöéDescription                                  Γöé
  10010. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10011. ΓöéMMIO_READ           ΓöéOpens a file for reading only (default).     Γöé
  10012. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10013. ΓöéMMIO_WRITE          ΓöéOpens a file for writing only.               Γöé
  10014. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10015. ΓöéMMIO_READWRITE      ΓöéOpens a file for both reading and writing.   Γöé
  10016. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10017. ΓöéMMIO_CREATE         ΓöéCreates a new file.                          Γöé
  10018. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10019. ΓöéMMIO_EXCLUSIVE      ΓöéOpens a file with exclusive mode, denying    Γöé
  10020. Γöé                    Γöéother processes both read and write access toΓöé
  10021. Γöé                    Γöéthe file.                                    Γöé
  10022. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10023. ΓöéMMIO_DENYWRITE      ΓöéOpens a file and denies other processes writeΓöé
  10024. Γöé                    Γöéaccess to the file.                          Γöé
  10025. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10026. ΓöéMMIO_DENYREAD       ΓöéOpens a file and denies other processes read Γöé
  10027. Γöé                    Γöéaccess to the file.                          Γöé
  10028. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10029. ΓöéMMIO_DENYNONE       ΓöéOpens a file without denying other processes Γöé
  10030. Γöé                    Γöéread or write access to the file.            Γöé
  10031. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10032.  
  10033. If the file does not exist, an error is returned unless you specified the 
  10034. MMIO_CREATE option.  If the file exists but is not a RIFF compound file, the 
  10035. system returns an error, regardless of whether or not you specified 
  10036. MMIO_CREATE. 
  10037.  
  10038. The access and sharing flags are maintained only within the set of compound 
  10039. file (CF) functions.  If the RIFF compound file or elements are accessed 
  10040. without using the CF functions, the access and sharing modes are unpredictable. 
  10041. An mmioOpen function with a fully qualified element name is considered a CF 
  10042. function since it internally calls mmioCFOpen, thus the flags are predictable 
  10043. in that case. 
  10044.  
  10045.  
  10046. ΓòÉΓòÉΓòÉ 17.4.3. Closing a RIFF Compound File ΓòÉΓòÉΓòÉ
  10047.  
  10048. Use the mmioCFClose function to close a RIFF compound file that was opened by 
  10049. mmioCFOpen.  The mmioCFClose function writes the CTOC back to the RIFF compound 
  10050. file.  You can also open an element using the mmioOpen function with the BND 
  10051. and element both specified on the open call (see to Opening or Creating a 
  10052. File).  In that case, you would call the mmioClose function, which would close 
  10053. the element and RIFF compound file. 
  10054.  
  10055. If the process ends, all open elements are closed and the CTOC is rewritten. 
  10056. If the compound file was opened for read only, the CTOC is not rewritten. 
  10057.  
  10058. If the mmioCFClose fails and you modified CGRP elements, the data stored on the 
  10059. file is inconsistent.  Attempt to correct the inconsistency by freeing file 
  10060. space and trying to close the file again. 
  10061.  
  10062.  
  10063. ΓòÉΓòÉΓòÉ 17.4.4. Retrieving Information ΓòÉΓòÉΓòÉ
  10064.  
  10065. Use the mmioCFGetInfo function to retrieve the CTOC header of an open RIFF 
  10066. compound file.  The mmioCFGetInfo function requires a pmmcfinfo parameter which 
  10067. identifies a pointer to a user-supplied buffer that will be filled with the 
  10068. CTOC header.  Use the cBytes parameter to specify the size of the pmmcfinfo 
  10069. buffer.  This is the maximum number of bytes that will be copied. 
  10070.  
  10071. The information copied to pmmcfinfo consists of a MMCFINFO structure followed 
  10072. by variable length arrays aulExHdrFldUsage, aulExEntFldUsage, and 
  10073. aulExHdrField. 
  10074.  
  10075. To find out how large a buffer the user needs to allocate, call mmioCFGetInfo 
  10076. with cBytes equal to the size of a ULONG.  This returns the first field of the 
  10077. CTOC header, which happens to be the size of the header.  This size can then be 
  10078. used as cBytes on the subsequent call. 
  10079.  
  10080.  
  10081. ΓòÉΓòÉΓòÉ 17.4.5. Modifying the CTOC Header ΓòÉΓòÉΓòÉ
  10082.  
  10083. Use the mmioCFSetInfo function to modify information that is stored in the CTOC 
  10084. header of an open RIFF compound file.  You should only modify the 
  10085. aulExHdrFldUsage and aulExHdrField fields. 
  10086.  
  10087. The mmioCFSetInfo function requires a pmmcfinfo parameter which identifies a 
  10088. pointer to a user-supplied buffer that contains the modified CTOC header.  This 
  10089. buffer was filled in by mmioCFGetInfo and then modified by the user.  Use the 
  10090. cBytes parameter to specify the size of the pmmcfinfo buffer.  This is the 
  10091. maximum number of bytes that will be copied. 
  10092.  
  10093.  
  10094. ΓòÉΓòÉΓòÉ 17.4.6. The MMCTOCENTRY Structure ΓòÉΓòÉΓòÉ
  10095.  
  10096. The MMIO Manager uses the MMCTOCENTRY data structure to maintain state 
  10097. information on an open file.  The MMCTOCENTRY data structure is defined in the 
  10098. MMIOOS2.H header file as shown. 
  10099.  
  10100. typedef struct _MMCTOCENTRY  {
  10101.  ULONG    ulOffset;         /* Offset of element within CGRP       */
  10102.  ULONG    ulSize;           /* Size of element                     */
  10103.  ULONG    ulMedType;        /* FOURCC of element                   */
  10104.  ULONG    ulMedUsage;       /* Possible sub type                   */
  10105.  ULONG    ulCompressTech;   /* Compression technique used          */
  10106.  ULONG    ulUncompressBytes;/* Actual size of uncompressed element */
  10107.  } MMCTOCENTRY;
  10108.  
  10109.  
  10110. ΓòÉΓòÉΓòÉ 17.4.7. Adding an Entry to the CTOC Chunk ΓòÉΓòÉΓòÉ
  10111.  
  10112. Use the mmioCFAddEntry function to add an entry to the CTOC chunk of an open 
  10113. RIFF compound file.  (Do not duplicate entries.)  The mmioCFAddEntry function 
  10114. requires a pmmctocentry parameter which identifies a pointer to a user-supplied 
  10115. CTOC structure containing the CTOC data. The "identifier" for the entry is the 
  10116. element name, which is passed in the pmmctocentry buffer.  If mmioCFAddEntry 
  10117. expands the current number of entries past the number currently allocated, on a 
  10118. mmioCFClose the CTOC is written following the CGRP in the file. 
  10119.  
  10120.  
  10121. ΓòÉΓòÉΓòÉ 17.4.8. Changing a CTOC Entry ΓòÉΓòÉΓòÉ
  10122.  
  10123. Use the mmioCFChangeEntry function to modify a CTOC entry in an open RIFF 
  10124. compound file.  The mmioCFChangeEntry function requires a pmmctocentry 
  10125. parameter which identifies a pointer to a user-supplied CTOC structure 
  10126. containing modified CTOC data.  The "identifier" for the entry is the element 
  10127. name, which is passed in the pmmctocentry buffer.  The mmioCFChangeEntry 
  10128. function updates the CTOC entry with the information contained in the user's 
  10129. pmmctocentry.  If you change the compression technique, you must also modify 
  10130. the ulUncompressBytes field.  When the compression technique is NULL, the 
  10131. uncompressed bytes field must be the size in bytes of the element when it is 
  10132. uncompressed. 
  10133.  
  10134.  
  10135. ΓòÉΓòÉΓòÉ 17.4.9. Finding a CTOC Entry ΓòÉΓòÉΓòÉ
  10136.  
  10137. The mmioCFFindEntry function enables you to find a particular entry in an open 
  10138. RIFF compound file.  The mmioCFFindEntry function requires the pmmctocentry 
  10139. parameter which identifies a pointer to a user-supplied CTOC structure 
  10140. containing the name of the RIFF compound file element to search for.  You can 
  10141. set flags in ulFlags to specify that an element is to be searched for by some 
  10142. attribute other than its name. 
  10143.  
  10144. Flags for mmioCFFindEntry include the following. 
  10145.  
  10146. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10147. ΓöéFlag                          ΓöéDescription                   Γöé
  10148. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10149. ΓöéMMIO_FINDFIRST                ΓöéFinds the first entry in the  Γöé
  10150. Γöé                              ΓöéCTOC table.                   Γöé
  10151. Γöé                              ΓöéNote: MMIO_FINDFIRST is       Γöé
  10152. Γöé                              Γöéignored if you set either     Γöé
  10153. Γöé                              ΓöéMMIO_FINDDELETED or           Γöé
  10154. Γöé                              ΓöéMMIO_FINDNEXT.                Γöé
  10155. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10156. ΓöéMMIO_FINDNEXT                 ΓöéFinds the next entry in the   Γöé
  10157. Γöé                              ΓöéCTOC table after the entry    Γöé
  10158. Γöé                              Γöéthat contains the element     Γöé
  10159. Γöé                              Γöésearched for.                 Γöé
  10160. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  10161. ΓöéMMIO_FINDDELETED              ΓöéFinds the first entry in the  Γöé
  10162. Γöé                              Γöétable that has been marked as Γöé
  10163. Γöé                              Γöé"deleted", or the next deletedΓöé
  10164. Γöé                              Γöéentry following the entry thatΓöé
  10165. Γöé                              Γöécontains the element to searchΓöé
  10166. Γöé                              Γöéfor.                          Γöé
  10167. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10168.  
  10169. The search is case-insensitive.  If no flags are set, the search is for the 
  10170. element only.  If the function succeeds, the pmmctocentry buffer is filled with 
  10171. information about the CTOC entry.  You can progress through the CTOC entry list 
  10172. by doing a FINDFIRST followed by a series of FINDNEXT, using the information 
  10173. from the previous function. 
  10174.  
  10175.  
  10176. ΓòÉΓòÉΓòÉ 17.4.10. Deleting a CTOC Entry ΓòÉΓòÉΓòÉ
  10177.  
  10178. Use the mmioCFDeleteEntry function to delete a CTOC entry in an open RIFF 
  10179. compound file.  The mmioCFDeleteEntry function requires a pmmctocentry 
  10180. parameter, which identifies a pointer to a user-supplied CTOC structure 
  10181. containing the RIFF compound file element name.  The "identifier" for the entry 
  10182. is the element name, which is passed in the pmmctocentry field.  The entry is 
  10183. marked "deleted" by the FOURCC of FOURCC_DEL.  The actual element data remains 
  10184. in place.  To physically remove both the entry and the element's data, use the 
  10185. mmioCFCopy function. 
  10186.  
  10187.  
  10188. ΓòÉΓòÉΓòÉ 17.4.11. Adding an Element to the CGRP Chunk ΓòÉΓòÉΓòÉ
  10189.  
  10190. Use mmioCFAddElement to add an element to the CGRP chunk of an open RIFF 
  10191. compound file.  The mmioCFAddElement function requires: 
  10192.  
  10193.      A pointer to the name of the element that you want to add to the CGRP 
  10194.       chunk (pszElementName) 
  10195.  
  10196.      The four-character code of the element (fccType) 
  10197.  
  10198.      A pointer to the caller-supplied buffer containing the element data 
  10199.       (pchBuffer) 
  10200.  
  10201.      The size of the caller-supplied buffer (cchBytes). 
  10202.  
  10203.  The CTOC entry for the element does not have to exist before you call 
  10204.  mmioCFAddElement.  If the CTOC entry exists, mmioCFChangeEntry modifies its 
  10205.  contents.  If the CTOC entry does not exist, mmioCFAddEntry is called to add 
  10206.  the CTOC entry for this element.  The mmioCFAddElement function writes the 
  10207.  element to the end of the CGRP chunk.  The user's buffer contains the element 
  10208.  data. 
  10209.  
  10210.  The CGRP chunk may precede the CTOC chunk and overwrite the CTOC on the file 
  10211.  system.  This is corrected when the RIFF compound file is closed and the CTOC 
  10212.  is rewritten. 
  10213.  
  10214.  Note:  You can also add an element to the CGRP chunk by specifying MMIO_CREATE 
  10215.         using the mmioOpen function. 
  10216.  
  10217.  
  10218. ΓòÉΓòÉΓòÉ 17.4.12. Copying CTOC and CGRP Chunks ΓòÉΓòÉΓòÉ
  10219.  
  10220. Use the mmioCFCopy function to copy the CTOC and CGRP chunks from an open RIFF 
  10221. compound file to another RIFF compound file.  The mmioCFCopy function requires 
  10222. a pszDestFileName parameter, which identifies the pointer to the name of the 
  10223. destination file. 
  10224.  
  10225. The mmioCFCopy function opens the destination file for MMIO_CREATE (using 
  10226. mmioOpen) and builds a RIFF BND header at the beginning of the file.  The CTOC 
  10227. and CGRP chunks are then copied.  The newly written CGRP chunk is compacted; it 
  10228. has no deleted elements. 
  10229.  
  10230.  
  10231. ΓòÉΓòÉΓòÉ 17.4.13. Compacting RIFF Compound Files ΓòÉΓòÉΓòÉ
  10232.  
  10233. Use the mmioCFCompact function to compact a RIFF compound file in place.  The 
  10234. file must not be opened by any other process or the compaction fails.  Upon 
  10235. success a new CGRP is written into the same source file with no deleted 
  10236. elements. 
  10237.  
  10238.  
  10239. ΓòÉΓòÉΓòÉ 18. Sample Application Programs ΓòÉΓòÉΓòÉ
  10240.  
  10241. This section gives a brief overview of the sample application programs provided 
  10242. with the Toolkit, including programming concepts and program flow diagrams for 
  10243. each of the sample programs. 
  10244.  
  10245. The purpose of the OS/2 multimedia sample programs is to illustrate multimedia 
  10246. programming concepts and establish a basis for creating your own multimedia 
  10247. applications.  The programs provide you with practical examples that span a 
  10248. range of multimedia concepts. The source code provided shows you how to use 
  10249. multimedia controls and functions to create multimedia applications. Each 
  10250. sample program serves as a template that can be modified easily to meet your 
  10251. multimedia application requirements. The samples were compiled and verified 
  10252. using the IBM C Set ++ and VisualAge C++ compilers. 
  10253.  
  10254. Some samples require specific hardware devices. Without these devices, you can 
  10255. still compile and run the sample programs; however, you might not receive the 
  10256. full effect of the program.  For example, if a sample program has audio, you 
  10257. will not hear it unless you have a supported audio adapter and speakers 
  10258. installed. 
  10259.  
  10260.  
  10261. ΓòÉΓòÉΓòÉ 18.1. Subdirectory Structure ΓòÉΓòÉΓòÉ
  10262.  
  10263. Code for the sample programs (and associated files such as waveform audio files 
  10264. and movie files) are located in the following subdirectories. 
  10265.  
  10266.  
  10267. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10268. ΓöéTOOLKIT Γöé OS/2 Developer's Toolkit
  10269. ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10270.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10271.    Γö£ΓöÇΓöñ   H    Γöé Header Files
  10272.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10273.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10274.    Γö£ΓöÇΓöñ  INC   Γöé Include Files
  10275.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10276.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10277.    Γö£ΓöÇΓöñ  LIB   Γöé Library Files
  10278.    Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10279.    Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10280.    ΓööΓöÇΓöñSAMPLES Γöé Samples
  10281.      ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  10282.          Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10283.          ΓööΓöÇΓöñ   MM   Γöé OS/2 Multimedia Samples
  10284.            ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  10285.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10286.                Γö£ΓöÇΓöñASYMREC Γöé Asymmetric Recording Sample
  10287.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10288.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10289.                Γö£ΓöÇΓöñAVCINST Γöé AVC I/O Procedure Installation Sample
  10290.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10291.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10292.                Γö£ΓöÇΓöñ CAPDLL Γöé Caption DLL
  10293.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10294.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10295.                Γö£ΓöÇΓöñCAPSAMP Γöé Caption Sample Application
  10296.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10297.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10298.                Γö£ΓöÇΓöñCAPTION Γöé Caption Creation Utility
  10299.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10300.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10301.                Γö£ΓöÇΓöñ CLOCK  Γöé Memory Playlist Sample
  10302.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10303.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10304.                Γö£ΓöÇΓöñDOUBPLAYΓöé Double Buffering Playlist Sample
  10305.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10306.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10307.                Γö£ΓöÇΓöñ DIVE   Γöé Direct Interface Video Extensions Sample
  10308.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10309.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10310.                Γö£ΓöÇΓöñ DUET1  Γöé Streaming Device Duet Sample
  10311.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10312.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10313.                Γö£ΓöÇΓöñ DUET2  Γöé Streaming and Non-Streaming Device Duet Sample
  10314.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10315.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10316.                Γö£ΓöÇΓöñ MCISPY Γöé MCISpy Sample
  10317.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10318.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10319.                Γö£ΓöÇΓöñMCISTRNGΓöé Media Control Interface String Test Sample
  10320.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10321.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10322.                Γö£ΓöÇΓöñMMBROWSEΓöé Image Browser Sample
  10323.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10324.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10325.                Γö£ΓöÇΓöñ MOVIE  Γöé Movie Sample
  10326.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10327.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10328.                Γö£ΓöÇΓöñRECORDERΓöé Audio Recorder Sample
  10329.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10330.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10331.                Γö£ΓöÇΓöñSHORTCF Γöé Control File Templates
  10332.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10333.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10334.                Γö£ΓöÇΓöñ TUNER  Γöé TV Tuner Sample
  10335.                Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10336.                Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10337.                ΓööΓöÇΓöñULTIEYESΓöé Non-Linear Video Sample
  10338.                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10339.  
  10340. Note:  The SHORTCF subdirectory contains control file templates you can utilize 
  10341.        when installing a program using MINSTALL. See Installing a Program Using 
  10342.        MINSTALL for further details. 
  10343.  
  10344.  
  10345. ΓòÉΓòÉΓòÉ 18.2. ASYMREC - Asymmetric Recording Sample ΓòÉΓòÉΓòÉ
  10346.  
  10347. This sample (ASYMREC) illustrates how to include asymmetric recording function 
  10348. in your multimedia application.  Modules include source code extracted from the 
  10349. Video IN Recorder application, which enables frame-step recording using 
  10350. Ultimotion compression techniques. 
  10351.  
  10352. Frame-step recording captures the audio and video in a two-pass operation. 
  10353. First, it captures the audio in real time. It then returns to the point in the 
  10354. media where recording started to capture the video frame by frame. 
  10355.  
  10356.  
  10357. ΓòÉΓòÉΓòÉ 18.2.1. Source Code ΓòÉΓòÉΓòÉ
  10358.  
  10359. The following files are located in the \TOOLKIT\SAMPLES\MM\ASYMREC 
  10360. subdirectory. 
  10361.  
  10362.  ASYMREC.H       Is the header file for the asymmetric recording sample. See 
  10363.                  this file for a complete description of the asymmetric 
  10364.                  recorder data structures. 
  10365.  
  10366.  ASYMREC.C       Is the sample program code for the asymmetric recording 
  10367.                  sample. It includes code for the following functions: 
  10368.  
  10369.                  OpenMMIO 
  10370.                          Opens and identifies the I/O procedure to install. 
  10371.  
  10372.                  IdentifyIOProc 
  10373.                          Loads and installs the known I/O procedure. Also, 
  10374.                          attempts to open the movie file using this I/O 
  10375.                          procedure. 
  10376.  
  10377.                  AssociateCodec 
  10378.                          Sends MMIOM_SET to associate the CODEC for later use 
  10379.                          in compression. 
  10380.  
  10381.                  InitiateFrameStepRecord 
  10382.                          Initializes the environment for frame-step recording 
  10383.                          and starts a frame-step record thread. 
  10384.  
  10385.                  CompressBuffer 
  10386.                          Calls the AVI I/O procedure and Ultimotion CODEC 
  10387.                          procedure to compress a buffer. 
  10388.  
  10389.                  StartVideoThread 
  10390.                          Starts a recording thread for doing the frame-step. 
  10391.  
  10392.                  Detailed information about each function is provided in the 
  10393.                  source code. 
  10394.  
  10395.  
  10396. ΓòÉΓòÉΓòÉ 18.2.2. Real-Time Capture and Asymmetric Capture ΓòÉΓòÉΓòÉ
  10397.  
  10398. Typically, a stream is established to read a series of moving images from the 
  10399. device.  This continuous capture mode is called symmetric or real-time capture, 
  10400. and is performed at a constant frame rate and constant frame size.  When 
  10401. established, a stream captures images continuously without assistance from the 
  10402. application code.  However, video images can be captured one frame at a time 
  10403. when directed by the application.  This type of capture mode is referred to as 
  10404. asymmetric capture because the time between successive frames is not constant. 
  10405. The frame rate is determined by how long the application delays between taking 
  10406. image snapshots.  Asymmetric capture is performed with IOCtls only; the OS/2 
  10407. multimedia streaming mechanism is not used. 
  10408.  
  10409.  
  10410. ΓòÉΓòÉΓòÉ 18.2.3. Asymmetric Recording Architecture ΓòÉΓòÉΓòÉ
  10411.  
  10412. Several passes through the source data are required to produce an Ultimotion 
  10413. movie file. 
  10414.  
  10415. During the first pass, the capture routines position the video source device to 
  10416. the starting position in the source video.  It then uses OS/2 multimedia to 
  10417. record the desired audio track. If the desired final format for the movie 
  10418. requires both audio and video to be interleaved, MULTITRACKWRITE interleaves 
  10419. them. 
  10420.  
  10421. During the second pass, capture routines use OS/2 multimedia to position the 
  10422. video source at the desired location. For each frame in the movie, an MCI_STEP 
  10423. message is sent to the MCD controlling the source device. When the resulting 
  10424. image has been "grabbed" or "digitized" by the capture hardware, the video data 
  10425. is retrieved and written to disk through the AVI I/O procedure. This process 
  10426. continues until the required video is captured. 
  10427.  
  10428. Note:  Only the second pass is used if you are recording video without audio. 
  10429.  
  10430.  The following figure illustrates the architecture of the components involved 
  10431.  in doing asymmetric capture and compression of video from frame accurate 
  10432.  devices. 
  10433.  
  10434.  
  10435.  
  10436.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10437.    Γöé Asymmetric Recorder ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                   Γöé
  10438.     ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                                Γöé                   Γöé
  10439.   ΓöîΓöÿ Γöé Media Control Interface Commands and Notifications Γöé                   Γöé
  10440.   ΓöéΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  10441.   ΓöéΓöé Media Device Manager                                                    ΓöéΓöé
  10442.   ΓöéΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10443.   Γöé  .WAV data   Γöé                Γöé                Γöé                      ΓöîΓöÇΓöÇΓöÇΓöÿ
  10444.   Γöé ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÉ
  10445.   Γöé ΓööΓö┤Γö┤Γö┤Γö┤ΓöÿΓöÇΓöÇΓöñAmplifier MixerΓöé  ΓöéVideo DiscΓöé     ΓöéDigital Media Γöé    ΓöéAVI   Γö£ΓöÉ
  10446.   Γöé Γöé        ΓöéMedia Driver   Γöé  ΓöéDriver    Γöé     ΓöéDriver        Γöé  ΓöîΓöÇIOProcΓöéΓöé
  10447.   Γöé Γöé        ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼Γöÿ  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10448.   Γöé Γöé         Γöé           Γöé              Γöé               Γöé        Γöé    Γöé    Γöé
  10449.   Γöé Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ   ΓöîΓö¼Γö¼Γö¼Γö╝ΓöÉ   Γöé    Γöé
  10450.   Γöé Γöé  ΓöéAudio    Γöé   ΓöéSPI InterfacesΓöé Γöé Laser DiscΓöé ΓöéVSD   Γöé   ΓööΓö┤Γö┤Γö┤Γö┤Γöÿ   ΓööΓöÇΓöÇΓöÉ Γöé
  10451.   Γöé Γöé  ΓöéAdapter  Γöé   ΓöéSSM           Γöé Γöé           Γöé ΓöéDriverΓöé   uncompressedΓöé Γöé
  10452.   Γöé Γöé  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ   video frame Γöé Γöé
  10453.   Γöé Γöé          audio data   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé              ΓöîΓöÇΓöÇΓöÿ Γöé
  10454.   Γöé Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöé
  10455.   Γöé ΓööΓöÇ MMIOΓöéΓöÇΓööΓö┤Γö┤Γö┤Γö┤ΓöÿΓöÇ Multitrack     Γöé      Γöé     ΓöéVideo CaptureΓöé ΓöéCODEC  ΓöéΓöé
  10456.   Γöé   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ         Γöé Stream Handler Γöé      Γöé     ΓöéPDD          Γöé Γöé       ΓöéΓöé
  10457.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé
  10458.                             Γöé                 Γöé          Γöé                   Γöé
  10459.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          Γöé
  10460.                       Γöé MMIO           Γöé      Γöé     ΓöéVideo AdapterΓöé          Γöé
  10461.                       Γöé Manager        Γöé      Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ          Γöé
  10462.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ ΓöîΓö¼Γö¼Γö¼Γö¼ΓöÉΓöÇΓöÇΓöÇΓöÇΓöÿ
  10463.                             Γöé                                     ΓööΓö┤Γö┤Γö┤Γö┤Γöÿ
  10464.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                           Compressed
  10465.                       Γöé AVI            Γöé                           Data
  10466.                       Γöé IOProc         Γöé
  10467.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10468.                             Γöé
  10469.                       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10470.                       Γöé Movie          Γöé
  10471.                       Γöé File           Γöé
  10472.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10473.  
  10474.  
  10475. ΓòÉΓòÉΓòÉ 18.2.4. MMMULTITRACKREAD Operations ΓòÉΓòÉΓòÉ
  10476.  
  10477. The MMMULTITRACKREAD structure contains the following parameters: 
  10478.  
  10479.      Pointer to the read buffer (pBuffer) 
  10480.      Length of the read buffer (ulLength) 
  10481.      Read flags (ulFlags) 
  10482.      Number of track entries or number of tracks (ulNumTracks) 
  10483.      Pointer to a track map list (pTrackMapList) 
  10484.      Actual buffer length available in MULTITRACKREAD extended mode 
  10485.       (ulBufferLength) 
  10486.  
  10487.  The track map list is a list of valid track numbers for the current file and 
  10488.  is used to map a track to a record table. Each track map list contains: 
  10489.  
  10490.      A track ID (ulTrackID) 
  10491.      The number of record entries (ulNumEntries) 
  10492.      A pointer to a record table (pRecordTabList) 
  10493.  
  10494.  Each element of the record table contains a pointer to (pBuffer) and the 
  10495.  length (ulLength) of the corresponding data in the buffer. 
  10496.  
  10497.  For example, if the number of track entries is two, the track map list will 
  10498.  contain two track map tables, one for each track. There is a corresponding 
  10499.  record table for each track. The number of entries in the track map table for 
  10500.  each track is the number of entries in the record table for a particular 
  10501.  track. The following figure illustrates the multitrack read data structure. 
  10502.  
  10503.  
  10504.     MMMULTITRACKREAD
  10505.                                                   pBuffer
  10506.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10507.   Γöé ulLength      Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB             Γöé
  10508.   Γöé pBuffer       Γöé    TABLE                  AUDIO           Γöé
  10509.   Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöÉ
  10510.   Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇ Audio  Γöé Γöé
  10511.   Γöé pTrackMapList Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé    Γöé Data 1 Γöé Γöé
  10512.   Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10513.   Γöé               Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé ΓöîΓöÇΓöÇ Video  Γöé Γöé
  10514.   Γöé ulBufferLengthΓöé  Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé  Γöé Data 1 Γöé Γöé
  10515.   Γöé(extended mode)Γöé  Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γöé Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10516.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé pRecordTabListΓöéΓöé Γöé .          Γö£ΓöÇΓö╝ΓöÇΓöÇ Audio  Γöé Γöé
  10517.                      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé Γöé  Γöé Data 2 Γöé Γöé
  10518.                      Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10519.                      Γöé .             ΓöéΓöé RECORDTAB      Γöé  Γöé Video  Γöé Γöé
  10520.                      Γöé .             ΓöéΓöé       VIDEO    ΓöéΓöîΓöÇ Data 2 Γöé Γöé ulLength
  10521.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10522.                                       Γöé Γöé pRecord  1 Γöé ΓöéΓöé Γöé .      Γöé Γöé
  10523.                                       ΓööΓöÇ ulLength   Γö£ΓöÇΓöÿΓöé Γöé .      Γöé Γöé
  10524.                                         Γöé ulParm1    Γöé  Γöé Γöé .      Γöé Γöé
  10525.                                         Γöé ulParm2    Γöé  Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10526.                                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé Γöé        Γöé Γöé
  10527.                                         Γöé .        2 Γö£ΓöÇΓöÇΓöÿ Γöé        Γöé Γöé
  10528.                                         Γöé .          Γöé    Γöé        Γöé Γöé
  10529.                                         Γöé .          Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10530.                                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ    Γöé        Γöé Γöé
  10531.                                                           Γöé        Γöé Γöé
  10532.                                                           Γöé        Γöé Γöé
  10533.   MMMULTITRACKREAD                       pBuffer          Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10534.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  Γöé        Γöé Γöé
  10535.   Γöé ulLength      Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB      Γöé  Γöé        Γöé Γöé
  10536.   Γöé pBuffer       Γöé    TABLE                  AUDIO    Γöé  Γöé        Γöé Γöÿ
  10537.   Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓööΓöÇΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ ΓöÉ
  10538.   Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇ Audio  Γöé Γöé
  10539.   Γöé pTrackMapList Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé    Γöé Data 1 Γöé Γöé
  10540.   Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé    Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10541.   Γöé               Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé ΓöîΓöÇΓöÇ Video  Γöé Γöé
  10542.   Γöé ulBufferLengthΓöé  Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé  Γöé Data 1 Γöé Γöé
  10543.   Γöé(extended mode)Γöé  Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γöé Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé ulLength
  10544.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γöé pRecordTabListΓöéΓöé Γöé .          Γö£ΓöÇΓö╝ΓöÇΓöÇ Audio  Γöé Γöé
  10545.                      Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé Γöé  Γöé Data 2 Γöé Γöé
  10546.                      Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10547.                      Γöé .             ΓöéΓöé RECORDTAB      Γöé  Γöé Video  Γöé Γöé
  10548.                      Γöé .             ΓöéΓöé       VIDEO    ΓöéΓöîΓöÇ Data 2 Γöé Γöé
  10549.                      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöéΓöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé
  10550.                                       Γöé Γöé pRecord  1 Γöé ΓöéΓöé Γöé .      Γöé Γöé
  10551.                                       ΓööΓöÇ ulLength   Γö£ΓöÇΓöÿΓöé Γöé .      Γöé Γöé
  10552.                                         Γöé ulParm1    Γöé  Γöé Γöé .      Γöé Γöé
  10553.                                         Γöé ulParm2    Γöé  Γöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ Γöÿ
  10554.                                         Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé
  10555.                                         Γöé .        2 Γö£ΓöÇΓöÇΓöÿ
  10556.                                         Γöé .          Γöé
  10557.                                         Γöé .          Γöé
  10558.                                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10559.  
  10560.  
  10561. ΓòÉΓòÉΓòÉ 18.2.5. Multitrack Reading ΓòÉΓòÉΓòÉ
  10562.  
  10563. MULTITRACKREAD is supplied an empty buffer. The size is determined by ulLength, 
  10564. and it is pointed to by pBuffer. MULTITRACKREAD processes the data by reading 
  10565. ulLength bytes of data into the buffer, and then parsing the data in the buffer 
  10566. by media type (audio or video) into records. A pointer to the data in the 
  10567. buffer is placed in the appropriate record table. 
  10568.  
  10569. Note:  A record is a contiguous buffer containing data of the same media type. 
  10570.  
  10571.  During the processing of MULTITRACKREAD in extended mode, pBuffer points to 
  10572.  the beginning of the buffer on the first call to MULTITRACKREAD and ulLength 
  10573.  indicates the number of bytes to be read into the buffer. With each call to 
  10574.  MULTITRACKREAD, ulBufferLength (the actual total buffer length) is reduced by 
  10575.  ulLength bytes, and pBuffer points to the current location in the buffer. 
  10576.  Subsequent calls to MULTITRACKREAD reads ulLength bytes of data into the 
  10577.  buffer starting at pBuffer and repeats the process until ulBufferLength is 
  10578.  reached. 
  10579.  
  10580.  This implementation of MULTITRACKREAD allows smaller amounts of data to be 
  10581.  read at one time while allowing frames greater than the ulLength of the read. 
  10582.  For example, if the program wanted to fill a 128KB buffer while doing 32KB 
  10583.  reads, the calling sequence to MULTITRACKREAD would be (32KB, 128KB), (32KB, 
  10584.  96KB), (32KB, 64KB), and (32KB, 32KB) for (ulLength, ulBufferLength). With 
  10585.  this setup, MULTITRACKREAD can span frames across the 32KB buffers and know 
  10586.  the size of the 128KB buffer. 
  10587.  
  10588.  During MULTITRACKREAD processing in regular mode, pBuffer always points to the 
  10589.  beginning of the buffer and ulLength indicates the number of bytes to be read 
  10590.  into the buffer. The buffer is filled completely with each call to 
  10591.  MULTITRACKREAD and subsequent calls, to MULTITRACKREAD, read ulLength bytes of 
  10592.  data into the buffer starting at the beginning of the buffer (pointed to by 
  10593.  pBuffer). 
  10594.  
  10595.  Note:  If the MULTITRACKREAD_EXTENDED bit flag is set, the calling routine has 
  10596.         passed the extended MMMULTITRACKREAD structure with the new 
  10597.         ulBufferLength field in this structure. 
  10598.  
  10599.  
  10600. ΓòÉΓòÉΓòÉ 18.2.6. MMMULTITRACKWRITE Operations ΓòÉΓòÉΓòÉ
  10601.  
  10602. The MMMULTITRACKWRITE structure contains the following parameters: 
  10603.  
  10604.      Number of tracks (ulNumTracks) 
  10605.      A pointer to a track map list (pTrackMapList) 
  10606.      Read flags (ulFlags) 
  10607.  
  10608.  The track map list is a list of valid track numbers for the current file and 
  10609.  is used to map a track for a record table. Each track map list contains: 
  10610.  
  10611.      A track ID (ulTrackID) 
  10612.      Number of record entries (ulNumEntries) 
  10613.      A pointer to a record table (pRecordTabList) 
  10614.  
  10615.  Each element of the record table contains a pointer (pRecord) to and the 
  10616.  length (ulLength) of the corresponding data in the buffer. 
  10617.  
  10618.  For example, if the number of track entries is two, the track map list 
  10619.  contains two track map tables, one for each track. There is a corresponding 
  10620.  write record table for each track. The number of entries in the track map 
  10621.  table for each track is the number of entries in the write record table for a 
  10622.  particular track. 
  10623.  
  10624.  Note:  A record is a contiguous buffer containing data of the same media type. 
  10625.  
  10626.  The following figure illustrates the multitrack write data structure. 
  10627.  
  10628.  
  10629.      MMMULTITRACKWRITE
  10630.  
  10631.    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10632.    Γöé ulNumtracks   Γö£ΓöÇΓöÿ  TRACKMAP         RECORDTAB             Γöé
  10633.    Γöé pTrackMapList Γöé    TABLE                  AUDIO           Γöé
  10634.    Γöé ulFlags       Γöé  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10635.    Γöé ulNumTracks   Γöé  Γöé ulTrackID     Γöé  Γöé pRecord  1 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Audio  Γöé
  10636.    Γöé               Γö£ΓöÇΓöÇ ulNumEntries  Γö£ΓöÇΓöÇ ulLength   Γöé     Γöé Data 1 Γöé
  10637.    Γöé               Γöé  Γöé pRecordTabListΓöé  Γöé ulParm1    Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10638.    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ  Γöé ulParm2    Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10639.                       Γöé ulTrackID     Γöé  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé Audio  Γöé
  10640.                       Γöé ulNumEntries  Γö£ΓöÉ Γöé .        2 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 2 Γöé
  10641.                       Γöé pRecordTabListΓöéΓöé Γöé .          Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10642.                       Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñΓöé Γöé .          Γöé
  10643.                       Γöé .             ΓöéΓöé ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10644.                       Γöé .             ΓöéΓöé
  10645.                       Γöé .             ΓöéΓöé
  10646.                       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10647.                                        Γöé Γöé pRecord  1 Γöé     Γöé Video  Γöé
  10648.                                        ΓööΓöÇ ulLength   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 1 Γöé
  10649.                                          Γöé ulParm1    Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10650.                                          Γöé ulParm2    Γöé     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10651.                                          Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ     Γöé Video  Γöé
  10652.                                          Γöé .        2 Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇ Data 2 Γöé
  10653.                                          Γöé .          Γöé     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10654.                                          Γöé .          Γöé
  10655.                                          ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10656.  
  10657.  
  10658. ΓòÉΓòÉΓòÉ 18.2.7. Multitrack Writing ΓòÉΓòÉΓòÉ
  10659.  
  10660. MULTITRACKWRITE provides a list of records by media type and processes the data 
  10661. by using the pointers in the write record table to locate the data in the 
  10662. buffers and write the data to the file. 
  10663.  
  10664. If the MULTITRACKWRITE_MERGE bit flag is not set, MULTITRACKWRITE writes all of 
  10665. the records sequentially from the first entry in the track map table (for the 
  10666. first track) followed by all records for the second track. 
  10667.  
  10668. If the MULTITRACKWRITE_MERGE bit flag is set, MULTITRACKWRITE attempts to 
  10669. interleave the digitalvideo track with the digitalaudio track. Interleaving is 
  10670. accomplished based on the size of the audio buffer. For example, if a 4KB audio 
  10671. buffer represents one-third of a second and the frame rate is 15 frames per 
  10672. second, the interleave factor would be 5:1 (5 video frames to 1 audio chunk). 
  10673.  
  10674.  
  10675. ΓòÉΓòÉΓòÉ 18.3. AVCINST - AVC I/O Procedure Installation Sample ΓòÉΓòÉΓòÉ
  10676.  
  10677. This sample (AVCINST) explains how an application can install and remove an I/O 
  10678. procedure to use multimedia input/output (MMIO) file services. The AVC I/O 
  10679. Procedure Installation Sample is a simple PM application that allows you to 
  10680. install or deinstall the audio AVC I/O procedure, AVCAPROC.DLL. 
  10681.  
  10682. Note:  This sample shows the installation and removal of a system-defined I/O 
  10683.        procedure. Typically, you would install a custom I/O procedure that was 
  10684.        not built into the MMPMMMIO.INI file during installation. 
  10685.  
  10686.  
  10687. ΓòÉΓòÉΓòÉ 18.3.1. Program Flow ΓòÉΓòÉΓòÉ
  10688.  
  10689. The following figure illustrates the interaction between OS/2 multimedia system 
  10690. components and the AVC I/O Procedure Installation sample program. Source code 
  10691. is located in the \TOOLKIT\SAMPLES\MM\AVCINST subdirectory. 
  10692.  
  10693.  
  10694. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10695. ΓöéAVO I/O Procedure InstallationΓöé
  10696. Γöé       Sample Program         Γöé
  10697. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10698.        (1)     
  10699.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10700.     Γöé    MMIO Manager     Γöé
  10701.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10702.        (2)     
  10703.     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10704.     Γöé  AVC I/O Procedure  Γöé
  10705.     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10706.  
  10707.  (1)    When OK is selected, the AVC I/O Procedure Installation program calls 
  10708.         the mmioInstallfIOProc function to install or deinstall the AVC I/O 
  10709.         procedure (AVCAPROC.DLL) in the system. 
  10710.  
  10711.  (2)    The MMIO Manager installs or deinstalls the AVC I/O procedure. 
  10712.  
  10713.  
  10714. ΓòÉΓòÉΓòÉ 18.4. CAPTION - Caption Creation Utility ΓòÉΓòÉΓòÉ
  10715.  
  10716. The Caption Creation Utility (CAPTION) is part of the sample captioning system 
  10717. provided with the Toolkit. See Captioning for additional information on this 
  10718. sample captioning system. 
  10719.  
  10720. The Caption Creation Utility program enables the synchronization of an audio 
  10721. file with a text file. 
  10722.  
  10723. Note:  This concept can be extended beyond audio and text to apply to many 
  10724.        possibilities, such as synchronizing audio and video, or synchronizing 
  10725.        video and text. 
  10726.  
  10727.  While the audio file is playing, the Caption Creation Utility program issues 
  10728.  the MCI_STATUS command to obtain a media-position value of the audio file. The 
  10729.  media-position value is combined with the text file to produce a caption file. 
  10730.  An application can use the resulting caption file in conjunction with the 
  10731.  Caption DLL to provide captioning in an application. 
  10732.  
  10733.  
  10734. ΓòÉΓòÉΓòÉ 18.4.1. Program Flow ΓòÉΓòÉΓòÉ
  10735.  
  10736. The following figure illustrates the interaction between the audio, text, and 
  10737. caption file with the Caption Creation Utility program. Source code for the 
  10738. Caption Creation Utility is located in the \TOOLKIT\SAMPLES\MM\CAPTION 
  10739. subdirectory. 
  10740.  
  10741.  (1)    Select an audio file and a corresponding text file to synchronize with 
  10742.         the selected audio file. For example, you might want to synchronize the 
  10743.         text of a poem with an audio file of someone reading the poem. When you 
  10744.         open a text file, the first line of text appears at the bottom of the 
  10745.         text window. The first line of the text file selected in the example 
  10746.         shown in the previous figure is "Welcome to MMPM/2's sample captioning 
  10747.         system." 
  10748.  
  10749.  (2)    In order to begin the synchronization process, you must select Start 
  10750.         timing. The audio file begins to play and Advance line becomes enabled. 
  10751.  
  10752.  (3)    Select Advance line to scroll to the next line of text. The next line 
  10753.         of text is scrolled and appears in the text window. 
  10754.  
  10755.  (4)    When you select Advance line, the Caption Creation Utility program 
  10756.         passes the device ID, the MCI_STATUS command with the MCI_STATUS_ITEM 
  10757.         flag, and the MCI_STATUS_PARMS data structure with the ulItem field set 
  10758.         to MCI_STATUS_POSITION to the Media Device Manager (MDM). Upon return, 
  10759.         the ulReturn field of the MCI_STATUS_PARMS data structure contains the 
  10760.         current position of the device in MMTIME units. 
  10761.  
  10762.  (5)    When the Caption Creation Utility program receives the position value, 
  10763.         it writes the time value and the line of text to the caption file. The 
  10764.         caption file contains the same text as the text file, but each line in 
  10765.         the caption file is preceded by the time in the audio file when that 
  10766.         line of text should be displayed. 
  10767.  
  10768.  
  10769. ΓòÉΓòÉΓòÉ 18.5. CAPSAMP and CAPDLL ΓòÉΓòÉΓòÉ
  10770.  
  10771. The Caption Sample Application (CAPSAMP) and Caption DLL (CAPDLL) are part of 
  10772. the sample captioning system provided with the Toolkit.  See Captioning for 
  10773. additional information on this sample captioning system. 
  10774.  
  10775. The Caption Sample Application and Caption DLL are provided to demonstrate how 
  10776. captioning can be integrated into applications using caption files in 
  10777. conjunction with the Caption DLL. 
  10778.  
  10779.  
  10780. ΓòÉΓòÉΓòÉ 18.5.1. Program Flow ΓòÉΓòÉΓòÉ
  10781.  
  10782. The following figure illustrates the interaction between the captioning 
  10783. components and the media control interface layer. Source code for the Caption 
  10784. Sample Application and Caption DLL are located respectively in the 
  10785. \TOOLKIT\SAMPLES\MM\CAPSAMP and \TOOLKIT\SAMPLES\MM\CAPDLL subdirectories. 
  10786.  
  10787.  
  10788. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10789. Γöé      Caption      Γöé
  10790. Γöé      Sample       Γö£ΓöÇΓöÇΓöÇ(2D)ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10791. Γöé    Application    Γöé             Γöé
  10792. ΓööΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼ΓöÇΓöÇΓö¼Γöÿ             Γöé
  10793. (2)(3)(4)(1)(2)(4)(5)             Γöé
  10794.  Γöé  Γöé  Γöé                      Γöé
  10795.  Γöé  Γöé  Γöé ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÉ
  10796.  Γöé  Γöé  Γöé Γöé  Caption DLL  Γöé(2D) ΓöéCaptionΓöé
  10797.  Γöé  Γöé  Γöé Γöé               Γöé     Γöé File  Γöé
  10798.  Γöé  Γöé  Γöé ΓööΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10799.  Γöé  Γöé  Γöé (2B) 
  10800.  Γöé  Γöé  Γöé  Γöé  (2C)
  10801. ----------Γöé-----------------------------------
  10802. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     OS/2 Multimedia
  10803. Γöé   Media Control Interface Γöé
  10804. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10805.  
  10806.  (1)    As part of its initialization and termination routines, the Caption 
  10807.         Sample Application issues ccInitialize and ccTerminate, respectively, 
  10808.         to notify the Caption DLL to begin and end captioning. As part of the 
  10809.         termination process, the Caption DLL releases any resources previously 
  10810.         allocated for captioning. 
  10811.  
  10812.  (2)    When you select Play, the Caption Sample Application opens the audio 
  10813.         file, obtains a device ID, and plays the audio file. The Caption Sample 
  10814.         Application queries the captioning flag. (You can set this flag by 
  10815.         selecting the Captioning check box on the System page of the Multimedia 
  10816.         Setup.) If this flag is set, the application issues ccSendCommand with 
  10817.         a CC_START message to the Caption DLL. The Caption DLL then begins to 
  10818.         provide captioning for the application. 
  10819.  
  10820.  (2B)   When the Caption DLL receives the request to begin captioning, it 
  10821.         issues a set position advise message to the multimedia system for every 
  10822.         1500 time units. 
  10823.  
  10824.  (2C)   When the device moves 1500 time units, the Caption DLL receives an 
  10825.         MM_MCIPOSITIONCHANGE message from the multimedia system. 
  10826.  
  10827.  (2D)   Whenever the Caption DLL receives the MM_MCIPOSITIONCHANGE message, it 
  10828.         checks the caption file for the appropriate line to display, based on 
  10829.         the current position of the audio file. The Caption DLL then scrolls 
  10830.         the caption window in the application, to display the appropriate line. 
  10831.  
  10832.  (3)    If you pause the audio file, change the volume, or move the audio 
  10833.         slider position, the Caption Sample Application does not have to 
  10834.         perform any additional processing to manage the caption window. This 
  10835.         processing is managed by the Caption DLL. 
  10836.  
  10837.  (4)    When you select Stop, the Caption Sample Application sends an MCI_STOP 
  10838.         message to the audio device. The application then issues ccSendCommand 
  10839.         with a CC_STOP message, informing the Caption DLL to stop displaying 
  10840.         the caption window in the application. 
  10841.  
  10842.  (5)    You can change several properties of the caption window by selecting 
  10843.         Settings from the Options menu of the Caption Sample Application. The 
  10844.         application issues ccSendCommand with a CC_STATUS message to query the 
  10845.         current properties of the caption window. When you select OK to save 
  10846.         the desired properties, the Caption Sample Application issues the 
  10847.         ccSendCommand with a CC_SET message to the Caption DLL. The Caption DLL 
  10848.         handles changing and displaying the new properties of the caption 
  10849.         window. 
  10850.  
  10851.  
  10852. ΓòÉΓòÉΓòÉ 18.6. CLOCK - Memory Playlist Sample ΓòÉΓòÉΓòÉ
  10853.  
  10854. The Memory Playlist Sample (CLOCK) illustrates the use of the memory playlist 
  10855. feature of OS/2 multimedia. The memory playlist feature provides for easy 
  10856. manipulation of multimedia data in memory to create unique effects based on 
  10857. user input or other dynamic events. In the case of the Memory Playlist Sample, 
  10858. multimedia data is manipulated dynamically to create sound effects (chimes) 
  10859. based on the time. The sample program also illustrates the use of the 
  10860. captioning flag provided by OS/2 multimedia. The Memory Playlist Sample uses 
  10861. this flag to decide if it should provide users with a visual cue of chimes. 
  10862.  
  10863.  
  10864. ΓòÉΓòÉΓòÉ 18.6.1. Program Flow ΓòÉΓòÉΓòÉ
  10865.  
  10866. The following figure illustrates the interaction between OS/2 multimedia system 
  10867. components and the Memory Playlist Sample. Source code is located in the 
  10868. \TOOLKIT\SAMPLES\MM\CLOCK subdirectory. (Source code for the Waveform Audio 
  10869. Media Driver is located in \TOOLKIT\SAMPLES\MM\ADMCT.) 
  10870.  
  10871. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10872. Γöé Memory Playlist Γöé  (2) Γöé Audio  Γöé
  10873. Γöé Sample Program  ΓöéΓöÇΓöÇΓöÇ  Γöé File   Γöé
  10874. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10875.     (1) 
  10876. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10877. Γöé Media Device  Γöé
  10878. Γöé    Manager    Γöé
  10879. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10880.     (3) 
  10881. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10882. ΓöéWaveform Audio Γöé
  10883. Γöé Media Driver  Γöé
  10884. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10885.     (3) 
  10886. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10887. Γöé    Memory     Γöé
  10888. Γöé   Playlist    Γöé
  10889. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10890.  
  10891.  (1)    The Memory Playlist Sample queries the Media Device Manager using the 
  10892.         mciQuerySysValue function to determine whether the captioning flag is 
  10893.         set. If the flag is set, the bell in the primary window will swing back 
  10894.         and forth when a chime occurs. 
  10895.  
  10896.  (2)    The Memory Playlist Sample program initializes the playlist and loads 
  10897.         the audio files into memory. 
  10898.  
  10899.  (3)    When a chime occurs, the Memory Playlist Sample program calls the 
  10900.         Waveform Audio Media Driver through the MDM to interpret instructions 
  10901.         for the playing of three audio files in memory. The clock chimes are 
  10902.         stored in three files:  A, B, and C. Depending on the time a chime is 
  10903.         requested, the memory playlist consists of the following: 
  10904.  
  10905.             At 15 minutes past the hour, the chime plays A. 
  10906.             At 30 minutes past the hour, the chime plays A+B. 
  10907.             At 45 minutes past the hour, the chime plays A+B+A. 
  10908.             On the hour, the chime plays A+B+A+B+ (C x Hour). 
  10909.  
  10910.  
  10911. ΓòÉΓòÉΓòÉ 18.6.2. Playing a Chime ΓòÉΓòÉΓòÉ
  10912.  
  10913. Every time you want to play a chime, open the device you want to play, play it, 
  10914. and close it. The logic for the Memory Playlist Sample implementation of the 
  10915. playlist is outlined in in the following figure. 
  10916.  
  10917.                                                           (6)
  10918.                                                            Γöé
  10919.                                                            
  10920. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10921. Γöé  "Play Chime"   Γöé     ΓöéDeal with chimingΓöé      Γöé  MM_MCINOTIFY   Γöé
  10922. Γöé  push button    Γöé     Γöé     (Open)      Γöé      Γöé (Play or Open)  Γöé
  10923. Γöé                 Γöé     Γöé                 Γöé      Γöé                 Γöé
  10924. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10925.  (1)                        (2)Γöé                       (7)
  10926. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ             Γöé                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10927. ΓöéFind the nearest Γöé             Γöé                   Γöé Chiming is done.Γöé
  10928. Γöéchime time and   Γöé             Γöé                   Γöé Stop swinging   Γöé
  10929. Γöéplay it (Open)   Γöé             Γöé                   Γöé   the bell      Γöé
  10930. ΓööΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ             Γöé                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10931.      Γöé                          
  10932.      Γöé                  ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10933.      Γöé                  Γöé  Find and play  Γöé
  10934.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöé   the correct   Γöé
  10935.                         Γöé      chime      Γöé
  10936.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10937.                              (3)Γöé
  10938.                                 
  10939.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10940.                         Γöé  Open Playlist  Γöé
  10941.                         Γöé   chime device  Γöé
  10942.                         Γöéwith MCI_WAIT setΓöé
  10943.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10944.                              (4)Γöé
  10945.                                 
  10946.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10947.                         ΓöéSet up chime fileΓöé
  10948.                         Γöé   information   Γöé
  10949.                         Γöé                 Γöé
  10950.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10951.                              (5)Γöé
  10952.                                 
  10953.                         ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  10954.                         Γöé  Play Playlist  Γöé
  10955.                         Γöé with notify set Γöé
  10956.                         Γöé                 Γöé
  10957.                         ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  10958.                                 Γöé
  10959.                                 
  10960.                                (6)
  10961.  
  10962.  (1)       If Play chime is selected, processing is passed to the 
  10963.            FindTheNearestChimeTimeAndPlayIt procedure, which calculates the 
  10964.            next hour so its chime can be played.  The procedure calls 
  10965.            FindAndPlayTheCorrectChime to do the actual work required to play 
  10966.            the chime. 
  10967.  
  10968.  (2)       If it is a normally scheduled chime time (if a quarter hour has been 
  10969.            reached), processing is passed to FindAndPlayTheCorrectChime. 
  10970.  
  10971.  (3)       FindAndPlayTheCorrectChime calls OpenPlaylistChimeDevice to do open 
  10972.            processing with MCI_WAIT specified. 
  10973.  
  10974.  (4)       When the OPEN command completes, the Waveform Audio Media Driver 
  10975.            needs information about the waveform file. The 
  10976.            FindAndPlayTheCorrectChime procedure calls SetupChimeFileInformation 
  10977.            to pass this information to the driver. 
  10978.  
  10979.  (5)       After calling SetupChimeFileInformation, the 
  10980.            FindAndPlayTheCorrectChime procedure issues the mciSendCommand 
  10981.            request to play the chime with the notify flag set. 
  10982.  
  10983.  (6)       After the chime has finished playing, a notification message is sent 
  10984.            to the MainDialogProc and handled by the MM_MCINOTIFY case of the 
  10985.            switch statement. 
  10986.  
  10987.  (7)       In the MM_MCINOTIFY case of MainDialogProc, when usMCIUserParameter 
  10988.            is set to indicate the chime has stopped playing, the swinging of 
  10989.            the bell is stopped and the device is closed. 
  10990.  
  10991.  
  10992. ΓòÉΓòÉΓòÉ 18.7. DOUBPLAY - Double Buffering Playlist Sample ΓòÉΓòÉΓòÉ
  10993.  
  10994. DOUBPLAY allows an application to play audio files directly from application 
  10995. memory buffers. An array of multiple playlist structures can be constructed 
  10996. that combines playlist commands with data buffers to perform complex operations 
  10997. on multiple buffers. 
  10998.  
  10999. This sample takes a single wave file, MYWAVE.WAV, and plays it using a memory 
  11000. playlist. The playlist is constructed as a circular buffer composed of a series 
  11001. of small buffers, the sum of which may or may not be larger than the size of 
  11002. the .WAV file. This circular buffer is used to repeatedly play an audio file 
  11003. when the PLAY button is selected. As each buffer in the playlist is expended, 
  11004. the application refills the expended buffer with new data from the .WAV file. 
  11005. When all the buffers in the playlist have been expended, the playlist branches 
  11006. back to the first buffer to play the new data. This circular buffering process 
  11007. continues until the STOP button is selected or the application is closed. 
  11008.  
  11009.  
  11010. ΓòÉΓòÉΓòÉ 18.8. DIVE - Direct Interface Video Extensions Sample ΓòÉΓòÉΓòÉ
  11011.  
  11012. The DIVE Sample illustrates the use of direct interface video extensions 
  11013. (DIVE), which provides optimized blitting performance for motion video 
  11014. subsystems and applications that perform rapid screen updates in the OS/2 PM 
  11015. and full-screen environments. Using DIVE interfaces, applications can either 
  11016. write directly to video memory or use the DIVE blitter. The DIVE blitter will 
  11017. take advantage of acceleration hardware when present and applicable to the 
  11018. function being performed. 
  11019.  
  11020. Using DIVE, the sample program blits a series of 16 compressed 256-color bit 
  11021. maps to the screen. For more information on how to use the DIVE functions 
  11022. included in this sample program, see Direct Interface Video Extensions (DIVE). 
  11023.  
  11024. Note:  The DIVE sample requires OS/2 Warp, Version 3 in order to execute 
  11025.        properly. The files for the samples will be installed when the samples 
  11026.        are selected, but Workplace Shell objects will not be created for them 
  11027.        if the installed operating system is not OS/2 Warp, Version 3. 
  11028.  
  11029. The OS/2 Warp color support defaults to 16 colors. This means that your setup 
  11030. needs to be updated, otherwise the DIVE sample will not run. 
  11031.  
  11032. The maximum window size of this sample has been limited to 640x480 because 
  11033. larger window sizes may cause excessive swapping on machines with less than 
  11034. 16MB. 
  11035.  
  11036.  
  11037. ΓòÉΓòÉΓòÉ 18.9. Duet Samples ΓòÉΓòÉΓòÉ
  11038.  
  11039. This section describes the use of the media control interface layer of the OS/2 
  11040. multimedia system to manipulate devices in a hardware-independent manner.  The 
  11041. Duet sample programs (DUET1 and DUET2) illustrate the OS/2 multimedia concept 
  11042. of device grouping and integrating multimedia into an application's help 
  11043. information. See the example in the Duet Player IPF Sample section for an 
  11044. example of how multimedia can be used in an application's help information. 
  11045.  
  11046. The Duet sample programs communicate with the media control interface subsystem 
  11047. to control multimedia devices from an application in a device-independent 
  11048. manner.  This concept is illustrated by the Duet samples when they play, pause, 
  11049. resume, stop, and change the volume of their songs.  This function is 
  11050. implemented using the procedural interface, as opposed to the string interface 
  11051. described in the MCISTRNG - Media Control Interface String Test Sample. 
  11052.  
  11053. The Duet sample applications are identical except for minor software 
  11054. differences in how the hardware devices are controlled. DUET1 plays both parts 
  11055. of the duet on a streaming device-a device that streams data through the SPI 
  11056. subsystem of OS/2 multimedia.  DUET2 groups a streaming and a non-streaming 
  11057. device-a device that handles data internally and does not stream data through 
  11058. the SPI subsystem. 
  11059.  
  11060. The hardware differences between the Duet samples have little impact on the 
  11061. applications.  The media drivers and stream handlers manage the 
  11062. hardware-dependent function. 
  11063.  
  11064. Note:  To hear the duets when you run the Duet sample programs, an audio device 
  11065.        is required, for example, the M-Audio adapter.  If you do not have an 
  11066.        audio adapter, you can still compile and run the sample programs; 
  11067.        however, you will not be able to play any duets or audio help. 
  11068.  
  11069.  
  11070. ΓòÉΓòÉΓòÉ 18.9.1. DUET1 - Streaming Device Duet Sample ΓòÉΓòÉΓòÉ
  11071.  
  11072. The Streaming Device Duet Sample (DUET1) illustrates the concepts of grouping 
  11073. two streaming devices. Each song that is played by DUET1 is recorded into two 
  11074. separate waveform files (instead of a single waveform file, which is the most 
  11075. common and efficient means to record).  Think of each song as a duet, with each 
  11076. part of the duet stored in a separate waveform file. 
  11077.  
  11078. Note:  The DUET1 program will not execute correctly when using a Sound Blaster 
  11079.        adapter because the adapter does not support playing two wave files 
  11080.        simultaneously. 
  11081.  
  11082.  
  11083. ΓòÉΓòÉΓòÉ 18.9.1.1. Program Flow ΓòÉΓòÉΓòÉ
  11084.  
  11085. The following figure illustrates how the DUET1 sample program interfaces with 
  11086. the Media Device Manager (MDM) to handle the concept of grouping. Source code 
  11087. for DUET1 is located in the \TOOLKIT\SAMPLES\MM\DUET1 subdirectory. 
  11088.  
  11089.  
  11090.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11091.                               Γöé    DUET1      Γöé
  11092.                               Γöé    Sample     Γöé
  11093.                               Γöé    Program    Γöé
  11094.                               ΓööΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  11095.                                ΓöîΓöÇΓöÇΓöÿ  (1)  ΓööΓöÇΓöÉ
  11096.                                            
  11097.                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11098.                 Γöé   Waveform     Γöé          Γöé   Waveform     Γöé
  11099.                 Γöé     Audio      Γöé          Γöé     Audio      Γöé
  11100.                 ΓöéDevice Context 1Γöé   (2)    ΓöéDevice Context 2Γöé
  11101.                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11102.                              ΓööΓöÇΓöÉ             ΓöîΓöÇΓöÿ
  11103.                                             
  11104.                               ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11105.                               Γöé Media Device  Γöé
  11106.                               Γöé    Manager    Γöé
  11107.                               Γöé               Γöé
  11108.                               ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11109.                                       Γöé
  11110. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ                                
  11111. ΓöéWAVEΓöé                        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11112. ΓöéFileΓöéΓöÉ                      Γöé   Waveform    Γöé
  11113. ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ Γöé  ΓöîΓöÇΓöÉ                 Γöé Audio Media   Γöé
  11114.        ΓööΓöÇΓöéMΓöé                 Γöé    Driver     Γöé
  11115.           ΓöéMΓöé                 ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11116.        ΓöîΓöÇΓöéIΓöé                    (3)  Γöé
  11117.        Γöé  ΓöéOΓöé                         
  11118. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÉ Γöé  ΓööΓöÇΓöÿ                 ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11119. ΓöéWAVEΓöéΓöÿ                     Γöé  Sync/Stream  Γöé
  11120. ΓöéFileΓöé     Γöé                  Γöé    Manager    Γöé
  11121. ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ     Γöé                  Γöé               Γöé
  11122.            Γöé                  ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11123.            Γöé                               
  11124.            Γöé       ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ           ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11125.            Γöé                                            
  11126.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ                (4)           ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11127.      Γöé  File System Γöé            ΓöîΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓö¼ΓöÇΓöÉ       Γöé     Audio    Γöé
  11128.      ΓöéStream HandlerΓö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Γöé Γöé Γöé Γöé Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñStream HandlerΓöé
  11129.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ            ΓööΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓö┤ΓöÇΓöÿ       ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11130.                                                             (5)
  11131.                                                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11132.                                                    Γöé   Audio DD   Γöé
  11133.                                                    Γöé              Γöé
  11134.                                                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11135.                                                           
  11136.                                                    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11137.                                                    Γöé   Audio HW   Γöé
  11138.                                                    Γöé              Γöé
  11139.                                                    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÿ
  11140.                                                             ΓööΓöÇΓöÇΓöÇΓöÇΓöÿ
  11141.  
  11142.  (1)    The DUET1 program directly interfaces with media control interface 
  11143.         services using the procedural interface. 
  11144.  
  11145.         Each part of the duet is played through the OS/2 multimedia system 
  11146.         using a separate instance of a logical media device.  In this case, it 
  11147.         uses two instances of the logical waveform device, the Waveform Audio 
  11148.         Media Driver.  When the Duet Player is ready to play a song, it issues 
  11149.         the MCI_GROUP command to the MDM to set up a group of two logical 
  11150.         waveform devices.  The MDM returns a group handle to the application, 
  11151.         so that the application can refer to that group as a single unit 
  11152.         (instead of having to manage each logical device separately).  The MDM 
  11153.         handles the management of the logical media devices for the 
  11154.         application. 
  11155.  
  11156.  (2)    The MDM sets up two Waveform Audio Media Drivers as a group. 
  11157.  
  11158.  (3)    The Waveform Audio Media Driver handles the creation and management of 
  11159.         the source and target stream handlers.  In this example, the source 
  11160.         stream handler is the File System Stream Handler, and the target stream 
  11161.         handler is the Audio Stream Handler.  When the Waveform Audio Media 
  11162.         Driver receives an MCI_OPEN command from the program, it creates the 
  11163.         stream handlers. 
  11164.  
  11165.         When you select Play, Pause, or Stop, the application issues an 
  11166.         MCI_PLAY, MCI_PAUSE, or MCI_STOP message to the MDM.  The MDM then 
  11167.         passes this message to the appropriate media devices in the group. 
  11168.  
  11169.  (4)    The media driver issues SPI functions to the Sync/Stream Manager (SSM) 
  11170.         to process the play, pause, resume, and close messages from the 
  11171.         application.  The SSM controls the registration and activities of all 
  11172.         stream handlers.  SPI services enable media drivers to create, start, 
  11173.         and end data streams.  SPI also provides real-time services to enable 
  11174.         stream handlers to synchronize events.  The File System Stream Handler 
  11175.         and the Audio Stream Handler are responsible for controlling the flow 
  11176.         of application data in a continuous, real-time manner. 
  11177.  
  11178.  (5)    The target stream handlers interface with the audio device driver 
  11179.         through the inter-device-driver communication (IDC) interface.  This is 
  11180.         the interface between the stream handler and the physical device driver 
  11181.         (PDD).  The IDC interface includes Stream Handler Device (SHD) messages 
  11182.         and device driver command (DDCMD) messages. 
  11183.  
  11184.  
  11185. ΓòÉΓòÉΓòÉ 18.9.2. DUET2 - Streaming and Non-Streaming Device Duet Sample ΓòÉΓòÉΓòÉ
  11186.  
  11187. Code for the Streaming and Non-Streaming Device Duet Sample (DUET2) is almost 
  11188. identical to DUET1.  The difference is that DUET2 demonstrates how one of the 
  11189. devices in the multimedia device group can be a non-streaming device.  The song 
  11190. in DUET2 is divided in two parts, just as the song in DUET1.  However, DUET2 
  11191. plays one part of the song from a CD in a CD-ROM device connected to the 
  11192. system.  This difference in hardware is almost totally isolated from the 
  11193. application.  There is a difference of approximately 10 lines of code between 
  11194. the Duet sample programs to handle the major difference in hardware 
  11195. configurations. 
  11196.  
  11197. This major difference in hardware configuration is buffered from DUET2 by the 
  11198. media drivers. The CD Media Driver performs differently from the Waveform Audio 
  11199. Media Driver because it is dealing with a non-streaming device.  When the CD 
  11200. media driver receives a media control interface message from the program (such 
  11201. as PLAY or STOP), it must communicate with the CD-ROM device driver through the 
  11202. IOCtl interface. This is the difference between a media driver that controls a 
  11203. streaming device and a media driver that controls a non-streaming device. 
  11204.  
  11205.  
  11206. ΓòÉΓòÉΓòÉ 18.10. MCISPY - MCISpy Sample ΓòÉΓòÉΓòÉ
  11207.  
  11208. The MCISpy Sample (MCISPY) monitors media control interface messages that are 
  11209. exchanged between applications and the OS/2 multimedia subsystem. In addition 
  11210. to teaching you about multimedia messages, MCISpy also serves as a debugging 
  11211. aid. 
  11212.  
  11213. To begin monitoring messages and saving them in a log file: 
  11214.  
  11215.    1. Start MCISpy. 
  11216.    2. Select LogFile from the MCISpy menu bar. 
  11217.    3. Select Enable Message Logging. 
  11218.    4. Start the multimedia application you want to monitor. 
  11219.  
  11220.  As you interact with the application, information is displayed in the MCISpy 
  11221.  window and written to the default log file MCISPY.LOG. MCISpy monitors both 
  11222.  the string interface and the command message interface. 
  11223.  
  11224.  For the command message interface, the information consists of: 
  11225.  
  11226.      Originating process ID (PID) 
  11227.      Device ID 
  11228.      Message name 
  11229.      Message flag value 
  11230.      User parameter 
  11231.      Data 
  11232.  For the string interface, the information consists of the PID and the string 
  11233.  input. 
  11234.  
  11235.  To specify a log file other than the default log file, select Open. Use the 
  11236.  Edit functions to manage the contents of the log file. 
  11237.  
  11238.  The View menu provides views of useful information. The Installed Devices view 
  11239.  lists the logical and physical device names and product information for each 
  11240.  installed multimedia device. The MCI Flag Values view shows you the text 
  11241.  string equivalents for the hexadecimal flag values that accompany the messages 
  11242.  displayed by MCISpy during the monitoring process. 
  11243.  
  11244.  The Filter menu offers a variety of filters for the messages that are 
  11245.  displayed in the log file. You can filter the messages by: 
  11246.  
  11247.      Selecting the message names you want to see. 
  11248.  
  11249.      Selecting the device type or open device ID of the device whose messages 
  11250.       you want to see. 
  11251.  
  11252.      Disabling input from mciSendCommand, mciSendString or mdmDriverNotify 
  11253.       functions. This choice takes precedence over any other filters in effect. 
  11254.  
  11255.  Initially no filters are in effect and therefore all messages are displayed. 
  11256.  
  11257.  
  11258. ΓòÉΓòÉΓòÉ 18.10.1. Program Flow ΓòÉΓòÉΓòÉ
  11259.  
  11260. The following diagram depicts the MCISpy application implementation model. The 
  11261. stub or proxy DLL replaces the true MDM.DLL, which is renamed to MCI.DLL. The 
  11262. proxy MDM exports the same APIs at the same ordinals as the true MDM. The proxy 
  11263. MDM has forwarder entries into the MCI.DLL for the API workers. That is, the 
  11264. proxy exports and also imports the same APIs from the true MDM. 
  11265.  
  11266.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11267.                   Γöé Shared Memory  Γöé
  11268.                   Γöé  (Named)       Γöé
  11269.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11270.  Exported APIs    Γöé                Γöé                     Γöé True MDM     Γöé
  11271.                   Γöé Stub or        Γöé                     Γöé containing   Γöé
  11272.  mciSendCommand() Γöé Proxy          Γöé Forwarder entry     Γöé the API      Γöé
  11273.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ MDM.DLL        Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ workers is   Γöé
  11274.  mciSendString()  Γöé                Γöé Forwarder entry     Γöé renamed to   Γöé
  11275.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ Maintain Open  Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ MCI.DLL.     Γöé
  11276.  mdmDriverNotify()Γöé Device Ids     Γöé Forwarder entry     Γöé              Γöé
  11277.  ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ                Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ>Γöñ              Γöé
  11278.                   Γöé Notify Spy     Γöé                     Γöé              Γöé
  11279.                   Γöé Application    Γöé                     Γöé              Γöé
  11280.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11281.                   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11282.                   Γöé Shared Memory  Γöé
  11283.                   Γöé  (Named)       Γöé
  11284.                   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11285.                   Γöé MCISpy         Γöé
  11286.                   Γöé Sample Program Γöé
  11287.                   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11288.  
  11289.  
  11290. ΓòÉΓòÉΓòÉ 18.11. MCISTRNG - Media Control Interface String Test Sample ΓòÉΓòÉΓòÉ
  11291.  
  11292. The String Test Sample serves as a powerful testing and debugging tool that 
  11293. enables developers writing media drivers to control their devices at the 
  11294. application level.  The String Test Sample illustrates how an application uses 
  11295. the interpretive string interface provided by the media control interface.  It 
  11296. also illustrates how notification messages are returned from the media drivers 
  11297. to the application. 
  11298.  
  11299. The media control interface of OS/2 multimedia provides the primary mechanism 
  11300. for application control of media devices.  Applications interface with the 
  11301. media control interface (and thus with media devices) in two ways-through a 
  11302. procedural interface or through a string interface.  The procedural interface 
  11303. (also referred to as command message interface) is used for sending messages to 
  11304. the media control interface from an application using the mciSendCommand 
  11305. function.  The string interface is used for sending command language statements 
  11306. to the media control interface from an application using the mciSendString 
  11307. function. 
  11308.  
  11309. The string interface has a few advantages over the procedural interface. 
  11310. First, the string interface enables you to interactively control devices with a 
  11311. PM or command line interface.  In addition, applications that currently use 
  11312. script languages can integrate "string commands" in their script languages 
  11313. allowing you to integrate multimedia in your applications with a very low cost 
  11314. and development impact.  Finally, in certain programming circumstances, the 
  11315. string interface is also easier to use than the procedural interface.  The 
  11316. string interface simply passes a character-string buffer to the function, in 
  11317. contrast to the procedural interface, which requires the setup of certain data 
  11318. structures. 
  11319.  
  11320. Note:  The procedural interface is illustrated in the Duet Samples. 
  11321.  
  11322.  
  11323. ΓòÉΓòÉΓòÉ 18.11.1. Program Flow ΓòÉΓòÉΓòÉ
  11324.  
  11325. The following figure illustrates the interaction between OS/2 multimedia system 
  11326. components and the Media Control Interface String Test Sample program. Source 
  11327. code is located in the \TOOLKIT\SAMPLES\MM\MCISTRNG subdirectory. 
  11328.  
  11329. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11330. Γöé String Test  Γöé
  11331. ΓöéSample ProgramΓöé
  11332. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ
  11333.          Γöé
  11334. (4)Γöé   (1)
  11335. ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöÇΓöÇΓöÇΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11336. Γöé Media Device Γöé(2) Γöé   Command    Γöé
  11337. Γöé    Manager   ΓöéΓöÇΓöÇΓöÇΓöé    Table     Γöé
  11338. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11339.          Γöé
  11340. (4)Γöé   (3)
  11341. ΓöîΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11342. Γöé Media Driver Γöé
  11343. Γöé              Γöé
  11344. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11345.  
  11346.  (1)    String Test waits for you to enter a string command.  When you select 
  11347.         Send, the program calls mciSendString to send the string command to the 
  11348.         Media Device Manager (MDM). 
  11349.  
  11350.  (2)    The MDM receives the string command and uses the command table to parse 
  11351.         the string and convert it to the media control interface command 
  11352.         format. 
  11353.  
  11354.  (3)    The Media Device Manager passes the command to the appropriate media 
  11355.         driver, which acts on the command. 
  11356.  
  11357.  (4)    Notification messages are sent back to the application from the media 
  11358.         device to indicate such operations as completion of a device function 
  11359.         or the passing of device ownership from one process to another.  These 
  11360.         messages can be viewed in the Display Messages dialog box of the String 
  11361.         Test Sample. 
  11362.  
  11363.  
  11364. ΓòÉΓòÉΓòÉ 18.12. MMBROWSE - Image Browser Sample ΓòÉΓòÉΓòÉ
  11365.  
  11366. The Image Browser Sample (MMBROWSE) illustrates how to use the multimedia I/O 
  11367. subsystem (MMIO) to install I/O procedures for various image formats and then 
  11368. convert these image formats to any of the supported image formats. 
  11369.  
  11370. This sample demonstrates the various ways to install an I/O procedure: 
  11371.  
  11372.      On a temporary basis for an individual file. 
  11373.      On a semi-permanent basis for the duration of a process. 
  11374.      On a permanent basis for use by any process in the system. 
  11375.  
  11376.  To install an I/O procedure, you must know its four-character code. For more 
  11377.  information on how to use the functions included in this sample program, see 
  11378.  Multimedia I/O File Services. 
  11379.  
  11380.  
  11381. ΓòÉΓòÉΓòÉ 18.13. MOVIE - Movie Sample ΓòÉΓòÉΓòÉ
  11382.  
  11383. The Movie Sample (MOVIE) demonstrates device control of a software motion video 
  11384. device. It also illustrates how to cut, copy, paste, and delete movie data from 
  11385. an application. A movie can be played in an application-defined window or in 
  11386. the system default window provided by the software motion video subsystem. The 
  11387. Movie Sample program uses the string interface to interact with the media 
  11388. control interface layer. 
  11389.  
  11390.  
  11391. ΓòÉΓòÉΓòÉ 18.13.1. Program Flow ΓòÉΓòÉΓòÉ
  11392.  
  11393. The following figure illustrates the interaction between the Movie Sample 
  11394. program and the Media Device Manager (MDM). Source code for the Movie Sample is 
  11395. located in the \TOOLKIT\SAMPLES\MM\MOVIE subdirectory. 
  11396.  
  11397.  
  11398.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ    ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11399.              Γöé     Movie       Γö£ΓöÇΓöÇΓöÇΓöé    Initialize   Γöé
  11400.              Γöé     Sample      Γöé(1) Γöé      Open       Γöé
  11401.              Γöé                 Γöé    Γöé     Device      Γöé
  11402.              ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÿ    ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11403.   Application  (2)         (3) Default
  11404.     Window                   Window
  11405.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11406.              Γöé     Media       Γöé
  11407.              Γöé     Device      Γöé
  11408.              Γöé    Manager      Γöé
  11409.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11410.                     (4)
  11411.                      
  11412.              ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11413.              Γöé     Digital     Γöé
  11414.              Γöé      Video      Γöé
  11415.              Γöé       MCD       Γöé
  11416.              ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11417.  
  11418.  (1)    The Movie Sample creates a standard window with a style of 
  11419.         CS_MOVENOTIFY for the application window during initialization.  The 
  11420.         Movie Sample also initializes and loads a movie file into memory during 
  11421.         initialization time. 
  11422.  
  11423.  (2)    If you choose to play the movie in an application window, three string 
  11424.         commands are generated and sent to the digital video MCD. They are 
  11425.         window, load, and put. The following list describes these commands. 
  11426.  
  11427.         window           Specifies the characteristics of the 
  11428.                          application-defined window. 
  11429.  
  11430.                          Note:  When a window handle is selected with the 
  11431.                                 window command, the digital video MCD queries 
  11432.                                 the size and position of the window.  If the 
  11433.                                 window is visible, the digital video MCD alters 
  11434.                                 the size and position of the video accordingly. 
  11435.                                 However, if the window size and position is 
  11436.                                 changed while the window is hidden, the digital 
  11437.                                 video MCD does not note the new size and 
  11438.                                 position. 
  11439.  
  11440.         load             Loads the digital video file. 
  11441.  
  11442.         put              Places the movie in the application-defined window. 
  11443.  
  11444.         These commands (window, load, and put) must be issued in sequence to 
  11445.         play the movie in the application-defined window. 
  11446.  
  11447.  (3)    If you choose to play the movie in a default window, the load command 
  11448.         is generated and issued to the digital video MCD. 
  11449.  
  11450.  (4)    When you select Play, the Movie Sample program calls the digital video 
  11451.         MCD, through the Media Device Manager, to play the movie file. 
  11452.  
  11453.         If you select Edit, processing is passed to the EditTheMovie procedure 
  11454.         which loads the movie, and sets the data format to frames. It copies 
  11455.         the first 25 frames to the clipboard. The 25 frames are pasted four 
  11456.         times to the end of the movie file (duplicating the first 25 frames 
  11457.         four times). Next, the EditTheMovie procedure cuts the first 10 frames 
  11458.         from the movie, seeks to the end of the movie, and pastes the 10 frames 
  11459.         to the end.  The cut command deletes the specified number of frames 
  11460.         from the position the application specifies to start the cut. Once the 
  11461.         movie is edited, selecting Play causes the edited version of the movie 
  11462.         to play.  To play the original "unedited" movie file, exit the Movie 
  11463.         Sample program, restart it, and select Play. 
  11464.  
  11465.  
  11466. ΓòÉΓòÉΓòÉ 18.14. RECORDER - Audio Recorder Sample ΓòÉΓòÉΓòÉ
  11467.  
  11468. The Audio Recorder Sample (RECORDER) illustrates the concept of recording audio 
  11469. through the media control interface and how to query a device to find out the 
  11470. recording capabilities.  The sample program also illustrates how to change the 
  11471. audio recording and audio device properties, such as bits per sample, samples 
  11472. per second, input level, and input source. 
  11473.  
  11474.  
  11475. ΓòÉΓòÉΓòÉ 18.14.1. Program Flow ΓòÉΓòÉΓòÉ
  11476.  
  11477. The following figure illustrates how the Audio Recorder Sample program 
  11478. interfaces with the Media Device Manager (MDM). Source code for the Audio 
  11479. Recorder Sample is located in the \TOOLKIT\SAMPLES\MM\RECORDER subdirectory. 
  11480.  
  11481.  
  11482.          ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11483.          Γöé Audio RecorderΓöé
  11484.          Γöé    Sample     Γöé
  11485.          ΓööΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  11486.            (1)      (2)
  11487.                     
  11488.        ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11489.        Γöé  Media Device   Γöé
  11490.        Γöé   Manager       Γöé
  11491.        ΓööΓö¼ΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÿ
  11492.        (1) (2)      (2)
  11493.                    
  11494.      ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11495.      ΓöéWave AudioΓöéΓöé Amp-MixerΓöé
  11496.      Γöé   MCD    ΓöéΓöé   MCD    Γöé
  11497.      ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11498.  
  11499.  (1)    Upon initialization, the Audio Recorder Sample program issues an 
  11500.         MCI_GETDEVCAPS command, with the MCI_GETDEVCAPS_EXTENDED flag set. The 
  11501.         Audio Recorder Sample uses the device capability information that is 
  11502.         returned to disable any options in the Audio Recorder Sample menus that 
  11503.         do not apply to the installed audio device. 
  11504.  
  11505.  (2)    When you select Record, the Audio Recorder Sample program checks all of 
  11506.         the menu settings and sets up the device accordingly. The Audio 
  11507.         Recorder Sample issues an MCI_SET command to the Waveform Audio Media 
  11508.         Driver to set up the bits per sample, samples per second, and channels 
  11509.         of the recording. The sample also issues an MCI_CONNECTOR command to 
  11510.         the Waveform Audio Media Driver to set up the input source. It gets the 
  11511.         device ID of the Amp-Mixer Media Driver and issues an MCI_SET command 
  11512.         to that device to set up monitor input and input level. It also sends 
  11513.         an MCI_SET command to the Amp-Mixer Media Driver to set the input level 
  11514.         of the recording. Finally, the Audio Recorder Sample sends an 
  11515.         MCI_RECORD command to the waveaudio device to begin recording. 
  11516.  
  11517.  
  11518. ΓòÉΓòÉΓòÉ 18.15. TUNER - TV Tuner Sample ΓòÉΓòÉΓòÉ
  11519.  
  11520. TV tuner cards allow a desktop PC to receive and display broadcasted television 
  11521. signals. TUNER provides an example of how to use the MCI string interface to 
  11522. control a tuner card. 
  11523.  
  11524. Note:  A TV tuner card (such as the WinTV Basic) is required to run the TUNER 
  11525.        sample. 
  11526.  
  11527.  Once the application is running, the display window can be sized and a TV 
  11528.  channel can be selected. The channel can be selected through up/down buttons 
  11529.  or a text entry field displayed both at the bottom of the window. 
  11530.  
  11531.  A TV tuner card is handled as a digital video device by the multimedia 
  11532.  subsystem. A typical system has one or more digital video devices, with 
  11533.  digitalvideo01 assigned to software motion video. By default this sample opens 
  11534.  the digitalvideo02 device. If the tuner card is not assigned to digitalvideo02 
  11535.  an alternate device ordinal must be provided at the command line with the 
  11536.  format: 
  11537.  
  11538.     /d=digitalvideoxx
  11539.  
  11540.  where xx is a two digit number, padded on the left with zero. 
  11541.  
  11542.  For example: 
  11543.  
  11544.     /d=digitalvideo03
  11545.  
  11546.  Most TV tuner cards, such as the Hauppauge WinTV card, support several video 
  11547.  sources. The connector number that corresponds to the tuner video source is 
  11548.  dependent on the hardware and may not be the same for each tuner card. The 
  11549.  connector number is not changed by this sample. Instead, it uses the default 
  11550.  connector number set in the Multimedia Setup application. 
  11551.  
  11552.  
  11553. ΓòÉΓòÉΓòÉ 18.16. ULTIEYES - Non-Linear Video Sample ΓòÉΓòÉΓòÉ
  11554.  
  11555. The Non-Linear Video Sample (ULITEYES) demonstrates the use of non-linear video 
  11556. by displaying segments from a movie clip in response to input from the mouse. 
  11557. Whenever the mouse changes position, ULTIEYES calculates the angle of the mouse 
  11558. pointer to the center of the ULTIEYES video window. It then displays a frame 
  11559. from the movie ULTIEYES.AVI that corresponds to the position of the mouse 
  11560. pointer. As the mouse pointer is moved around the desk top, the eyes shown in 
  11561. the video window appear to follow the mouse. The movie file also contains 
  11562. segments of the eyes winking and blinking. ULTIEYES shows these segments when 
  11563. it detects a mouse button 1 click on the left side, center or right side of the 
  11564. video window. 
  11565.  
  11566.  
  11567. ΓòÉΓòÉΓòÉ 18.16.1. Creating a Movie Clip ΓòÉΓòÉΓòÉ
  11568.  
  11569. If you have Video IN and one of the supported video capture cards, you can 
  11570. easily replace ULTIEYES.AVI with a movie clip of your own eyes. Make the 
  11571. following updates in the Video IN Recorder Settings notebook before you record 
  11572. the movie: 
  11573.  
  11574.    1. Set the reference frame rate to 1. 
  11575.    2. Set the audio to Record no audio. 
  11576.  
  11577.  After you record the movie, you are ready to select the frames the ULTIEYES 
  11578.  program will display when the mouse pointer is at various positions in 
  11579.  relation to ULTIEYES:  East, East by Northeast, Northeast, and so on. 
  11580.  
  11581.    1. Set the time format of the Video IN Recorder to frames. 
  11582.    2. Step through the movie frame by frame. 
  11583.    3. Jot down the frame number for each position on the compass. Also note the 
  11584.       beginning and ending frames of the segments for the left and right winks 
  11585.       and the blink. (Note that video segments must be at least one second in 
  11586.       length.) 
  11587.    4. Create an ASCII file that contains 25 lines in the following format: 
  11588.           The first line in the file is the name of the AVI movie file. 
  11589.  
  11590.           The next 24 lines comprise the frame number table (0-23). A 
  11591.            description of the table contents is shown in the following figure. 
  11592.            Letter characters on each line indicate the direction of the gaze 
  11593.            associated with that particular line number. For example, in the 
  11594.            frame on line 12 the eyes should be gazing south by southwest. To 
  11595.            see what an actual frame table looks like, open the ULTIEYES.EYE 
  11596.            file. 
  11597.  
  11598.    0      - Eyes turned inward frame.
  11599.    1      - E
  11600.    2      - ENE
  11601.    3      - NE
  11602.    4      - NNE
  11603.    5      - N
  11604.    6      - NNW
  11605.    7      - NW
  11606.    8      - WNW
  11607.    9      - W
  11608.   10      - WSW
  11609.   11      - SW
  11610.   12      - SSW
  11611.   13      - S
  11612.   14      - SSE
  11613.   15      - SE
  11614.   16      - ESE
  11615.   17      - E (again)
  11616.   18-19   - Right-eye wink sequence (left side of video)
  11617.   20-21   - Left-eye wink sequence (right side of video)
  11618.   22-23   - Blink sequence
  11619.  
  11620.  To start your version of ULTIEYES, enter: 
  11621.  
  11622.   ULTIEYES filename
  11623.  
  11624.  where filename is the name of the ASCII file you created. 
  11625.  
  11626.  
  11627. ΓòÉΓòÉΓòÉ 19. Installing a Program Using MINSTALL ΓòÉΓòÉΓòÉ
  11628.  
  11629. This section describes the procedures for preparing control files for 
  11630. installing a multimedia application using the multimedia installation program 
  11631. (MINSTALL). 
  11632.  
  11633. The MINSTALL program utilizes features provided by the OS/2 multimedia 
  11634. installation engine, such as creating workplace shell objects and changing the 
  11635. CONFIG.SYS file, providing a consistent installation process. 
  11636.  
  11637. Note:  For installation requirements when writing a subsystem, refer to the 
  11638.        OS/2 Multimedia Subsystem Programming Guide. 
  11639.  
  11640.  
  11641. ΓòÉΓòÉΓòÉ 19.1. Installation Overview ΓòÉΓòÉΓòÉ
  11642.  
  11643. The MINSTALL program (MINSTALL.EXE) requires specific file information to 
  11644. install each program.  This file information is provided by the master control 
  11645. file CONTROL.SCR. 
  11646.  
  11647. The master control file, CONTROL.SCR, tells the installation program what to 
  11648. install, where to install it, how to display it to the user, and what system 
  11649. files need to be updated.  CONTROL.SCR uses keywords to specify these 
  11650. instructions to MINSTALL.  (See Master Control File.) 
  11651.  
  11652. The following important keywords used in CONTROL.SCR specify subsequent control 
  11653. files that list the installation files, create necessary entries in the 
  11654. initialization file, and add appropriate lines in the CONFIG.SYS file: 
  11655.  
  11656.      The keyword FILELIST specifies the name of the file list control file, 
  11657.       which lists all the files in the installation package.  (See File List 
  11658.       Control File.) 
  11659.  
  11660.      The keyword SSINICH identifies a control file that is used to define 
  11661.       folders and programs. 
  11662.  
  11663.      The keyword SSCONFIGCH identifies a control file that contains all the 
  11664.       changes to be made to the CONFIG.SYS file for a particular installable 
  11665.       item or subsystem. 
  11666.  
  11667.  For each installation, an error log called MINSTALL.LOG is created.  If a 
  11668.  problem occurs during installation, the problem is recorded in the error log 
  11669.  and might also be displayed on the screen.  You can read the log for more 
  11670.  information about the error. 
  11671.  
  11672.  
  11673. ΓòÉΓòÉΓòÉ 19.2. Master Control File ΓòÉΓòÉΓòÉ
  11674.  
  11675. The master control file, CONTROL.SCR, contains information about each 
  11676. installable feature.  It identifies specific file information that MINSTALL 
  11677. requires to install the requested features.  This control file must be named 
  11678. CONTROL.SCR and must reside on the first media unit (diskette or CD) of the 
  11679. installation package. 
  11680.  
  11681. During installation, if any errors are detected in the master control file, the 
  11682. main installation selection window will be empty and the errors will be logged 
  11683. in the error log MINSTALL.LOG.  You can access this file for information about 
  11684. the errors. 
  11685.  
  11686. The CONTROL.SCR file consists of a header section and a subsystem definition 
  11687. section.  The header section comes first and provides general information for 
  11688. the installation procedure.  The subsystem definition section comes next and 
  11689. provides information about the features in the installation package. 
  11690.  
  11691.  
  11692. ΓòÉΓòÉΓòÉ 19.2.1. CONTROL.SCR Header ΓòÉΓòÉΓòÉ
  11693.  
  11694. The header section of the CONTROL.SCR file contains the following information: 
  11695.  
  11696.      Name of the installation package 
  11697.      Code page used when creating the file 
  11698.      Name of the file list control file 
  11699.      Number of features in the installation package 
  11700.      Number of media units required for installation 
  11701.      Names of the media units required for installation 
  11702.      Source and destination directory names (optional) 
  11703.  
  11704.  The following is an example of the CONTROL.SCR header located in the 
  11705.  \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory. 
  11706.  
  11707.   package="IBM Multimedia Presentation Manager Toolkit/2"
  11708.   codepage=437
  11709.   filelist="filelist.tk2"
  11710.   groupcount=2
  11711.   munitcount=1
  11712.   medianame="IBM Multimedia Presentation Manager Toolkit/2 Installation
  11713.             Diskette 1"
  11714.  
  11715.   sourcedir = "\\"                               = 4
  11716.   sourcedir = "\\MCISTRNG\\"                     = 11
  11717.  
  11718.   destindir = "\\MMOS2\\"                                = 0
  11719.   destindir = "\\MMOS2\\INSTALL\\"                       = 4
  11720.   destindir = "\\MMOS2\\MMTOOLKT\\SAMPLES\\MCISTRNG\\"   = 11
  11721.  
  11722.  A larger and more complex example of installing multiple items using MINSTALL 
  11723.  is located in the \TOOLKIT\SAMPLES\MM\CF subdirectory. 
  11724.  
  11725.  The following table describes the keywords used in the CONTROL.SCR header. 
  11726.  
  11727.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11728.   ΓöéKeyword         ΓöéDescription                                 Γöé
  11729.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11730.   ΓöéPACKAGE         ΓöéThis required keyword specifies the name of Γöé
  11731.   Γöé                Γöéthe installation package in the form of a   Γöé
  11732.   Γöé                Γöéquoted string.  For example:                Γöé
  11733.   Γöé                ΓöéPACKAGE="IBM Multimedia Presentation ManagerΓöé
  11734.   Γöé                ΓöéToolkit/2"                                  Γöé
  11735.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11736.   ΓöéCODEPAGE        ΓöéThis required keyword specifies the code    Γöé
  11737.   Γöé                Γöépage that the file was created under.  For  Γöé
  11738.   Γöé                Γöéexample:                                    Γöé
  11739.   Γöé                ΓöéCODEPAGE = 437                              Γöé
  11740.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11741.   ΓöéFILELIST        ΓöéThis required keyword specifies the name of Γöé
  11742.   Γöé                Γöéthe file list control file. This control    Γöé
  11743.   Γöé                Γöéfile contains a list of files that make up  Γöé
  11744.   Γöé                Γöéeach subsystem, identifies on which media   Γöé
  11745.   Γöé                Γöéunits they reside in the installation       Γöé
  11746.   Γöé                Γöépackage, and specifies the destination to   Γöé
  11747.   Γöé                Γöéwhich they will be copied.  For example:    Γöé
  11748.   Γöé                ΓöéFILELIST = "FILELIST.TK2"                   Γöé
  11749.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11750.   ΓöéGROUPCOUNT      ΓöéThis required keyword specifies the number  Γöé
  11751.   Γöé                Γöéof subsystems in the installation package.  Γöé
  11752.   Γöé                ΓöéAll groups are counted, including group 0   Γöé
  11753.   Γöé                Γöé(if present).  For example:                 Γöé
  11754.   Γöé                ΓöéGROUPCOUNT = 2                              Γöé
  11755.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11756.   ΓöéMUNITCOUNT      ΓöéThis required keyword specifies the number  Γöé
  11757.   Γöé                Γöéof media units (diskettes, CDs) that will beΓöé
  11758.   Γöé                Γöéused if all features are installed.  This   Γöé
  11759.   Γöé                Γöénumber must be greater than 0.  This is the Γöé
  11760.   Γöé                Γöénumber of diskettes or CDs on which the     Γöé
  11761.   Γöé                Γöéinstallation package resides.  For example: Γöé
  11762.   Γöé                ΓöéMUNITCOUNT = 1                              Γöé
  11763.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11764.   ΓöéMEDIANAME       ΓöéThis required keyword specifies a unique    Γöé
  11765.   Γöé                Γöémedia name, which is a character string on  Γöé
  11766.   Γöé                Γöéthe diskette or CD label.  For each media   Γöé
  11767.   Γöé                Γöéunit, this keyword must be repeated once, inΓöé
  11768.   Γöé                Γöéthe form of a quoted string.  This          Γöé
  11769.   Γöé                Γöéinformation is used during installation to  Γöé
  11770.   Γöé                Γöéprompt the user to insert a diskette or CD  Γöé
  11771.   Γöé                Γöéwhen needed.  For example:                  Γöé
  11772.   Γöé                ΓöéMEDIANAME = "IBM Multimedia Presentation    Γöé
  11773.   Γöé                ΓöéManager Toolkit/2             Installation  Γöé
  11774.   Γöé                ΓöéDiskette 1"                                 Γöé
  11775.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11776.   ΓöéSOURCEDIR       ΓöéThis optional keyword specifies the name of Γöé
  11777.   Γöé                Γöéa source directory and its associated       Γöé
  11778.   Γöé                Γöénumber.  This keyword can be repeated and isΓöé
  11779.   Γöé                Γöéspecified by a quoted string followed by an Γöé
  11780.   Γöé                Γöéequal sign (=) and a number.  The number is Γöé
  11781.   Γöé                Γöéused to identify the particular directory inΓöé
  11782.   Γöé                Γöélater scripts.  This can be NULL, in which  Γöé
  11783.   Γöé                Γöécase two default backslash characters (\\)  Γöé
  11784.   Γöé                Γöéare used with an encoding of 0.  The path   Γöé
  11785.   Γöé                Γöémust be surrounded by path separators.  For Γöé
  11786.   Γöé                Γöéexample:                                    Γöé
  11787.   Γöé                ΓöéSOURCEDIR="\\LIB\\" = 1                     Γöé
  11788.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11789.   ΓöéDESTINDIR       ΓöéThis optional keyword specifies the         Γöé
  11790.   Γöé                Γöédestination directory and its encodings.    Γöé
  11791.   Γöé                ΓöéThis keyword can be repeated and can be     Γöé
  11792.   Γöé                ΓöéNULL, in which case the default is the      Γöé
  11793.   Γöé                Γöé\MMOS2 subdirectory.  The path must be      Γöé
  11794.   Γöé                Γöésurrounded by path separators and any       Γöé
  11795.   Γöé                Γöédirectory that does not exist will be       Γöé
  11796.   Γöé                Γöécreated. For example:                       Γöé
  11797.   Γöé                ΓöéDESTINDIR = "\\MMOS2\\" = 0                 Γöé
  11798.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  11799.  
  11800.  Observe the following guidelines when you create or change a CONTROL.SCR 
  11801.  header: 
  11802.  
  11803.      You must place the keywords MUNITCOUNT and MEDIANAME so that MUNITCOUNT 
  11804.       comes directly before MEDIANAME.  The order of the other keywords is not 
  11805.       significant. 
  11806.  
  11807.      The destination directory (DESTINDIR) must have a unique number. 
  11808.  
  11809.      A subsystem group can be spread across several media units.  It does not 
  11810.       have to reside on one media unit. 
  11811.  
  11812.      A subsystem can define any directory.  MINSTALL will create any 
  11813.       subdirectories defined with the DESTINDIR keyword that do not exist. 
  11814.  
  11815.      If you move the installation package files to media of a different size, 
  11816.       the number of media units ( MEDIACOUNT) might change. 
  11817.  
  11818.      You may use comments in the header section in the form of blank lines or 
  11819.       text enclosed with "/* and */".  You may not use nested comments. 
  11820.  
  11821.      You may use blank spaces around the equal sign; blank spaces are ignored. 
  11822.  
  11823.      If you want to use a double quotation mark or a backslash in a string, 
  11824.       you must precede it with the escape character (\). 
  11825.  
  11826.      You may use the escape sequence \n (new line). 
  11827.  
  11828.  
  11829. ΓòÉΓòÉΓòÉ 19.2.2. CONTROL.SCR Subsystem Definition ΓòÉΓòÉΓòÉ
  11830.  
  11831. The subsystem definition section of the CONTROL.SCR file follows the header 
  11832. section and contains the definitions for all the installable items in the 
  11833. installation package.  A block of information must be included for each 
  11834. subsystem. 
  11835.  
  11836. The subsystem definition section contains the following information: 
  11837.  
  11838.      The group or item number 
  11839.      The item name 
  11840.      The version of the item 
  11841.      The size of all the files for the item installation 
  11842.      The names of the control files that change the MMPM2.INI and CONFIG.SYS 
  11843.       files 
  11844.      The names of installation DLL files and entry points 
  11845.  
  11846.  The following is an example of a CONTROL.SCR subsystem definition. 
  11847.  
  11848.   ssgroup=0              /*  base group */
  11849.   sssize=41
  11850.   ssname="mmbase"
  11851.   ssversion="1.0.9"
  11852.   ssinich="TLKBASE.SCR"
  11853.  
  11854.   /*           - 11 = mcistrng */
  11855.   ssgroup=11
  11856.   ssname="Media Control Interface String Test"
  11857.   ssversion="1.0.9"
  11858.   sssize=200
  11859.   ssinich="TLKSTRN.SCR"
  11860.   ssicon="mcistrng.ico"
  11861.  
  11862.  The CONTROL.SCR subsystem definition consists of the following keywords. 
  11863.  
  11864.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  11865.   ΓöéKeyword             ΓöéDescription                             Γöé
  11866.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11867.   ΓöéSSGROUP             ΓöéThis required keyword specifies the     Γöé
  11868.   Γöé                    Γöégroup or item number.  This marks the   Γöé
  11869.   Γöé                    Γöébeginning of a group for this item and  Γöé
  11870.   Γöé                    Γöéassigns it a number. Each item must haveΓöé
  11871.   Γöé                    Γöéa unique number from 0-49 within the    Γöé
  11872.   Γöé                    Γöépackage; however, the same number can beΓöé
  11873.   Γöé                    Γöéused with different installation        Γöé
  11874.   Γöé                    Γöépackages.  The groups are displayed in  Γöé
  11875.   Γöé                    Γöéthe installation main selection window  Γöé
  11876.   Γöé                    Γöéin ascending order by group number.  ForΓöé
  11877.   Γöé                    Γöéexample:                                Γöé
  11878.   Γöé                    ΓöéSSGROUP = 11                            Γöé
  11879.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11880.   ΓöéSSNAME              ΓöéThis required keyword specifies the itemΓöé
  11881.   Γöé                    Γöéname, which names the current group as  Γöé
  11882.   Γöé                    Γöéan ASCII string.  This keyword is case  Γöé
  11883.   Γöé                    Γöésensitive and takes the form of a quotedΓöé
  11884.   Γöé                    Γöéstring.  The name may include special   Γöé
  11885.   Γöé                    Γöécharacters and may be translated.  The  Γöé
  11886.   Γöé                    Γöéname is displayed in the main           Γöé
  11887.   Γöé                    Γöéinstallation selection window.  For     Γöé
  11888.   Γöé                    Γöéexample:                                Γöé
  11889.   Γöé                    ΓöéSSNAME = "CD Audio"                     Γöé
  11890.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11891.   ΓöéSSVERSION           ΓöéThis required keyword specifies the     Γöé
  11892.   Γöé                    Γöéversion of the component in the form of Γöé
  11893.   Γöé                    Γöéa quoted string.  This string must be inΓöé
  11894.   Γöé                    Γöéthe format "dd.dd.dd" (where dd         Γöé
  11895.   Γöé                    Γöérepresents digits).  Any version not    Γöé
  11896.   Γöé                    Γöéspecified in this format will be        Γöé
  11897.   Γöé                    Γöéconverted to that format.  All string   Γöé
  11898.   Γöé                    Γöéitems that are not digits or periods    Γöé
  11899.   Γöé                    Γöéwill be converted to zeros. Any periods Γöé
  11900.   Γöé                    Γöéafter the second period will be         Γöé
  11901.   Γöé                    Γöéconverted to zeros.  For example:       Γöé
  11902.   Γöé                    ΓöéSSVERSION = "1.1.0"                     Γöé
  11903.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11904.   ΓöéSSSIZE              ΓöéThis required keyword specifies the     Γöé
  11905.   Γöé                    Γöétotal size of all the files in the item.Γöé
  11906.   Γöé                    ΓöéThe size denotes the number of bytes in Γöé
  11907.   Γöé                    Γöéthousands (500 = 500KB).  This number isΓöé
  11908.   Γöé                    Γöéused to help determine if there is      Γöé
  11909.   Γöé                    Γöéenough disk space to support the        Γöé
  11910.   Γöé                    Γöéinstallation.  If you do not know the   Γöé
  11911.   Γöé                    Γöécorrect size of a item, overstate its   Γöé
  11912.   Γöé                    Γöésize.  For example:                     Γöé
  11913.   Γöé                    ΓöéSSSIZE = 1024                           Γöé
  11914.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11915.   ΓöéSSINICH             ΓöéThis optional keyword specifies the nameΓöé
  11916.   Γöé                    Γöéof the file that contains the changes toΓöé
  11917.   Γöé                    Γöéthe MMPM2.INI file.  If this statement  Γöé
  11918.   Γöé                    Γöéis missing, there are no changes to the Γöé
  11919.   Γöé                    ΓöéMMPM2.INI file.  For example:           Γöé
  11920.   Γöé                    ΓöéSSINICH = "ACPAINI.CH"                  Γöé
  11921.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11922.   ΓöéSSCONFIGCH          ΓöéThis optional keyword specifies the nameΓöé
  11923.   Γöé                    Γöéof the file that contains the changes toΓöé
  11924.   Γöé                    Γöéthe CONFIG.SYS file.  If this statement Γöé
  11925.   Γöé                    Γöéis missing, there are no changes to the Γöé
  11926.   Γöé                    ΓöéCONFIG.SYS file.  For example:          Γöé
  11927.   Γöé                    ΓöéSSCONFIGCH = "ACPACON.CH"               Γöé
  11928.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11929.   ΓöéSSCOREQS            ΓöéThis optional keyword specifies a list  Γöé
  11930.   Γöé                    Γöéof corequisites needed for this item to Γöé
  11931.   Γöé                    Γöérun.  It also specifies what other      Γöé
  11932.   Γöé                    Γöécomponents the current components dependΓöé
  11933.   Γöé                    Γöéon.  These other components must be     Γöé
  11934.   Γöé                    Γöéinstalled for the current component to  Γöé
  11935.   Γöé                    Γöéfunction.  (If this statement is        Γöé
  11936.   Γöé                    Γöémissing, there are no corequisites.)    Γöé
  11937.   Γöé                    ΓöéThe corequisite is identified by its    Γöé
  11938.   Γöé                    Γöégroup number. Corequisite groups should Γöé
  11939.   Γöé                    Γöépoint to each other only if they requireΓöé
  11940.   Γöé                    Γöéeach other.  It is possible to have     Γöé
  11941.   Γöé                    Γöésubsystem A list subsystem B as a       Γöé
  11942.   Γöé                    Γöécorequisite and subsystem B have no     Γöé
  11943.   Γöé                    Γöécorequisites.  If the user selects a    Γöé
  11944.   Γöé                    Γöésubsystem with a corequisite, but does  Γöé
  11945.   Γöé                    Γöénot select all corequisites, the user isΓöé
  11946.   Γöé                    Γöénotified before the installation starts.Γöé
  11947.   Γöé                    ΓöéThis entry can be repeated as necessary.Γöé
  11948.   Γöé                    ΓöéFor example:                            Γöé
  11949.   Γöé                    ΓöéSSCOREQS = 1                            Γöé
  11950.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11951.   ΓöéSSICON              ΓöéThis optional keyword names the icon    Γöé
  11952.   Γöé                    Γöéfile for this component that is to be   Γöé
  11953.   Γöé                    Γöédisplayed in the main installation      Γöé
  11954.   Γöé                    Γöéselection window.  The icon file to be  Γöé
  11955.   Γöé                    Γöédisplayed in the selection window must  Γöé
  11956.   Γöé                    Γöéreside on the first installation media  Γöé
  11957.   Γöé                    Γöéunit.  If this statement is missing, a  Γöé
  11958.   Γöé                    Γöédefault icon is used.  For example:     Γöé
  11959.   Γöé                    ΓöéSSICON = "ACPA.ICO"                     Γöé
  11960.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11961.   ΓöéSSDLL               ΓöéThis optional keyword names a DLL file  Γöé
  11962.   Γöé                    Γöéthat is to be run during the            Γöé
  11963.   Γöé                    Γöéinstallation process.  The DLL          Γöé
  11964.   Γöé                    Γöéreferenced will be run after all files  Γöé
  11965.   Γöé                    Γöéare copied to the destination, but      Γöé
  11966.   Γöé                    Γöébefore any script processing is         Γöé
  11967.   Γöé                    Γöéperformed. If this keyword is present,  Γöé
  11968.   Γöé                    Γöéthe SSDLLENTRY keyword must also be     Γöé
  11969.   Γöé                    Γöépresent.  For example:                  Γöé
  11970.   Γöé                    ΓöéSSDLL="MY.DLL"                          Γöé
  11971.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11972.   ΓöéSSDLLENTRY          ΓöéThis optional keyword specifies the nameΓöé
  11973.   Γöé                    Γöéof the entry point into SSDLL in the    Γöé
  11974.   Γöé                    Γöéform of a quoted string.  If this       Γöé
  11975.   Γöé                    Γöékeyword is present, the SSDLL keyword   Γöé
  11976.   Γöé                    Γöémust also be present.  For example:     Γöé
  11977.   Γöé                    ΓöéSSDLLENTRY="MyEntry"                    Γöé
  11978.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11979.   ΓöéSSTERMDLL           ΓöéThis optional keyword names a DLL file  Γöé
  11980.   Γöé                    Γöéthat is to be run during the            Γöé
  11981.   Γöé                    Γöéinstallation process.  The DLL          Γöé
  11982.   Γöé                    Γöéreferenced will be run after all files  Γöé
  11983.   Γöé                    Γöéare copied to the destination and after Γöé
  11984.   Γöé                    Γöéall script processing is done. The      Γöé
  11985.   Γöé                    Γöépurpose of this keyword is to allow for Γöé
  11986.   Γöé                    Γöéprocessing to occur on a fully          Γöé
  11987.   Γöé                    Γöéconfigured multimedia system.  If this  Γöé
  11988.   Γöé                    Γöékeyword is present, the SSTERMDLLENTRY  Γöé
  11989.   Γöé                    Γöékeyword must also be present.  For      Γöé
  11990.   Γöé                    Γöéexample:                                Γöé
  11991.   Γöé                    ΓöéSSTERMDLL="MYTERM.DLL"                  Γöé
  11992.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  11993.   ΓöéSSTERMDLLENTRY      ΓöéThis optional keyword specifies the nameΓöé
  11994.   Γöé                    Γöéof the entry point into SSTERMDLL in theΓöé
  11995.   Γöé                    Γöéform of a quoted string.  If this       Γöé
  11996.   Γöé                    Γöékeyword is present, the SSTERMDLL       Γöé
  11997.   Γöé                    Γöékeyword must also be present.  For      Γöé
  11998.   Γöé                    Γöéexample:                                Γöé
  11999.   Γöé                    ΓöéSSTERMDLLENTRY="MyTermEntry"            Γöé
  12000.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12001.   ΓöéSSSELECT            ΓöéThis optional keyword determines the    Γöé
  12002.   Γöé                    Γöépreselection of items for installation. Γöé
  12003.   Γöé                    ΓöéFive values are supported:              Γöé
  12004.   Γöé                    Γöé"ALWAYS" - This value specifies that theΓöé
  12005.   Γöé                    Γöégroup will always be installed.  It is  Γöé
  12006.   Γöé                    Γöéthe only valid value for Group 0.       Γöé
  12007.   Γöé                    ΓöéGroups with this value will not be      Γöé
  12008.   Γöé                    Γöédisplayed in the installation selection Γöé
  12009.   Γöé                    Γöéwindow.  This is the default.           Γöé
  12010.   Γöé                    Γöé"REQUIRED" - This value specifies that  Γöé
  12011.   Γöé                    Γöéthe group will be preselected for       Γöé
  12012.   Γöé                    Γöéinstallation.  If the group had been    Γöé
  12013.   Γöé                    Γöépreviously installed, it cannot be      Γöé
  12014.   Γöé                    Γöéunselected by the user if this          Γöé
  12015.   Γöé                    Γöéinstallation package is newer than the  Γöé
  12016.   Γöé                    Γöéinstalled version.  If the group has notΓöé
  12017.   Γöé                    Γöébeen previously installed, it can be    Γöé
  12018.   Γöé                    Γöéunselected by the user.                 Γöé
  12019.   Γöé                    Γöé"VERSION" - This value specifies that   Γöé
  12020.   Γöé                    Γöéthe group will be preselected only if itΓöé
  12021.   Γöé                    Γöéwas previously installed and this       Γöé
  12022.   Γöé                    Γöéinstallation package is newer than the  Γöé
  12023.   Γöé                    Γöéinstalled version.  However, it can be  Γöé
  12024.   Γöé                    Γöéunselected by the user.                 Γöé
  12025.   Γöé                    Γöé"YES" - This value specifies that the   Γöé
  12026.   Γöé                    Γöégroup will be preselected whether or notΓöé
  12027.   Γöé                    Γöéit was previously installed.  It can be Γöé
  12028.   Γöé                    Γöéunselected by the user.                 Γöé
  12029.   Γöé                    Γöé"NO" - This value specifies that the    Γöé
  12030.   Γöé                    Γöégroup is never preselected but can be   Γöé
  12031.   Γöé                    Γöéselected by the user.                   Γöé
  12032.   Γöé                    Γöé"BASENEWER" - This value specifies that Γöé
  12033.   Γöé                    Γöéfiles belonging to this group will only Γöé
  12034.   Γöé                    Γöébe copied if the user's machine has no  Γöé
  12035.   Γöé                    Γöépackage installed or if the package     Γöé
  12036.   Γöé                    Γöéinstalled is older than the current     Γöé
  12037.   Γöé                    Γöépackage.                                Γöé
  12038.   Γöé                    Γöé"ONLYNEWER" - This value specifies that Γöé
  12039.   Γöé                    Γöéa user will not be able to to install anΓöé
  12040.   Γöé                    Γöéolder version of a package on top of a  Γöé
  12041.   Γöé                    Γöénewer version. Files belonging to this  Γöé
  12042.   Γöé                    Γöégroup will only be copied if the user   Γöé
  12043.   Γöé                    Γöéhas an older version (or the same       Γöé
  12044.   Γöé                    Γöéversion) installed.  If no version is   Γöé
  12045.   Γöé                    Γöéinstalled or if the version installed isΓöé
  12046.   Γöé                    Γöéhigher than the one in the package, no  Γöé
  12047.   Γöé                    Γöéfiles will be copied.                   Γöé
  12048.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12049.  
  12050.  Observe the following guidelines when you create or change a CONTROL.SCR 
  12051.  subsystem definition: 
  12052.  
  12053.      The SSGROUP keyword must be the first statement in the information block. 
  12054.      An item may reside on different media. 
  12055.      Each statement in the information block must have a value. 
  12056.      You may use comments in the header section in the form of blank lines or 
  12057.       text enclosed with "/* and */".  You may not use nested comments. 
  12058.      You may use blank spaces around the equal sign; blank spaces are ignored. 
  12059.      If you want to use a double quotation mark or a backslash in a string, 
  12060.       you must precede it with the escape character (\). 
  12061.      You may use the escape sequence \n (new line). 
  12062.  
  12063.  
  12064. ΓòÉΓòÉΓòÉ 19.3. File List Control File ΓòÉΓòÉΓòÉ
  12065.  
  12066. The master control file, CONTROL.SCR, specifies a FILELIST keyword which 
  12067. identifies the name of a file list control file that lists all the installable 
  12068. files in the installation package.  The file list control file also contains 
  12069. the following additional information: 
  12070.  
  12071.      The name of the file 
  12072.      The number of the media unit where the file is stored 
  12073.      The destination directory where the file will be copied 
  12074.      The group or feature the file is identified with 
  12075.  
  12076.  The following is an example of the file list control file (FILELIST.TK2) 
  12077.  located in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory.  The first nonblank, 
  12078.  noncomment line is a count of the number of files (or file name lines) in the 
  12079.  file. 
  12080.  
  12081.   /***********************************************************************/
  12082.   /* This file contains install information.  Comments are delimited     */
  12083.   /* as these comments are.  Blank lines are ignored.  Non-blank lines   */
  12084.   /* will be parsed and extraneous characters will cause errors.  First  */
  12085.   /* non-comment line must be the total number of files to be installed. */
  12086.   /***********************************************************************/
  12087.   /* all files on the install disk(s) are listed below. Other            */
  12088.   /* information is also given, as follows:                              */
  12089.   /*                                                                     */
  12090.   /* Disk#    - The number of the disk on which the file resides.        */
  12091.   /*            (Ignored if installing from CD-ROM). These are sorted    */
  12092.   /*            from 0 to the number of disks, ascending.                */
  12093.   /*                                                                     */
  12094.   /* Group#   - The logical group to which the file belongs. Group       */
  12095.   /*            starts at 0.                                             */
  12096.   /*                                                                     */
  12097.   /* Dest#    - The destination subdirectory into which the file will be */
  12098.   /*            copied.  Dest# starts at 0.                              */
  12099.   /*                                                                     */
  12100.   /* Source #- The installation disk(s) subdirectory where the file      */
  12101.   /*            resides.                                                 */
  12102.   /*                                                                     */
  12103.   /* FileName - The base filename.                                       */
  12104.   /*                                                                     */
  12105.   /*sourcedir="\\"                     = 4                               */
  12106.   /*sourcedir="\\MCISTRNG\\"           = 11                              */
  12107.   /*                                                                     */
  12108.   /* destindir="\\MMOS2\\"                                = 0            */
  12109.   /* destindir="\\MMOS2\\INSTALL\\"                       = 4            */
  12110.   /* destindir="\\MMOS2\\MMTOOLKT\\SAMPLES\\MCISTRNG\\"   = 11           */
  12111.   /*                                                                     */
  12112.   /*        groups                                                       */
  12113.   /*                0 = Base                                             */
  12114.   /*            - 11 = MCI String Test                                   */
  12115.   /*                                                                     */
  12116.   /***********************************************************************/
  12117.   /* Total number of entries is 20. This must be the first parameter other*/
  12118.   /*than comments*/
  12119.   /***********************************************************************/
  12120.  
  12121.       20
  12122.  
  12123.   /*It is a good practice to make groups and list the amount of files in
  12124.   /*them (9 files)*/
  12125.   /*A comment can not be the last line in a filelist.*/
  12126.  
  12127.   /*            mmtoolkt\samples\cf  9   41K           */
  12128.  
  12129.       0    0   11     4    "CONTROL.SCR"
  12130.       0    0   11     4    "FILELIST.TK2"
  12131.       0    0   11      4   "TLKSTRN.SCR"
  12132.       0    0   11     4    "TLKBASE.SCR"
  12133.       0    0    4     4    "TLKSTRN.SCR"
  12134.       0    0    4     4    "TLKBASE.SCR"
  12135.       0    0    4     4    "MCISTRNG.ICO"
  12136.       0    0    4    4     "MMTOOLKT.ICO"
  12137.       0    0   11    4    "TOOLKIT.CH"
  12138.  
  12139.   /* 11 files */
  12140.   /*           mmtoolkt\samples\mcistrng  11   197K   */
  12141.       0   11   11   11   "mcistrng.c"
  12142.       0   11   11   11   "mcistrng.h"
  12143.       0   11   11   11   "mcistrng.rc"
  12144.       0   11   11   11   "mcistrng.dlg"
  12145.       0   11   11   11   "mcistrng.def"
  12146.       0   11   11   11   "makefile"
  12147.       0   11   11   11   "UMB.DAT"
  12148.       0   11   11   11   "mcistrng.exe"
  12149.       0   11   11   11   "mcistrng.hlp"
  12150.       0   11   11   11   "mcistrng.ipf"
  12151.       0   11   11   11   "mcistrng.ico"
  12152.  
  12153.  The following table describes the columns in the file list control file. 
  12154.  
  12155.   ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  12156.   ΓöéColumn                   ΓöéDescription                                       Γöé
  12157.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12158.   ΓöéMedia#                   ΓöéSpecifies the number of the media unit (diskette  Γöé
  12159.   Γöé                         Γöéor CD) where the file is stored.  The units are   Γöé
  12160.   Γöé                         Γöénumbered starting from 0.  This number will be    Γöé
  12161.   Γöé                         Γöéused for all installation media except for the    Γöé
  12162.   Γöé                         Γöéhard disk.  The Media# column must be sorted in   Γöé
  12163.   Γöé                         Γöéascending order.  A media unit does not have to beΓöé
  12164.   Γöé                         Γöéfilled (there can be unused space on any numbered Γöé
  12165.   Γöé                         Γöéunit).                                            Γöé
  12166.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12167.   ΓöéGroup or subsystem#      ΓöéSpecifies the group to which the file belongs.    Γöé
  12168.   Γöé                         ΓöéThe group or item number must be a positive       Γöé
  12169.   Γöé                         Γöéinteger, with numbering starting at 0 (the groups Γöé
  12170.   Γöé                         Γöéare defined in CONTROL.SCR by the SSGROUP         Γöé
  12171.   Γöé                         Γöékeyword).  This number is used to determine which Γöé
  12172.   Γöé                         Γöéfiles belong to a item selected for installation. Γöé
  12173.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12174.   ΓöéDestination#             ΓöéSpecifies the destination subdirectory where the  Γöé
  12175.   Γöé                         Γöéfile will be copied.  The destination number is   Γöé
  12176.   Γöé                         Γöédefined in the CONTROL.SCR file by the DESTINDIR  Γöé
  12177.   Γöé                         Γöékeyword.  This field must always be a defined     Γöé
  12178.   Γöé                         Γöénumber (for example, 14 for the \MMOS2\DLL path). Γöé
  12179.   Γöé                         ΓöéIf you specify a DESTINDIR statement in the masterΓöé
  12180.   Γöé                         Γöécontrol file, you only have to specify the        Γöé
  12181.   Γöé                         Γöécorresponding group number (for example, 1).      Γöé
  12182.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12183.   ΓöéSource#                  ΓöéSpecifies the path name of the source file.  The  Γöé
  12184.   Γöé                         Γöésource number is defined in the CONTROL.SCR file  Γöé
  12185.   Γöé                         Γöéby the SOURCEDIR keyword.  This field must always Γöé
  12186.   Γöé                         Γöébe defined with a number (for example, 1 for the  Γöé
  12187.   Γöé                         Γöé\LIB path).                                       Γöé
  12188.   Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  12189.   ΓöéFile name                ΓöéSpecifies the base file name, which must be in    Γöé
  12190.   Γöé                         Γöédouble quotes.  For example, "MINSTALL.EXE".      Γöé
  12191.   ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  12192.  
  12193.  
  12194. ΓòÉΓòÉΓòÉ 19.4. Change Control Files ΓòÉΓòÉΓòÉ
  12195.  
  12196. Change control files are script files that make changes to the CONFIG.SYS file 
  12197. and INI files.  The master control file, CONTROL.SCR, identifies the change 
  12198. control files when you specify the SSINICH and SSCONFIGCH keywords. 
  12199.  
  12200.  
  12201. ΓòÉΓòÉΓòÉ 19.4.1. Supported Macros ΓòÉΓòÉΓòÉ
  12202.  
  12203. Macros can be used in the change control files. Macros can also be used in the 
  12204. master control file. When a supported macro is used, drives and paths do not 
  12205. have to be identified until the time of installation. At installation, macros 
  12206. can perform the following: 
  12207.  
  12208.      Replace the full destination path of the file 
  12209.      Replace the installation target drive letter 
  12210.      Replace the default destination drive and path as defined in CONTROL.SCR 
  12211.      Replace the startup (boot) drive letter of the operating system 
  12212.      Delete specified files 
  12213.  
  12214.  The following table describes the supported macros.  Refer to the TLKSTRN.SCR 
  12215.  file in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  12216.  
  12217.  Macro                              Description 
  12218.  
  12219.   destindir = "$(DELETE)\\path\\"
  12220.   = number
  12221.                                     The $(DELETE) macro can only be used with 
  12222.                                     the DESTINDIR keyword in the master control 
  12223.                                     file. The relative number is listed in the 
  12224.                                     file list control file.  Every file that 
  12225.                                     has this number will be deleted from the 
  12226.                                     user's machine. 
  12227.  
  12228.  $(DEST)filename                    $(DEST) is replaced with the full 
  12229.                                     destination path of the file.  For example: 
  12230.  
  12231.                                                                         $(DEST)CLOCK.EXE
  12232.  
  12233.                                     becomes 
  12234.  
  12235.                                                                         D:\MMOS2\MMTOOLKT\SAMPLES\CLOCK\CLOCK.EXE
  12236.  
  12237.  $(DRIVE)                           $(DRIVE) is replaced by the installation 
  12238.                                     target drive letter.  (Do not append a 
  12239.                                     colon.)  For example: 
  12240.  
  12241.                                                                         $(DRIVE)\MMOS2\TEST1.EXE
  12242.  
  12243.                                     becomes 
  12244.  
  12245.                                                                         D:\MMOS2\TEST1.EXE
  12246.  
  12247.  $(DIR)#                            #  is the number of the destination 
  12248.                                     directory as stated in the file 
  12249.                                     CONTROL.SCR.  The macro is replaced by the 
  12250.                                     default drive and path defined in the 
  12251.                                     CONTROL.SCR file for the specified 
  12252.                                     DESTINDIR definition.  For example: 
  12253.  
  12254.                                                                         $(DIR)4\MINSTALL.LOG
  12255.  
  12256.                                     becomes 
  12257.  
  12258.                                                                         D:\MMOS2\INSTALL\MINSTALL.LOG
  12259.  
  12260.  $(BOOT)                            Replaces the startup (boot) drive letter of 
  12261.                                     the operating system. (Do not append a 
  12262.                                     colon.) For example: 
  12263.  
  12264.                                                                         $(BOOT)\OS2\NEW.SYS
  12265.  
  12266.                                     becomes 
  12267.  
  12268.                                                                         C:\OS2\NEW.SYS
  12269.  
  12270.                                     where C: is the drive on which OS/2 is 
  12271.                                     installed. 
  12272.  
  12273.  Note:  Using multiple macros is supported. 
  12274.  
  12275.  
  12276. ΓòÉΓòÉΓòÉ 19.4.2. INI Change Control Files ΓòÉΓòÉΓòÉ
  12277.  
  12278. You can use an INI change control file to do the following: 
  12279.  
  12280.      Define folders and add them to the system 
  12281.      Define programs and add them to a folder 
  12282.      Install subsystems such as media control drivers, stream handlers, and 
  12283.       I/O procedures.  (See the OS/2 Multimedia Subsystem Programming Guide for 
  12284.       further details.) 
  12285.  
  12286.  The following WPObject structures call the OS/2 WinCreateObject function, 
  12287.  which adds an icon and title to the desktop.  This structure indirectly 
  12288.  changes the OS2.INI file.  See the OS/2 Presentation Manager Programming 
  12289.  Reference for object class definitions and supported keywords for the object 
  12290.  class you are creating. 
  12291.  
  12292.  
  12293. ΓòÉΓòÉΓòÉ 19.4.2.1. Defining Folders ΓòÉΓòÉΓòÉ
  12294.  
  12295. Use the following structure to define a folder.  Refer to the TLKBASE.SCR file 
  12296. located in the \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  12297.  
  12298. WPObject =
  12299.  (
  12300.  WPClassName = "WPFolder"
  12301.  WPTitle = "title"
  12302.  WPSetupString = "ICONFILE=$(DEST)icon;OBJECTID=<folderobjid>"
  12303.  WPLocation = "<parentfolderobjid>"
  12304.  WPFlags = 0
  12305.  )
  12306.  
  12307.  title              Specifies the folder title to be displayed below the 
  12308.                     object. 
  12309.  
  12310.  icon               Specifies the name of the icon to displayed on the desktop. 
  12311.  
  12312.  folderobjid        Specifies the OS/2 unique object ID that is used to find 
  12313.                     this folder. This is used by the installation program to 
  12314.                     determine if this folder exists or not.  It is also used in 
  12315.                     the WPLocation field of other WPObject definitions. 
  12316.  
  12317.  parentfolderobjid  Specifies the folder object ID of the folder in which this 
  12318.                     folder is to be placed.  For example, "<WP_DESKTOP>" is the 
  12319.                     object ID for the Workplace Shell desktop folder. 
  12320.  
  12321.  WPFlags = 0        Specifies creation control.  These flags are also 
  12322.                     documented under WinCreateObject in the OS/2 Presentation 
  12323.                     Manager Programming Reference. already exist. Possible 
  12324.                     values include: 
  12325.  
  12326.                         0 (CO_FAILIFEXISTS) - The folder is to be replaced if 
  12327.                          it exists, or added if it does not already exist. 
  12328.                         1 (CO_REPLACEIFEXISTS) - The folder is to be replaced 
  12329.                          if it exists, or added if it does not already exist. 
  12330.                         2 (CO_UPDATEIFEXISTS) - The folder is to be updated 
  12331.                          with the values supplied if it exists, or added using 
  12332.                          values supplied and defaults if it does not already 
  12333.                          exist. 
  12334.  
  12335.  In the following example, a folder called Multimedia Presentation Manager 
  12336.  Toolkit/2 will be added to the desktop. 
  12337.  
  12338.   WPObject =
  12339.       (
  12340.       WPClassName   = "WPFolder"
  12341.       WPTitle       = "Multimedia Presentation\nManager Toolkit/2"
  12342.       WPSetupString = "ICONFILE=$(DEST)MMTOOLKT.ICO;OBJECTID=<MMPMTLK>"
  12343.       WPLocation    = "<WP_DESKTOP>"
  12344.       WPFlags = 2L
  12345.       )
  12346.  
  12347.  Defining Programs 
  12348.  
  12349.  Use the following structure to define a program that is to be added to a 
  12350.  folder.  Refer to the TLKSTRN.SCR file located in the 
  12351.  \TOOLKIT\SAMPLES\MM\SHORTCF subdirectory for an example. 
  12352.  
  12353.   WPObject =
  12354.   (
  12355.   WPClassName   = "WPProgram"
  12356.   WPTitle       = "title"
  12357.   WPSetupString = "EXENAME=path file;STARTUPDIR=dir;PROGTYPE=PM;
  12358.        ICONFILE=$(DEST)icon; [ASSOCTYPE=type;]
  12359.        [ASSOCFILTER=filter;] OBJECTID=<pgmobjid>"
  12360.   WPLocation    = "<parentfolderobjid>"
  12361.   WPFlags = 0
  12362.   )
  12363.  
  12364.  Note:  The program setup information (WPSetupString) must be on one line, not 
  12365.         two as shown in the previous figure. 
  12366.  
  12367.  title            Specifies the title to be displayed below the object in the 
  12368.                   parent folder. 
  12369.  
  12370.  path             Specifies a supported macro or the full path for the EXE 
  12371.                   file. 
  12372.  
  12373.  icon             Specifies the name of the icon to be displayed on the 
  12374.                   desktop. 
  12375.  
  12376.  file             Specifies the EXE file name. 
  12377.  
  12378.  dir              Specifies the full path of the startup directory or the macro 
  12379.                   $(DIR)# (where # is a defined destination directory in 
  12380.                   CONTROL.SCR). 
  12381.  
  12382.  type             Specifies one or more association types such as "Waveform." 
  12383.                   Multiple values are separated by commas. 
  12384.  
  12385.  filter           Specifies one or more association filter types such as 
  12386.                   "*.WAV." Multiple values are separated by commas. 
  12387.  
  12388.  pgmobjid         Specifies the OS/2 unique object ID that is used to find this 
  12389.                   program.  This is used by the installation program to 
  12390.                   determine if this program exists in the parent folder.  It is 
  12391.                   not used in the WPLocation field of any WPObject definition. 
  12392.  
  12393.  parentfolderobjid Specifies the folder object ID of the folder in which this 
  12394.                   program is to be placed. 
  12395.  
  12396.  WPFlags = 0      Specifies that the program is to be added to the folder only 
  12397.                   if it does not already exist. 
  12398.  
  12399.  
  12400. ΓòÉΓòÉΓòÉ 20. Caption DLL ΓòÉΓòÉΓòÉ
  12401.  
  12402. This section describes captioning functions and data structures provided in the 
  12403. Caption DLL found in the \TOOLKIT\SAMPLES\MM\CAPDLL subdirectory. 
  12404.  
  12405.  
  12406. ΓòÉΓòÉΓòÉ 20.1. ccInitialize ΓòÉΓòÉΓòÉ
  12407.  
  12408.  
  12409. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Syntax ΓòÉΓòÉΓòÉ
  12410.  
  12411. This function creates a captioning window and returns the handle of that window 
  12412. to the application.  This caption window is a child of hwndParent, and does not 
  12413. become visible until the Caption DLL is sent a CC_START command. 
  12414.  
  12415. An application calls this function once, during its initialization (or before 
  12416. it wants to use the caption services). 
  12417.  
  12418. #include <os2.h>
  12419.  
  12420. HWND     hwndParent;
  12421. ULONG    rc;
  12422.  
  12423. rc = ccInitialize(hwndParent);
  12424.  
  12425.  
  12426. ΓòÉΓòÉΓòÉ <hidden> ccInitialize Parameter - hwndParent ΓòÉΓòÉΓòÉ
  12427.  
  12428.  hwndParent (HWND) - input 
  12429.     Parent window handle. 
  12430.  
  12431.  
  12432. ΓòÉΓòÉΓòÉ <hidden> ccInitialize Return Value - rc ΓòÉΓòÉΓòÉ
  12433.  
  12434.  rc (ULONG) - returns 
  12435.     If the function is successful, the caption window handle is returned. 
  12436.     Possible return code inidicating type of failure: 
  12437.  
  12438.     CCERR_INVALID_WINDOW_HANDLE 
  12439.             The window handle passed was not valid. 
  12440.  
  12441.  
  12442. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Parameters ΓòÉΓòÉΓòÉ
  12443.  
  12444.  hwndParent (HWND) - input 
  12445.     Parent window handle. 
  12446.  
  12447.  rc (ULONG) - returns 
  12448.     If the function is successful, the caption window handle is returned. 
  12449.     Possible return code inidicating type of failure: 
  12450.  
  12451.     CCERR_INVALID_WINDOW_HANDLE 
  12452.             The window handle passed was not valid. 
  12453.  
  12454.  
  12455. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Related Functions ΓòÉΓòÉΓòÉ
  12456.  
  12457.      ccSendCommand 
  12458.      ccTerminate 
  12459.  
  12460.  
  12461. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Example Code ΓòÉΓòÉΓòÉ
  12462.  
  12463.  
  12464.    /*
  12465.     * Create the caption window and save the handle for further use.
  12466.     */
  12467.    hwndCaption = ccInitialize ( (HWND) hwndMainDialogBox );
  12468.  
  12469.  
  12470. ΓòÉΓòÉΓòÉ <hidden> ccInitialize - Topics ΓòÉΓòÉΓòÉ
  12471.  
  12472. Select an item: 
  12473.  
  12474. Syntax
  12475. Parameters
  12476. Returns
  12477. Example Code
  12478. Related Functions
  12479. Glossary
  12480.  
  12481.  
  12482. ΓòÉΓòÉΓòÉ 20.2. ccSendCommand ΓòÉΓòÉΓòÉ
  12483.  
  12484.  
  12485. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Syntax ΓòÉΓòÉΓòÉ
  12486.  
  12487. This function is used to control the captioning window once it has been 
  12488. created. 
  12489.  
  12490. #include <os2.h>
  12491.  
  12492. USHORT    usMsg;
  12493. MPARAM    mp1;
  12494. MPARAM    mp2;
  12495. ULONG     rc;
  12496.  
  12497. rc = ccSendCommand(usMsg, mp1, mp2);
  12498.  
  12499.  
  12500. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - usMsg ΓòÉΓòÉΓòÉ
  12501.  
  12502.  usMsg (USHORT) - input 
  12503.     This is one of the following commands you want to send to the captioning 
  12504.     window. 
  12505.  
  12506.     CC_START (1) 
  12507.             Use this command to start captioning.  "Start captioning" means to 
  12508.             display the window that was created in the ccInitialize command, 
  12509.             and to begin scrolling the appropriate text file in synch with an 
  12510.             audio file. Set mp2 to point to a CC_START_PARMS structure. 
  12511.  
  12512.     CC_STOP (2) 
  12513.             Use this command to stop captioning.  This command hides the 
  12514.             caption window.  Set mp1 and mp2 to zero. 
  12515.  
  12516.     CC_SET (3) 
  12517.  
  12518.             Use this command to set the status of the captioning system.  The 
  12519.             same items that can be queried can also be set.  mp2 should point 
  12520.             to a CC_SET_PARMS structure.  Note that these items can be queried 
  12521.             and set even while captioning is going on. 
  12522.  
  12523.     CC_STATUS (4) 
  12524.             Use this command to query the status of the captioning system. 
  12525.             Status items you can query and set include: 
  12526.  
  12527.                 Number of text columns 
  12528.                 Number of text rows 
  12529.                 Text color 
  12530.                 Background color 
  12531.                 Caption window X and Y coordinates 
  12532.  
  12533.             mp2 should point to a CC_STATUS_PARMS structure. 
  12534.  
  12535.  
  12536. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - mp1 ΓòÉΓòÉΓòÉ
  12537.  
  12538.  mp1 (MPARAM) - input 
  12539.     Caption window handle (returned from ccInitialize). 
  12540.  
  12541.  
  12542. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Parameter - mp2 ΓòÉΓòÉΓòÉ
  12543.  
  12544.  mp2 (MPARAM) - input 
  12545.     Data structure corresponding to the command message in usMsg. 
  12546.  
  12547.  
  12548. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand Return Value - rc ΓòÉΓòÉΓòÉ
  12549.  
  12550.  rc (ULONG) - returns 
  12551.     The CC_STOP return value is 0; the other commands have the following return 
  12552.     codes indicating success or failure: 
  12553.  
  12554.     0 
  12555.               Returns if the function is successful. 
  12556.  
  12557.     CCERR_CANNOT_CREATE_BITMAP 
  12558.               Returned to CC_START or CC_SET; the bitmap cannot be created. 
  12559.  
  12560.     CCERR_FILE_FORMAT 
  12561.               Returned to CC_START; invalid file format was used. 
  12562.  
  12563.     CCERR_NO_DEVICE_NAME 
  12564.               Returned to CC_START; no device name was given. 
  12565.  
  12566.     CCERR_TOO_MANY_LINES 
  12567.               Returned to CC_START; caption file has more than 500 lines. 
  12568.  
  12569.     DOS error codes 
  12570.               Returned to CC_START. 
  12571.  
  12572.     OS/2 multimedia error codes 
  12573.               Returned to CC_START. 
  12574.  
  12575.  
  12576. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Parameters ΓòÉΓòÉΓòÉ
  12577.  
  12578.  usMsg (USHORT) - input 
  12579.     This is one of the following commands you want to send to the captioning 
  12580.     window. 
  12581.  
  12582.     CC_START (1) 
  12583.             Use this command to start captioning.  "Start captioning" means to 
  12584.             display the window that was created in the ccInitialize command, 
  12585.             and to begin scrolling the appropriate text file in synch with an 
  12586.             audio file. Set mp2 to point to a CC_START_PARMS structure. 
  12587.  
  12588.     CC_STOP (2) 
  12589.             Use this command to stop captioning.  This command hides the 
  12590.             caption window.  Set mp1 and mp2 to zero. 
  12591.  
  12592.     CC_SET (3) 
  12593.  
  12594.             Use this command to set the status of the captioning system.  The 
  12595.             same items that can be queried can also be set.  mp2 should point 
  12596.             to a CC_SET_PARMS structure.  Note that these items can be queried 
  12597.             and set even while captioning is going on. 
  12598.  
  12599.     CC_STATUS (4) 
  12600.             Use this command to query the status of the captioning system. 
  12601.             Status items you can query and set include: 
  12602.  
  12603.                 Number of text columns 
  12604.                 Number of text rows 
  12605.                 Text color 
  12606.                 Background color 
  12607.                 Caption window X and Y coordinates 
  12608.  
  12609.             mp2 should point to a CC_STATUS_PARMS structure. 
  12610.  
  12611.  mp1 (MPARAM) - input 
  12612.     Caption window handle (returned from ccInitialize). 
  12613.  
  12614.  mp2 (MPARAM) - input 
  12615.     Data structure corresponding to the command message in usMsg. 
  12616.  
  12617.  rc (ULONG) - returns 
  12618.     The CC_STOP return value is 0; the other commands have the following return 
  12619.     codes indicating success or failure: 
  12620.  
  12621.     0 
  12622.               Returns if the function is successful. 
  12623.  
  12624.     CCERR_CANNOT_CREATE_BITMAP 
  12625.               Returned to CC_START or CC_SET; the bitmap cannot be created. 
  12626.  
  12627.     CCERR_FILE_FORMAT 
  12628.               Returned to CC_START; invalid file format was used. 
  12629.  
  12630.     CCERR_NO_DEVICE_NAME 
  12631.               Returned to CC_START; no device name was given. 
  12632.  
  12633.     CCERR_TOO_MANY_LINES 
  12634.               Returned to CC_START; caption file has more than 500 lines. 
  12635.  
  12636.     DOS error codes 
  12637.               Returned to CC_START. 
  12638.  
  12639.     OS/2 multimedia error codes 
  12640.               Returned to CC_START. 
  12641.  
  12642.  
  12643. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Related Functions ΓòÉΓòÉΓòÉ
  12644.  
  12645.      ccInitialize 
  12646.      ccTerminate 
  12647.  
  12648.  
  12649. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Example Code ΓòÉΓòÉΓòÉ
  12650.  
  12651.  
  12652.  /*
  12653.   * Close caption flag is ON.
  12654.   * Fill in the CC_START_PARMS structure and the call ccSendCommand
  12655.   * to make the captioning window visible.  The hwndOwner field holds
  12656.   * the window handle that we want the Caption DLL to send the position
  12657.   * change messages to, when it is done processing them.
  12658.   */
  12659.  
  12660.  csp.pszDeviceName    = (PSZ)   "capsamp";     /* Alias name          */
  12661.  csp.pszCaptionFile   = (PSZ)   "CAPSAMP._CC"; /* File name to use    */
  12662.  csp.hwndOwner        =  hwnd;                 /* for position change */
  12663.  
  12664.  ulReturn = ccSendCommand ( CC_START, MPFROMHWND(hwndCaption), &csp );
  12665.                                                /* Start captioning    */
  12666.  
  12667.  
  12668. ΓòÉΓòÉΓòÉ <hidden> ccSendCommand - Topics ΓòÉΓòÉΓòÉ
  12669.  
  12670. Select an item: 
  12671.  
  12672. Syntax
  12673. Parameters
  12674. Returns
  12675. Example Code
  12676. Related Functions
  12677. Glossary
  12678.  
  12679.  
  12680. ΓòÉΓòÉΓòÉ 20.3. ccTerminate ΓòÉΓòÉΓòÉ
  12681.  
  12682.  
  12683. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Syntax ΓòÉΓòÉΓòÉ
  12684.  
  12685. Call this function once at the end of the application (or when the application 
  12686. wishes to cease captioning).  It closes the captioning system and releases any 
  12687. resources that were allocated on behalf of captioning. 
  12688.  
  12689. #include <os2.h>
  12690.  
  12691. HWND    hwndCaption;
  12692.  
  12693. ccTerminate(hwndCaption);
  12694.  
  12695.  
  12696. ΓòÉΓòÉΓòÉ <hidden> ccTerminate Parameter - hwndCaption ΓòÉΓòÉΓòÉ
  12697.  
  12698.  hwndCaption (HWND) 
  12699.     Caption window handle. 
  12700.  
  12701.  
  12702. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Return Value ΓòÉΓòÉΓòÉ
  12703.  
  12704.     This function does not return a value. 
  12705.  
  12706.  
  12707. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Parameters ΓòÉΓòÉΓòÉ
  12708.  
  12709.  hwndCaption (HWND) 
  12710.     Caption window handle. 
  12711.  
  12712.     This function does not return a value. 
  12713.  
  12714.  
  12715. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Related Functions ΓòÉΓòÉΓòÉ
  12716.  
  12717.      ccInitialize 
  12718.      ccSendCommand 
  12719.  
  12720.  
  12721. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Example Code ΓòÉΓòÉΓòÉ
  12722.  
  12723.  /*
  12724.   * Close the captioning system. This will release all the
  12725.   * resources that were allocated.
  12726.   */
  12727.   ccTerminate(hwndCaption);
  12728.  
  12729.  
  12730. ΓòÉΓòÉΓòÉ <hidden> ccTerminate - Topics ΓòÉΓòÉΓòÉ
  12731.  
  12732. Select an item: 
  12733.  
  12734. Syntax
  12735. Parameters
  12736. Returns
  12737. Example Code
  12738. Related Functions
  12739. Glossary
  12740.  
  12741.  
  12742. ΓòÉΓòÉΓòÉ 20.4. CC_SET_PARMS ΓòÉΓòÉΓòÉ
  12743.  
  12744. This data structure contains information for the ccSendCommand function when 
  12745. using the CC_SET message. 
  12746.  
  12747. typedef struct _CC_SET_PARMS {
  12748.   ULONG     ulRows;
  12749.   ULONG     ulBackgroundColor;
  12750.   ULONG     ulTextColor;
  12751.   ULONG     ulXposition;
  12752.   ULONG     ulYposition;
  12753.   ULONG     ulColumns;
  12754. } CC_SET_PARMS;
  12755.  
  12756. typedef CC_SET_PARMS FAR *PCC_SET_PARMS;
  12757.  
  12758.  
  12759. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulRows ΓòÉΓòÉΓòÉ
  12760.  
  12761.  ulRows (ULONG) 
  12762.     This is item is set to the desired number of text rows to display in the 
  12763.     caption window. 
  12764.  
  12765.  
  12766. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulBackgroundColor ΓòÉΓòÉΓòÉ
  12767.  
  12768.  ulBackgroundColor (ULONG) 
  12769.     This item is set to the desired color index of the background color in the 
  12770.     caption window. 
  12771.  
  12772.  
  12773. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulTextColor ΓòÉΓòÉΓòÉ
  12774.  
  12775.  ulTextColor (ULONG) 
  12776.     This item is set to the desired color index of the text color in the 
  12777.     caption window. 
  12778.  
  12779.  
  12780. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulXposition ΓòÉΓòÉΓòÉ
  12781.  
  12782.  ulXposition (ULONG) 
  12783.     This item is set to the desired X-coordinate position of the caption 
  12784.     window. 
  12785.  
  12786.  
  12787. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulYposition ΓòÉΓòÉΓòÉ
  12788.  
  12789.  ulYposition (ULONG) 
  12790.     This item is set to the desired Y-coordinate position of the caption 
  12791.     window. 
  12792.  
  12793.  
  12794. ΓòÉΓòÉΓòÉ <hidden> CC_SET_PARMS Field - ulColumns ΓòÉΓòÉΓòÉ
  12795.  
  12796.  ulColumns (ULONG) 
  12797.     This item is set to the desired number of columns to display in the caption 
  12798.     window. 
  12799.  
  12800.  
  12801. ΓòÉΓòÉΓòÉ 20.5. CC_START_PARMS ΓòÉΓòÉΓòÉ
  12802.  
  12803. This data structure contains information for the ccSendCommand function when 
  12804. using the CC_START message. 
  12805.  
  12806. typedef struct _CC_START_PARMS {
  12807.   HWND     hwndOwner;
  12808.   PSZ      pszDeviceID;
  12809.   PSZ      CaptionFile;
  12810. } CC_START_PARMS;
  12811.  
  12812. typedef CC_START_PARMS FAR *PCC_START_PARMS;
  12813.  
  12814.  
  12815. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - hwndOwner ΓòÉΓòÉΓòÉ
  12816.  
  12817.  hwndOwner (HWND) 
  12818.     This specifies the handle of the user window.  If this parameter contains a 
  12819.     window handle, then the captioning system will send MM_MCIPOSITIONCHANGE 
  12820.     messages to the window when it is through with them.  If this handle is 
  12821.     NULL, then the application will not receive any MM_MCIPOSITIONCHANGE 
  12822.     messages. 
  12823.  
  12824.  
  12825. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - pszDeviceID ΓòÉΓòÉΓòÉ
  12826.  
  12827.  pszDeviceID (PSZ) 
  12828.     This is the ID of the device playing the audio which is to be captioned. If 
  12829.     this parameter is not NULL, then the Caption DLL will request 
  12830.     MM_MCIPOSITIONCHANGE messages from this device.  If this parameter is NULL, 
  12831.     then an error will be returned to the application. 
  12832.  
  12833.  
  12834. ΓòÉΓòÉΓòÉ <hidden> CC_START_PARMS Field - CaptionFile ΓòÉΓòÉΓòÉ
  12835.  
  12836.  CaptionFile (PSZ) 
  12837.     This is a pointer to a NULL terminated string which contains the name of 
  12838.     the caption file.  If this parameter is NULL, or if the file cannot be 
  12839.     opened, then an error will be returned to the application. 
  12840.  
  12841.  
  12842. ΓòÉΓòÉΓòÉ 20.6. CC_STATUS_PARMS ΓòÉΓòÉΓòÉ
  12843.  
  12844. This structure contains information for the ccSendCommand function when using 
  12845. the CC_STATUS message. 
  12846.  
  12847. typedef struct _CC_STATUS_PARMS {
  12848.   ULONG     ulItem;
  12849.   ULONG     ulReturn;
  12850. } CC_STATUS_PARMS;
  12851.  
  12852. typedef CC_STATUS_PARMS FAR *PCC_STATUS_PARMS;
  12853.  
  12854.  
  12855. ΓòÉΓòÉΓòÉ <hidden> CC_STATUS_PARMS Field - ulItem ΓòÉΓòÉΓòÉ
  12856.  
  12857.  ulItem (ULONG) 
  12858.     This is the item whose status is being queried.  It must be set to one of 
  12859.     the following values: 
  12860.  
  12861.     CC_STATUS_TEXT_COLUMNS (1) 
  12862.             Columns of text in the caption window. 
  12863.  
  12864.     CC_STATUS_TEXT_ROWS (2) 
  12865.             Rows of text in the caption window. 
  12866.  
  12867.     CC_STATUS_TEXT_COLOR (3) 
  12868.             Color index of the text color. 
  12869.  
  12870.     CC_STATUS_BACKGROUND_COLOR (4) 
  12871.             Color index of the background color of the text window. 
  12872.  
  12873.     CC_STATUS_X_POSITION (5) 
  12874.             X-coordinate of the captioning window relative to the parent 
  12875.             window. 
  12876.  
  12877.     CC_STATUS_Y_POSITION (6) 
  12878.             Y-coordinate of the captioning window relative to the parent 
  12879.             window. 
  12880.  
  12881.  
  12882. ΓòÉΓòÉΓòÉ <hidden> CC_STATUS_PARMS Field - ulReturn ΓòÉΓòÉΓòÉ
  12883.  
  12884.  ulReturn (ULONG) 
  12885.     This field contains the return value of the queried item. 
  12886.  
  12887.  
  12888. ΓòÉΓòÉΓòÉ 20.7. BOOL ΓòÉΓòÉΓòÉ
  12889.  
  12890. Boolean. 
  12891.  
  12892. Valid values are: 
  12893.  
  12894.      FALSE, which is 0 
  12895.      TRUE, which is 1 
  12896.  
  12897.   typedef unsigned long BOOL;
  12898.  
  12899.  
  12900. ΓòÉΓòÉΓòÉ 20.8. HWND ΓòÉΓòÉΓòÉ
  12901.  
  12902. Window handle. 
  12903.  
  12904. typedef LHANDLE HWND;
  12905.  
  12906.  
  12907. ΓòÉΓòÉΓòÉ 20.9. MPARAM ΓòÉΓòÉΓòÉ
  12908.  
  12909. A 4-byte message-dependent parameter structure. 
  12910.  
  12911. typedef VOID *MPARAM;
  12912.  
  12913. Certain elements of information, placed into the parameters of a message, have 
  12914. data types that do not use all four bytes of this data type. The rules 
  12915. governing these cases are: 
  12916.  
  12917.  BOOL      The value is contained in the low word and the high word is 0. 
  12918.  SHORT     The value is contained in the low word and its sign is extended into 
  12919.            the high word. 
  12920.  USHORT    The value is contained in the low word and the high word is 0. 
  12921.  NULL      The entire four bytes are 0. 
  12922.  
  12923.  The structure of this data type depends on the message. For details, see the 
  12924.  description of the particular message. 
  12925.  
  12926.  
  12927. ΓòÉΓòÉΓòÉ 20.10. PSZ ΓòÉΓòÉΓòÉ
  12928.  
  12929. Pointer to a null-terminated string. 
  12930.  
  12931. If you are using C++ **, you may need to use PCSZ. 
  12932.  
  12933. typedef unsigned char *PSZ;
  12934.  
  12935.  
  12936. ΓòÉΓòÉΓòÉ 20.11. SHORT ΓòÉΓòÉΓòÉ
  12937.  
  12938. Signed integer in the range -32 768 through 32 767. 
  12939.  
  12940. #define SHORT short
  12941.  
  12942.  
  12943. ΓòÉΓòÉΓòÉ 20.12. ULONG ΓòÉΓòÉΓòÉ
  12944.  
  12945. 32-bit unsigned integer in the range 0 through 4 294 967 295. 
  12946.  
  12947. typedef unsigned long ULONG;
  12948.  
  12949.  
  12950. ΓòÉΓòÉΓòÉ 20.13. USHORT ΓòÉΓòÉΓòÉ
  12951.  
  12952. Unsigned integer in the range 0 through 65 535. 
  12953.  
  12954. typedef unsigned short USHORT;
  12955.  
  12956.  
  12957. ΓòÉΓòÉΓòÉ 20.14. VOID ΓòÉΓòÉΓòÉ
  12958.  
  12959. A data area of undefined format. 
  12960.  
  12961. #define VOID void
  12962.  
  12963.  
  12964. ΓòÉΓòÉΓòÉ 21. High-Level Service API ΓòÉΓòÉΓòÉ
  12965.  
  12966. This section describes audio-enabling macros and the high-level service 
  12967. routines designed to simplify writing macros. The service routines are valuable 
  12968. for many applications and are needed for information presentation facility 
  12969. (IPF) support. 
  12970.  
  12971. The five functions (high-level service API) are: mciPlayFile, 
  12972. mciRecordAudioFile, mciPlayResource, mmioFindElement, and mmioRemoveElement. 
  12973. These functions are located in MCIAPI.DLL. Define INCL_MACHDR and include 
  12974. OS2ME.H in any source that needs access to the high-level service API. The OS/2 
  12975. Multimedia Programming Reference provides a detailed description of these 
  12976. functions. 
  12977.  
  12978. Note:  These functions are also provided as 16-bit functions. The 16-bit 
  12979.        functions include "16" in the function name as follows: 
  12980.  
  12981.      mci16PlayFile 
  12982.      mci16PlayResource 
  12983.      mci16RecordAudioFile 
  12984.      mmio16FindElement 
  12985.      mmio16RemoveElement 
  12986.  
  12987.  The mciPlayFile function plays a multimedia file or waveaudio bundle element 
  12988.  without displaying a device control panel. The mciPlayResource function 
  12989.  operates much the same as mciPlayFile, except that it plays the multimedia 
  12990.  object that is stored in a program resource and is intended for IPF support, 
  12991.  not audio macros.  The function loads the resource using DosGetResource, 
  12992.  creates a MMIO memory file, and opens the default device to play the memory 
  12993.  file. 
  12994.  
  12995.  The mciRecordAudioFile function provides a very simple recorder window 
  12996.  allowing the recording of audio annotations.  The mciRecordAudioFile function 
  12997.  does not return until the recording is complete and the window is closed. This 
  12998.  function creates the file if it does not exist. The mciRecordAudioFile records 
  12999.  digital audio data from the microphone input of the default waveaudio device. 
  13000.  When the file is initially created the settings are PCM, 11 kHz, mono, and the 
  13001.  default sample size of the audio adapter in use. All play and record 
  13002.  operations are performed from beginning to end. 
  13003.  
  13004.  The mmioRemoveElement function removes an element from a compound file and the 
  13005.  mmioFindElement function enumerates elements in a compound file. For more 
  13006.  information on the compound file structure, see RIFF Compound File Overview. 
  13007.  
  13008.  
  13009. ΓòÉΓòÉΓòÉ 21.1. Creating an Audio-Enabled Macro for an Application ΓòÉΓòÉΓòÉ
  13010.  
  13011. Many applications provide macro languages for extending the application's 
  13012. functionality.  This is a possible way to integrate multimedia (usually audio) 
  13013. into existing applications.  The basic function of an audio macro would be to 
  13014. record audio clips (annotations) and play them.  For example, an audio clip can 
  13015. be associated with a location or object in a document such as a spreadsheet or 
  13016. worksheet. 
  13017.  
  13018. Macros can use compound files to reduce the number of files in the system. 
  13019. Compound files provide a convenient way of grouping multimedia objects that are 
  13020. used together. The compound file structure provides for direct access to 
  13021. multimedia data elements. 
  13022.  
  13023. If you were to annotate the cells of a spreadsheet and store the audio clips in 
  13024. a single compound file, the cell labels can be used as element names for the 
  13025. elements in the compound file.  Then the macro can call mciRecordAudioFile and 
  13026. mciPlayFile to record and play back the elements of the compound file.  The 
  13027. compound file can have the same base name as the worksheet and a file extension 
  13028. of .BND. This naming convention identifies which worksheet the audio files 
  13029. belong to.  The macro does not need to keep track of cells that are moved on a 
  13030. worksheet, only the cell name is necessary to access the corresponding audio 
  13031. element of a compound file. 
  13032.  
  13033. The audio file is created when you record or save the audio file.  If you exit 
  13034. from a worksheet and choose not to save changes, the audio file will still 
  13035. exist. There is no way to recover an audio file after it is deleted (using 
  13036. mmioRemoveElement). 
  13037.  
  13038. If a macro uses compound files and elements are deleted with mmioRemoveElement, 
  13039. the size of the compound file does not change. By specifying the 
  13040. MMIO_RE_COMPACT flag, a macro requests that the compound file be compacted 
  13041. after the element is removed. This allows audio recording into an existing wave 
  13042. element that can exceed the current size of the element.  The resulting 
  13043. compound file can be compacted to save disk space. 
  13044.  
  13045.  
  13046. ΓòÉΓòÉΓòÉ 21.2. Creating a REXX Command File Using MCI String Commands ΓòÉΓòÉΓòÉ
  13047.  
  13048. Audio functions can be called with REXX command files.  The audio functions 
  13049. available are mciRxSendString(), mciRxInit(), mciRxExit(), mciRxGetError(), and 
  13050. mciRxGetDeviceID(). OS/2 multimedia provides examples of REXX command files; 
  13051. PLAY.CMD and RECORD.CMD demonstrate how to play and record audio files. 
  13052. Multimedia with REXX, an online reference provided with OS/2 multimedia, 
  13053. contains more detailed information on the REXX string interface. 
  13054.  
  13055.  
  13056. ΓòÉΓòÉΓòÉ 21.3. Duet Player IPF Sample ΓòÉΓòÉΓòÉ
  13057.  
  13058. The Streaming Device Duet Sample (DUET1) uses mciPlayFile to play audio help. 
  13059. When the application receives an HM_INFORM message, mciPlayFile is issued as 
  13060. shown in the following code fragment. 
  13061.  
  13062.  
  13063.     case HM_INFORM:
  13064.  /*
  13065.   * The user has selected the "Play Audio Help" selection in the
  13066.   * IPF help panel.
  13067.   *
  13068.   * To initiate the playing of audio help, we need to issue
  13069.   * mciPlayFile.
  13070.   *
  13071.   * Note that we assume the HM_INFORM message came from the "Play
  13072.   * Audio Help" selection since it is the only :link. with an inform
  13073.   * reftype in the .ipf file.  If there were more, we would have to
  13074.   * check the resource identifier to determine for which selection
  13075.   * this message was generated.
  13076.   */
  13077.  
  13078.  /*
  13079.   * Load the name of the audio help file from the resource.
  13080.   */
  13081.  WinLoadString( hab,
  13082.                 (HMODULE) NULL,
  13083.                 IDS_HELP_WAVEFILE,
  13084.                 (SHORT) sizeof( achAudioHelpFile),
  13085.                 achAudioHelpFile);
  13086.  
  13087.  ulError = mciPlayFile( (HWND)NULL,            /* Ignore owner
  13088.                                                   window            */
  13089.                         (PSZ)achAudioHelpFile, /* Audio file
  13090.                                                   to play           */
  13091.                         MCI_ASYNC,             /* Command processed
  13092.                                                   asynchronously    */
  13093.                         (PSZ)NULL,             /* Ignore title      */
  13094.                         (HWND)NULL );          /* Ignore viewport
  13095.                                                   window            */
  13096.  if (ulError)
  13097.  {
  13098.     ShowMCIErrorMessage( ulError);
  13099.  }
  13100.  return( (MRESULT) 0);
  13101.  
  13102.  
  13103. ΓòÉΓòÉΓòÉ 22. Notices ΓòÉΓòÉΓòÉ
  13104.  
  13105. August 1996 
  13106.  
  13107. The following paragraph does not apply to the United Kingdom or any country 
  13108. where such provisions are inconsistent with local law:  INTERNATIONAL BUSINESS 
  13109. MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY 
  13110. KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  13111. WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states 
  13112. do not allow disclaimer of express or implied warranties in certain 
  13113. transactions, therefore, this statement may not apply to you. 
  13114.  
  13115. This publication could include technical inaccuracies or typographical errors. 
  13116. Changes are periodically made to the information herein; these changes will be 
  13117. incorporated in new editions of the publication. IBM may make improvements 
  13118. and/or changes in the product(s) and/or the program(s) described in this 
  13119. publication at any time. 
  13120.  
  13121. This publication was produced in the United States of America.  IBM may not 
  13122. offer the products, services, or features discussed in this document in other 
  13123. countries, and the information is subject to change without notice.  Consult 
  13124. your local IBM representative for information on the products, services, and 
  13125. features available in your area. 
  13126.  
  13127. Requests for technical information about IBM products should be made to your 
  13128. IBM reseller or IBM marketing representative. 
  13129.  
  13130.  
  13131. ΓòÉΓòÉΓòÉ 22.1. Copyright Notices ΓòÉΓòÉΓòÉ
  13132.  
  13133. COPYRIGHT LICENSE: This publication contains printed sample application 
  13134. programs in source language, which illustrate OS/2 programming techniques. You 
  13135. may copy, modify, and distribute these sample programs in any form without 
  13136. payment to IBM, for the purposes of developing, using, marketing or 
  13137. distributing application programs conforming to the OS/2 application 
  13138. programming interface. 
  13139.  
  13140. Each copy of any portion of these sample programs or any derivative work, which 
  13141. is distributed to others, must include a copyright notice as follows: "(C) 
  13142. (your company name) (year).  All rights reserved." 
  13143.  
  13144. (C) Copyright International Business Machines Corporation 1994, 1996. All 
  13145. rights reserved. 
  13146. Note to U.S. Government Users - Documentation related to restricted rights - 
  13147. Use, duplication or disclosure is subject to restrictions set forth in GSA ADP 
  13148. Schedule Contract with IBM Corp. 
  13149.  
  13150.  
  13151. ΓòÉΓòÉΓòÉ 22.2. Disclaimers ΓòÉΓòÉΓòÉ
  13152.  
  13153. References in this publication to IBM products, programs, or services do not 
  13154. imply that IBM intends to make these available in all countries in which IBM 
  13155. operates. Any reference to an IBM product, program, or service is not intended 
  13156. to state or imply that only that IBM product, program, or service may be used. 
  13157. Subject to IBM's valid intellectual property or other legally protectable 
  13158. rights, any functionally equivalent product, program, or service may be used 
  13159. instead of the IBM product, program, or service. The evaluation and 
  13160. verification of operation in conjunction with other products, except those 
  13161. expressly designated by IBM, are the responsibility of the user. 
  13162.  
  13163. IBM may have patents or pending patent applications covering subject matter in 
  13164. this document. The furnishing of this document does not give you any license to 
  13165. these patents. You can send license inquiries, in writing, to: 
  13166.  
  13167.       IBM Director of Licensing 
  13168.       IBM Corporation 
  13169.       500 Columbus Avenue 
  13170.       Thornwood, NY  10594 
  13171.       U.S.A. 
  13172.  
  13173.  Asia-Pacific users can inquire, in writing, to the IBM Director of 
  13174.  Intellectual Property and Licensing, IBM World Trade Asia Corporation, 2-31 
  13175.  Roppongi 3-chome, Minato-ku, Tokyo 106, Japan. 
  13176.  
  13177.  Licensees of this program who wish to have information about it for the 
  13178.  purpose of enabling: (i) the exchange of information between independently 
  13179.  created programs and other programs (including this one) and (ii) the mutual 
  13180.  use of the information which has been exchanged, should contact IBM 
  13181.  Corporation, Department LZKS, 11400 Burnet Road, Austin, TX 78758 U.S.A.  Such 
  13182.  information may be available, subject to appropriate terms and conditions, 
  13183.  including in some cases, payment of a fee. 
  13184.  
  13185.  
  13186. ΓòÉΓòÉΓòÉ 22.3. Trademarks ΓòÉΓòÉΓòÉ
  13187.  
  13188. The following terms are trademarks of the IBM Corporation in the United States 
  13189. or other countries or both: 
  13190.  
  13191.  Audio Visual Connection               Personal System/2 
  13192.  Common User Access                    Presentation Manager 
  13193.  C Set ++                              PS/2 
  13194.  CUA                                   Ultimotion 
  13195.  IBM                                   Workplace Shell 
  13196.  Multimedia Presentation Manager/2     VisualAge 
  13197.  OS/2 
  13198.  
  13199.  The following terms are trademarks of other companies: 
  13200.  
  13201.  DVI                           Intel Corporation 
  13202.  Indeo                         Intel Corporation 
  13203.  Motorola                      Motorola, Inc. 
  13204.  NeXT                          NeXT Computer, Inc. 
  13205.  Philips                       Philips Electronics N.V. 
  13206.  Pioneer                       Pioneer Electronic Corporation 
  13207.  Pro AudioSpectrum 16          Media Vision, Inc. 
  13208.  RealMagic                     Sigma Designs, Inc. 
  13209.  Sony                          Sony Corporation 
  13210.  Sound Blaster                 Creative Technology Ltd. 
  13211.  Sun                           Sun Microsystems, Inc. 
  13212.  WinTV                         Hauppauge Computer Works, Inc. 
  13213.  
  13214.  Microsoft, Windows, and the Windows 95 logo are trademarks or registered 
  13215.  trademarks of Microsoft Corporation. 
  13216.  
  13217.  UNIX is a registered trademark in the United States and other countries 
  13218.  licensed exclusively through X/Open Company Limited. 
  13219.  
  13220.  Other company, product, and service names, which may be denoted by a double 
  13221.  asterisk (**), may be trademarks or service marks of others. 
  13222.  
  13223.  
  13224. ΓòÉΓòÉΓòÉ 23. Glossary ΓòÉΓòÉΓòÉ
  13225.  
  13226.  
  13227. ΓòÉΓòÉΓòÉ <hidden> Glossary ΓòÉΓòÉΓòÉ
  13228.  
  13229. Select the starting letter of the glossary term you want to locate. 
  13230.  
  13231.  
  13232. ΓòÉΓòÉΓòÉ <hidden> A ΓòÉΓòÉΓòÉ
  13233.  
  13234.  AB roll  - Synchronized playback of two recorded video images so that one can 
  13235.    perform effects, such as dissolves, wipes, or inserts, using both images 
  13236.    simultaneously. 
  13237.  
  13238.  ACPA  - Audio capture and playback adapter. 
  13239.  
  13240.  active matrix  - A technology that gives every pel (dot) on the screen its own 
  13241.    transistor to control it more accurately.  (This allows for better contrast 
  13242.    and less motion smearing.) 
  13243.  
  13244.  adaptive differential pulse code modulation  - A bit-rate reduction technique 
  13245.    where the difference in pulse code modulation samples are not compressed 
  13246.    before being stored. 
  13247.  
  13248.  ADC  - Analog-to-digital converter. 
  13249.  
  13250.  ADPCM  - Adaptive differential pulse code modulation. 
  13251.  
  13252.  aliasing  - The phenomenon of generating a false (alias) frequency, along with 
  13253.    the correct one, as an artifact of sampling a signal at discrete points.  In 
  13254.    audio, this produces a "buzz."  In imagery, this produces a jagged edge, or 
  13255.    stair-step effect. See also moire. 
  13256.  
  13257.  all points addressable (APA)  - In computer graphics, pertaining to the 
  13258.    ability to address and display or not display each picture element on a 
  13259.    display surface. 
  13260.  
  13261.  AM  - Animation metafile. 
  13262.  
  13263.  ambience  - In audio, the reverberation pattern of a particular concert hall, 
  13264.    or listening space. 
  13265.  
  13266.  ambient noise  - In acoustics, the noise associated with a particular 
  13267.    environment, usually a composite of sounds from many distant or nearby 
  13268.    sources. 
  13269.  
  13270.  American National Standards Institute (ANSI)  - An organization consisting of 
  13271.    producers, consumers, and general interest groups, that establishes the 
  13272.    procedures by which accredited organizations create and maintain voluntary 
  13273.    industry standards in the United States. 
  13274.  
  13275.  AMF  - Animation metafile format. 
  13276.  
  13277.  amp  - See amplifier. 
  13278.  
  13279.  amplifier  - (1) A device that increases the strength of input signals (either 
  13280.    voltage or current). (2) Also referred to as an amp. 
  13281.  
  13282.  amp-mixer  - (1) A combination amplifier and mixer that is used to control the 
  13283.    characteristics of an audio signal from one or more audio sources. (2) Also 
  13284.    referred to as an amplifier-mixer. 
  13285.  
  13286.  analog  - Pertaining to data consisting of continuously variable physical 
  13287.    quantities. Contrast with digital. 
  13288.  
  13289.  analog audio  - Audio in which all information representing sounds is stored 
  13290.    or transmitted in a continuous-scale electrical signal, such as line level 
  13291.    audio in stereo components. See also digital audio. 
  13292.  
  13293.  analog-to-digital converter (ADC)  - A functional unit that converts data from 
  13294.    an analog representation to a digital representation. (I) (A) 
  13295.  
  13296.  analog video  - Video in which all the information representing images is in a 
  13297.    continuous-scale electrical signal for both amplitude and time. See also 
  13298.    digital video. 
  13299.  
  13300.  analog video overlay  - See overlay. 
  13301.  
  13302.  anchor  - An area of a display screen that is activated to accept user input. 
  13303.    Synonymous with hot spot, touch area, and trigger. 
  13304.  
  13305.  animate  - Make or design in such a way as to create apparently spontaneous, 
  13306.    lifelike movement. 
  13307.  
  13308.  animated  - Having the appearance of something alive. 
  13309.  
  13310.  animated screen capture  - Recording a computing session for replay on a 
  13311.    similar computer with voice annotation.  (An example is sending a 
  13312.    spreadsheet with an accompanying screen recording as an explanation and 
  13313.    overview.) 
  13314.  
  13315.  animatic  - A limited animation consisting of artwork shot on film or 
  13316.    videotape and edited to serve as an on-screen storyboard. 
  13317.  
  13318.  animation metafile  - A compound file format, the elements of which are the 
  13319.    frames of animation themselves.  These frames are stored sequentially so 
  13320.    that they can be played back in time by streaming to the video agent. 
  13321.  
  13322.  animation metafile format (AMF)  - The file format used to store animated 
  13323.    frame sequences. 
  13324.  
  13325.  annotation  - The linking of an object with another, where the second contains 
  13326.    some information related to the first.  For example, an audio annotation of 
  13327.    a spreadsheet cell might contain verbal explanation about the contents of 
  13328.    the cell. 
  13329.  
  13330.  ANSI  - American National Standards Institute. 
  13331.  
  13332.  anthropomorphic software agent  - The concept of a simulated agent, seemingly 
  13333.    living inside the computer, that talks to and listens to the user, and then 
  13334.    acts for the user on command. 
  13335.  
  13336.  antialiasing  - (1) In imagery, using several intensities of colors (a ramp) 
  13337.    between the color of the line and the background color to create the effect 
  13338.    of smoother curves and fewer jagged edges on curves and diagonals. (2) In 
  13339.    imagery or audio, removing aliases by eliminating frequencies above half the 
  13340.    sample frequencies. 
  13341.  
  13342.  AOCA  - Audio Object Content Architecture. 
  13343.  
  13344.  APA  - All points addressable. 
  13345.  
  13346.  APA graphics  - All Points Addressable graphics. See bitmap graphics. 
  13347.  
  13348.  API  - Application programming interface. 
  13349.  
  13350.  application programming interface (API)  - A functional interface supplied by 
  13351.    the operating system or an IBM separately orderable licensed program that 
  13352.    allows an application program written in a high-level language to use 
  13353.    specific data or functions of the operating system or the licensed program. 
  13354.  
  13355.  application-supplied video window  - (1) An application can specify to MMPM/2 
  13356.    that it wants video played in a specific window (controlled by the 
  13357.    application) instead of the default window (controlled by MMPM/2).  The 
  13358.    application supplied video window can be used to implement advanced features 
  13359.    not supported by the default video window. (2) Also referred to as an 
  13360.    alternate video window. 
  13361.  
  13362.  artifact  - A product resulting from human activity; in computer activity, a 
  13363.    (usually unwanted) by-product of a process. 
  13364.  
  13365.  aspect ratio  - (1) On a display screen, the ratio of the maximum length of a 
  13366.    display line to the maximum length of a display column. (2) The ratio of 
  13367.    height to width.  (This term applies to areas or individual pels.)  Refer to 
  13368.    enhanced graphics adapter and video graphics adapter. 
  13369.  
  13370.  asymmetric video compression  - In multimedia applications, the use of a 
  13371.    powerful computer to compress a video for mastering so that a less powerful 
  13372.    (less expensive) system is needed to decompress it. Contrast with symmetric 
  13373.    video compression. 
  13374.  
  13375.  audible cue  - A sound generated by the computer to draw a user's attention 
  13376.    to, or provide feedback about, an event or state of the computer.  Audible 
  13377.    cues enhance and reinforce visible cues. 
  13378.  
  13379.  audio  - Pertaining to the portion of recorded information that can be heard. 
  13380.  
  13381.  audio attribute control  - Provides access to and operation of the standard 
  13382.    audio attributes: mute, volume, balance, treble, and bass. All device 
  13383.    communication and user interface support is handled by the control. 
  13384.  
  13385.  audio attributes  - Refers to the standard audio attributes: mute, volume, 
  13386.    balance, treble and bass. 
  13387.  
  13388.  audio clip  - A section of recorded audio material. 
  13389.  
  13390.  Audio Object Content Architecture  - A data format for multimedia products. 
  13391.  
  13392.  audio processing  - Manipulating digital audio to, for example, edit or create 
  13393.    special effects. 
  13394.  
  13395.  audio segment  - A contiguous set of recorded data from an audio track.  An 
  13396.    audio segment might or might not be associated with a video segment. 
  13397.  
  13398.  audio track  - (1) The audio (sound) portion of the program. (2) The physical 
  13399.    location where the audio is placed beside the image.  (A system with two 
  13400.    audio tracks can have either stereo sound or two independent audio tracks.) 
  13401.    (3) Synonym for sound track. 
  13402.  
  13403.  audiovisual  - A generic term referring to experiences, equipment, and 
  13404.    materials used for communication that make use of both hearing and sight. 
  13405.  
  13406.  Audio Visual Connection* (AVC)  - An authoring system used on an IBM PS/2* to 
  13407.    develop and display audiovisual productions. 
  13408.  
  13409.  audiovisual computer program  - A computer program that makes use of both 
  13410.    hearing and sight. 
  13411.  
  13412.  authoring  - A structured approach to combining all media elements within an 
  13413.    interactive production, assisted by computer software designed for this 
  13414.    purpose. 
  13415.  
  13416.  authoring system  - A set of tools used to create an interactive multimedia 
  13417.    application without implementing formal programming. 
  13418.  
  13419.  AVI file format  - The Audio/Video Interleaved (AVI) file format is the 
  13420.    standard file format used to support software motion video.  AVI files can 
  13421.    contain multiple streams (tracks) of data (for example, a video and an audio 
  13422.    stream).  The streams are interleaved to improve access times during 
  13423.    playback.  The present implementation is limited to a single video stream 
  13424.    and a single, optional, audio stream. 
  13425.  
  13426.  
  13427. ΓòÉΓòÉΓòÉ <hidden> B ΓòÉΓòÉΓòÉ
  13428.  
  13429.  background image  - The part of a display image, such as a form overlay, that 
  13430.    is not changed during a particular sequence of transactions. Contrast with 
  13431.    foreground image. 
  13432.  
  13433.  background music  - In videotaping, music that accompanies dialog or action. 
  13434.  
  13435.  balance  - For audio, refers to the relative strength of the left and right 
  13436.    channels.  A balance level of 0 is left channel only.  A balance level of 
  13437.    100 is right channel only. 
  13438.  
  13439.  basic input/output system (BIOS)  - In an IBM personal computer, microcode 
  13440.    that controls basic hardware operations, such as interactions with diskette 
  13441.    drives, hard disk drives, and the keyboard.  (For example, the IBM Enhanced 
  13442.    Graphics Adapter has an addressable BIOS, located on the adapter itself, 
  13443.    that is used to control the IBM InfoWindow* graphics functions.) 
  13444.  
  13445.  beta format  - A consumer and industrial 0.5-inch tape format. 
  13446.  
  13447.  BG  - Script abbreviation for background. 
  13448.  
  13449.  BIOS  - Basic input/output system. 
  13450.  
  13451.  bitmap  - A coded representation in which each bit, or group of bits, 
  13452.    represents or corresponds to an item, for example, a configuration of bits 
  13453.    in main storage in which each bit indicates whether a peripheral device or a 
  13454.    storage block is available or in which each group of bits corresponds to one 
  13455.    pel of a display image. 
  13456.  
  13457.  bit-block transfer  - Transfer of a rectangular array of bitmap data. 
  13458.  
  13459.  bitblt  - Bit-block transfer.  Synonym for blit. 
  13460.  
  13461.  bitmap graphics  - A form of graphics whereby all points on the display are 
  13462.    directly addressable. See also all points addressable. 
  13463.  
  13464.  blit  - Synonym for bitblt. 
  13465.  
  13466.  blitter  - Hardware that performs bit-block transfer operations. 
  13467.  
  13468.  BND  - (1) An internal I/O procedure, provided by the MMPM/2 system, that 
  13469.    supports RIFF compound files (commonly called bundle files). (2) The 
  13470.    four-character code (FOURCC) of a bundle file. (3) See also RIFF compound 
  13471.    file. 
  13472.  
  13473.  BND file  - A RIFF compound file. 
  13474.  
  13475.  BND IOProc  - An internal I/O procedure, provided by the MMPM/2 system, that 
  13476.    supports the elements in a RIFF compound file. See also CF IOProc. 
  13477.  
  13478.  boom  - A long, relatively horizontal supporting brace used for holding a 
  13479.    microphone or camera; sometimes used to refer to the machinery that supports 
  13480.    the camera and allows it to move while shooting. 
  13481.  
  13482.  brightness  - Refers to the level of luminosity of the video signal. A 
  13483.    brightness level of 0 produces a maximally white signal.  A brightness level 
  13484.    of 100 produces a maximally black signal. 
  13485.  
  13486.  buffer  - A portion of storage used to hold input or output data temporarily. 
  13487.  
  13488.  bundle file (BND)  - (1) A file that contains many individual files, called 
  13489.    file elements, bound together.  The MMIO file manager provides services to 
  13490.    locate, query, and access file elements in a bundle file. (2) A RIFF 
  13491.    compound file. 
  13492.  
  13493.  bus  - A facility for transferring data between several devices located 
  13494.    between two end points, only one device being able to transmit at a given 
  13495.    moment. 
  13496.  
  13497.  buy  - (1) In videotaping, footage that is judged acceptable for use in the 
  13498.    final video. (2) Synonym for keeper. 
  13499.  
  13500.  
  13501. ΓòÉΓòÉΓòÉ <hidden> C ΓòÉΓòÉΓòÉ
  13502.  
  13503.  CAI  - Computer-assisted instruction.  Synonym for CBT. 
  13504.  
  13505.  calibration  - The adjustment of a piece of equipment so that it meets normal 
  13506.    operational standards.  (For example, for the IBM InfoWindow system, 
  13507.    calibration refers to touching a series of points on the screen so that the 
  13508.    system can accurately determine their location for further reference.) 
  13509.  
  13510.  camcorder  - A compact, hand-held video camera with integrated videotape 
  13511.    recorder. 
  13512.  
  13513.  capture  - To take a snapshot of motion video and retain it in memory.  The 
  13514.    video image may then be saved to a file or restored to the display. 
  13515.  
  13516.  cast animation  - (1) A sequence of frames consisting of manipulations of 
  13517.    graphical objects. (2) The action of bringing a computer program, routine, 
  13518.    or subroutine into effect, usually by specifying the entry conditions and 
  13519.    jumping to an entry point. (3) See also frame animation. 
  13520.  
  13521.  CAV  - Constant angular velocity. 
  13522.  
  13523.  CBT  - Computer-based training.  Synonym for CAI. 
  13524.  
  13525.  CCITT  - Comite Consultatif International Telegraphique et Telephonique. The 
  13526.    International Telegraph and Telephone Consultative Committee. 
  13527.  
  13528.  CD  - Compact disc. 
  13529.  
  13530.  CD-DA  - Compact disc, digital audio. 
  13531.  
  13532.  CD-I  - Compact Disc-Interactive. 
  13533.  
  13534.  CD-ROM  - Compact disc, read-only memory. 
  13535.  
  13536.  CD-ROM XA  - Compact disc, read-only memory extended architecture. 
  13537.  
  13538.  cel  - A single frame (display screen) of an animation.  (The term originated 
  13539.    in cartooning days when the artist drew each image on a sheet of celluloid 
  13540.    film.) 
  13541.  
  13542.  CF IOProc  - An internal I/O procedure, provided by the MMPM/2 system, that 
  13543.    supports RIFF compound files.  The CF IOProc operates on the entire compound 
  13544.    file (rather than on the elements in a RIFF compound file, as with the BND 
  13545.    IOProc).  The CF IOProc is limited to operations required by the system to 
  13546.    ensure storage system transparency at the application level. See also BND 
  13547.    IOProc. 
  13548.  
  13549.  CGA  - Color graphics adapter. 
  13550.  
  13551.  CGRP  - Compound file resource group. 
  13552.  
  13553.  channel mapping  - The translation of a MIDI channel number for a sending 
  13554.    device to an appropriate channel for a receiving device. 
  13555.  
  13556.  channel message  -  A type of non-SysEx MIDI message that has a channel 
  13557.    identifier in it, implying that these messages are specific to one channel. 
  13558.  
  13559.  check disc  - A videodisc produced from the glass master that is used to check 
  13560.    the quality of the finished interactive program. 
  13561.  
  13562.  chord  - To press more than one button at a time on a pointing device. 
  13563.  
  13564.  chroma-key color  - The specified first color in a combined signal. See also 
  13565.    chroma-keying. 
  13566.  
  13567.  chroma-keying  - Combining two video signals that are in sync.  The combined 
  13568.    signal is the second signal whenever the first is of some specified color, 
  13569.    called the chroma-key color, and is the first signal otherwise.  (For 
  13570.    example, the weatherman stands in front of a blue background-blue is the 
  13571.    chroma-key color.)  At home, the TV viewer sees the weather map in place of 
  13572.    the chroma-key color, with the weatherman suspended in front. 
  13573.  
  13574.  chroma signal  - The portion of image information that provides the color (hue 
  13575.    and saturation). 
  13576.  
  13577.  chrominance  - The difference between a color and a reference white of the 
  13578.    same luminous intensity. 
  13579.  
  13580.  chunk  - (1) The basic building block of a RIFF file. (2) A RIFF term for a 
  13581.    formalized data area.  There are different types of chunks, depending on the 
  13582.    chunk ID. (3) See LIST chunk and RIFF chunk. 
  13583.  
  13584.  chunk ID  - A four-character code (FOURCC) that identifies the representation 
  13585.    of the chunk data. 
  13586.  
  13587.  circular slider control  - A knob-like control that performs like a control on 
  13588.    a TV or stereo. 
  13589.  
  13590.  circular slider knob  - A knob-like dial that operates like a control on a 
  13591.    television or stereo. 
  13592.  
  13593.  class  -  (1) A categorization or grouping of objects that share similar 
  13594.    behaviors and characteristics.  Synonym for object class. (2) See node 
  13595.    class.  (RTMIDI-specific term) 
  13596.  
  13597.  click  - To press and release a button on a pointing device without moving the 
  13598.    pointer off the choice. See double-click. See also drag select. 
  13599.  
  13600.  clip  - A section of recorded, filmed, or videotaped material.  See also audio 
  13601.    clip and video clip. 
  13602.  
  13603.  closed circuit  - A system of transmitting television signals from a point of 
  13604.    origin to one or many restricted destination points specially equipped to 
  13605.    receive the signals. 
  13606.  
  13607.  close-up  - In videotaping, the picture obtained when the camera is positioned 
  13608.    to show only the head and shoulders of a subject; in the case of an object, 
  13609.    the camera is close enough to show details clearly. See also extreme 
  13610.    close-up. 
  13611.  
  13612.  CLP  - Common loader primitive. 
  13613.  
  13614.  CLUT  - Color look-up table.  Synonym for color palette. 
  13615.  
  13616.  CLV  - Constant linear velocity. 
  13617.  
  13618.  CODEC  - compressor/decompressor (CODEC) -  An algorithm implemented either in 
  13619.    hardware or software that can either compress or decompress a data object. 
  13620.    For example, a CODEC can compress raw digital images into a smaller form so 
  13621.    that they use less storage space. When used in the context of playing motion 
  13622.    video, decompressors reconstruct the original image from the compressed 
  13623.    data.  This is done at a high rate of speed to simulate motion. 
  13624.  
  13625.  collaborative document production  - A system feature that provides the 
  13626.    ability for a group of people to manage document production. 
  13627.  
  13628.  collision  - An unwanted condition that results from concurrent transmissions 
  13629.    on a channel. (T)  (For example, an overlapping condition that occurs when 
  13630.    one sprite hides another as it passes over it.) 
  13631.  
  13632.  color cycling  - An animation effect in which colors in a series are displayed 
  13633.    in rapid succession. 
  13634.  
  13635.  color graphics adapter (CGA)  - An adapter that simultaneously provides four 
  13636.    colors and is supported on all IBM Personal Computer and Personal System/2* 
  13637.    models. 
  13638.  
  13639.  colorization  - The color tinting of a monochrome original. 
  13640.  
  13641.  color palette  - (1) A set of colors that can be displayed on the screen at 
  13642.    one time.  This can be a standard set used for all images or a set that can 
  13643.    be customized for each image. (2) Synonym for CLUT. (3) See also standard 
  13644.    palette and custom palette. 
  13645.  
  13646.  common loader primitive  - A system service that provides a high-level 
  13647.    interface to hardware-specific loaders. 
  13648.  
  13649.  common user access (CUA)  - (1) Guidelines for the dialog between a human and 
  13650.    a workstation or terminal. (2) One of the three SAA architectural areas. 
  13651.  
  13652.  compact disc (CD)  - A disc, usually 4.75 inches in diameter, from which data 
  13653.    is read optically by means of a laser. 
  13654.  
  13655.  compact disc, digital audio (CD-DA)  - The specification for audio compact 
  13656.    discs. See also Redbook audio. 
  13657.  
  13658.  Compact Disc-Interactive (CD-I)  - A low-cost computer, being developed by 
  13659.    N.V. Phillips (The Netherlands) and Sony (Japan), that plugs into standard 
  13660.    television sets to display text and video stored on compact discs. 
  13661.  
  13662.  compact disc, read-only memory (CD-ROM)  - High-capacity, read-only memory in 
  13663.    the form of an optically read compact disc. 
  13664.  
  13665.  compact disc, read-only memory extended architecture (CD-ROM XA)  - An 
  13666.    extension to CD-ROM supporting additional audio and video levels for 
  13667.    compression and interlacing of audio, video, and digital data. 
  13668.  
  13669.  component video  - A video signal using three signals, one of which is 
  13670.    luminance, and the other two of which are the color vectors. See also 
  13671.    composite video and S-video. 
  13672.  
  13673.  composed view  - A view of an object in which relationships of the parts 
  13674.    contribute to the overall meaning.  Composed views are provided primarily 
  13675.    for data objects. 
  13676.  
  13677.  composite  - The combination of two or more film, video, or electronic images 
  13678.    into a single frame or display. See also composite video. 
  13679.  
  13680.  composite monitor  - A monitor that can decode a color image from a single 
  13681.    signal, such as NTSC or PAL. Contrast with RGB. 
  13682.  
  13683.  composite object  - An object that contains other objects.  For example, a 
  13684.    document object that contains not only text, but graphics, audio, image, 
  13685.    and/or video objects, each of which can be manipulated separately as an 
  13686.    individual object. 
  13687.  
  13688.  composite video  - A single signal composed of chroma, luminance, and sync. 
  13689.    NTSC is the composite video that is currently the U.S. standard for 
  13690.    television. See also component video and S-video. 
  13691.  
  13692.  compound device  - A multimedia device model for hardware that requires 
  13693.    additional data objects, referred to as data elements, before multimedia 
  13694.    operations can be performed. 
  13695.  
  13696.  compound file  - A file that contains multiple file elements. 
  13697.  
  13698.  compound file resource group (CGRP)  - A RIFF chunk that contains all the 
  13699.    compound file elements, concatenated together. 
  13700.  
  13701.  compound file table of contents (CTOC)  - A RIFF chunk that indexes the CGRP 
  13702.    chunk, which contains the actual multimedia data elements.  Each entry 
  13703.    contains the name of, and other information about, the element, including 
  13704.    the offset of the element within the CGRP chunk.  All the CTOC entries of a 
  13705.    table are of the same length and can be specified when the file is created. 
  13706.  
  13707.  compound message  - A structure which combines a time stamp, a source instance 
  13708.    identifier, a track number, and a MIDI message.  Each of these fields is 32 
  13709.    bits, so the structure is 16 bytes in length.  (RTMIDI-specific term) 
  13710.  
  13711.  computer-animated graphics  - Graphics animated by using a computer, compared 
  13712.    to using videotape or film. 
  13713.  
  13714.  computer-assisted instruction (CAI)  - (1) A data processing application in 
  13715.    which a computing system is used to assist in the instruction of students. 
  13716.    The application usually involves a dialog between the student and a computer 
  13717.    program.  An example is the OS/2 tutorial. (2) Synonym for computer-based 
  13718.    training. 
  13719.  
  13720.  computer-based training (CBT)  - Synonym for computer-assisted instruction. 
  13721.  
  13722.  computer-controlled device  - An external video source device with 
  13723.    frame-stepping capability, usually a videodisc player, whose output can be 
  13724.    controlled by the multimedia subsystem. 
  13725.  
  13726.  conforming  - Performing final editing on film or video using an offline 
  13727.    edited master as a guide. 
  13728.  
  13729.  connection  - The establishment of the flow of information from a connector on 
  13730.    one device to a compatible connector on another device. A connection can be 
  13731.    made that is dependent on a physical connection, for example the attachment 
  13732.    of a speaker to an audio adapter with a speaker wire.  A connection can also 
  13733.    be made that is completely internal to the PC, such as the connection 
  13734.    between the waveaudio media device and the ampmix device. See also 
  13735.    connector. 
  13736.  
  13737.  connector  - A software representation of the physical way in which multimedia 
  13738.    data moves from one device to another. A connector can have an external 
  13739.    representation, such as a headphone jack on a CD-ROM player. A connector can 
  13740.    also have an internal representation, such as the flow of digital 
  13741.    information into an audio adapter. See also connection. 
  13742.  
  13743.  constant angular velocity (CAV)  - Refers to both the format of data stored on 
  13744.    a videodisc and the videodisc player rotational characteristics.  CAV 
  13745.    videodiscs contain 1 frame per track.  This allows approximately 30 minutes 
  13746.    of playing time per videodisc side.  CAV videodisc players spin at a 
  13747.    constant rotational speed (1800 rpm for NTSC or 1500 rpm for PAL) and play 1 
  13748.    frame per disc revolution.  CAV players support frame-accurate searches. See 
  13749.    also constant linear velocity. 
  13750.  
  13751.  constant linear velocity (CLV)  - Refers to both the format of data stored on 
  13752.    a videodisc and the videodisc player characteristics.  CLV videodiscs 
  13753.    contain 1 frame on the innermost track and 3 frames of data on the outermost 
  13754.    track.  This allows approximately 1 hour of playing time per videodisc side. 
  13755.    CLV videodisc players vary the rotational speed from approximately 1800 rpm 
  13756.    at the inner tracks to 600 rpm at the outer tracks (for NTSC). 
  13757.  
  13758.    Currently, few CLV players support frame-accurate searches They only support 
  13759.    search or play to within one second (30 frames for NTSC or 25 frames for 
  13760.    PAL). See also constant angular velocity. 
  13761.  
  13762.  container  - An object whose specific purpose is to hold other objects.  A 
  13763.    folder is an example of a container object. 
  13764.  
  13765.  contents view  - A view of an object that shows the contents of the object in 
  13766.    list form.  Contents views are provided for container objects and for any 
  13767.    object that has container behavior, for example, a device object such as a 
  13768.    printer. 
  13769.  
  13770.  continuity  - In videotaping, consistency maintained from shot to shot and 
  13771.    throughout the take.  For example, a switch that is on in one shot should 
  13772.    not be off in the next unless it was shown being turned off. 
  13773.  
  13774.  continuous media object  - A data object that varies over time; a 
  13775.    stream-oriented data object.  Examples include audio, animation, and video. 
  13776.  
  13777.  contrast  - The difference in brightness or color between a display image and 
  13778.    the area in which it is displayed. A contrast level of 0 is minimum 
  13779.    difference. A contrast level of 100 is maximum difference. 
  13780.  
  13781.  control  - A visual user interface component that allows a user to interact 
  13782.    with data. 
  13783.  
  13784.  coordinate graphics  - (1) Computer graphics in which display images are 
  13785.    generated from display commands and coordinate data. (2) Contrast with 
  13786.    raster graphics. (3) Synonym for line graphics. 
  13787.  
  13788.  crop  - To cut off; to trim (for example, a tape). 
  13789.  
  13790.  crossfade  - Synonym for dissolve. 
  13791.  
  13792.  cross-platform  - Used to describe applications that are operable with more 
  13793.    than one operating system. 
  13794.  
  13795.  cross-platform transmission  - Electronic transmission of information (such as 
  13796.    mail) between incompatible operating systems. 
  13797.  
  13798.  CTOC  - Compound file table of contents. 
  13799.  
  13800.  CU  - Script abbreviation for close-up. 
  13801.  
  13802.  CUA  - Common User Access. 
  13803.  
  13804.  cue point  - A point that the system recognizes as a signal that may be acted 
  13805.    upon. 
  13806.  
  13807.  custom palette  - (1) A set of colors that is unique to one image or one 
  13808.    application. (2) See also standard palette and color palette. 
  13809.  
  13810.  cut  - The procedure of instantly replacing a picture from one source with a 
  13811.    picture from another.  (This is the most common form of editing scene to 
  13812.    scene.) 
  13813.  
  13814.  
  13815. ΓòÉΓòÉΓòÉ <hidden> D ΓòÉΓòÉΓòÉ
  13816.  
  13817.  DAC  - Digital-to-analog converter. 
  13818.  
  13819.  data object  - In an application, an element of a data structure (such as a 
  13820.    file, an array, or an operand) that is needed for program execution and that 
  13821.    is named or otherwise specified by the allowable character set of the 
  13822.    language in which the program is coded. 
  13823.  
  13824.  data stream  - All data transmitted through a data channel. 
  13825.  
  13826.  data streaming  - Real-time, continuous flowing of data. 
  13827.  
  13828.  DCP  -  See device control panel. 
  13829.  
  13830.  decode  - (1) To convert data by reversing the effect of previous encoding. 
  13831.    (2) To interpret a code. (3) To convert encoded text into plaintext by means 
  13832.    of a code system. (4) Contrast with encode. 
  13833.  
  13834.  default video window  - (1) Refers to where video is displayed when an 
  13835.    application does not indicate an application-defined window with the 
  13836.    MCI_WINDOW message. This is provided by and managed for the application by 
  13837.    MMPM/2. (2) See also application-defined window. 
  13838.  
  13839.  default window  - See default video window. 
  13840.  
  13841.  delta frame  - Refers to one or more frames occurring between reference frames 
  13842.    in the output stream.  Unlike a reference frame, which stores a complete 
  13843.    image, a delta frame stores only the changes in the image from one frame to 
  13844.    the next. See reference frame. 
  13845.  
  13846.  destination rectangle  - An abstract region which defines the size of an image 
  13847.    to be created when recording images for software motion video playback.  The 
  13848.    ratio of this rectangle's size to that of the source rectangle determines 
  13849.    the scaling factor to be applied to the video. 
  13850.  
  13851.  destination window  - See destination rectangle. 
  13852.  
  13853.  device capabilities  - The functionality of a device, including supported 
  13854.    component functions. 
  13855.  
  13856.  device context  - The device status and characteristics associated with an 
  13857.    opened instance of an Media Control Interface device. 
  13858.  
  13859.  device control panel (DCP)  -  An integrated set of controls that is used to 
  13860.    control a device or media object (such as by playing, rewinding, increasing 
  13861.    volume, and so on). 
  13862.  
  13863.  device controls  - See standard multimedia device controls. 
  13864.  
  13865.  device driver  - (1) A file that contains the code needed to use an attached 
  13866.    device. (2) A program that enables a computer to communicate with a specific 
  13867.    peripheral device; for example, a printer, a videodisc player, or a CD 
  13868.    drive. 
  13869.  
  13870.  device element  - A data object, such as a file, utilized by a compound 
  13871.    device. 
  13872.  
  13873.  device object  -  An object that provides a means for communication between a 
  13874.    computer and the outside world.  A printer is an example of a device object. 
  13875.  
  13876.  device sharing  - (1) The ability to share a device among many different 
  13877.    applications simultaneously.  If a device is opened shareable, the device 
  13878.    context will be saved by the operating system when going from one 
  13879.    application to another application. (2) Allowing a device context to be 
  13880.    switched between Media Control Interface devices. 
  13881.  
  13882.  device-specific format  - The storage or transmission format used by a device, 
  13883.    especially if it is different from an accepted standard. 
  13884.  
  13885.  dialog  - In an interactive system, a series of related inquiries and 
  13886.    responses similar to a conversation between two people. 
  13887.  
  13888.  digital  - (1) Pertaining to data in the form of numeric characters. (2) 
  13889.    Contrast with analog. 
  13890.  
  13891.  digital audio  - (1) Material that can be heard that has been converted to 
  13892.    digital form. (2) Synonym for digitized audio. 
  13893.  
  13894.  digital signal processor (DSP)  - A high-speed coprocessor designed to do 
  13895.    real-time manipulation of signals. 
  13896.  
  13897.  digital video  - (1) Material that can be seen that has been converted to 
  13898.    digital form. (2) Synonym for digitized video. 
  13899.  
  13900.  digital video effects (DVE)  - An online editing technique that manipulates 
  13901.    on-screen a full video image; activity for creating sophisticated 
  13902.    transitions and special effects.  Digital video effects (DVE) can involve 
  13903.    moving, enlarging, or overlaying pictures. 
  13904.  
  13905.  Digital Video Interactive (DVI)  - A system for bringing full-screen, 
  13906.    full-motion television pictures and sound to a regular PC.  DVI is a chip 
  13907.    set and uses delta compression; that is, only the image-to-image changes in 
  13908.    each frame are saved rather than the whole frame.  Data (video footage) is 
  13909.    compressed into a form that reduces memory requirements by factors of 100 or 
  13910.    greater.  This compressed data is stored on optical discs and can be 
  13911.    retrieved at a rate of 30 frames per second.  (The DVI technology was 
  13912.    developed by RCA and then sold to Intel.  IBM has chosen this technology for 
  13913.    future use in the PS/2.) 
  13914.  
  13915.  digital-to-analog converter (DAC)  - (1) A functional unit that converts data 
  13916.    from a digital representation to an analog representation. (2) A device that 
  13917.    converts a digital value to a proportional analog signal. 
  13918.  
  13919.  digitize  - To convert an analog signal into digital format. (An analog signal 
  13920.    during conversion must be sampled at discrete points and quantized to 
  13921.    discrete numbers.) 
  13922.  
  13923.  digitized audio  - Synonym for digital audio. 
  13924.  
  13925.  digitized video  - Synonym for digital video. 
  13926.  
  13927.  digitizer  - A device that converts to digital format any image captured by 
  13928.    the camera. 
  13929.  
  13930.  direct manipulation  -  A set of techniques that allow a user to work with an 
  13931.    object by dragging it with a pointing device or interacting with its pop-up 
  13932.    menu. 
  13933.  
  13934.  direct memory access  - The transfer of data between memory and input and 
  13935.    output units without processor intervention. 
  13936.  
  13937.  direct-read-after-write (DRAW) disc  - A videodisc produced directly from a 
  13938.    videotape, one copy at a time.  A DRAW disc usually is used to check program 
  13939.    material and author applications before replicated discs are available. 
  13940.  
  13941.  disc  - Alternate spelling for disk. 
  13942.  
  13943.  discard stop  - In data streaming, requests that the data stream be stopped 
  13944.    and the data remaining in the stream buffers be discarded. 
  13945.  
  13946.  disk  - A round, flat, data medium that is rotated in order to read or write 
  13947.    data. 
  13948.  
  13949.  display image  - A collection of display elements or segments that are 
  13950.    represented together at any one time on a display surface. See also 
  13951.    background image and foreground image. 
  13952.  
  13953.  dissolve  - To fade down one picture as the next fades up. Synonym for 
  13954.    crossfade. 
  13955.  
  13956.  dithering  - When different pixels in an image are prebiased with a varying 
  13957.    threshold to produce a more continuous gray scale despite a limited palette. 
  13958.    This technique is used to soften a color line or shape.  This technique also 
  13959.    is used for alternating pixel colors to create the illusion of a third 
  13960.    color. 
  13961.  
  13962.  DLL  - Dynamic-link library. 
  13963.  
  13964.  dolly  - A wheeled platform for a camera; a camera movement where the tripod 
  13965.    on which the camera is mounted physically moves toward or away from the 
  13966.    subject. 
  13967.  
  13968.  DOS IOProc  - An internal I/O procedure, provided by the MMPM/2 system, that 
  13969.    supports DOS files. 
  13970.  
  13971.  double-click  - In SAA Advanced Common User Access, to press and release a 
  13972.    mouse button twice within a time frame defined by the user, without moving 
  13973.    the pointer off the choice. See click.  See also drag select. 
  13974.  
  13975.  drag select  - In SAA Advanced Common User Access, to press a mouse button and 
  13976.    hold it down while moving the pointer so that the pointer travels to a 
  13977.    different location on the screen. Dragging ends when the mouse button is 
  13978.    released. All items between the button-down and button-up points are 
  13979.    selected. See also click, double-click. 
  13980.  
  13981.  DRAW disc  - Direct-read-after-write disc. 
  13982.  
  13983.  drop-frame time code  - A nonsequential time code used to keep tape time code 
  13984.    matched to real time. Must not be used in tapes intended for videodisc 
  13985.    mastering. 
  13986.  
  13987.  DSP  - Digital signal processor. 
  13988.  
  13989.  DTMF  - Dual-tone modulation frequency. 
  13990.  
  13991.  dual plane video system  - Refers to when graphics from the graphics adapter 
  13992.    are separate from the analog video.  That is, there is a separate graphics 
  13993.    plane and video plane. The analog video appears behind the graphics, showing 
  13994.    through only in the areas that are transparent. Since graphics and video are 
  13995.    separate, capturing the graphics screen will only obtain graphics, and 
  13996.    capturing the video screen will  only obtain video.  This is also true for 
  13997.    restoring images. See also single plane video system. 
  13998.  
  13999.  dual-state push button  -  A push button that has two states, in and out.  It 
  14000.    is used for setting and resetting complementary states, such as Mute and 
  14001.    Unmute. 
  14002.  
  14003.  dual-tone modulation frequency (DTMF)  - Pushbutton phone tones. 
  14004.  
  14005.  dub  - To copy a tape; to add (sound effects or new dialog) to a film; to 
  14006.    provide a new audio track of dialog in a different language.  (Often used 
  14007.    with "in" as "dub in".) 
  14008.  
  14009.  DVE  - Digital video effects. 
  14010.  
  14011.  DVI  - Digital Video Interface 
  14012.  
  14013.  dynamic icon  - An icon that changes to convey some information about the 
  14014.    object that it represents.  For example, a folder icon can show a count, 
  14015.    indicating the number of objects contained within the folder.  Also, a tape 
  14016.    player icon can show an animation of turning wheels to indicate that the 
  14017.    machine playing. 
  14018.  
  14019.  dynamic linking  - In the OS/2 operating system, the delayed connection of a 
  14020.    program to a routine until load time or run time. 
  14021.  
  14022.  dynamic link library (DLL)  - A file containing executable code and data bound 
  14023.    to a program at load time or run time, rather than during linking. The code 
  14024.    and data in a dynamic link library can be shared by several applications 
  14025.    simultaneously. 
  14026.  
  14027.  dynamic resource allocation  - An allocation technique in which the resources 
  14028.    assigned for execution of computer programs are determined by criteria 
  14029.    applied at the moment of need. (I)  (A)
  14030.  
  14031.  dynamic resource  - A multimedia program unit of data that resides in system 
  14032.    memory. Contrast with static resource. 
  14033.  
  14034.  
  14035. ΓòÉΓòÉΓòÉ <hidden> E ΓòÉΓòÉΓòÉ
  14036.  
  14037.  earcon  - An icon with an audio enhancement, such as a ringing telephone. 
  14038.  
  14039.  ECB  -  Event control block. 
  14040.  
  14041.  ECU  - Script abbreviation for extreme close-up. 
  14042.  
  14043.  edit decision list (EDL)  - Synonym for edit list. 
  14044.  
  14045.  edit list  - A list of the specific video footage, with time-code numbers, 
  14046.    that will be edited together to form the program.  It is completed during 
  14047.    the offline edit and used during the online edit. Synonym for edit decision 
  14048.    list (EDL). 
  14049.  
  14050.  edit master  - The final videotape from which all copies are made. See also 
  14051.    glass master. 
  14052.  
  14053.  editing  - Assembling various segments into the composite program. 
  14054.  
  14055.  EDL  - Edit decision list. 
  14056.  
  14057.  EGA  - Enhanced graphics adapter. 
  14058.  
  14059.  element  - (1) A file or other stored data item. (2) An individual file that 
  14060.    is part of a RIFF compound file.  An element of a compound file also could 
  14061.    be an entire RIFF file, a non-RIFF file, an arbitrary RIFF chunk, or 
  14062.    arbitrary binary data. (3) The particular resource within a subarea that is 
  14063.    identified by an element address. 
  14064.  
  14065.  emphasis  - Highlighting, color change, or other visible indication of the 
  14066.    condition of an object or choice and the effect of that condition on a 
  14067.    user's ability to interact with that object or choice.  Emphasis can also 
  14068.    give a user additional information about the state of an object or choice. 
  14069.  
  14070.  encode  - To convert data by the use of a code in such a manner that 
  14071.    reconversion to the original form is possible.  Contrast with decode.(T)
  14072.  
  14073.  enhanced graphics adapter (EGA)  - A graphics controller for color displays. 
  14074.    The pel resolution of an enhanced graphics adapter is 3:4. 
  14075.  
  14076.  entry field  - An area into which a user places text.  Its boundaries are 
  14077.    usually indicated. 
  14078.  
  14079.  erasable optical discs  - Optical discs that can be erased and written to 
  14080.    repeatedly. 
  14081.  
  14082.  establishing shot  - In videotaping, a long shot used in the beginning of a 
  14083.    program or segment to establish where the action is taking place and to give 
  14084.    the sense of an environment. 
  14085.  
  14086.  EVCB  - Event control block. 
  14087.  
  14088.  event  - An occurrence of significance to a task; for example, the completion 
  14089.    of an asynchronous operation, such as I/O. 
  14090.  
  14091.  event control block (ECB or EVCB)  - A control block used to represent the 
  14092.    status of an event. 
  14093.  
  14094.  event queue  - In computer graphics, a queue that records changes in input 
  14095.    devices such as buttons, valuators, and the keyboard.  The event queue 
  14096.    provides a time-ordered list of input events. 
  14097.  
  14098.  event semaphore  - (1) Used when one or more threads must wait for a single 
  14099.    event to occur. (2) A blocking flag used to signal when an event has 
  14100.    occurred. 
  14101.  
  14102.  explicit event  - An event supported by only some handlers, such as a custom 
  14103.    event unique to a particular type of data. 
  14104.  
  14105.  EXT  - Script abbreviation for exterior. 
  14106.  
  14107.  extended selection  - A type of selection optimized for the selection of a 
  14108.    single object.  A user can extend selection to more than one object, if 
  14109.    required.  The two kinds of extended selection are contiguous extended 
  14110.    selection and discontiguous extended selection. 
  14111.  
  14112.  extreme close-up  - The shot obtained when the camera is positioned to show 
  14113.    only the   face or a single feature of the subject; in the case of an 
  14114.    object, the camera is close enough to reveal an individual part of the 
  14115.    object clearly. 
  14116.  
  14117.  
  14118. ΓòÉΓòÉΓòÉ <hidden> F ΓòÉΓòÉΓòÉ
  14119.  
  14120.  facsimile machine  - A functional unit that converts images to signals for 
  14121.    transmission over a telephone system or that converts received signals back 
  14122.    to images. 
  14123.  
  14124.  fade  - To change the strength or loudness of a video or audio signal, as in 
  14125.    "fade up" or "fade down." 
  14126.  
  14127.  fast threads  - Threads created by an application that provide minimal process 
  14128.    context, for example, just stack, register, and memory.  With the reduced 
  14129.    function, fast threads can be processed quickly. 
  14130.  
  14131.  FAX machine  - Synonym for facsimile machine. 
  14132.  
  14133.  file cleanup  - The removal of superfluous or obsolete data from a file. 
  14134.  
  14135.  file compaction  - Any method of encoding data to reduce its required storage 
  14136.    space. 
  14137.  
  14138.  file element  - An individual file that is part of a RIFF compound file. An 
  14139.    element of a compound file can also be an entire RIFF file, a non-RIFF file, 
  14140.    an arbitrary RIFF chunk, or arbitrary binary data. See media element. 
  14141.  
  14142.  file format  - A language construct that specifies the representation, in 
  14143.    character form, of data objects in a file.  For example, MIDI, M-Motion, or 
  14144.    AVC. 
  14145.  
  14146.  file format handler  - (1) I/O procedure. (2) Provides functions that operate 
  14147.    on the media object of a particular data format.  These functions include 
  14148.    opening, reading, writing, seeking, and closing elements of a storage 
  14149.    system. 
  14150.  
  14151.  file format IOProc  - (1) An installable I/O procedure that is responsible for 
  14152.    all technical knowledge of the format of a specific type of data, such as 
  14153.    headers and data compression schemes.  A file format IOProc manipulates 
  14154.    multimedia data at the element level.  A file format IOProc handles the 
  14155.    element type it was written for and does not rely on any other file format 
  14156.    IOProcs to do any processing.  However, a file format IOProc might need to 
  14157.    call a storage system IOProc to obtain data within a file containing 
  14158.    multiple file elements. (2) See IOProc. (3) See also storage system IOProc. 
  14159.  
  14160.  filter  - A certain type of node that modifies messages and forwards them. 
  14161.    Filters are used to perform real-time processing of MIDI data. When a filter 
  14162.    receives a message, it may perform some manipulation on it. It will then 
  14163.    forward the message.  (RTMIDI-specific term) 
  14164.  
  14165.  final script  - The finished script that will be used as a basis for shooting 
  14166.    the video.  Synonym for shooting script. 
  14167.  
  14168.  first draft  - A rough draft of the complete script. 
  14169.  
  14170.  first generation  - In videotaping, the original or master tape; not a copy. 
  14171.  
  14172.  flashback  - Interruption of chronological sequence by interjection of events 
  14173.    occurring earlier. 
  14174.  
  14175.  flush stop  - In data streaming, requests that the source stream handler be 
  14176.    stopped but the target stream handler continue until the last buffer held at 
  14177.    the time the stop was requested is consumed by the target stream handler. 
  14178.  
  14179.  flutter  - A phenomenon that occurs in a videodisc freeze-frame when both 
  14180.    video fields are not identically matched, thus creating two different 
  14181.    pictures alternating every 1/60th of a second. 
  14182.  
  14183.  fly-by  - Animation simulating a bird's-eye view of a three-dimensional 
  14184.    environment. 
  14185.  
  14186.  fly-in  - A DVE where one picture "flies" into another. 
  14187.  
  14188.  folder  - A file used to store and organize documents or electronic mail. 
  14189.  
  14190.  footage  - The total number of running feet of film used (as for a scene). 
  14191.  
  14192.  foreground image  - The part of a display image that can be changed for every 
  14193.    transaction. Contrast with background image. 
  14194.  
  14195.  form overlay  - A pattern such as a report form, grid, or map used as 
  14196.    background for a display image. 
  14197.  
  14198.  form type  -  A field in the first four bytes of the data field of a RIFF 
  14199.    chunk.  It is a four-character code identifying the format of the data 
  14200.    stored in the file.  A RIFF form is a chunk with a chunk ID of RIFF. For 
  14201.    example, waveform audio files (WAVE files) have a form type of WAVE. 
  14202.  
  14203.  Format 0 MIDI file  - All MIDI data is stored on a single track. 
  14204.  
  14205.  Format 1 MIDI file  - All MIDI data is stored on multiple tracks. 
  14206.  
  14207.  forward  -  To re-transmit a message that was received.  Each instance can 
  14208.    have any number of links from it.  When an instance receives a message, it 
  14209.    may decide to send the same message along its links.  This is known as 
  14210.    forwarding. (RTMIDI-specific term) 
  14211.  
  14212.  four-character code (FOURCC)  - A 32-bit quantity representing a sequence of 
  14213.    one to four ASCII alphanumeric characters (padded on the right with blank 
  14214.    characters). Four-character codes are unique identifiers that represent the 
  14215.    file format and I/O procedure. 
  14216.  
  14217.  FOURCC  - Four-character code. 
  14218.  
  14219.  fps  - Frames per second. 
  14220.  
  14221.  frame  - In film, a complete television picture that is composed of two 
  14222.    scanned fields, one of the even lines and one of the odd lines.  In the NTSC 
  14223.    system, a frame has 525 horizontal lines and is scanned in 1/30th of a 
  14224.    second. 
  14225.  
  14226.  frame-step recording  - Refers to the capturing of video and audio data frame 
  14227.    by frame, from a computer-controlled, frame-steppable video source device, 
  14228.    or a previously recorded AVI file. 
  14229.  
  14230.  frame-accurate searches  - The ability of a videodisc player to play or search 
  14231.    to specific frames on the videodisc via software or remote control.  This 
  14232.    capability is available on all CAV players, but currently only on a few CLV 
  14233.    players. Most CLV players can only search or play to within one second (30 
  14234.    frames for NTSC or 25 frames for PAL). 
  14235.  
  14236.  frame animation  - A process where still images are shown at a constant rate. 
  14237.    See also cast animation. 
  14238.  
  14239.  frame grabber  - A device that digitizes video images. 
  14240.  
  14241.  frame number  - The number used to identify a frame.  On videodisc, frames are 
  14242.    numbered sequentially from 1 to 54,000 on each side and can be accessed 
  14243.    individually; on videotape, the numbers are assigned by way of the SMPTE 
  14244.    time code. 
  14245.  
  14246.  frame rate  - The speed at which the frames are scanned-30 frames a second in 
  14247.    NTSC video, 25 frames a second in PAL video, and 24 frames a second in most 
  14248.    film. 
  14249.  
  14250.    A complete television picture frame is composed of two scanned fields, one 
  14251.    of the even lines and one of the odd lines.  In the NTSC system, a frame has 
  14252.    525 horizontal lines and is scanned in 1/30th of a second. In the PAL 
  14253.    system, a frame has 625 horizontal lines and is scanned in 1/25th of a 
  14254.    second. 
  14255.  
  14256.  freeze  - Disables updates to all or part of the video buffer. The last video 
  14257.    displayed remains visible. See also unfreeze. 
  14258.  
  14259.  freeze-frame  - A frame of a motion-picture film that is repeated so as to 
  14260.    give the illusion of a still picture. 
  14261.  
  14262.  full-frame time code  - (1) A standardized method, set by the Society of 
  14263.    Motion Picture and Television Engineers (SMPTE), of address coding a 
  14264.    videotape.  It gives an accurate frame count rather than an accurate clock 
  14265.    time. (2) Synonym for nondrop time code. 
  14266.  
  14267.  full-motion video  - Video playback at 30 frames per second for NTSC signals 
  14268.    or 25 frames per second for PAL signals. 
  14269.  
  14270.  
  14271. ΓòÉΓòÉΓòÉ <hidden> G ΓòÉΓòÉΓòÉ
  14272.  
  14273.  game port  - On a personal computer, a port used to connect devices such as 
  14274.    joysticks and paddles. 
  14275.  
  14276.  GDT  - Global Descriptor Table. 
  14277.  
  14278.  general purpose interface bus  - An adapter that controls the interface 
  14279.    between the PC, Personal Computer XT*, or Personal Computer AT* and, for 
  14280.    example, the InfoWindow display; also known as the IBM IEEE 488. 
  14281.  
  14282.  genlock  - A device that comes on an adapter or plugs into a computer port and 
  14283.    provides the technology to overlay computer-generated titles and graphics 
  14284.    onto video images.  It does this by phase-locking the sync generation of two 
  14285.    video signals together so they can be merged. Genlock also converts a 
  14286.    digital signal to NTSC or PAL format.  (For example, flying logos and 
  14287.    scrolling text on television shows are overlaid using a genlock.) 
  14288.  
  14289.  glass master  - The final videodisc format from which copies are made. 
  14290.  
  14291.  Global Descriptor Table (GDT)  - Defines code and data segments available to 
  14292.    all tasks in an application. 
  14293.  
  14294.  GOCA  - Graphic Object Content Architecture. 
  14295.  
  14296.  Graphic Object Content Architecture (GOCA)  - (1) A data format for multimedia 
  14297.    products. (2) A push button with graphic, two-state, and animation 
  14298.    capabilities. 
  14299.  
  14300.  graphics overlay  - The nature of dual plane video systems makes it possible 
  14301.    to place graphics over video.  Only the pels of the designated transparent 
  14302.    color allows the video to show through.  All other graphics pels appear on 
  14303.    top of the video.  Note that the video still exists in the video buffer 
  14304.    under the non-transparent graphics pels. 
  14305.  
  14306.  graphics plane  - In a dual plane video system, the graphics plane contains 
  14307.    material drawn or generated by the graphics adapter.  The graphics plane 
  14308.    will be combined with the video plane to create an entire display image. 
  14309.  
  14310.  grayscale  - See greyscale. 
  14311.  
  14312.  greyscale  - When video is displayed in shades of black and white. 
  14313.  
  14314.  grouping  - For Media Control Interface devices, refers to the ability to 
  14315.    associate dissimilar devices for a common purpose.  Grouping MCI devices 
  14316.    aids resource management by insuring that all devices in a group are kept 
  14317.    together. 
  14318.  
  14319.  
  14320. ΓòÉΓòÉΓòÉ <hidden> H ΓòÉΓòÉΓòÉ
  14321.  
  14322.  handshaking  - The exchange of predetermined signals when a connection is 
  14323.    established between two data set devices. 
  14324.  
  14325.  help view  - A view of an object that provides information to assist users in 
  14326.    working with that object. 
  14327.  
  14328.  Hi8  - High-band 8mm videotape format. 
  14329.  
  14330.  HID  - Handler identification. 
  14331.  
  14332.  High Sierra Group (HSG)  - (1) A group that set the standards for information 
  14333.    exchange for a CD-ROM. (2) HSG also refers to those standards (HSG 
  14334.    standards). 
  14335.  
  14336.  HMS  - (1) Hours-minutes-seconds. (2) A time format for videodisc players. 
  14337.  
  14338.  HMSF  -  (1) Hours-minutes-seconds-frames. (2) A time format for videodisc 
  14339.    players. 
  14340.  
  14341.  hot spot  - The area of a display screen that is activated to accept user 
  14342.    input.  Synonym for touch area. 
  14343.  
  14344.  HSG  - High Sierra Group. 
  14345.  
  14346.  HSI  - Hue saturation intensity. 
  14347.  
  14348.  hue  - Describes the position of a color in a range from blue to green.  A hue 
  14349.    level of 0 is maximum blue.  A hue level of 100 is maximum green. Synonym 
  14350.    for tint. 
  14351.  
  14352.  hue saturation intensity (HSI)  - A method of describing color in 
  14353.    three-dimensional color space. 
  14354.  
  14355.  HWID  - Hardware identifier. 
  14356.  
  14357.  hypermedia  - Navigation or data transfer between connected objects of 
  14358.    different media types.  For example, a user might navigate from an image 
  14359.    object to an audio object that describes the image over a hypermedia link. 
  14360.    Or, a representation of a graph object might be embedded in a document 
  14361.    object with a hypermedia data transfer link, such that when the graph object 
  14362.    is changed, the representation of that object in the document is also 
  14363.    changed. 
  14364.  
  14365.  Hytime  - An ANSI standard proposal that addresses the synchronization and 
  14366.    linking of multimedia objects. 
  14367.  
  14368.  
  14369. ΓòÉΓòÉΓòÉ <hidden> I ΓòÉΓòÉΓòÉ
  14370.  
  14371.  IDC  - Inter-device communication mechanism provided by the OS/2 function 
  14372.    ATTACHDD DevHelp. 
  14373.  
  14374.  identifier  - (1) A sequence of bits or characters that identifies a program, 
  14375.    device, or system to another program, device, or system. (2) In the C 
  14376.    language, a sequence of letters, digits, and underscores used to identify a 
  14377.    data object or function. (3) See four-character code (FOURCC). 
  14378.  
  14379.  IDOCA  - Integrated Data Object Content Architecture. 
  14380.  
  14381.  image  - An electronic representation of a video still. 
  14382.  
  14383.  image bitsperpel  - Pertaining to the number of colors supported by the 
  14384.    current pel format. The currently accepted standard values are those 
  14385.    supported by OS/2 bitmaps, for example, 1, 4, 8, or 24 bits per pel.  In 
  14386.    addition, 12 bits per pel formats are accepted for YUV images (including the 
  14387.    'yuvb' pel format for RDIB files). 
  14388.  
  14389.  image buffer  - A location in memory where video images are stored for later 
  14390.    use. 
  14391.  
  14392.  image buffer formats  - The format or representation of data buffers 
  14393.    containing video images. 
  14394.  
  14395.  image compression  - The method of compressing video image data to conserve 
  14396.    storage space. 
  14397.  
  14398.  image file format  - The format or representation of data files containing 
  14399.    video images. 
  14400.  
  14401.  Image Object Content Architecture (IOCA)  - A data format for multimedia 
  14402.    products. 
  14403.  
  14404.  image pelformat  - Indicates the color representation that is to be used for 
  14405.    images that are captured and saved.  This normally includes palettized RGB, 
  14406.    true-color RGB, or YUV color formats. 
  14407.  
  14408.  image quality  -  Represents the user's or application's subjective evaluation 
  14409.    of complexity and quality of the image to be captured or saved. This setting 
  14410.    is used to determine specific compression methods to use for saving the 
  14411.    image. 
  14412.  
  14413.  implicit event  - An event that all stream handlers always must support, such 
  14414.    as end of stream or preroll complete). 
  14415.  
  14416.  in-betweening  - Synonym for tweening. 
  14417.  
  14418.  in frame  - Refers to a subject that is included within the frame. See also 
  14419.    frame. 
  14420.  
  14421.  InfoWindow system  - A display system that can combine text, graphics, and 
  14422.    video images on a single display.  The minimum system configuration is the 
  14423.    IBM InfoWindow Color Display, a system unit, a keyboard, and one or two 
  14424.    videodisc players. 
  14425.  
  14426.  input locking mask  - A filter, or mask, that controls which areas of the 
  14427.    display can display or freeze video. 
  14428.  
  14429.  input/output control (IOCtl)  - A system function that provides a method for 
  14430.    an application to send device-specific control commands to a device driver. 
  14431.  
  14432.  installable I/O procedure  - A file format handler that provides functions 
  14433.    that operate on the media object of a particular data format.  These 
  14434.    functions include opening, reading, writing, seeking, and closing elements. 
  14435.  
  14436.  instance  -  See node instance.  (RTMIDI-specific term) 
  14437.  
  14438.  INT  - Script abbreviation for interior. 
  14439.  
  14440.  Integrated Data Object Control Architecture (IDOCA)  - A data format for 
  14441.    multimedia products. 
  14442.  
  14443.  interactive multimedia  - The delivery of information content through 
  14444.    combinations of video, computer graphics, sound, and text in a manner that 
  14445.    allows the user to interact. 
  14446.  
  14447.  interactive program  - A running program that can receive input from the 
  14448.    keyboard or another input device.  Contrast with noninteractive program. 
  14449.  
  14450.  interactive videodisc system (IVS)  - A system in which a user can interact 
  14451.    with a videodisc display image by entering commands to the computer through 
  14452.    a device such as a keyboard or keypad or by touching a touch-sensitive 
  14453.    screen at specific points on the display surface. 
  14454.  
  14455.  interlace flicker  - The apparent flicker when one field of an interlaced 
  14456.    image contains more light than the other field due to the placement of image 
  14457.    details with respect to the separate fields.  Two methods used to avoid 
  14458.    interlace flicker:  limit the vertical resolution on natural images (as 
  14459.    opposed to text or graphics); design characters so that each character has 
  14460.    an equal number of pels in each field. 
  14461.  
  14462.  interlacing  - In multimedia applications, a characteristic of video image 
  14463.    display that results in greater image clarity.  In effect, the video image 
  14464.    is traced across the screen twice.  (The time delay between the two tracings 
  14465.    makes this effect undesirable for normal computer-generated graphics.) 
  14466.    Synonymous with interleaving. 
  14467.  
  14468.  interleaving  -  (1) The simultaneous accessing of two or more bytes or 
  14469.    streams of data from distinct storage units. (2) The alternating of two or 
  14470.    more operations or functions through the overlapped use of a computer 
  14471.    facility. (3) In a duplicator, the process of inserting absorbent sheets 
  14472.    between successive sheets of the copy paper to prevent set-off. (T)  (4) 
  14473.    Synonym for interlacing. 
  14474.  
  14475.  internal I/O procedure  - An I/O procedure that is built in to the MMPM/2 
  14476.    system, including DOS, MEM, BND, and CF IOProcs. 
  14477.  
  14478.  International Organization for Standardization (ISO)  - An organization of 
  14479.    national standards bodies from various countries established to promote 
  14480.    development of standards to facilitate international exchange of goods and 
  14481.    services, and develop cooperation in intellectual, scientific, 
  14482.    technological, and economic activity. 
  14483.  
  14484.  IOCtl  - Input/output control. 
  14485.  
  14486.  IOProc  - A file format handler that provides functions that operate on the 
  14487.    media object of a particular data format.  These processes include opening, 
  14488.    reading, writing, seeking, and closing elements of a storage system.  There 
  14489.    are two classes of I/O procedures: file format and storage system. 
  14490.  
  14491.  iris  - To fade a picture by operating the iris (aperture) on the camera in a 
  14492.    certain way; the type of computer image dissolve accomplished by operating 
  14493.    the aperture in a certain way. 
  14494.  
  14495.  ISO  - International Organization for Standardization. 
  14496.  
  14497.  ISP  - IBM Signal Processor.  An IBM proprietary digital signal processor. 
  14498.  
  14499.  ISPOS  - IBM Signal Processor Operating System. 
  14500.  
  14501.  ISV  - Independent software vendor. 
  14502.  
  14503.  items  - Options, choices or keywords such as one or more of the following 
  14504.    options, choices or keywords can or should be specified.  Sometimes use of 
  14505.    these items can also be exclusive or some items may not be compatible with 
  14506.    other items. 
  14507.  
  14508.  IVS  - Interactive videodisc system. 
  14509.  
  14510.  
  14511. ΓòÉΓòÉΓòÉ <hidden> J ΓòÉΓòÉΓòÉ
  14512.  
  14513.  JIT  - Just in time.  (Often used with "learning" as "JIT learning".) 
  14514.    Multimedia help functions, closely integrated with applications, that employ 
  14515.    voice output to guide the user. 
  14516.  
  14517.  Joint Photographic Experts Group (JPEG)  - A group that is working to 
  14518.    establish a standard for compressing and storing still images in digital 
  14519.    form.  JPEG also refers to the standard under development by this group 
  14520.    (JPEG standard). 
  14521.  
  14522.  joy stick  - In computer graphics, a lever that can pivot in all directions 
  14523.    and that is used as a locater device.  (Resembles an airplane's joy stick). 
  14524.  
  14525.  JPEG  - Joint Photographic Experts Group. 
  14526.  
  14527.  
  14528. ΓòÉΓòÉΓòÉ <hidden> K ΓòÉΓòÉΓòÉ
  14529.  
  14530.  keeper  - Synonym for buy. 
  14531.  
  14532.  kernel  -  (1) The part of an operating system that performs basic functions 
  14533.    such as allocating hardware resources. (2) A program that can run under 
  14534.    different operating system environments. (3) A part of a program that must 
  14535.    be in main storage in order to load other parts of the program. 
  14536.  
  14537.  key frames  - The start and end frames of a single movement in an animation 
  14538.    sequence; also can refer to the periodic full-frame image interspersed in 
  14539.    the stream to allow random starts from these full-frame images (key frames). 
  14540.  
  14541.  keypad  - A small, often hand-held, keyboard. 
  14542.  
  14543.  
  14544. ΓòÉΓòÉΓòÉ <hidden> L ΓòÉΓòÉΓòÉ
  14545.  
  14546.  laser  - Light amplification by stimulated emission of radiation; the device 
  14547.    that produces this light. 
  14548.  
  14549.  latency  - In video, the time it takes for the light from the phosphor screen 
  14550.    to decay after the excitation is removed. Long-persistence phosphor has less 
  14551.    flicker of still images, but more blurring of moving images. 
  14552.  
  14553.  level one videodisc applications  - Interactive applications based on manual 
  14554.    keypad functions, picture stops, and chapter stops. 
  14555.  
  14556.  level three videodisc applications  - Interactive applications controlled by 
  14557.    an external computer that uses the videodisc player as a peripheral device. 
  14558.  
  14559.  level two videodisc applications  - Interactive applications controlled by the 
  14560.    keypad and the videodisc player's internal computer. The control program is 
  14561.    recorded on the videodisc itself. 
  14562.  
  14563.  LIB  - Dynamic-link definition library.  A file containing the data needed to 
  14564.    build a program .EXE file but which does not contain the dynamic-link 
  14565.    programs themselves. Contrast with dynamic-link library. 
  14566.  
  14567.  light pen  - A light-sensitive pick device that is used by pointing it at the 
  14568.    display surface. 
  14569.  
  14570.  line graphics  - Synonym for coordinate graphics. 
  14571.  
  14572.  line pairing  - A faulty interlace pattern in which the lines of the second 
  14573.    field begin to pair with the lines of the first field rather than fit 
  14574.    exactly within them. 
  14575.  
  14576.  linear audio  - The analog audio on the linear track of videotape that can be 
  14577.    recorded without erasing existing video; used for audio dubbing after video 
  14578.    is edited. 
  14579.  
  14580.  linear video  - A sequence of motion footage played from start to finish 
  14581.    without stops or branching, like a movie. 
  14582.  
  14583.  link  - A one-way link (directed edge) from one instance to another.  If an 
  14584.    instance wishes to send a message, it is sent along all the links from it. 
  14585.    An instance can have any number of links coming from it, and any number of 
  14586.    other instances can have links to it.  An instance cannot select along which 
  14587.    links the message should be sent.  See also slot.  (RTMIDI-specific term) 
  14588.  
  14589.  LIST chunk  - A chunk that contains a list or an ordered sequence of 
  14590.    subchunks. 
  14591.  
  14592.  list type  - (1) A field in the first four bytes of the data field of a LIST 
  14593.    chunk. (2) A four-character code identifying the contents of the list. 
  14594.  
  14595.  locked memory  - An area of memory that is not available for use because it is 
  14596.    being held by another process. 
  14597.  
  14598.  long shot  - (1) A camera angle that reveals the subject and the surroundings. 
  14599.    Often used as an establishing shot. (2) Synonym for wide shot. 
  14600.  
  14601.  LS  - Script abbreviation for long shot. 
  14602.  
  14603.  luminance signal  - The portion of image information that provides brightness. 
  14604.    Alone, luminance provides a monochrome image. 
  14605.  
  14606.  
  14607. ΓòÉΓòÉΓòÉ <hidden> M ΓòÉΓòÉΓòÉ
  14608.  
  14609.  M-ACPA  -  M-Audio Capture and Playback Adapter. 
  14610.  
  14611.  M-Audio Capture and Playback Adapter (M-ACPA)  - An adapter card (for use with 
  14612.    the IBM PS/2 product line) that provides the ability to record and play back 
  14613.    high quality sound.  The adapter converts the audio input (analog) signals 
  14614.    to a digital format that is compressed and stored for later use. 
  14615.  
  14616.  master stream handler  - Controls the behavior of one or more subordinate 
  14617.    objects (the slave streams). 
  14618.  
  14619.  matte  - In film, an opaque piece of art or a model that leaves a selected 
  14620.    area unexposed to be filled on a subsequent pass or in composite. 
  14621.  
  14622.  MCD  - Media control driver. 
  14623.  
  14624.  MCI  - Media Control Interface. 
  14625.  
  14626.  M-Control Program/2  - The software interface required for the M-Motion Video 
  14627.    Adapter/A.  It consists of APIs or toolkits for DOS, Windows, Windows MCI, 
  14628.    OS/2, and OS/2 MMPM/2.  It also includes Pioneer and Sony videodisc player 
  14629.    drivers for these environments. See also M-Motion Video Adapter/A. 
  14630.  
  14631.  MDM  - Media device manager. 
  14632.  
  14633.  media  -  More than one hardware medium. 
  14634.  
  14635.  media component  - A processor of audiovisual information or media.  Media 
  14636.    components can be either internal or external physical devices or defined 
  14637.    mechanisms for effecting higher-level function from internal hardware and 
  14638.    software subsystems.  (An example is a waveform player component that 
  14639.    utilizes the DSP subsystem and data streaming services to effect audio 
  14640.    playback functions.) 
  14641.  
  14642.  media component capabilities  - The functionality of a media component, 
  14643.    including component functions that are supported. 
  14644.  
  14645.  media component type  - A class of media components that exhibit similar 
  14646.    behavior and capabilities.  Examples of media component types are analog 
  14647.    video display hardware and MIDI synthesizers. 
  14648.  
  14649.  media control driver (MCD)  - A software implementation or method that effects 
  14650.    the function of a media component.  For OS/2, a media control driver or 
  14651.    media driver is a dynamic-link library (or set of libraries) that utilizes 
  14652.    physical device drivers, Media Device Manager services, and OS/2 to 
  14653.    implement the function of the media component. 
  14654.  
  14655.  Media Control Interface (MCI)  - A generalized interface to control multimedia 
  14656.    devices.  Each device has its own MCI driver that implements a standard set 
  14657.    of MCI functions.  In addition, each media driver can implement functions 
  14658.    that are specific to the particular device. 
  14659.  
  14660.  media device  - A processor of audiovisual information or media.  Media 
  14661.    components can be either internal or external physical devices or defined 
  14662.    mechanisms for effecting higher-level function from internal hardware and 
  14663.    software subsystems.  (An example is a waveform player component that 
  14664.    utilizes the DSP (Digital Signal Processor) subsystem and data-streaming 
  14665.    services to effect audio-playback functions.) 
  14666.  
  14667.  media device capabilities  - The functionality of a media component, including 
  14668.    supported component functions. 
  14669.  
  14670.  media device connection  - A physical or logical link between media component 
  14671.    connectors for a particular set of media component instances. 
  14672.  
  14673.  media device connector  - A physical or logical input or output on a media 
  14674.    component. 
  14675.  
  14676.  media device connector index  - An identifier for a media component connector. 
  14677.  
  14678.  media device ID  - Media component identification.  A unique identifier for a 
  14679.    component. 
  14680.  
  14681.  media device instance  - A case of an application's use of a media component. 
  14682.  
  14683.  media device manager (MDM)  - A system service that, when two or more 
  14684.    applications attempt to control a media device, determines which process 
  14685.    gains access. 
  14686.  
  14687.  media driver  - A device driver for a multimedia device. See also device 
  14688.    driver. 
  14689.  
  14690.  media driver  - A software implementation or method that effects the function 
  14691.    of a media device. 
  14692.  
  14693.  media element manager (MEM)  - A system service that manipulates multimedia 
  14694.    data. 
  14695.  
  14696.  media programming interface (MPI)  - A subsystem that provides a comprehensive 
  14697.    system programming API layer for multimedia applications. 
  14698.  
  14699.  media segment  - An audiovisual object of some type, such as a waveform, song, 
  14700.    video clip, and so on. 
  14701.  
  14702.  media unit  - A medium on which files are stored; for example, a diskette. 
  14703.  
  14704.  media volume  - A (possibly heterogeneous) physical or logical collection of 
  14705.    media segments.  (Examples are a videodisc, video tape, compact audio disc, 
  14706.    OFF file, and RIFF file.) 
  14707.  
  14708.  media volume file  - A media volume that is embodied as a conventional binary 
  14709.    computer file within a computer file system on storage devices such as 
  14710.    disks, diskettes, or CD-ROMs.  Such storage devices can be either local or 
  14711.    remote.  Media volume files can be of various formats, such as OFF or RIFF, 
  14712.    and contain segments of various types. 
  14713.  
  14714.  medium shot  - A camera angle that reveals more of the subject than a close-up 
  14715.    but less than a wide shot, usually from face to waistline; sometimes called 
  14716.    a mid-shot. 
  14717.  
  14718.  MEM  - Media element manager. 
  14719.  
  14720.  MEM IOProc  - An internal I/O procedure provided by the MMPM/2 system that 
  14721.    supports memory files. 
  14722.  
  14723.  memory file  - A block of memory that is perceived as a file by an 
  14724.    application. 
  14725.  
  14726.  memory playlist  - A data structure in the application used to specify the 
  14727.    memory addresses to play from or record to.  The application can modify the 
  14728.    playlist to achieve various effects in controlling the memory stream. 
  14729.  
  14730.  message interface  - See command message interface. 
  14731.  
  14732.  MIDI Mapper  - Provides the ability to translate and redirect MIDI messages to 
  14733.    achieve device-independent playback of MIDI sequences. 
  14734.  
  14735.  MIDI message  - A sequence of bytes that conform to the MIDI standard.  There 
  14736.    are two categories:  System Exclusive (SysEx) and non-SysEx messages.  SysEx 
  14737.    messages can be of any length, whereas non-SysEx messages are between one 
  14738.    and three bytes. 
  14739.  
  14740.  mid-shot  - See medium shot. 
  14741.  
  14742.  millisecond  - One thousandth of a second. 
  14743.  
  14744.  minutes-seconds-frames (MSF)  - A time format based on the 
  14745.    75-frames-per-second CD digital audio standard. 
  14746.  
  14747.  MIPS  - Millions of instructions per second.  A unit of measure of processing 
  14748.    performance equal to one million instructions per second. 
  14749.  
  14750.  mix  - The combination of audio or video sources during postproduction. 
  14751.  
  14752.  mixed-media system  - Synonym for multimedia system. 
  14753.  
  14754.  Mixed Object : Document Content Architecture (MO:DCA)  - A data format for 
  14755.    multimedia products. 
  14756.  
  14757.  mixer  - A device used to simultaneously combine and blend several inputs into 
  14758.    one or two outputs. 
  14759.  
  14760.  mixing  - (1) In computer graphics, the result of the intersection of two or 
  14761.    more colors. (2) In filming, the combining of audio and video sources that 
  14762.    is accomplished during postproduction at the mix. (3) In recording, the 
  14763.    combining of audio sources. 
  14764.  
  14765.  MMIO  - Multimedia input/output. 
  14766.  
  14767.  MMIO file services  - System services that enable an application to access and 
  14768.    manipulate multimedia data files. 
  14769.  
  14770.  MMIO manager  - Multimedia input/output manager.  The MMIO manager provides 
  14771.    services to find, query, and access multimedia data objects. It also 
  14772.    supports the functions of memory allocation and file compaction.  The MMIO 
  14773.    manager uses IOProcs to direct the input and output associated with reading 
  14774.    from and writing to different types of storage systems or file formats. 
  14775.  
  14776.  M-Motion  - A multimedia platform that offers analog video in addition to 
  14777.    quality sound and images.  The M-Motion environment consists of the M-Motion 
  14778.    Video Adapter/A and the M-Control Program/2 master stream handler. 
  14779.  
  14780.  M-Motion Video Adapter/A  - (1) A Micro Channel adapter that receives and 
  14781.    processes signals from multiple video and audio sources, and then sends 
  14782.    these signals to a monitor and speakers. (2) Dual plane video hardware that 
  14783.    offers analog video in addition to quality sound and images. (3) The 
  14784.    M-Motion Video Adapter/A requires the M-Control Program/2. 
  14785.  
  14786.  MMPM/2  - Multimedia Presentation Manager/2.  See OS/2 multimedia. 
  14787.  
  14788.  MMTIME  - Standard time and media position format supported by the media 
  14789.    control interface.  This time unit is 1/3000 second, or 333 microseconds. 
  14790.  
  14791.  MO:DCA  - Mixed Object : Document Content Architecture. 
  14792.  
  14793.  mode  - A method of operation in which the actions that are available to a 
  14794.    user are determined by the state of the system. 
  14795.  
  14796.  model  - The conceptual and operational understanding that a person has about 
  14797.    something. 
  14798.  
  14799.  module  - A language construct that consists of procedures or data 
  14800.    declarations and that can interact with other constructs. 
  14801.  
  14802.  moire  - An independent, usually shimmering pattern seen when two 
  14803.    geometrically regular patterns (as a sampling frequency and a correct 
  14804.    frequency) are superimposed.  The moire pattern is an alias frequency. See 
  14805.    also aliasing. 
  14806.  
  14807.  monitor  - See video monitor. 
  14808.  
  14809.  monitor window  - A graphical window, available from a digital video device, 
  14810.    which displays the source rectangle, and any subset of this video capture 
  14811.    region.  See destination rectangle for related information. 
  14812.  
  14813.  motion-control photography  - A system for using computers to precisely 
  14814.    control camera movements so that the different elements of a shot-models and 
  14815.    backgrounds, for example-can later be composited with a natural and 
  14816.    believable unity. 
  14817.  
  14818.  motion video capture adapter  - An adapter that, when attached to a computer, 
  14819.    allows an ordinary television picture to be displayed on all or part of the 
  14820.    screen, mixing high-resolution computer graphics with video; also enables a 
  14821.    video camera to become an input device. 
  14822.  
  14823.  Motion Video Object Content Architecture (MVOCA)  - A data format for 
  14824.    multimedia products. 
  14825.  
  14826.  Moving Pictures Experts Group (MPEG)  - A group that is working to establish a 
  14827.    standard for compressing and storing motion video and animation in digital 
  14828.    form. 
  14829.  
  14830.  MPEG  - Moving Pictures Experts Group. 
  14831.  
  14832.  MPI  - Media Programming Interface. 
  14833.  
  14834.  MPI application services  - Media Programming Interface application services. 
  14835.    Functional services provided by MPI to application programs and higher-level 
  14836.    programming constructs, such as multimedia controls. 
  14837.  
  14838.  MS  - Script abbreviation for medium shot. 
  14839.  
  14840.  MSF  - Minutes-seconds-frames. 
  14841.  
  14842.  multimedia  - Material presented in a combination of text, graphics, video, 
  14843.    image, animation, and sound. 
  14844.  
  14845.  multimedia data object  - In an application, an element of a data structure 
  14846.    (such as a file, an array, or an operand) that is needed for program 
  14847.    execution and that is named or otherwise specified by the allowable 
  14848.    character set of the language in which the program is coded. 
  14849.  
  14850.  Multimedia File I/O Services  - System services that provide a generalized 
  14851.    interface to manipulate multimedia data.  The services support buffered and 
  14852.    unbuffered file I/O, standard RIFF files, and installable I/O procedures. 
  14853.  
  14854.  multimedia input/output (MMIO)  - (1) System services that provide a variety 
  14855.    of functions for media file access and manipulation. (2) A consistent 
  14856.    programming interface where an application, media driver, or stream handler 
  14857.    can refer to multimedia files, read and write data to the files, and query 
  14858.    the contents of the files, while remaining independent of the underlying 
  14859.    file formats or the storage systems that contain the files. 
  14860.  
  14861.  multimedia navigation system  - A tool that gives the information product 
  14862.    designer the freedom to link various kinds and pieces of data in a variety 
  14863.    of ways so that users can move through it nonsequentially. 
  14864.  
  14865.  multimedia system  - (1) A system capable of presenting multimedia material in 
  14866.    its entirety. (2) Synonym for mixed-media system. 
  14867.  
  14868.  multiple selection  - A selection technique in which a user can select any 
  14869.    number of objects, or not select any. 
  14870.  
  14871.  Musical Instrument Digital Interface (MIDI)  - A protocol that allows a 
  14872.    synthesizer to send signals to another synthesizer or to a computer, or a 
  14873.    computer to a musical instrument, or a computer to another computer. 
  14874.  
  14875.  mute  - To temporarily turn off the audio for the associated medium. 
  14876.  
  14877.  mux  - An abbreviation for multiplexer. See also mixer. 
  14878.  
  14879.  MVOCA  - Motion Video Object Content Architecture. 
  14880.  
  14881.  
  14882. ΓòÉΓòÉΓòÉ <hidden> N ΓòÉΓòÉΓòÉ
  14883.  
  14884.  NAPLPS  - North American Presentation Level Protocol Syntax. 
  14885.  
  14886.  National Television Standard Committee (NTSC)  - A committee that set the 
  14887.    standard for color television broadcasting and video in the United States 
  14888.    (currently in use also in Japan); also refers to the standard set by this 
  14889.    committee (NTSC standard). 
  14890.  
  14891.  node  -  An abstract term indicating either a node class or a node instance. 
  14892.    When used with a class qualifier (for example, application node) it implies 
  14893.    an instance (for example, instance of an application class). 
  14894.    (RTMIDI-specific term) 
  14895.  
  14896.  node class  -  A definition of the behavior of a node instance.  All instances 
  14897.    of the same class are expected to have the same behavior and purpose, 
  14898.    although this restriction is not enforced by the driver.  (RTMIDI-specific 
  14899.    term) 
  14900.  
  14901.  node instance  -  A vertex in the node network that can receive and transmit 
  14902.    MIDI messages.  (RTMIDI-specific term) 
  14903.  
  14904.  node network  -  The collection (graph) of node instances and links. 
  14905.    (RTMIDI-specific term) 
  14906.  
  14907.  nondrop time code  - Synonym for full-frame time code. 
  14908.  
  14909.  noninteractive program  - A running program that cannot receive input from the 
  14910.    keyboard or other input device. 
  14911.  
  14912.  non-streaming device  - (1) A device that contains both source and destination 
  14913.    information for multimedia. (2) A device that transmits data (usually 
  14914.    analog) directly, without streaming to system memory. 
  14915.  
  14916.  North American Presentation Level Protocol Syntax (NAPLPS)  - A protocol used 
  14917.    for display and communication of text and graphics in a videotex system; a 
  14918.    form of vector graphics. 
  14919.  
  14920.  notebook  - A graphical representation that resembles a perfect-bound or 
  14921.    spiral-bound notebook that contains pages separated into sections by tabbed 
  14922.    divider pages. A user can turn the pages of a notebook to move from one 
  14923.    section to another. 
  14924.  
  14925.  NTSC  - National Television Standard Committee. 
  14926.  
  14927.  null streaming  - (1) The behavior of a stream that can be created and started 
  14928.    but which has no associated data flow. (2) The behavior of a stream that can 
  14929.    be created and started but which has no associated data flow.  For example, 
  14930.    a CD-DA is a non-streaming device. (3) A device that does not stream its 
  14931.    data through the MMPM/2 streaming system For example, a CDDA device is a 
  14932.    non-streaming device. 
  14933.  
  14934.  
  14935. ΓòÉΓòÉΓòÉ <hidden> O ΓòÉΓòÉΓòÉ
  14936.  
  14937.  object  - (1) Anything that exists in and occupies space in storage and on 
  14938.    which operations can be performed; for example, programs, files, libraries, 
  14939.    and folders. (2) Anything to which access is controlled; for example, a 
  14940.    file, a program, an area of main storage. (3) See also data object and media 
  14941.    object. 
  14942.  
  14943.  object-action paradigm  - A method where users select the object that they 
  14944.    want to work with, then choose the action they wish to perform on that 
  14945.    object.  See object orientation. 
  14946.  
  14947.  object class  - A categorization or grouping of objects that share similar 
  14948.    behaviors and characteristics. 
  14949.  
  14950.  object connection  - A link between two objects.  Connections can be used for 
  14951.    navigation, as with hypermedia, or for data transfer between objects. 
  14952.  
  14953.  Object Content Architecture (OCA)  - A data format for multimedia products. 
  14954.  
  14955.  object decomposition  - The process of breaking an object into its component 
  14956.    parts. 
  14957.  
  14958.  object orientation  - An orientation in a user interface in which a user's 
  14959.    attention is directed toward the objects the user works with, rather than 
  14960.    applications, to perform a task. 
  14961.  
  14962.  object-oriented user interface  - A type of user interface that implements 
  14963.    object orientation and the object-action paradigm. 
  14964.  
  14965.  object template  - An object that can be used to create another object of the 
  14966.    same object class.  The template is a basic framework of the object class, 
  14967.    and the newly created object is an instance of the object class. 
  14968.  
  14969.  OCA  - Object Content Architecture. 
  14970.  
  14971.  OEM  - Original equipment manufacturer. 
  14972.  
  14973.  OFF  - Operational file format. 
  14974.  
  14975.  offline edit  - A preliminary or test edit usually done on a low-cost editing 
  14976.    system using videocassette work tapes.  (An offline edit is done so that 
  14977.    decisions can be made and approvals given prior to the final edit.) 
  14978.  
  14979.  online edit  - The final edit, using the master tapes to produce a finished 
  14980.    program. 
  14981.  
  14982.  operational file format (OFF)  - A file format standard. 
  14983.  
  14984.  optical disc  - A disc with a plastic coating on which information (as sound 
  14985.    or visual images) is recorded digitally as tiny pits and read using a laser. 
  14986.    The three categories of optical discs are CD-ROM, WORM, and erasable. 
  14987.  
  14988.  optical drive  - Drives that run optical discs. 
  14989.  
  14990.  optical reflective disc  - A designation of the means by which the laser beam 
  14991.    reads data on an optical videodisc.  In the case of a reflective disc, the 
  14992.    laser beam is reflected off a shiny surface on the disc. 
  14993.  
  14994.  opticals  - Visual effects produced optically by means of a device (an optical 
  14995.    printer) that contains one camera head and several projectors.  The 
  14996.    projectors are precisely aligned so as to produce multiple exposures in 
  14997.    exact registration on the film as in the camera head. 
  14998.  
  14999.  original footage  - The footage from which the program is constructed. 
  15000.  
  15001.  OS/2 multimedia  - A subsystem service of OS/2 that provides a software 
  15002.    platform for multimedia applications.  It defines standard interfaces 
  15003.    between multimedia devices and OS/2 multimedia applications. 
  15004.  
  15005.  overlay  - The ability to superimpose text and graphics over video. 
  15006.  
  15007.  overlay device  - Provides support for video overlaying along with video 
  15008.    attribute elements. The video overlaying handles tasks such as displaying, 
  15009.    and sizing video. Synonym for video overlay device. 
  15010.  
  15011.  
  15012. ΓòÉΓòÉΓòÉ <hidden> P ΓòÉΓòÉΓòÉ
  15013.  
  15014.  PAL  - Phase Alternation Line. 
  15015.  
  15016.  palette  - See color palette, standard palette, and custom palette. 
  15017.  
  15018.  pan  - A camera movement where the camera moves sideways on its stationary 
  15019.    tripod; left-to-right balance in an audio system. 
  15020.  
  15021.  panel  - A particular arrangement of information grouped together for 
  15022.    presentation to users in a window. 
  15023.  
  15024.  panning  - Progressively translating an entire display image to give the 
  15025.    visual impression of lateral movement of the image. 
  15026.  
  15027.    In computer graphics, the viewing of an image that is too large to fit on a 
  15028.    single screen by moving from one part of the image to another. 
  15029.  
  15030.  paradigm  - An example, pattern, or model. 
  15031.  
  15032.  patch mapping  - The reassignment of an instrument patch number associated 
  15033.    with a specific synthesizer to the corresponding standard patch number in 
  15034.    the General MIDI specification. 
  15035.  
  15036.  pause  - To temporarily halt the medium. The halted visual should remain 
  15037.    displayed but no audio should be played. 
  15038.  
  15039.  pause stop  - In data streaming, a stop that pauses the data stream but does 
  15040.    not disturb any data. 
  15041.  
  15042.  PDC  - Physical device component. 
  15043.  
  15044.  PDD  - Physical device driver. 
  15045.  
  15046.  pedestal up/down  - A camera movement where the camera glides up or down on a 
  15047.    boom. 
  15048.  
  15049.  pel  - The dimensions of a toned area at a picture element. See also picture 
  15050.    element. 
  15051.  
  15052.  Phase Alternation Line (PAL)  - Television broadcast standard for European 
  15053.    video outside of France and the Soviet Union. 
  15054.  
  15055.  physical device driver (PDD)  - A program that handles hardware interrupts and 
  15056.    supports a set of input and output functions. 
  15057.  
  15058.  picon  - A  graphic or natural image reduced to icon size.  Similar to 
  15059.    thumbnail. 
  15060.  
  15061.  picture element  - In computer graphics, the smallest element of a display 
  15062.    surface that can be independently assigned color and intensity. See also 
  15063.    pel. 
  15064.  
  15065.  picture-in-picture  - A video window within a larger video window. 
  15066.  
  15067.  pixel  - See picture element. 
  15068.  
  15069.  plaintext  - Nonencrypted data. 
  15070.  
  15071.  platform  - In computer technology, the principles on which an operating 
  15072.    system is based. 
  15073.  
  15074.  play backward  - To play the medium in the backward direction. 
  15075.  
  15076.  playback window  - The graphic window in which software motion video is 
  15077.    displayed. This window can be supplied by an application, or a default 
  15078.    window can be created by a digital video device. 
  15079.  
  15080.  play forward  - To play the medium in the forward direction. 
  15081.  
  15082.  pointer  - A symbol, usually in the shape of an arrow, that a user can move 
  15083.    with a pointing device.  Users place the pointer over objects they want to 
  15084.    work with. 
  15085.  
  15086.  pointing device  - A device, such as a mouse, trackball, or joystick, used to 
  15087.    move a pointer on the screen. 
  15088.  
  15089.  polish  - The version of the script submitted for final approval. 
  15090.  
  15091.  polyphony  - A synthesizer mode where more than 1 note can be played at a 
  15092.    time. Most synthesizers are 16-note to 32-note polyphonic. 
  15093.  
  15094.  postproduction  - The online and offline editing process. 
  15095.  
  15096.  PPQN  - (1) Parts-per-quarter-note. (2) A time format used in musical 
  15097.    instrument digital interface (MIDI). 
  15098.  
  15099.  preproduction  - The preparation stage for video production, when all 
  15100.    logistics are planned and prepared. 
  15101.  
  15102.  preroll  - The process of preparing a device to begin a playback or recording 
  15103.    function with minimal latency.  During a multimedia sequence, it might 
  15104.    require that two devices be cued (prerolled) to start playing and recording 
  15105.    at the same time. 
  15106.  
  15107.  primary window  - A window in which the main interaction between a user and an 
  15108.    object takes place. 
  15109.  
  15110.  Proc  - A custom procedure, called by the particular utility manager, to 
  15111.    handle input or output to files of a format different from DOS, MEM, or BND; 
  15112.    for example, AVC or TIFF.  By installing custom procedures, existing 
  15113.    applications no longer need to store multiple copies of the same media file 
  15114.    for running on various platforms using different file formats.  See also 
  15115.    static resource and dynamic resource. 
  15116.  
  15117.  production  - In videotaping, the actual shooting. 
  15118.  
  15119.  production control room  - The room or location where the monitoring and 
  15120.    switching equipment is placed for the direction and control of a television 
  15121.    production. 
  15122.  
  15123.  progress indicator  - A control, usually a read-only slider, that informs the 
  15124.    user about the status of a user request. 
  15125.  
  15126.  props  - In videotaping, support material for the shoot, for example, 
  15127.    equipment being promoted, auxiliary equipment, software, or supplies; 
  15128.    anything provided to make the set look realistic and attractive. 
  15129.  
  15130.  protection master  - A copy of the edit master that is stored as a backup. 
  15131.  
  15132.  PS/2 CD-ROM-II Drive  - An IBM CD-ROM drive that can play compact disc digital 
  15133.    audio (CD-DA) and CD-ROM/XA interleaved audio, video, and text, and adheres 
  15134.    to the Small Computer System Interface (SCSI).  The drive can be installed 
  15135.    on Micro Channel and non-Micro Channel IBM PS/2 systems. 
  15136.  
  15137.  pulse code modulation (PCM)  - In data communication, variation of a digital 
  15138.    signal to represent information. 
  15139.  
  15140.  push button  - A graphical control, labeled with text, graphics, or both, that 
  15141.    represents an action that will be initiated when a user selects it. For 
  15142.    example, when a user clicks on a Play button, a media object begins playing. 
  15143.  
  15144.  
  15145. ΓòÉΓòÉΓòÉ <hidden> R ΓòÉΓòÉΓòÉ
  15146.  
  15147.  raster graphics  - Computer graphics in which a display image is composed of 
  15148.    an array of pels arranged in rows and columns. 
  15149.  
  15150.  raw footage  - Synonym for original footage. 
  15151.  
  15152.  ray-tracing  - A technique used by 3-D rendering software programs that 
  15153.    automatically figures an object's position in three dimensions and 
  15154.    calculates shadows, reflections, and hidden surfaces based on user-entered 
  15155.    light locations and material characteristics.  (In other words, if the user 
  15156.    orders an object to be a mirror, the computer produces the mirror with all 
  15157.    its correct reflective properties.) 
  15158.  
  15159.  real time  - (1) Pertaining to the processing of data by a computer in 
  15160.    connection with another process outside the computer according to time 
  15161.    requirements imposed by the outside process.  This term is also used to 
  15162.    describe systems operating in conversational mode and processes that can be 
  15163.    influenced by human intervention while they are in progress. (2) A process 
  15164.    control system or a computer-assisted instruction program, in which response 
  15165.    to input is fast enough to affect subsequent output. 
  15166.  
  15167.  real-time recording  - Refers to the capturing of video and audio data in real 
  15168.    time, as the analog signals are generated from the video source device. The 
  15169.    video source device can be a camcorder, or a videotape or videodisc player. 
  15170.  
  15171.  record  - To transfer data from one source (for example, microphone, CD, 
  15172.    videodisc) or set of sources to another medium. 
  15173.  
  15174.  Redbook audio  - The storage format of standard audio CDs. See also compact 
  15175.    disc, digital audio (CD-DA). 
  15176.  
  15177.  reference frame  - (1) Refers to the complete frame that is created at 
  15178.    periodic intervals in the output stream.  An editing operation always begins 
  15179.    at a reference frame. (2) Synonymous with key frame and I-frame. (3) See 
  15180.    delta frame. 
  15181.  
  15182.  reflective disc  - See optical reflective disc. 
  15183.  
  15184.  render  - In videotaping, to create a realistic image from objects and light 
  15185.    data in a scene. 
  15186.  
  15187.  repeat  - A mode which causes the medium to go to the beginning and start 
  15188.    replaying when it reaches the medium's end. 
  15189.  
  15190.  resolution  - (1) In computer graphics, a measure of the sharpness of an 
  15191.    image, expressed as the number of lines and columns on the display screen or 
  15192.    the number of pels per unit of area. (2) The number of lines in an image 
  15193.    that an imaging system (for example, a telescope, the human eye, a camera, 
  15194.    and so on) can resolve. A higher resolution makes text and graphics appear 
  15195.    clearer. 
  15196.  
  15197.  resource  - As used in the multimedia operating system, any specific unit of 
  15198.    data created or used by a multimedia program. See also static resource and 
  15199.    dynamic resource. 
  15200.  
  15201.  resource handler  - A system service that loads, saves, and manipulates 
  15202.    multimedia program units of data. 
  15203.  
  15204.  resource interchange file format (RIFF)  - A tagged file format framework 
  15205.    intended to be the basis for defining new file formats. 
  15206.  
  15207.  resync  -  Recovery processing performed by sync-point services when the 
  15208.    failure of a session, transaction program, or LU occurs during sync-point 
  15209.    processing.  The purpose of resync is to return protected resources to 
  15210.    consistent states. 
  15211.  
  15212.  resync tolerance value  - A minimum time difference expressed in MMTIME 
  15213.    format. 
  15214.  
  15215.  Revisable Form Text : Document Content Architecture (RFT:DCA)  - A data format 
  15216.    for multimedia products. 
  15217.  
  15218.  rewind  - To advance the medium in the backward direction quickly, and 
  15219.    optionally allow the user to scan the medium. 
  15220.  
  15221.  RFT:DCA  - Revisable Form Text : Document Content Architecture. 
  15222.  
  15223.  RGB  - Color coding where the brightness of the additive primary colors of 
  15224.    light, red, green, and blue, are specified as three distinct values of white 
  15225.    light. 
  15226.  
  15227.  RIFF  - Resource interchange file format. 
  15228.  
  15229.  RIFF chunk  - A chunk with a chunk ID of RIFF.  In a RIFF file, this must be 
  15230.    the first chunk. 
  15231.  
  15232.  RIFF compound file  - A file containing multiple file elements or one file 
  15233.    element that makes up the entire RIFF file.  The MMIO manager provides 
  15234.    services to find, query, and access any file elements in a RIFF compound 
  15235.    file. Synonym for bundle file. 
  15236.  
  15237.  rotoscope  - A camera setup that projects live-action film, one frame at a 
  15238.    time, onto a surface so that an animator can trace complicated movements. 
  15239.    When filmed, the completed animation matches the motion of the original 
  15240.    action. 
  15241.  
  15242.  rough cut  - (1) The result of the offline edit. (2) A video program that 
  15243.    includes the appropriate footage in the correct order but does not include 
  15244.    special effects. 
  15245.  
  15246.  RTMIDI  - Real-time MIDI subsystem. 
  15247.  
  15248.  
  15249. ΓòÉΓòÉΓòÉ <hidden> S ΓòÉΓòÉΓòÉ
  15250.  
  15251.  SAA  - Systems Application Architecture. 
  15252.  
  15253.  safety  - An extra shot of a scene that is taken as a backup after an 
  15254.    acceptable shot (the buy) has been acquired. 
  15255.  
  15256.  saturation  - The amounts of color and grayness in a hue that affect its 
  15257.    vividness;  that is, a hue with high saturation contains more color and less 
  15258.    gray than a hue with low saturation.  See also hue. 
  15259.  
  15260.  sampler  - A device that converts real sound into digital information for 
  15261.    storage on a computer. 
  15262.  
  15263.  scan backward  - To display the video and optionally play the audio while the 
  15264.    medium is advancing in the backward direction rapidly. 
  15265.  
  15266.  scan converter  - A device that converts digital signal to NTSC or PAL format. 
  15267.  
  15268.  scan forward  - To display the video and optionally play the audio while the 
  15269.    medium is advancing in the forward direction rapidly. 
  15270.  
  15271.  scan line  - (1) In a laser printer, one horizontal sweep of the laser beam 
  15272.    across the photoconductor. (2) A single row of picture elements. 
  15273.  
  15274.  scanner  - A device that examines a spatial pattern, one part after another, 
  15275.    and generates analog or digital signals corresponding to the pattern. 
  15276.  
  15277.  SCB  - Subsystem control block. 
  15278.  
  15279.  scene  - A portion of video captured by the camera in one continuous shot. 
  15280.    The scene is shot repeatedly (each attempt is called a take) until an 
  15281.    acceptable version, called the buy, is taken. 
  15282.  
  15283.  scheduler  - The code responsible for passing messages to instances.  The 
  15284.    scheduler has two queues, one for normal real-time MIDI messages (Q1), and 
  15285.    the other for low-priority SysEx messages (Q2).  (RTMIDI-specific term) 
  15286.  
  15287.  scheduler daemon  - A small executable program, MIDIDMON.EXE, which is used to 
  15288.    provide deferred-interrupt processing for the scheduler.  The daemon is a 
  15289.    super high-priority thread which gets blocked in ring 0. When the scheduler 
  15290.    needs to run, this thread is unblocked.  When the scheduler is finished, it 
  15291.    re-blocks itself.  When the unblocking occurs during an interrupt, the OS/2 
  15292.    kernel runs the daemon thread immediately after the interrupt handler has 
  15293.    exited.  This approach guarantees that the scheduler runs at task time. 
  15294.  
  15295.  scripting  - Writing needed dialog. 
  15296.  
  15297.  scroll bar  - A window component that shows a user that more information is 
  15298.    available in a particular direction and can be scrolled into view. Scroll 
  15299.    bars should not be used to represent an analog setting, like volume. 
  15300.    Sliders should be used. 
  15301.  
  15302.  SCSI  - Small computer system interface. 
  15303.  
  15304.  SECAM  - Sequential Couleurs a Memoire.  The French standard for color 
  15305.    television. 
  15306.  
  15307.  secondary window  - A window that contains information that is dependent on 
  15308.    information in a primary window and is used to supplement the interaction in 
  15309.    the primary window. 
  15310.  
  15311.  secondary window manager  -  A sizable dialog manager that enables application 
  15312.    writers to use CUA-defined secondary windows instead of dialog boxes. 
  15313.  
  15314.  second generation  - A direct copy from the master or original tape. 
  15315.  
  15316.  selection  - The act of explicitly identifying one or more objects to which a 
  15317.    subsequent choice will apply. 
  15318.  
  15319.  selection technique  - The method by which users indicate objects on the 
  15320.    interface that they want to work with. 
  15321.  
  15322.  semaphore  - (1) A variable that is used to enforce mutual exclusion. (T) (2) 
  15323.    An indicator used to control access to a file; for example, in a multiuser 
  15324.    application, a flag that prevents simultaneous access to a file. 
  15325.  
  15326.  sequencer  - A digital tape recorder. 
  15327.  
  15328.  set  - In videotaping, the basic background or area for production. 
  15329.  
  15330.  settings  - Characteristics of objects that can be viewed and sometimes 
  15331.    altered by the user.  Examples of a file's settings include name, size, and 
  15332.    creation date.  Examples of video clip's settings include brightness, 
  15333.    contrast, color, and tint. 
  15334.  
  15335.  settings view  - A view of an object that provides a way to change 
  15336.    characteristics and options associated with the object. 
  15337.  
  15338.  SFX  - Script abbreviation for special effects. 
  15339.  
  15340.  shade  - To darken with, or as if with, a shadow; to add shading to. 
  15341.  
  15342.  sharpness  - Refers to the clarity and detail of a video image.  A sharpness 
  15343.    value of 0 causes the video to be generally fuzzy with little detail.  A 
  15344.    sharpness value of 100 causes the video to be generally very detailed, and 
  15345.    may appear grainy. 
  15346.  
  15347.  SHC  -  Stream handler command. 
  15348.  
  15349.  shoot  - To videotape the needed pictures for the production. 
  15350.  
  15351.  shooting script  - Synonym for final script. 
  15352.  
  15353.  shot list  - A list containing each shot needed to complete a production, 
  15354.    usually broken down into a schedule. 
  15355.  
  15356.  simple device  - A multimedia device model for hardware which does not require 
  15357.    any additional objects, known as device elements, to perform multimedia 
  15358.    functions. 
  15359.  
  15360.  sine wave  - A waveform that represents periodic oscillations of a pure 
  15361.    frequency. 
  15362.  
  15363.  single plane video system  - Refers to when video and graphics are combined 
  15364.    into one buffer.  This may appear the same as a dual plane video system, but 
  15365.    since all the data is in one buffer, capture and restore operations will 
  15366.    obtain both graphics and video components in one operation. See also dual 
  15367.    plane video system. 
  15368.  
  15369.  single selection  - A selection technique in which a user selects one, and 
  15370.    only one, item at a time. 
  15371.  
  15372.  slave stream  - A stream that is dependent on the master stream to maintain 
  15373.    synchronization. 
  15374.  
  15375.  slave stream handler  - In SPI, regularly updates the sync pulse EVCB with the 
  15376.    stream time.  The Sync/Stream Manager checks the slave stream handler time 
  15377.    against the master stream time to determine whether to send a sync pulse to 
  15378.    the slave stream handler. 
  15379.  
  15380.  slider  - A visual component of a user interface that represents a quantity 
  15381.    and its relationship to the range of possible values for that quantity.  A 
  15382.    user can also change the value of the quantity.  Sliders are used for volume 
  15383.    and time control. 
  15384.  
  15385.  slider arm  - The visual indicator in the slider that a user can move to 
  15386.    change the numerical value. 
  15387.  
  15388.  slider button  - A button on a slider that a user clicks on to move the slider 
  15389.    arm one increment in a particular direction, as indicated by the directional 
  15390.    arrow on the button. 
  15391.  
  15392.  slide-show presentation  - Synonym for storyboard. 
  15393.  
  15394.  slot  - A distinct position in an instance from which links can be attached. 
  15395.    The same message is sent along all links on a slot, but an instance can 
  15396.    determine at run-time on which slots the message should be sent.  An 
  15397.    instance can support multiple slots if it wants to be able to send different 
  15398.    messages to different targets.  (RTMIDI-specific term) 
  15399.  
  15400.  small computer system interface (SCSI)  - An input and output bus that 
  15401.    provides a standard interface between the OS/2* multimedia system and 
  15402.    peripheral devices. 
  15403.  
  15404.  SMH  - Stream manager helper. 
  15405.  
  15406.  SMPTE  - Society of Motion Picture and Television Engineers. 
  15407.  
  15408.  SMPTE time code  - A frame-numbering system developed by SMPTE that assigns a 
  15409.    number to each frame of video.  The 8-digit code is in the form HH:MM:SS:FF 
  15410.    (hours, minutes, seconds, frame number).  The numbers track elapsed hours, 
  15411.    minutes, seconds, and frames from any chosen point. 
  15412.  
  15413.  SMV  - Software motion video. 
  15414.  
  15415.  socketable user interface  - An interface defined by multimedia controls that 
  15416.    enable the interface to be plugged into and unplugged from applications 
  15417.    without affecting the underlying object control subsystem. 
  15418.  
  15419.  sound track  - Synonym for audio track. 
  15420.  
  15421.  source node  - An instance which can generate a compound message.  Hardware 
  15422.    nodes generate messages from data received from Type A drivers.  Application 
  15423.    nodes generate them from data sent from an application. (RTMIDI-specific 
  15424.    term) 
  15425.  
  15426.  source rectangle  - An abstract region representing the area available for use 
  15427.    by a video capture adapter.  This window is displayed in the monitor window 
  15428.    of the digital video device.  A subset of the maximum possible region to be 
  15429.    captured can be defined; such a subset is shown by an animated dashed 
  15430.    rectangle in the monitor window. 
  15431.  
  15432.  source window  - See source rectangle. 
  15433.  
  15434.  SPCB  - Stream protocol control block. 
  15435.  
  15436.  special effects  - In videotaping, any activity that is not live footage, such 
  15437.    as digital effects, computer manipulation of the picture, and nonbackground 
  15438.    music. 
  15439.  
  15440.  SPI  - Stream programming interface. 
  15441.  
  15442.  split streaming  - A mechanism provided by the Sync/Stream Manager to create 
  15443.    one data stream source with multiple targets. 
  15444.  
  15445.  SPP  - A time format based on the number of beats-per-minute in the MIDI file. 
  15446.  
  15447.  sprite  - An animated object that moves around the screen without affecting 
  15448.    the background. 
  15449.  
  15450.  sprite graphics  - A small graphics picture, or series of pictures, that can 
  15451.    be moved independently around the screen, producing animated effects. 
  15452.  
  15453.  squeeze-zoom  - A DVE where one picture is reduced in size and displayed with 
  15454.    a full-screen picture. 
  15455.  
  15456.  SSM  - Sync/Stream Manager. 
  15457.  
  15458.  standard multimedia device controls  - These controls provide the application 
  15459.    developer with a CUA compliant interface for controlling audio attributes, 
  15460.    video attributes, and videodisc players. These controls simplify the 
  15461.    programming task required to create the interface and handle the 
  15462.    presentation of the interface and all interaction with the user.  They also 
  15463.    send the Media Control Interface (MCI) commands to the Media Device Manager 
  15464.    (MDM) for processing. 
  15465.  
  15466.  standard objects  - A set of common, cross-product objects provided and 
  15467.    supported by the system.  Examples include folders, printers, shredders, and 
  15468.    media players. 
  15469.  
  15470.  standard palette  - A set of colors that is common between applications or 
  15471.    images. See also custom palette and color palette. 
  15472.  
  15473.  static resource  - A resource that resides on any read-and-write or read-only 
  15474.    medium. Contrast with dynamic resource. 
  15475.  
  15476.  status area  - Provides information as to the state of the medium and device, 
  15477.    or both.  It should indicate what button is currently pressed and what modes 
  15478.    (for example, mute) are active. 
  15479.  
  15480.  step backward  - To move the medium backward one frame or segment at a time. 
  15481.  
  15482.  step forward  - To move the medium forward one frame or segment at a time. 
  15483.  
  15484.  still  - A static photograph. 
  15485.  
  15486.  still image  - See video image. 
  15487.  
  15488.  still video capture adapter  - An adapter that, when attached to a computer, 
  15489.    enables a video camera to become an input device.  See also motion video 
  15490.    capture adapter. 
  15491.  
  15492.  stop  - Halt (stops) the medium. 
  15493.  
  15494.  storage system  - The method or format a functional unit uses to retain or 
  15495.    retrieve data placed within the unit. 
  15496.  
  15497.  storage system IOProc  - A procedure that unwraps data objects such as RIFF 
  15498.    files, RIFF compound files, and AVC files.  IOProcs are ignorant of the 
  15499.    content of the data they contain.  A storage system IOProc goes directly to 
  15500.    the OS/2 file system (or to memory in the case of a MEM file) and does not 
  15501.    pass information to any other file format or storage system IOProc.  The 
  15502.    internal I/O procedures provided for DOS files, memory files, and RIFF 
  15503.    compound files are examples of storage system IOProcs, because they operate 
  15504.    on the storage mechanism rather than on the data itself. See also file 
  15505.    format IOProc. 
  15506.  
  15507.  storyboard  - (1) A visual representation of the script, showing a picture of 
  15508.    each scene and describing its corresponding audio. (2) Synonym for 
  15509.    slide-show presentation. 
  15510.  
  15511.  storyboarding  - Producing a sequence of still images, such as titles, 
  15512.    graphics, and images, to work out the visual details of a script. 
  15513.  
  15514.  stream  - To send data from source to destination via buffered system memory. 
  15515.  
  15516.  stream connector  - A port or connector that a device uses to send or receive. 
  15517.    See also connector. 
  15518.  
  15519.  stream handler  - A routine that controls a program's reaction to a specific 
  15520.    external event through a continuous string of individual data values. 
  15521.  
  15522.  stream handler command (SHC)  - Synchronous calls provided by both ring 3 DLL 
  15523.    stream handlers as a DLL call and by ring 0 PDD stream handlers as a IDC 
  15524.    call.  The stream handler commands are provided through a single entry 
  15525.    point, SHCEntryPoint, which accepts a parameter structure on input.  This 
  15526.    enables the DLL and PDD interfaces to the stream manager to be the same. 
  15527.  
  15528.  stream manager  - A system service that controls the registration and 
  15529.    activities of all stream handlers. 
  15530.  
  15531.  stream manager helper (SMH)  - Routines provided by the stream manager for use 
  15532.    by all stream handlers.  The stream handlers use these helper routines to 
  15533.    register with the manager, report events, and synchronize cues to the 
  15534.    manager to request or return buffers to the manager.  They are synchronous 
  15535.    functions and are available to both ring 3 DLL stream handlers as a DLL call 
  15536.    and to ring 0 PDD stream handlers. 
  15537.  
  15538.  stream programming interface  - A system service that supports continual flow 
  15539.    of data between physical devices. 
  15540.  
  15541.  stream programming interface (SPI)  - A system service that supports continual 
  15542.    flow of data between physical devices. 
  15543.  
  15544.  stream protocol control block (SPCB)  - The system service that controls the 
  15545.    behavior of a specified stream type.  This enables you to subclass a 
  15546.    stream's data type, change data buffering characteristics, and alter 
  15547.    synchronization behavior and other stream events. 
  15548.  
  15549.  strike  - In videotaping, to clear away, remove, or dismantle anything on the 
  15550.    set. 
  15551.  
  15552.  subchunk  - The first chunk in a RIFF file is a RIFF chunk; all other chunks 
  15553.    in the file are subchunks of the RIFF chunk. 
  15554.  
  15555.  subclassing  - The act of intercepting messages and passing them on to their 
  15556.    original intended recipient. 
  15557.  
  15558.  super  - Titles or graphics overlaid on the picture electronically. See also 
  15559.    superimpose. 
  15560.  
  15561.  superimpose  - To overlay titles or graphics on the picture electronically. 
  15562.  
  15563.  S-video  - (1) Separated video or super video. (2) A signal system using a Y/C 
  15564.    format. (3) See also Y/C, composite video, and component video. 
  15565.  
  15566.  S-Video input connector  - A special connector that separates the chrominance 
  15567.    from the luminance signal. 
  15568.  
  15569.  sweetening  - (1) The equalization of audio to eliminate noise and obtain the 
  15570.    cleanest and most level sound possible. (2) The addition of laughter to an 
  15571.    audio track. 
  15572.  
  15573.  switching  - Electronically designating, from between two or more video 
  15574.    sources, which source's pictures are recorded on tape.  Switching can occur 
  15575.    during a shoot or during an edit. 
  15576.  
  15577.  symmetric video compression  - A technology in which the computer can be used 
  15578.    to create, as well as play back, full-motion, full-color video. 
  15579.  
  15580.  sync  - Synchronization or synchronized. 
  15581.  
  15582.  synchronization  - The action of forcing certain points in the execution 
  15583.    sequences of two or more asynchronous procedures to coincide in time. 
  15584.  
  15585.  synchronous  - Pertaining to two or more processes that depend upon the 
  15586.    occurrence of specific events such as common timing signals. 
  15587.  
  15588.  sync group  - A master stream and all its slaves that can be started, stopped, 
  15589.    and searched as a group by using the slaves flag on each of the following 
  15590.    SPI functions: 
  15591.  
  15592.        SpiStartStream 
  15593.        SpiStopStream 
  15594.        SpiSeekStream 
  15595.  
  15596.  sync pulse  - A system service that enables each slave stream handler to 
  15597.    adjust the activity of that stream so that synchronization can be 
  15598.    maintained. Sync pulses are introduced by transmission equipment into the 
  15599.    receiving equipment to keep the two equipments operating in step. 
  15600.  
  15601.  sync signal  - Video signal used to synchronize video equipment. 
  15602.  
  15603.  synthesizer  - A musical instrument that allows its user to produce and 
  15604.    control electronically generated sounds. 
  15605.  
  15606.  system message  - A predefined message sent by the MMIO manager for the 
  15607.    message's associated function.  For example, when an application calls 
  15608.    mmioOpen, the MMIO manager sends an MMIOM_OPEN message to an I/O procedure 
  15609.    to open the specified file. 
  15610.  
  15611.  Systems Application Architecture (SAA)  - A set of IBM software interfaces, 
  15612.    conventions, and protocols that provide a framework for designing and 
  15613.    developing applications that are consistent across systems. 
  15614.  
  15615.  
  15616. ΓòÉΓòÉΓòÉ <hidden> T ΓòÉΓòÉΓòÉ
  15617.  
  15618.  tagged image file format (TIFF)  - An easily transportable image file type 
  15619.    used by a wide range of multimedia software. 
  15620.  
  15621.  take  - During the shoot in videotaping, each separate attempt at shooting a 
  15622.    scene. This is expressed as: Scene 1, Take 1; Scene 1, Take 2, and so on. 
  15623.  
  15624.  talent  - On-screen person (professional or amateur) who appears before the 
  15625.    camera or does voice-over narration. 
  15626.  
  15627.  TAM  - Telephone answering machine. 
  15628.  
  15629.  target node  - An instance which receives a message but does not forward it 
  15630.    because it is the final instance in a chain of processing.  For example, a 
  15631.    hardware node is a target node because when it receives a message, it sends 
  15632.    it to another device driver, and not to another instance. (RTMIDI-specific 
  15633.    term) 
  15634.  
  15635.  tearing  - Refers to when video is displaced horizontally.  This may be caused 
  15636.    by sync problems. 
  15637.  
  15638.  TelePrompTer  - A special monitor mounted in front of a camera so that talent 
  15639.    can read text and will appear to be looking at the camera. 
  15640.  
  15641.  thaw  - See unfreeze. 
  15642.  
  15643.  thumbnail  - A small representation of an object.  For example, a full screen 
  15644.    image might be presented in a much smaller area in an authoring system time 
  15645.    line.  A picon is an example of a thumbnail. 
  15646.  
  15647.  TIFF  - Tagged Image File Format time code. 
  15648.  
  15649.  tilt  - A camera movement where the camera pivots up or down on its stationary 
  15650.    tripod. 
  15651.  
  15652.  timbre  - The distinctive tone of a musical instrument or human voice that 
  15653.    distinguishes it from other sounds. 
  15654.  
  15655.  time code  - See SMPTE time code. 
  15656.  
  15657.  time-line processor  - A type of authoring facility that displays an event as 
  15658.    elements that represent time from the start of the event. 
  15659.  
  15660.  tint  - See hue. 
  15661.  
  15662.  TMSF  - A time format expressed in tracks, minutes, seconds, and frames, which 
  15663.    is used primarily by compact disc audio devices. 
  15664.  
  15665.  tone (bass, treble, etc... )  - A control that adjusts the various attributes 
  15666.    of the audio. 
  15667.  
  15668.  tool palette  - A palette containing choices that represent tools, often used 
  15669.    in media editors (such as graphics and audio editors).  For example, a user 
  15670.    might select a "pencil"  choice from the tool palette to draw a line in the 
  15671.    window. 
  15672.  
  15673.  touch area  - (1) An area of a display screen that is activated to accept user 
  15674.    input. (2) Synonymous with anchor, hot spot, and trigger. 
  15675.  
  15676.  track  - A path associated with a single Read/Write head as the data medium 
  15677.    moves past it. 
  15678.  
  15679.  track advance  - To advance the medium to the beginning of the next track. 
  15680.  
  15681.  track reverse  - To rewind the medium to the beginning of the current track. 
  15682.    If it is at the beginning of the track it will then jump to the beginning of 
  15683.    the previous track. 
  15684.  
  15685.  transform device  -  A device that modifies a signal or stream received from a 
  15686.    transport device.  Examples are amplifier-mixer and overlay devices. 
  15687.  
  15688.  translator  - A computer program that can translate.  In telephone equipment 
  15689.    the device that converts dialed digits into call-routine information. 
  15690.  
  15691.  transparency  - Refers to when a selected color on a graphics screen is made 
  15692.    transparent to allow the video "behind it" to become visible.  Often found 
  15693.    in dual plane video subsystems. 
  15694.  
  15695.  transparent color  - Video information is considered as being present on the 
  15696.    video plane which is maintained behind the graphics plane.  When an area on 
  15697.    the graphics plane is painted with a transparent color, the video 
  15698.    information in the video plane is made visible. See also dual plane video 
  15699.    system. 
  15700.  
  15701.  transport device  - A device that plays, records, and positions a media 
  15702.    element, and either presents the result directly or sends the material to a 
  15703.    transform device.  Examples are videodisc players, CD-ROMs, and digital 
  15704.    audio (wave) player. 
  15705.  
  15706.  treatment  - A detailed design document of the video. 
  15707.  
  15708.  tremolo  - A vibrating effect of a musical instrument produced by small and 
  15709.    rapid amplitude variations to produce special musical effects. 
  15710.  
  15711.  trigger  - (1) An area of a display screen that is activated to accept user 
  15712.    input. (2) Synonymous with anchor, hot spot, and touch area. 
  15713.  
  15714.  truck  - In videotaping, a sideways camera movement of the tripod on which the 
  15715.    camera is mounted. 
  15716.  
  15717.  tweening  - (1) The process of having the computer draw intermediate animation 
  15718.    frames between key frames.  In other words, the animation tool requires only 
  15719.    that pictures of key sections of a motion be provided; the software 
  15720.    calculates all the in-between movements. (2) Synonym for in-betweening. 
  15721.  
  15722.  
  15723. ΓòÉΓòÉΓòÉ <hidden> U ΓòÉΓòÉΓòÉ
  15724.  
  15725.  Ultimatte  - The trade name of a very high-quality, special-effects system 
  15726.    used for background replacement and image composites. 
  15727.  
  15728.  U-matic  - A video cassette system using 0.75-inch tape format. 
  15729.  
  15730.  underrun  - Loss of data caused by the inability of a transmitting device or 
  15731.    channel to provide data to the communication control logic (SDLC or BSC/SS) 
  15732.    at a rate fast enough for the attached data link or loop. 
  15733.  
  15734.  unfreeze  - (1) To return to action after a freeze. (2) Enables updates to the 
  15735.    video buffer. (3) Synonym for thaw. 
  15736.  
  15737.  unidirectional microphone  - A microphone that responds to sound from only one 
  15738.    direction and is not subject to change of direction.  (A unidirectional 
  15739.    microphone is the type of microphone employed in computers capable of voice 
  15740.    recognition.) 
  15741.  
  15742.  unload  - To eject the medium from the device. 
  15743.  
  15744.  user-defined message  - A private message sent directly to an I/O procedure by 
  15745.    using the mmioSendMessage function.  All messages begin with an MMIOM 
  15746.    prefix, with user-defined messages starting at MMIOM_USER or above. 
  15747.  
  15748.  user interface  - The area at which a user and an object come together to 
  15749.    interact. As applied to computers, the ensemble of hardware and software 
  15750.    that allows a user to interact with a computer. 
  15751.  
  15752.  user's conceptual model  - A user's mental model about how things should work. 
  15753.    Much of the concepts and expectations that make up the model are derived 
  15754.    from the user's experience with real-world objects of similar type, and 
  15755.    experience with other computer systems. 
  15756.  
  15757.  
  15758. ΓòÉΓòÉΓòÉ <hidden> V ΓòÉΓòÉΓòÉ
  15759.  
  15760.  value set  - A control used to present a series of mutually exclusive 
  15761.    graphical choices.  A tool palette in a paint program can be implemented 
  15762.    using a value set. 
  15763.  
  15764.  VCR  - Videocassette recorder. 
  15765.  
  15766.  VDD  - Virtual device driver. 
  15767.  
  15768.  VDH  - Virtual device helper. 
  15769.  
  15770.  VDP  - Video display processor. 
  15771.  
  15772.  vector graphics  - See coordinate graphics. 
  15773.  
  15774.  vendor specific drivers  - An extension to an MCD to execute hardware specific 
  15775.    commands. 
  15776.  
  15777.  VHS  - Very high speed.  A consumer and industrial tape format (VHS format). 
  15778.  
  15779.  vicon  - A vicon, or video icon, can be an animation or motion video segment 
  15780.    in icon size.  Usually this would be a short, repeating segment, such as an 
  15781.    animation of a cassette tape with turning wheels. 
  15782.  
  15783.  video  - Pertaining to the portion of recorded information that can be seen. 
  15784.  
  15785.  video aspect ratio  - See aspect ratio. 
  15786.  
  15787.  video attribute control  - Provides access to and operation of the standard 
  15788.    video attributes: brightness, contrast, freeze, hue, saturation, and 
  15789.    sharpness. All device communication and user interface support is handled by 
  15790.    the control. 
  15791.  
  15792.  video attributes  - Refers to the standard video attributes: brightness, 
  15793.    contrast, freeze, hue, saturation, and sharpness. 
  15794.  
  15795.  video clip  - A section of filmed or videotaped material. 
  15796.  
  15797.  video clipping  - See clipping. 
  15798.  
  15799.  video digitizer  - Any system for converting analog video material to digital 
  15800.    representation.  (For example, see DVI.) 
  15801.  
  15802.  video display buffer  - The buffer containing the visual information to be 
  15803.    displayed.  This buffer is read by the video display controller. 
  15804.  
  15805.  video display controller  - The graphics or video adapter that connects to a 
  15806.    display and presents visual information. 
  15807.  
  15808.  video encoder  - A device (adapter) that transforms the high-resolution 
  15809.    digital image from the computer into a standard television signal, thereby 
  15810.    allowing the computer to create graphics for use in video production. 
  15811.  
  15812.  video graphics adapter  - A graphics controller for color displays.  The pel 
  15813.    resolution of the video graphics adapter is 4:4. 
  15814.  
  15815.  video image  - (1) A still video image that has been captured. (2) Synonymous 
  15816.    with image and still image. 
  15817.  
  15818.  video monitor  - A display device capable of accepting a video signal that is 
  15819.    not modulated for broadcast either on cable or over the air; in videotaping, 
  15820.    a television screen located away from the set where the footage can be 
  15821.    viewed as it is being recorded. 
  15822.  
  15823.  video overlay  - See overlay. 
  15824.  
  15825.  video overlay device  - See overlay device. 
  15826.  
  15827.  video plane  - In a dual plane video system, the video plane contains the 
  15828.    video.  This video plane will be combined with the graphics plane to create 
  15829.    an entire display image. 
  15830.  
  15831.  video programming interface (VPI)  - A subsystem that performs output from 
  15832.    video source to video window. 
  15833.  
  15834.  video quality  - The compression quality level setting to be set for the 
  15835.    CODEC. This value is in the range of 0 (min) - 100 (max). 
  15836.  
  15837.  video record rate  - Frame rate for recording as an integral number of frames 
  15838.    per second. This sets the target capture rate, but there are no assurances 
  15839.    this rate will be attained.  Drop frame records will be inserted into the 
  15840.    output data stream to indicate frames dropped during the capture/record 
  15841.    process. 
  15842.  
  15843.  video record frame duration  - Frame rate for recording as the time duration 
  15844.    of each frame in microseconds. Useful for setting non-integer frame rates, 
  15845.    for example, 12.5 FPS of a PAL videodisc:  1000000/12.5 = 8000 microseconds. 
  15846.  
  15847.  video signal  - An electrical signal containing video information.  The signal 
  15848.    must be in some standard format, such as NTSC or PAL. 
  15849.  
  15850.  VSD  - Vendor Specific Driver 
  15851.  
  15852.  video scaling  - (1) Expanding or reducing video information in size or area. 
  15853.    (2) See also aspect ratio. 
  15854.  
  15855.  video scan converter  - A device that emits a video signal in one standard 
  15856.    into another device of different resolution or scan rate. 
  15857.  
  15858.  video segment  - A contiguous set of recorded data from a video track.  A 
  15859.    video segment might or might not be associated with an audio segment. 
  15860.  
  15861.  video signal  - An electrical signal containing video information.  The signal 
  15862.    must be in some standard format, such as NTSC or PAL. 
  15863.  
  15864.  video source selection  - The ability of an application to change to an 
  15865.    alternate video input using the connector command. 
  15866.  
  15867.  video tearing  - See tearing. 
  15868.  
  15869.  video teleconferencing  - A means of telecommunication characterized by audio 
  15870.    and video transmission, usually involving several parties.  Desktop video 
  15871.    teleconferencing could involve having the audio and video processed by the 
  15872.    user's computer system, that is, with the other users' voices coming through 
  15873.    the computer's speaker, and video windows of the other users displayed on 
  15874.    the computer's screen. 
  15875.  
  15876.  videocassette recorder (VCR)  - A device for recording or playing back 
  15877.    videocassettes. 
  15878.  
  15879.  videodisc  - A disc on which programs have been recorded for playback on a 
  15880.    computer (or a television set); a recording on a videodisc.  The most common 
  15881.    format in the United States and Japan is an NTSC signal recorded on the 
  15882.    optical reflective format. 
  15883.  
  15884.  videodisc player control  - Provides access to and operation of the following 
  15885.    videodisc functions: eject, pause, play forward, play reverse, position, 
  15886.    record, repeat, rewind, scan forward, scan reverse, step forward, step 
  15887.    reverse, and stop. All device communication and user interface support is 
  15888.    handled by the control. 
  15889.  
  15890.  videotape  - (1) The tape used to record visual images and sound. (2) To make 
  15891.    a videotape of. (3) A recording of visual images and sound made on magnetic 
  15892.    tape.  (All shooting is done in this format, even if the results are later 
  15893.    transferred to videodisc or film.) 
  15894.  
  15895.  videotape recorder (VTR)  - A device for recording and playing back 
  15896.    videotapes.  (The professional counterpart of a consumer VCR.) 
  15897.  
  15898.  videotex  - A system that provides two-way interactive information services, 
  15899.    including the exchange of alphanumeric and graphic information, over common 
  15900.    carrier facilities to a mass consumer market using modified TV displays with 
  15901.    special decoders and modems. 
  15902.  
  15903.  video windows  - Graphical PM-style windows in which video is displayed.  Most 
  15904.    often associated with the video overlay device. 
  15905.  
  15906.  view  - The form in which an object is presented.  The four kinds of views 
  15907.    are:  composed, contents, settings, and help. 
  15908.  
  15909.  viewport  - An area on the usable area of the display surface over which the 
  15910.    developer has control of the size, location, and scaling, and in which the 
  15911.    user can view all or a portion of the data outlined by the window. 
  15912.  
  15913.  virtual device helper  - A system service that is available to perform 
  15914.    essential functions. 
  15915.  
  15916.  VO  - Script abbreviation for voice-over. 
  15917.  
  15918.  voice-over  - (1) The voice of an unseen narrator in a video presentation. (2) 
  15919.    A voice indicating the thoughts of a visible character without the 
  15920.    character's lips moving. 
  15921.  
  15922.  volume  - The intensity of sound.  A volume of 0 is minimum volume.  A volume 
  15923.    of 100 is maximum volume. 
  15924.  
  15925.  VPI  - Video programming interface. 
  15926.  
  15927.  VTR  - Videotape recorder. 
  15928.  
  15929.  
  15930. ΓòÉΓòÉΓòÉ <hidden> W ΓòÉΓòÉΓòÉ
  15931.  
  15932.  walk-through  - A type of animated presentation that simulates a walking tour 
  15933.    of a three-dimensional scene. 
  15934.  
  15935.  walk-up-and-use interface  - An interface that the target audience should be 
  15936.    able to use without having to read manuals or instructions, even if they 
  15937.    have never seen the interface. 
  15938.  
  15939.  waveform  - (1) A graphic representation of the shape of a wave that indicates 
  15940.    its characteristics (such as frequency and amplitude). (2) A digital method 
  15941.    of storing and manipulating audio data. 
  15942.  
  15943.  wide shot  - Synonym for long shot. 
  15944.  
  15945.  wild footage  - Synonym for original footage. 
  15946.  
  15947.  window  -  An area of the screen with visible boundaries within which 
  15948.    information is displayed.  A window can be smaller than or the same size as 
  15949.    the screen.  Windows can appear to overlap on the screen. 
  15950.  
  15951.  window coordinates  - The size and location of a window. 
  15952.  
  15953.  wipe  - Technical effect of fading away one screen to reveal another. 
  15954.  
  15955.  workplace  - A container that fills the entire screen and holds all of the 
  15956.    objects that make up the user interface. 
  15957.  
  15958.  write once/read many (WORM)  - Describes an optical disc that once written to, 
  15959.    cannot be overwritten.  Storage capacity ranges from 400MB to 3.2GB. 
  15960.    Present technology allows only one side to be read at a time; to access the 
  15961.    other side, the disk must be turned over. 
  15962.  
  15963.  WS  - Script abbreviation for wide shot. 
  15964.  
  15965.  WYSIWYG  - What You See Is What You Get.  The appearance of the object is in 
  15966.    actual form.  For example, a document that looks the same on a display 
  15967.    screen as it does when it is printed.  Composed views of objects are often 
  15968.    WYSIWYG. 
  15969.  
  15970.  
  15971. ΓòÉΓòÉΓòÉ <hidden> X Y Z ΓòÉΓòÉΓòÉ
  15972.  
  15973.  Y  - Refers to the luminance portion of a Y/C video signal. 
  15974.  
  15975.  Y/C  - Color image encoding that separates luminance ((Y) and chrominance (C) 
  15976.    signals. 
  15977.  
  15978.  YIQ  - Image encoding scheme similar to YUV that selects the direction of the 
  15979.    two color axes, I and Q, to align with natural images.  As an average, the I 
  15980.    signal bears much more information than the Q signal.  (YIQ is used in the 
  15981.    NTSC video standard.) 
  15982.  
  15983.  YUV  - Color image encoding scheme that separates luminance (Y) and two color 
  15984.    signals: red minus Y (U), and blue minus Y (V).  Transmission of YUV can 
  15985.    take advantage of the eye's greater sensitivity to luminance detail than 
  15986.    color detail. 
  15987.  
  15988.  zoom in  - An optical camera change where the camera appears to approach the 
  15989.    subject it is shooting. 
  15990.  
  15991.  zooming  - The progressive scaling of an image in order to give the visual 
  15992.    impression of movement of all or part of a display group toward or away from 
  15993.    an observer. 
  15994.  
  15995.  zoom out  - An optical camera change where the camera appears to back up from 
  15996.    the subject it is shooting. 
  15997.